From 58f6f7381c14d37c3614b00d1595584c09b92550 Mon Sep 17 00:00:00 2001 From: Terraform Date: Tue, 29 Jul 2025 17:03:43 -0700 Subject: [PATCH 1/6] Add production release CICD --- .github/workflows/aws_prod_release.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/aws_prod_release.yml b/.github/workflows/aws_prod_release.yml index 4b375da..43caaf6 100644 --- a/.github/workflows/aws_prod_release.yml +++ b/.github/workflows/aws_prod_release.yml @@ -66,8 +66,6 @@ jobs: - name: Login to Amazon ECR id: login-ecr uses: aws-actions/amazon-ecr-login@v2 - with: - mask-password: 'false' - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 From e3dd77e1332e75fa6b21b1b9595267a0c7fd6c3a Mon Sep 17 00:00:00 2001 From: Terraform Date: Tue, 29 Jul 2025 17:04:55 -0700 Subject: [PATCH 2/6] Add production release CICD --- .github/workflows/aws_dev_release.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/aws_dev_release.yml b/.github/workflows/aws_dev_release.yml index 9674563..46ddb74 100644 --- a/.github/workflows/aws_dev_release.yml +++ b/.github/workflows/aws_dev_release.yml @@ -62,8 +62,6 @@ jobs: - name: Login to Amazon ECR id: login-ecr uses: aws-actions/amazon-ecr-login@v2 - with: - mask-password: 'false' - name: Image Metadata id: metadata From bbeeaf22a454cf93562b340daf5c41a7ca0b3f30 Mon Sep 17 00:00:00 2001 From: Terraform Date: Sat, 30 Aug 2025 23:07:02 -0700 Subject: [PATCH 3/6] Fix release workflow to trigger production deployment --- .github/workflows/aws_auto_release.yml | 152 +++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 .github/workflows/aws_auto_release.yml diff --git a/.github/workflows/aws_auto_release.yml b/.github/workflows/aws_auto_release.yml new file mode 100644 index 0000000..7fabd78 --- /dev/null +++ b/.github/workflows/aws_auto_release.yml @@ -0,0 +1,152 @@ +name: Auto Release on Main Merge +on: + pull_request: + types: [closed] + branches: + - main + +concurrency: + group: ${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +permissions: + contents: write + pull-requests: read + +jobs: + auto_release: + runs-on: ubuntu-latest + if: github.event.pull_request.merged == true + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: main + token: ${{ secrets.PAT }} + + - name: Check for release labels and determine version bumps + id: check + run: | + labels='${{ toJson(github.event.pull_request.labels.*.name) }}' + echo "PR Labels: $labels" + + has_release_label=false + has_major=false + has_minor=false + has_patch=false + + # Check if release label exists + if echo "$labels" | grep -q "release"; then + has_release_label=true + + # Check for each type of version bump + if echo "$labels" | grep -q "major"; then + has_major=true + fi + if echo "$labels" | grep -q "minor"; then + has_minor=true + fi + if echo "$labels" | grep -q "patch"; then + has_patch=true + fi + + # If no specific version type is specified, default to patch + if [[ "$has_major" == "false" && "$has_minor" == "false" && "$has_patch" == "false" ]]; then + has_patch=true + fi + fi + + echo "should_release=$has_release_label" >> $GITHUB_OUTPUT + echo "has_major=$has_major" >> $GITHUB_OUTPUT + echo "has_minor=$has_minor" >> $GITHUB_OUTPUT + echo "has_patch=$has_patch" >> $GITHUB_OUTPUT + echo "Should release: $has_release_label" + echo "Has major: $has_major, minor: $has_minor, patch: $has_patch" + + - name: Setup Node.js + if: steps.check.outputs.should_release == 'true' + uses: actions/setup-node@v4 + with: + node-version: 20.10 + + - name: Calculate new version with cumulative bumps + if: steps.check.outputs.should_release == 'true' + id: version + run: | + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git config --global user.name "github-actions[bot]" + + # Get the latest tag from git + latest_tag=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0") + echo "Latest git tag: $latest_tag" + + # Remove 'v' prefix if present + current_version=${latest_tag#v} + echo "Current version: $current_version" + + # Parse current version + IFS='.' read -r major minor patch <<< "$current_version" + echo "Parsed version - Major: $major, Minor: $minor, Patch: $patch" + + # Apply cumulative version bumps + if [[ "${{ steps.check.outputs.has_major }}" == "true" ]]; then + major=$((major + 1)) + minor=0 # Reset minor when major is bumped + patch=0 # Reset patch when major is bumped + echo "Applied major bump: $major.0.0" + fi + + if [[ "${{ steps.check.outputs.has_minor }}" == "true" ]]; then + minor=$((minor + 1)) + if [[ "${{ steps.check.outputs.has_major }}" != "true" ]]; then + patch=0 # Reset patch when minor is bumped (only if major wasn't bumped) + fi + echo "Applied minor bump: $major.$minor.$patch" + fi + + if [[ "${{ steps.check.outputs.has_patch }}" == "true" ]]; then + patch=$((patch + 1)) + echo "Applied patch bump: $major.$minor.$patch" + fi + + new_version="$major.$minor.$patch" + echo "Final calculated version: $new_version" + + # Create package.json if it doesn't exist + if [[ ! -f "package.json" ]]; then + echo '{"version": "0.0.0"}' > package.json + fi + + # Update package.json with new version + npm version $new_version --no-git-tag-version --allow-same-version + + echo "NEW_VERSION=v$new_version" >> $GITHUB_ENV + echo "New version will be: v$new_version" + + - name: Create Release + if: steps.check.outputs.should_release == 'true' + uses: softprops/action-gh-release@v2 + with: + token: ${{ secrets.PAT }} # Use PAT to trigger other workflows + tag_name: ${{ env.NEW_VERSION }} + name: "Release ${{ env.NEW_VERSION }}" + generate_release_notes: true + make_latest: true + body: | + ## 🚀 Release ${{ env.NEW_VERSION }} + + **Version Bumps Applied:** + - Major: ${{ steps.check.outputs.has_major }} + - Minor: ${{ steps.check.outputs.has_minor }} + - Patch: ${{ steps.check.outputs.has_patch }} + + **Triggered by:** PR #${{ github.event.pull_request.number }} - ${{ github.event.pull_request.title }} + **Merged by:** @${{ github.event.pull_request.merged_by.login }} + + ### Changes in this PR + ${{ github.event.pull_request.body }} + + --- + *This release was automatically created by the Auto Release workflow* + From 3309d86ff29b03aed0bd86593399538cf3dc2731 Mon Sep 17 00:00:00 2001 From: Terraform Date: Sun, 31 Aug 2025 18:06:36 -0700 Subject: [PATCH 4/6] Fix release workflow to trigger production deployment --- .github/workflows/aws_auto_release.yml | 95 ++++++++++++++++++++++++-- 1 file changed, 91 insertions(+), 4 deletions(-) diff --git a/.github/workflows/aws_auto_release.yml b/.github/workflows/aws_auto_release.yml index 7fabd78..d00ba20 100644 --- a/.github/workflows/aws_auto_release.yml +++ b/.github/workflows/aws_auto_release.yml @@ -23,9 +23,96 @@ jobs: with: fetch-depth: 0 ref: main - token: ${{ secrets.PAT }} + token: ${{ secrets.PAT }} + + - name: Check if user is authorized + id: auth_check + run: | + merged_by="${{ github.event.pull_request.merged_by.login }}" + echo "PR was merged by: $merged_by" + + # Get authorized users from CODEOWNERS file + authorized_users=() + + # Read CODEOWNERS file if it exists + if [[ -f ".github/CODEOWNERS" ]]; then + echo "📋 Reading CODEOWNERS file..." + # Extract usernames from CODEOWNERS (remove @ prefix) + codeowners=$(grep -v '^#' .github/CODEOWNERS | grep -o '@[a-zA-Z0-9_-]*' | sed 's/@//' | sort -u) + for user in $codeowners; do + authorized_users+=("$user") + echo " - CODEOWNER: $user" + done + else + echo "⚠️ No CODEOWNERS file found" + fi + + # Get repository collaborators with admin/maintain permissions using GitHub API + echo "🔍 Checking repository permissions..." + + # Check if user has admin or maintain permissions + user_permission=$(curl -s -H "Authorization: token ${{ secrets.PAT }}" \ + -H "Accept: application/vnd.github.v3+json" \ + "https://api.github.com/repos/${{ github.repository }}/collaborators/$merged_by/permission" | \ + jq -r '.permission // "none"') + + echo "User $merged_by has permission level: $user_permission" + + # Check if user is authorized + is_authorized=false + + # Check if user is in CODEOWNERS + for user in "${authorized_users[@]}"; do + if [[ "$user" == "$merged_by" ]]; then + is_authorized=true + echo "✅ User $merged_by is authorized via CODEOWNERS" + break + fi + done + + # Check if user has admin or maintain permissions + if [[ "$user_permission" == "admin" || "$user_permission" == "maintain" ]]; then + is_authorized=true + echo "✅ User $merged_by is authorized via repository permissions ($user_permission)" + fi + + # Check if user is organization owner (for metaversecloud-com org) + org_response=$(curl -s -H "Authorization: token ${{ secrets.PAT }}" \ + -H "Accept: application/vnd.github.v3+json" \ + "https://api.github.com/orgs/metaversecloud-com/members/$merged_by" \ + -w "%{http_code}") + + # Extract HTTP status code from the response + http_code=${org_response: -3} + + if [[ "$http_code" == "200" ]]; then + # Check if user is an owner + owner_status=$(curl -s -H "Authorization: token ${{ secrets.PAT }}" \ + -H "Accept: application/vnd.github.v3+json" \ + "https://api.github.com/orgs/metaversecloud-com/memberships/$merged_by" | \ + jq -r '.role // "none"') + + if [[ "$owner_status" == "admin" ]]; then + is_authorized=true + echo "✅ User $merged_by is authorized as organization owner" + fi + fi + + echo "is_authorized=$is_authorized" >> $GITHUB_OUTPUT + + if [[ "$is_authorized" == "false" ]]; then + echo "❌ User $merged_by is not authorized to trigger releases" + echo "💡 Authorized users include:" + echo " - CODEOWNERS: ${authorized_users[*]}" + echo " - Repository admins and maintainers" + echo " - Organization owners" + exit 0 + else + echo "🎉 User $merged_by is authorized to trigger releases" + fi - name: Check for release labels and determine version bumps + if: steps.auth_check.outputs.is_authorized == 'true' id: check run: | labels='${{ toJson(github.event.pull_request.labels.*.name) }}' @@ -65,13 +152,13 @@ jobs: echo "Has major: $has_major, minor: $has_minor, patch: $has_patch" - name: Setup Node.js - if: steps.check.outputs.should_release == 'true' + if: steps.auth_check.outputs.is_authorized == 'true' && steps.check.outputs.should_release == 'true' uses: actions/setup-node@v4 with: node-version: 20.10 - name: Calculate new version with cumulative bumps - if: steps.check.outputs.should_release == 'true' + if: steps.auth_check.outputs.is_authorized == 'true' && steps.check.outputs.should_release == 'true' id: version run: | git config --global user.email "github-actions[bot]@users.noreply.github.com" @@ -125,7 +212,7 @@ jobs: echo "New version will be: v$new_version" - name: Create Release - if: steps.check.outputs.should_release == 'true' + if: steps.auth_check.outputs.is_authorized == 'true' && steps.check.outputs.should_release == 'true' uses: softprops/action-gh-release@v2 with: token: ${{ secrets.PAT }} # Use PAT to trigger other workflows From 3d6c3345e231b59efcb333c42aa581322e74f73b Mon Sep 17 00:00:00 2001 From: Terraform Date: Fri, 5 Sep 2025 10:50:57 -0700 Subject: [PATCH 5/6] Add production release CICD --- .github/workflows/aws_prod_release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/aws_prod_release.yml b/.github/workflows/aws_prod_release.yml index 43caaf6..3550e1a 100644 --- a/.github/workflows/aws_prod_release.yml +++ b/.github/workflows/aws_prod_release.yml @@ -50,7 +50,7 @@ jobs: cache: 'npm' - run: git config --global user.email devops@topia.io - run: git config --global user.name Devops - - run: npm version --workspaces --include-workspace-root true ${{ github.event.release.tag_name }} + - run: npm version --no-git-tag-version --workspaces --include-workspace-root true ${{ github.event.release.tag_name }} - run: npm i - run: CI=false npm run build From 8e01931adbffc9a5e411c1de4fff544ae04fe15b Mon Sep 17 00:00:00 2001 From: Lina Date: Thu, 13 Nov 2025 15:00:12 -0800 Subject: [PATCH 6/6] Add urlSlug to romName --- dist-server/client/WiggleClientEngine.js | 4 +++- dist-server/client/WiggleClientEngine.js.map | 2 +- dist-server/server/WiggleServerEngine.js | 2 +- dist-server/server/WiggleServerEngine.js.map | 2 +- dist/bundle.js.map | 2 +- src/client/WiggleClientEngine.js | 4 +++- src/server/WiggleServerEngine.js | 2 +- 7 files changed, 11 insertions(+), 7 deletions(-) diff --git a/dist-server/client/WiggleClientEngine.js b/dist-server/client/WiggleClientEngine.js index 88edd55..0423bbd 100644 --- a/dist-server/client/WiggleClientEngine.js +++ b/dist-server/client/WiggleClientEngine.js @@ -34,7 +34,9 @@ var WiggleClientEngine = /*#__PURE__*/function (_ClientEngine) { return searchParams.get(prop); } }); - _this.roomName = params["assetId"]; + var assetId = params["assetId"]; + var urlSlug = params["urlSlug"]; + _this.roomName = "".concat(urlSlug, "_").concat(assetId); // show try-again button gameEngine.on("objectDestroyed", function (obj) { diff --git a/dist-server/client/WiggleClientEngine.js.map b/dist-server/client/WiggleClientEngine.js.map index 4393e63..fe2c275 100644 --- a/dist-server/client/WiggleClientEngine.js.map +++ b/dist-server/client/WiggleClientEngine.js.map @@ -1 +1 @@ -{"version":3,"file":"WiggleClientEngine.js","names":["_lanceTopia","require","_WiggleRenderer","_interopRequireDefault","obj","__esModule","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","_toPropertyKey","key","_createClass","protoProps","staticProps","prototype","arg","_toPrimitive","_typeof","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","Number","_get","Reflect","get","bind","property","receiver","base","_superPropBase","desc","getOwnPropertyDescriptor","arguments","value","apply","object","hasOwnProperty","_getPrototypeOf","_inherits","subClass","superClass","create","constructor","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","result","NewTarget","construct","_possibleConstructorReturn","self","_assertThisInitialized","ReferenceError","sham","Proxy","Boolean","valueOf","e","getPrototypeOf","WiggleClientEngine","_ClientEngine","_super","gameEngine","options","_this","WiggleRenderer","params","URLSearchParams","window","location","search","searchParams","prop","roomName","on","playerId","document","body","classList","add","querySelector","disabled","className","addEventListener","clickEvent","socket","emit","currentTarget","remove","mouseX","mouseY","updateMouseXY","sendMouseAngle","preventDefault","touches","item","pageX","pageY","player","world","queryObject","clientWidth","zoom","clientHeight","dx","position","y","dy","x","Math","sqrt","sendInput","directionStop","movement","angle","atan2","connect","_this2","then","console","log","error","message","innerHTML","ClientEngine","exports"],"sources":["../../src/client/WiggleClientEngine.js"],"sourcesContent":["import { ClientEngine } from \"@rtsdk/lance-topia\";\nimport WiggleRenderer from \"../client/WiggleRenderer\";\n\nexport default class WiggleClientEngine extends ClientEngine {\n constructor(gameEngine, options) {\n super(gameEngine, options, WiggleRenderer);\n\n const params = new Proxy(new URLSearchParams(window.location.search), {\n get: (searchParams, prop) => searchParams.get(prop),\n });\n this.roomName = params[\"assetId\"];\n\n // show try-again button\n gameEngine.on(\"objectDestroyed\", (obj) => {\n if (obj.playerId === gameEngine.playerId) {\n document.body.classList.add(\"lostGame\");\n document.querySelector(\"#tryAgain\").disabled = false;\n document.querySelector(\"#tryAgain\").className = \"show\";\n }\n });\n\n // restart game\n document.querySelector(\"#tryAgain\").addEventListener(\"click\", (clickEvent) => {\n this.socket.emit(\"requestRestart\");\n clickEvent.currentTarget.disabled = true;\n document.querySelector(\"#tryAgain\").className = \"hidden\";\n document.body.classList.remove(\"lostGame\");\n });\n\n this.mouseX = null;\n this.mouseY = null;\n\n document.addEventListener(\"mousemove\", this.updateMouseXY.bind(this), false);\n document.addEventListener(\"mouseenter\", this.updateMouseXY.bind(this), false);\n document.addEventListener(\"touchmove\", this.updateMouseXY.bind(this), false);\n document.addEventListener(\"touchenter\", this.updateMouseXY.bind(this), false);\n this.gameEngine.on(\"client__preStep\", this.sendMouseAngle.bind(this));\n }\n\n updateMouseXY(e) {\n e.preventDefault();\n if (e.touches) e = e.touches.item(0);\n this.mouseX = e.pageX;\n this.mouseY = e.pageY;\n }\n\n sendMouseAngle() {\n let player = this.gameEngine.world.queryObject({ playerId: this.gameEngine.playerId });\n if (this.mouseY === null || player === null) return;\n\n let mouseX = (this.mouseX - document.body.clientWidth / 2) / this.zoom;\n let mouseY = (this.mouseY - document.body.clientHeight / 2) / this.zoom;\n let dx = mouseY - player.position.y;\n let dy = mouseX - player.position.x;\n if (Math.sqrt(dx * dx + dy * dy) < 0.5) {\n this.sendInput(this.gameEngine.directionStop, { movement: true });\n return;\n }\n\n let angle = Math.atan2(dx, dy);\n this.sendInput(angle, { movement: true });\n }\n\n connect() {\n return super.connect().then(() => {\n this.socket.on(\"spectating\", () => {\n console.log(\"spectating\");\n document.querySelector(\"#spectating\").className = \"show\";\n });\n\n this.socket.on(\"inzone\", () => {\n document.querySelector(\"#spectating\").className = \"hidden\";\n document.querySelector(\"#joinGame\").className = \"show\";\n document.querySelector(\"#joinGame\").addEventListener(\"click\", (clickEvent) => {\n this.socket.emit(\"requestRestart\");\n document.querySelector(\"#joinGame\").className = \"hidden\";\n document.querySelector(\"#instructions\").className = \"hidden\";\n clickEvent.currentTarget.disabled = true;\n });\n });\n\n this.socket.on(\"error\", (e) => {\n console.error(\"error\", e);\n if (e?.message) document.querySelector(\"#error\").innerHTML = e.message;\n });\n\n this.socket.on(\"connection_error\", (e) => {\n console.error(\"Socket connection error\", e);\n });\n\n this.socket.on(\"disconnect\", (e) => {\n console.log(\"disconnected\");\n document.body.classList.add(\"disconnected\");\n document.body.classList.remove(\"gameActive\");\n });\n });\n }\n}\n"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"WiggleClientEngine.js","names":["_lanceTopia","require","_WiggleRenderer","_interopRequireDefault","obj","__esModule","_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","_toPropertyKey","key","_createClass","protoProps","staticProps","prototype","arg","_toPrimitive","_typeof","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","Number","_get","Reflect","get","bind","property","receiver","base","_superPropBase","desc","getOwnPropertyDescriptor","arguments","value","apply","object","hasOwnProperty","_getPrototypeOf","_inherits","subClass","superClass","create","constructor","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","result","NewTarget","construct","_possibleConstructorReturn","self","_assertThisInitialized","ReferenceError","sham","Proxy","Boolean","valueOf","e","getPrototypeOf","WiggleClientEngine","_ClientEngine","_super","gameEngine","options","_this","WiggleRenderer","params","URLSearchParams","window","location","search","searchParams","prop","assetId","urlSlug","roomName","concat","on","playerId","document","body","classList","add","querySelector","disabled","className","addEventListener","clickEvent","socket","emit","currentTarget","remove","mouseX","mouseY","updateMouseXY","sendMouseAngle","preventDefault","touches","item","pageX","pageY","player","world","queryObject","clientWidth","zoom","clientHeight","dx","position","y","dy","x","Math","sqrt","sendInput","directionStop","movement","angle","atan2","connect","_this2","then","console","log","error","message","innerHTML","ClientEngine","exports"],"sources":["../../src/client/WiggleClientEngine.js"],"sourcesContent":["import { ClientEngine } from \"@rtsdk/lance-topia\";\nimport WiggleRenderer from \"../client/WiggleRenderer\";\n\nexport default class WiggleClientEngine extends ClientEngine {\n constructor(gameEngine, options) {\n super(gameEngine, options, WiggleRenderer);\n\n const params = new Proxy(new URLSearchParams(window.location.search), {\n get: (searchParams, prop) => searchParams.get(prop),\n });\n const assetId = params[\"assetId\"];\n const urlSlug = params[\"urlSlug\"];\n this.roomName = `${urlSlug}_${assetId}`;\n\n // show try-again button\n gameEngine.on(\"objectDestroyed\", (obj) => {\n if (obj.playerId === gameEngine.playerId) {\n document.body.classList.add(\"lostGame\");\n document.querySelector(\"#tryAgain\").disabled = false;\n document.querySelector(\"#tryAgain\").className = \"show\";\n }\n });\n\n // restart game\n document.querySelector(\"#tryAgain\").addEventListener(\"click\", (clickEvent) => {\n this.socket.emit(\"requestRestart\");\n clickEvent.currentTarget.disabled = true;\n document.querySelector(\"#tryAgain\").className = \"hidden\";\n document.body.classList.remove(\"lostGame\");\n });\n\n this.mouseX = null;\n this.mouseY = null;\n\n document.addEventListener(\"mousemove\", this.updateMouseXY.bind(this), false);\n document.addEventListener(\"mouseenter\", this.updateMouseXY.bind(this), false);\n document.addEventListener(\"touchmove\", this.updateMouseXY.bind(this), false);\n document.addEventListener(\"touchenter\", this.updateMouseXY.bind(this), false);\n this.gameEngine.on(\"client__preStep\", this.sendMouseAngle.bind(this));\n }\n\n updateMouseXY(e) {\n e.preventDefault();\n if (e.touches) e = e.touches.item(0);\n this.mouseX = e.pageX;\n this.mouseY = e.pageY;\n }\n\n sendMouseAngle() {\n let player = this.gameEngine.world.queryObject({ playerId: this.gameEngine.playerId });\n if (this.mouseY === null || player === null) return;\n\n let mouseX = (this.mouseX - document.body.clientWidth / 2) / this.zoom;\n let mouseY = (this.mouseY - document.body.clientHeight / 2) / this.zoom;\n let dx = mouseY - player.position.y;\n let dy = mouseX - player.position.x;\n if (Math.sqrt(dx * dx + dy * dy) < 0.5) {\n this.sendInput(this.gameEngine.directionStop, { movement: true });\n return;\n }\n\n let angle = Math.atan2(dx, dy);\n this.sendInput(angle, { movement: true });\n }\n\n connect() {\n return super.connect().then(() => {\n this.socket.on(\"spectating\", () => {\n console.log(\"spectating\");\n document.querySelector(\"#spectating\").className = \"show\";\n });\n\n this.socket.on(\"inzone\", () => {\n document.querySelector(\"#spectating\").className = \"hidden\";\n document.querySelector(\"#joinGame\").className = \"show\";\n document.querySelector(\"#joinGame\").addEventListener(\"click\", (clickEvent) => {\n this.socket.emit(\"requestRestart\");\n document.querySelector(\"#joinGame\").className = \"hidden\";\n document.querySelector(\"#instructions\").className = \"hidden\";\n clickEvent.currentTarget.disabled = true;\n });\n });\n\n this.socket.on(\"error\", (e) => {\n console.error(\"error\", e);\n if (e?.message) document.querySelector(\"#error\").innerHTML = e.message;\n });\n\n this.socket.on(\"connection_error\", (e) => {\n console.error(\"Socket connection error\", e);\n });\n\n this.socket.on(\"disconnect\", (e) => {\n console.log(\"disconnected\");\n document.body.classList.add(\"disconnected\");\n document.body.classList.remove(\"gameActive\");\n });\n });\n }\n}\n"],"mappings":"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"} \ No newline at end of file diff --git a/dist-server/server/WiggleServerEngine.js b/dist-server/server/WiggleServerEngine.js index 83bb5dd..24d5b6c 100644 --- a/dist-server/server/WiggleServerEngine.js +++ b/dist-server/server/WiggleServerEngine.js @@ -152,7 +152,7 @@ var WiggleServerEngine = /*#__PURE__*/function (_ServerEngine) { body: query }; // Used for interactive assets assetId = query.assetId, displayName = query.displayName, identityId = query.identityId, urlSlug = query.urlSlug; - roomName = assetId; + roomName = "".concat(urlSlug, "_").concat(assetId); this.urlSlug = urlSlug; if (roomName) { _context2.next = 10; diff --git a/dist-server/server/WiggleServerEngine.js.map b/dist-server/server/WiggleServerEngine.js.map index 0812236..4ae0dbd 100644 --- a/dist-server/server/WiggleServerEngine.js.map +++ b/dist-server/server/WiggleServerEngine.js.map @@ -1 +1 @@ -{"version":3,"file":"WiggleServerEngine.js","names":["_typeof","obj","Symbol","iterator","constructor","prototype","Object","defineProperty","exports","value","_lanceTopia","require","_url","_interopRequireDefault","_Wiggle","_Food","_utils","_rtsdk","__esModule","_regeneratorRuntime","Op","hasOwn","hasOwnProperty","key","desc","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","type","call","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","method","_invoke","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","state","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","done","methodName","undefined","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","displayName","isGeneratorFunction","genFun","ctor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","val","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","_catch","thrown","delegateYield","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","arguments","apply","_createForOfIteratorHelper","o","allowArrayLike","it","Array","isArray","_unsupportedIterableToArray","F","s","n","e","_e","f","normalCompletion","didErr","step","_e2","minLen","_arrayLikeToArray","toString","from","test","arr","len","arr2","_classCallCheck","instance","Constructor","_defineProperties","target","props","descriptor","_toPropertyKey","_createClass","protoProps","staticProps","_toPrimitive","String","input","hint","prim","toPrimitive","res","Number","_get","Reflect","get","bind","property","receiver","base","_superPropBase","getOwnPropertyDescriptor","_getPrototypeOf","_inherits","subClass","superClass","_setPrototypeOf","p","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","NewTarget","construct","_possibleConstructorReturn","_assertThisInitialized","ReferenceError","sham","Proxy","Boolean","valueOf","nameGenerator","WiggleServerEngine","_ServerEngine","_super","io","gameEngine","inputOptions","_this","on","stepLogic","roomPopulation","visitor","urlSlug","isPlaying","start","addAI","roomName","newAI","Wiggle","position","randPos","AI","direction","turnDirection","bodyLength","startBodyLength","playerId","score","foodEaten","addObjectToWorld","assignObjectToRoom","addFood","newF","Food","generateRoom","foodCount","ai","aiCount","destroyRoom","wiggles","world","queryObjects","instanceType","foodObjects","_iterator","_step","w","id","objects","removeObjectFromWorld","_iterator2","_step2","rooms","onPlayerConnected","socket","joinRoom","_joinRoom","_callee2","_this2","URL","parts","query","req","assetId","identityId","_yield$getVisitor","success","isInZone","profileId","username","makePlayerWiggle","_callee2$","_context2","handshake","headers","referer","url","parse","body","getVisitor","emit","message","_ref","_callee","player","_callee$","_context","updatePublicKeyAnalytics","analyticName","uniqueKey","addNewRowToGoogleSheets","event","t0","errorHandler","functionName","_x","onPlayerDisconnected","socketId","playerWiggle","queryObject","wiggleEatFood","console","_wiggleHitWiggle","_callee3","w1","w2","_callee3$","_context3","destroyed","triggerParticle","wiggleDestroyed","wiggleHitWiggle","_x2","_x3","getRoomsWithPlayers","prop","connectedPlayers","stepObj","_iterator3","_step3","_iterator4","_step4","bodyParts","distance","clone","subtract","collideDistance","_iterator5","_step5","eatDistance","Math","random","hungerTick","y","spaceHeight","PI","x","spaceWidth","ServerEngine"],"sources":["../../src/server/WiggleServerEngine.js"],"sourcesContent":["\"use strict\";\n\nimport { ServerEngine } from \"@rtsdk/lance-topia\";\nimport url from \"url\";\nimport Wiggle from \"../common/Wiggle\";\nimport Food from \"../common/Food\";\nimport { addNewRowToGoogleSheets, errorHandler } from \"../utils\";\nimport { getVisitor } from \"../rtsdk\";\nconst nameGenerator = require(\"./NameGenerator\");\n\nexport default class WiggleServerEngine extends ServerEngine {\n constructor(io, gameEngine, inputOptions) {\n super(io, gameEngine, inputOptions);\n this.gameEngine.on(\"postStep\", this.stepLogic.bind(this));\n this.roomPopulation = {};\n this.visitor = {};\n this.urlSlug = \"\";\n this.isPlaying = false;\n }\n\n // create food and AI robots\n start() {\n super.start();\n }\n\n addAI(roomName) {\n let newAI = new Wiggle(this.gameEngine, null, {\n position: this.gameEngine.randPos(),\n });\n newAI.AI = true;\n newAI.direction = 0;\n newAI.turnDirection = 1;\n newAI.bodyLength = this.gameEngine.startBodyLength;\n newAI.playerId = 0;\n newAI.score = 0;\n newAI.foodEaten = 0;\n newAI.name = nameGenerator() + \"Bot\";\n newAI.roomName = roomName;\n this.gameEngine.addObjectToWorld(newAI);\n this.assignObjectToRoom(newAI, roomName);\n }\n\n addFood(roomName) {\n let newF = new Food(this.gameEngine, null, {\n position: this.gameEngine.randPos(),\n });\n newF.roomName = roomName;\n this.gameEngine.addObjectToWorld(newF);\n this.assignObjectToRoom(newF, roomName);\n }\n\n generateRoom(roomName) {\n for (let f = 0; f < this.gameEngine.foodCount; f++) this.addFood(roomName);\n for (let ai = 0; ai < this.gameEngine.aiCount; ai++) this.addAI(roomName);\n }\n\n destroyRoom(roomName) {\n let wiggles = this.gameEngine.world.queryObjects({ instanceType: Wiggle });\n let foodObjects = this.gameEngine.world.queryObjects({\n instanceType: Food,\n });\n\n for (let w of wiggles) {\n if (w.roomName === roomName) {\n if (!(w.id in this.gameEngine.world.objects)) return;\n this.gameEngine.removeObjectFromWorld(w.id);\n }\n }\n\n for (let f of foodObjects) {\n if (f.roomName === roomName) {\n if (!(f.id in this.gameEngine.world.objects)) return;\n this.gameEngine.removeObjectFromWorld(f.id);\n }\n }\n delete this.rooms[roomName];\n }\n\n onPlayerConnected(socket) {\n super.onPlayerConnected(socket);\n this.joinRoom(socket);\n }\n\n async joinRoom(socket) {\n try {\n const URL = socket.handshake.headers.referer;\n const parts = url.parse(URL, true);\n const query = parts.query;\n const req = { body: query }; // Used for interactive assets\n const { assetId, displayName, identityId, urlSlug } = query;\n const roomName = assetId;\n this.urlSlug = urlSlug;\n\n if (!roomName) return;\n\n const { success, visitor, isInZone } = await getVisitor(query);\n if (!success) return socket.emit(\"error\", message);\n this.visitor = visitor;\n\n const { profileId, username } = visitor;\n if (!this.rooms || !this.rooms[roomName]) {\n super.createRoom(roomName);\n this.generateRoom(roomName);\n }\n\n this.roomPopulation[roomName] = this.roomPopulation[roomName] || 0;\n this.roomPopulation[roomName]++;\n\n super.assignPlayerToRoom(socket.playerId, roomName);\n if (isInZone) {\n socket.emit(\"inzone\");\n\n const makePlayerWiggle = async () => {\n this.isPlaying = true;\n let player = new Wiggle(this.gameEngine, null, {\n position: this.gameEngine.randPos(),\n });\n player.direction = 0;\n player.bodyLength = this.gameEngine.startBodyLength;\n player.playerId = socket.playerId;\n player.score = 0;\n player.foodEaten = 0;\n player.name = username;\n player.req = req;\n player.roomName = roomName;\n player.profileId = profileId;\n\n this.gameEngine.addObjectToWorld(player);\n this.assignObjectToRoom(player, roomName);\n\n this.visitor.updatePublicKeyAnalytics([{ analyticName: \"starts\", profileId, uniqueKey: profileId, urlSlug }]);\n addNewRowToGoogleSheets([\n {\n identityId,\n displayName,\n event: \"starts\",\n urlSlug,\n },\n ]);\n };\n\n // handle client restart requests\n socket.on(\"requestRestart\", makePlayerWiggle);\n } else {\n // User is spectating because not in private zone\n socket.emit(\"spectating\");\n }\n this.visitor.updatePublicKeyAnalytics([{ analyticName: \"joins\", profileId, uniqueKey: profileId, urlSlug }]);\n } catch (error) {\n errorHandler({\n error,\n functionName: \"joinRoom\",\n message: \"Error joining room\",\n });\n }\n }\n\n onPlayerDisconnected(socketId, playerId) {\n super.onPlayerDisconnected(socketId, playerId);\n let playerWiggle = this.gameEngine.world.queryObject({ playerId });\n\n if (playerWiggle) {\n const { roomName } = playerWiggle;\n this.gameEngine.removeObjectFromWorld(playerWiggle.id);\n let wiggles = this.gameEngine.world.queryObjects({\n instanceType: Wiggle,\n roomName,\n });\n if (wiggles.length <= this.gameEngine.aiCount) this.addAI(roomName);\n }\n }\n\n // Eating Food:\n // increase body length, and remove the food\n wiggleEatFood(w, f) {\n if (!f) return;\n if (!(f.id in this.gameEngine.world.objects)) return;\n this.gameEngine.removeObjectFromWorld(f.id);\n w.bodyLength++;\n w.foodEaten++;\n try {\n if (!w.AI) this.visitor.updatePublicKeyAnalytics([{ analyticName: \"itemsEaten\" }]);\n } catch (error) {\n console.error(error);\n }\n if (f) this.addFood(f.roomName);\n }\n\n async wiggleHitWiggle(w1, w2) {\n // w2 is the winner\n if (!(w2.id in this.gameEngine.world.objects) || !(w1.id in this.gameEngine.world.objects)) return;\n if (w1.destroyed) return;\n w1.destroyed = true; // Handles race condition that happens when multiple body parts get hit\n\n if (!w1.AI) {\n // Wiggle is player not bot\n w2.score++;\n w2.bodyLength += w1.bodyLength / 2; // Blocking other player steals more length\n } else {\n w2.bodyLength += w1.bodyLength / 4;\n }\n\n if (!w2.AI) {\n try {\n this.visitor.updatePublicKeyAnalytics([{ analyticName: \"kills\", profileId: this.visitor.profileId }]);\n this.visitor.triggerParticle({ name: \"balloon_float\" });\n } catch (error) {\n console.error(error);\n }\n }\n\n this.wiggleDestroyed(w1);\n }\n\n wiggleDestroyed(w) {\n if (!(w.id in this.gameEngine.world.objects)) return;\n this.gameEngine.removeObjectFromWorld(w.id);\n let wiggles = this.gameEngine.world.queryObjects({\n instanceType: Wiggle,\n roomName: w.roomName,\n });\n if (wiggles.length <= this.gameEngine.aiCount) this.addAI(w.roomName);\n }\n\n // Used to clean up rooms with no players and prevent movement\n getRoomsWithPlayers() {\n let roomPopulation = {};\n for (const prop in this.connectedPlayers) {\n const player = this.connectedPlayers[prop];\n roomPopulation[player.roomName] = roomPopulation[player.roomName] || 0;\n roomPopulation[player.roomName]++;\n }\n // Destroy all rooms that don't currently have players\n for (var roomName in this.roomPopulation) {\n if (!roomPopulation[roomName]) this.destroyRoom(roomName);\n }\n this.roomPopulation = roomPopulation;\n }\n\n stepLogic(stepObj) {\n // TODO: possibly make more efficient by only looping through active rooms with this.rooms\n // Can add roomName to queryObjects\n let wiggles = this.gameEngine.world.queryObjects({ instanceType: Wiggle });\n let foodObjects = this.gameEngine.world.queryObjects({ instanceType: Food });\n\n // Check room populations every 500 ticks to prevent game logic in rooms that have no players\n if (stepObj.step % 500 === 0) this.getRoomsWithPlayers();\n\n for (let w of wiggles) {\n // Skip if that room doesn't have anyone in it\n if (!this.roomPopulation[w.roomName] || !this.rooms[w.roomName]) continue;\n\n // check for collision\n for (let w2 of wiggles) {\n if (w === w2 || w.roomName !== w2.roomName) continue; // Don't have collision if in different rooms\n\n for (let i = 0; i < w2.bodyParts.length; i++) {\n let distance = w2.bodyParts[i].clone().subtract(w.position);\n if (distance.length() < this.gameEngine.collideDistance) {\n this.wiggleHitWiggle(w, w2);\n continue;\n }\n }\n }\n\n // check for food-eating\n for (let f of foodObjects) {\n if (w.roomName !== f.roomName) continue;\n let distance = w.position.clone().subtract(f.position);\n if (distance.length() < this.gameEngine.eatDistance) this.wiggleEatFood(w, f);\n }\n\n // Slowly (and somewhat randomly) reduce length to prevent just sitting and hiding\n if (Math.random() < 0.02) {\n w.bodyLength -= w.bodyLength * this.gameEngine.hungerTick;\n if (w.bodyLength < 1) this.wiggleDestroyed(w);\n }\n\n // move AI wiggles\n if (w.AI) {\n if (Math.random() < 0.01) w.turnDirection *= -1;\n w.direction += (w.turnDirection * (Math.random() - 0.9)) / 20;\n if (w.position.y >= this.gameEngine.spaceHeight / 2) w.direction = -Math.PI / 2;\n if (w.position.y <= -this.gameEngine.spaceHeight / 2) w.direction = Math.PI / 2;\n if (w.position.x >= this.gameEngine.spaceWidth / 2) w.direction = Math.PI;\n if (w.position.x <= -this.gameEngine.spaceWidth / 2) w.direction = 0;\n if (w.direction > Math.PI * 2) w.direction -= Math.PI * 2;\n if (w.direction < 0) w.direction += Math.PI * 2;\n }\n }\n }\n}\n"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"WiggleServerEngine.js","names":["_typeof","obj","Symbol","iterator","constructor","prototype","Object","defineProperty","exports","value","_lanceTopia","require","_url","_interopRequireDefault","_Wiggle","_Food","_utils","_rtsdk","__esModule","_regeneratorRuntime","Op","hasOwn","hasOwnProperty","key","desc","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","type","call","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","method","_invoke","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","state","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","done","methodName","undefined","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","displayName","isGeneratorFunction","genFun","ctor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","val","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","_catch","thrown","delegateYield","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","arguments","apply","_createForOfIteratorHelper","o","allowArrayLike","it","Array","isArray","_unsupportedIterableToArray","F","s","n","e","_e","f","normalCompletion","didErr","step","_e2","minLen","_arrayLikeToArray","toString","from","test","arr","len","arr2","_classCallCheck","instance","Constructor","_defineProperties","target","props","descriptor","_toPropertyKey","_createClass","protoProps","staticProps","_toPrimitive","String","input","hint","prim","toPrimitive","res","Number","_get","Reflect","get","bind","property","receiver","base","_superPropBase","getOwnPropertyDescriptor","_getPrototypeOf","_inherits","subClass","superClass","_setPrototypeOf","p","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","NewTarget","construct","_possibleConstructorReturn","_assertThisInitialized","ReferenceError","sham","Proxy","Boolean","valueOf","nameGenerator","WiggleServerEngine","_ServerEngine","_super","io","gameEngine","inputOptions","_this","on","stepLogic","roomPopulation","visitor","urlSlug","isPlaying","start","addAI","roomName","newAI","Wiggle","position","randPos","AI","direction","turnDirection","bodyLength","startBodyLength","playerId","score","foodEaten","addObjectToWorld","assignObjectToRoom","addFood","newF","Food","generateRoom","foodCount","ai","aiCount","destroyRoom","wiggles","world","queryObjects","instanceType","foodObjects","_iterator","_step","w","id","objects","removeObjectFromWorld","_iterator2","_step2","rooms","onPlayerConnected","socket","joinRoom","_joinRoom","_callee2","_this2","URL","parts","query","req","assetId","identityId","_yield$getVisitor","success","isInZone","profileId","username","makePlayerWiggle","_callee2$","_context2","handshake","headers","referer","url","parse","body","concat","getVisitor","emit","message","_ref","_callee","player","_callee$","_context","updatePublicKeyAnalytics","analyticName","uniqueKey","addNewRowToGoogleSheets","event","t0","errorHandler","functionName","_x","onPlayerDisconnected","socketId","playerWiggle","queryObject","wiggleEatFood","console","_wiggleHitWiggle","_callee3","w1","w2","_callee3$","_context3","destroyed","triggerParticle","wiggleDestroyed","wiggleHitWiggle","_x2","_x3","getRoomsWithPlayers","prop","connectedPlayers","stepObj","_iterator3","_step3","_iterator4","_step4","bodyParts","distance","clone","subtract","collideDistance","_iterator5","_step5","eatDistance","Math","random","hungerTick","y","spaceHeight","PI","x","spaceWidth","ServerEngine"],"sources":["../../src/server/WiggleServerEngine.js"],"sourcesContent":["\"use strict\";\n\nimport { ServerEngine } from \"@rtsdk/lance-topia\";\nimport url from \"url\";\nimport Wiggle from \"../common/Wiggle\";\nimport Food from \"../common/Food\";\nimport { addNewRowToGoogleSheets, errorHandler } from \"../utils\";\nimport { getVisitor } from \"../rtsdk\";\nconst nameGenerator = require(\"./NameGenerator\");\n\nexport default class WiggleServerEngine extends ServerEngine {\n constructor(io, gameEngine, inputOptions) {\n super(io, gameEngine, inputOptions);\n this.gameEngine.on(\"postStep\", this.stepLogic.bind(this));\n this.roomPopulation = {};\n this.visitor = {};\n this.urlSlug = \"\";\n this.isPlaying = false;\n }\n\n // create food and AI robots\n start() {\n super.start();\n }\n\n addAI(roomName) {\n let newAI = new Wiggle(this.gameEngine, null, {\n position: this.gameEngine.randPos(),\n });\n newAI.AI = true;\n newAI.direction = 0;\n newAI.turnDirection = 1;\n newAI.bodyLength = this.gameEngine.startBodyLength;\n newAI.playerId = 0;\n newAI.score = 0;\n newAI.foodEaten = 0;\n newAI.name = nameGenerator() + \"Bot\";\n newAI.roomName = roomName;\n this.gameEngine.addObjectToWorld(newAI);\n this.assignObjectToRoom(newAI, roomName);\n }\n\n addFood(roomName) {\n let newF = new Food(this.gameEngine, null, {\n position: this.gameEngine.randPos(),\n });\n newF.roomName = roomName;\n this.gameEngine.addObjectToWorld(newF);\n this.assignObjectToRoom(newF, roomName);\n }\n\n generateRoom(roomName) {\n for (let f = 0; f < this.gameEngine.foodCount; f++) this.addFood(roomName);\n for (let ai = 0; ai < this.gameEngine.aiCount; ai++) this.addAI(roomName);\n }\n\n destroyRoom(roomName) {\n let wiggles = this.gameEngine.world.queryObjects({ instanceType: Wiggle });\n let foodObjects = this.gameEngine.world.queryObjects({\n instanceType: Food,\n });\n\n for (let w of wiggles) {\n if (w.roomName === roomName) {\n if (!(w.id in this.gameEngine.world.objects)) return;\n this.gameEngine.removeObjectFromWorld(w.id);\n }\n }\n\n for (let f of foodObjects) {\n if (f.roomName === roomName) {\n if (!(f.id in this.gameEngine.world.objects)) return;\n this.gameEngine.removeObjectFromWorld(f.id);\n }\n }\n delete this.rooms[roomName];\n }\n\n onPlayerConnected(socket) {\n super.onPlayerConnected(socket);\n this.joinRoom(socket);\n }\n\n async joinRoom(socket) {\n try {\n const URL = socket.handshake.headers.referer;\n const parts = url.parse(URL, true);\n const query = parts.query;\n const req = { body: query }; // Used for interactive assets\n const { assetId, displayName, identityId, urlSlug } = query;\n const roomName = `${urlSlug}_${assetId}`;\n this.urlSlug = urlSlug;\n\n if (!roomName) return;\n\n const { success, visitor, isInZone } = await getVisitor(query);\n if (!success) return socket.emit(\"error\", message);\n this.visitor = visitor;\n\n const { profileId, username } = visitor;\n if (!this.rooms || !this.rooms[roomName]) {\n super.createRoom(roomName);\n this.generateRoom(roomName);\n }\n\n this.roomPopulation[roomName] = this.roomPopulation[roomName] || 0;\n this.roomPopulation[roomName]++;\n\n super.assignPlayerToRoom(socket.playerId, roomName);\n if (isInZone) {\n socket.emit(\"inzone\");\n\n const makePlayerWiggle = async () => {\n this.isPlaying = true;\n let player = new Wiggle(this.gameEngine, null, {\n position: this.gameEngine.randPos(),\n });\n player.direction = 0;\n player.bodyLength = this.gameEngine.startBodyLength;\n player.playerId = socket.playerId;\n player.score = 0;\n player.foodEaten = 0;\n player.name = username;\n player.req = req;\n player.roomName = roomName;\n player.profileId = profileId;\n\n this.gameEngine.addObjectToWorld(player);\n this.assignObjectToRoom(player, roomName);\n\n this.visitor.updatePublicKeyAnalytics([{ analyticName: \"starts\", profileId, uniqueKey: profileId, urlSlug }]);\n addNewRowToGoogleSheets([\n {\n identityId,\n displayName,\n event: \"starts\",\n urlSlug,\n },\n ]);\n };\n\n // handle client restart requests\n socket.on(\"requestRestart\", makePlayerWiggle);\n } else {\n // User is spectating because not in private zone\n socket.emit(\"spectating\");\n }\n this.visitor.updatePublicKeyAnalytics([{ analyticName: \"joins\", profileId, uniqueKey: profileId, urlSlug }]);\n } catch (error) {\n errorHandler({\n error,\n functionName: \"joinRoom\",\n message: \"Error joining room\",\n });\n }\n }\n\n onPlayerDisconnected(socketId, playerId) {\n super.onPlayerDisconnected(socketId, playerId);\n let playerWiggle = this.gameEngine.world.queryObject({ playerId });\n\n if (playerWiggle) {\n const { roomName } = playerWiggle;\n this.gameEngine.removeObjectFromWorld(playerWiggle.id);\n let wiggles = this.gameEngine.world.queryObjects({\n instanceType: Wiggle,\n roomName,\n });\n if (wiggles.length <= this.gameEngine.aiCount) this.addAI(roomName);\n }\n }\n\n // Eating Food:\n // increase body length, and remove the food\n wiggleEatFood(w, f) {\n if (!f) return;\n if (!(f.id in this.gameEngine.world.objects)) return;\n this.gameEngine.removeObjectFromWorld(f.id);\n w.bodyLength++;\n w.foodEaten++;\n try {\n if (!w.AI) this.visitor.updatePublicKeyAnalytics([{ analyticName: \"itemsEaten\" }]);\n } catch (error) {\n console.error(error);\n }\n if (f) this.addFood(f.roomName);\n }\n\n async wiggleHitWiggle(w1, w2) {\n // w2 is the winner\n if (!(w2.id in this.gameEngine.world.objects) || !(w1.id in this.gameEngine.world.objects)) return;\n if (w1.destroyed) return;\n w1.destroyed = true; // Handles race condition that happens when multiple body parts get hit\n\n if (!w1.AI) {\n // Wiggle is player not bot\n w2.score++;\n w2.bodyLength += w1.bodyLength / 2; // Blocking other player steals more length\n } else {\n w2.bodyLength += w1.bodyLength / 4;\n }\n\n if (!w2.AI) {\n try {\n this.visitor.updatePublicKeyAnalytics([{ analyticName: \"kills\", profileId: this.visitor.profileId }]);\n this.visitor.triggerParticle({ name: \"balloon_float\" });\n } catch (error) {\n console.error(error);\n }\n }\n\n this.wiggleDestroyed(w1);\n }\n\n wiggleDestroyed(w) {\n if (!(w.id in this.gameEngine.world.objects)) return;\n this.gameEngine.removeObjectFromWorld(w.id);\n let wiggles = this.gameEngine.world.queryObjects({\n instanceType: Wiggle,\n roomName: w.roomName,\n });\n if (wiggles.length <= this.gameEngine.aiCount) this.addAI(w.roomName);\n }\n\n // Used to clean up rooms with no players and prevent movement\n getRoomsWithPlayers() {\n let roomPopulation = {};\n for (const prop in this.connectedPlayers) {\n const player = this.connectedPlayers[prop];\n roomPopulation[player.roomName] = roomPopulation[player.roomName] || 0;\n roomPopulation[player.roomName]++;\n }\n // Destroy all rooms that don't currently have players\n for (var roomName in this.roomPopulation) {\n if (!roomPopulation[roomName]) this.destroyRoom(roomName);\n }\n this.roomPopulation = roomPopulation;\n }\n\n stepLogic(stepObj) {\n // TODO: possibly make more efficient by only looping through active rooms with this.rooms\n // Can add roomName to queryObjects\n let wiggles = this.gameEngine.world.queryObjects({ instanceType: Wiggle });\n let foodObjects = this.gameEngine.world.queryObjects({ instanceType: Food });\n\n // Check room populations every 500 ticks to prevent game logic in rooms that have no players\n if (stepObj.step % 500 === 0) this.getRoomsWithPlayers();\n\n for (let w of wiggles) {\n // Skip if that room doesn't have anyone in it\n if (!this.roomPopulation[w.roomName] || !this.rooms[w.roomName]) continue;\n\n // check for collision\n for (let w2 of wiggles) {\n if (w === w2 || w.roomName !== w2.roomName) continue; // Don't have collision if in different rooms\n\n for (let i = 0; i < w2.bodyParts.length; i++) {\n let distance = w2.bodyParts[i].clone().subtract(w.position);\n if (distance.length() < this.gameEngine.collideDistance) {\n this.wiggleHitWiggle(w, w2);\n continue;\n }\n }\n }\n\n // check for food-eating\n for (let f of foodObjects) {\n if (w.roomName !== f.roomName) continue;\n let distance = w.position.clone().subtract(f.position);\n if (distance.length() < this.gameEngine.eatDistance) this.wiggleEatFood(w, f);\n }\n\n // Slowly (and somewhat randomly) reduce length to prevent just sitting and hiding\n if (Math.random() < 0.02) {\n w.bodyLength -= w.bodyLength * this.gameEngine.hungerTick;\n if (w.bodyLength < 1) this.wiggleDestroyed(w);\n }\n\n // move AI wiggles\n if (w.AI) {\n if (Math.random() < 0.01) w.turnDirection *= -1;\n w.direction += (w.turnDirection * (Math.random() - 0.9)) / 20;\n if (w.position.y >= this.gameEngine.spaceHeight / 2) w.direction = -Math.PI / 2;\n if (w.position.y <= -this.gameEngine.spaceHeight / 2) w.direction = Math.PI / 2;\n if (w.position.x >= this.gameEngine.spaceWidth / 2) w.direction = Math.PI;\n if (w.position.x <= -this.gameEngine.spaceWidth / 2) w.direction = 0;\n if (w.direction > Math.PI * 2) w.direction -= Math.PI * 2;\n if (w.direction < 0) w.direction += Math.PI * 2;\n }\n }\n }\n}\n"],"mappings":"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"} \ No newline at end of file diff --git a/dist/bundle.js.map b/dist/bundle.js.map index e800ea2..d629608 100644 --- a/dist/bundle.js.map +++ b/dist/bundle.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap d9fc9b096a7665b2cc07","webpack:///../../src/GameWorld.js","webpack:///../../node_modules/type/value/is.js","webpack:///../../node_modules/type/object/is.js","webpack:///../../node_modules/type/prototype/is.js","webpack:///../../node_modules/type/function/is.js","webpack:///../../node_modules/type/plain-function/is.js","webpack:///../../node_modules/es5-ext/object/assign/is-implemented.js","webpack:///../../node_modules/es5-ext/object/keys/is-implemented.js","webpack:///../../node_modules/es5-ext/function/noop.js","webpack:///../../node_modules/es5-ext/object/is-value.js","webpack:///../../node_modules/es5-ext/object/keys/shim.js","webpack:///../../node_modules/es5-ext/object/keys/index.js","webpack:///../../node_modules/es5-ext/object/valid-value.js","webpack:///../../node_modules/es5-ext/object/assign/shim.js","webpack:///../../node_modules/es5-ext/object/assign/index.js","webpack:///../../node_modules/es5-ext/object/normalize-options.js","webpack:///../../node_modules/es5-ext/string/#/contains/is-implemented.js","webpack:///../../node_modules/es5-ext/string/#/contains/shim.js","webpack:///../../node_modules/es5-ext/string/#/contains/index.js","webpack:///../../node_modules/d/index.js","webpack:///../../node_modules/es5-ext/object/valid-callable.js","webpack:///../../node_modules/event-emitter/index.js","webpack:///../../src/game/Timer.js","webpack:///../../src/lib/Trace.js","webpack:///../../src/GameEngine.js","webpack:///../../src/physics/PhysicsEngine.js","webpack:///../../src/lib/Utils.js","webpack:///../../src/serialize/BaseTypes.js","webpack:///../../src/serialize/Serializable.js","webpack:///../../src/serialize/TwoVector.js","webpack:///../../src/physics/SimplePhysics/HSHG.js","webpack:///../../src/physics/SimplePhysics/HSHGCollisionDetection.js","webpack:///../../src/physics/SimplePhysics/BruteForceCollisionDetection.js","webpack:///../../src/physics/SimplePhysicsEngine.js","webpack:///../../src/physics/CannonPhysicsEngine.js","webpack:///../../src/serialize/ThreeVector.js","webpack:///../../src/serialize/Quaternion.js","webpack:///../../src/serialize/GameObject.js","webpack:///../../src/lib/MathUtils.js","webpack:///../../src/serialize/DynamicObject.js","webpack:///../../src/serialize/PhysicalObject2D.js","webpack:///../../src/serialize/PhysicalObject3D.js","webpack:///../../src/lib/lib.js","webpack:///../../node_modules/engine.io-parser/build/esm/commons.js","webpack:///../../node_modules/engine.io-parser/build/esm/encodePacket.browser.js","webpack:///../../node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js","webpack:///../../node_modules/engine.io-parser/build/esm/decodePacket.browser.js","webpack:///../../node_modules/engine.io-parser/build/esm/index.js","webpack:///../../node_modules/@socket.io/component-emitter/index.mjs","webpack:///../../node_modules/engine.io-client/build/esm/globalThis.browser.js","webpack:///../../node_modules/engine.io-client/build/esm/util.js","webpack:///../../node_modules/engine.io-client/build/esm/contrib/parseqs.js","webpack:///../../node_modules/engine.io-client/build/esm/transport.js","webpack:///../../node_modules/engine.io-client/build/esm/contrib/yeast.js","webpack:///../../node_modules/engine.io-client/build/esm/contrib/has-cors.js","webpack:///../../node_modules/engine.io-client/build/esm/transports/xmlhttprequest.browser.js","webpack:///../../node_modules/engine.io-client/build/esm/transports/polling.js","webpack:///../../node_modules/engine.io-client/build/esm/transports/websocket-constructor.browser.js","webpack:///../../node_modules/engine.io-client/build/esm/transports/websocket.js","webpack:///../../node_modules/engine.io-client/build/esm/transports/webtransport.js","webpack:///../../node_modules/engine.io-client/build/esm/transports/index.js","webpack:///../../node_modules/engine.io-client/build/esm/contrib/parseuri.js","webpack:///../../node_modules/engine.io-client/build/esm/socket.js","webpack:///../../node_modules/socket.io-client/build/esm/url.js","webpack:///../../node_modules/socket.io-parser/build/esm/is-binary.js","webpack:///../../node_modules/socket.io-parser/build/esm/binary.js","webpack:///../../node_modules/socket.io-parser/build/esm/index.js","webpack:///../../node_modules/socket.io-client/build/esm/on.js","webpack:///../../node_modules/socket.io-client/build/esm/socket.js","webpack:///../../node_modules/socket.io-client/build/esm/contrib/backo2.js","webpack:///../../node_modules/socket.io-client/build/esm/manager.js","webpack:///../../node_modules/socket.io-client/build/esm/index.js","webpack:///../../src/lib/Scheduler.js","webpack:///../../src/syncStrategies/SyncStrategy.js","webpack:///../../src/syncStrategies/InterpolateStrategy.js","webpack:///../../src/syncStrategies/ExtrapolateStrategy.js","webpack:///../../src/syncStrategies/FrameSyncStrategy.js","webpack:///../../src/Synchronizer.js","webpack:///../../src/serialize/Serializer.js","webpack:///../../src/network/NetworkMonitor.js","webpack:///../../src/network/NetworkedEventFactory.js","webpack:///../../src/network/NetworkedEventCollection.js","webpack:///../../src/network/NetworkTransmitter.js","webpack:///../../src/ClientEngine.js","webpack:///../../src/controls/KeyboardControls.js","webpack:///../../src/render/Renderer.js","webpack:///../../src/render/aframe/system.js","webpack:///../../src/render/AFrameRenderer.js","webpack:///./src/common/Wiggle.js","webpack:///./src/common/Food.js","webpack:///./src/client/clientEntryPoint.js","webpack:///./node_modules/query-string/index.js","webpack:///./node_modules/strict-uri-encode/index.js","webpack:///./node_modules/object-assign/index.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/cannon/build/cannon.js","webpack:///./src/client/WiggleClientEngine.js","webpack:///./src/client/WiggleRenderer.js","webpack:///./src/common/WiggleGameEngine.js"],"names":["GameWorld","_classCallCheck","stepCount","objects","playerCount","idCount","_createClass","key","value","getNewId","possibleId","queryObjects","query","queriedObjects","forEachObject","id","object","conditions","push","playerId","roomName","AI","instanceType","components","forEach","componentClass","hasComponent","every","returnSingle","length","queryObject","Object","assign","addObject","removeObject","callback","_i","_Object$keys","keys","returnValue","_undefined$1","is$4","is","possibleTypes","is$3","hasOwnProperty","call","_typeof2","is$2","constructor","prototype","error","is$1","apply","classRe","functionToString","Function","toString","test","isImplemented$2","isImplemented","obj","foo","bar","trzy","isImplemented$1","e","noop","_undefined","isValue","val","keys$1","shim$2","shim","validValue","TypeError","max","Math","shim$1","dest","src","i","arguments","undefined","Array","create","process","normalizeOptions","opts1","result","options","str","contains","indexOf","String","searchString","d","module","exports","dscr","c","w","desc","configurable","enumerable","writable","gs","get","set","validCallable","fn","defineProperty","defineProperties","descriptor","on","once","off","emit","methods","descriptors","base","type","listener","data","__ee__","self","__eeOnceListener__","listeners","candidate","splice","l","args","slice","d_1","o","Timer","currentTime","isActive","idCounter","events","play","tick","event","eventId","startOffset","time","thisContext","destroy","destroyEvent","loop","timerEvent","TimerEvent","TYPES","repeat","add","single","timer","Trace","traceLevel","TRACE_DEBUG","traceBuffer","step","trace","bind","TRACE_ERROR","warn","TRACE_WARN","info","TRACE_INFO","debug","TRACE_ALL","level","dataCB","Error","concat","_typeof","Date","rotate","buffer","setStep","s","GameEngine","isServerSide","window","glob","global","LANCE","gameEngine","defaultOpts","TRACE_NONE","clientIDSpace","NaN","eventEmitter$1","eventEmitter","removeListener","findLocalShadow","serverObj","world","localId","Number","localObj","inputId","initWorld","worldSettings","start","_this","isReenact","timestamp","getTime","t","dt","physicsOnly","_this2","physicsEngine","objectFilter","Boolean","ignorePhysics","refreshFromPhysics","addObjectToWorld","serverCopyArrived","onAddToWorld","processInput","inputDesc","isServer","messageIndex","input","removeObjectFromWorld","objectId","onRemoveFromWorld","isOwnedByPlayer","registerClasses","serializer","getPlayerGameOverResult","PhysicsEngine","console","Utils","hashStr","bits","hash","charCodeAt","pow","arrayBuffersEqual","buf1","buf2","byteLength","dv1","Int8Array","dv2","httpGetPromise","url","Promise","resolve","reject","req","XMLHttpRequest","open","onload","status","JSON","parse","responseText","onerror","send","BaseTypes","FLOAT32","INT32","INT16","INT8","UINT8","STRING","CLASSINSTANCE","LIST","Serializable","serialize","bufferOffset","netScheme","dataBuffer","dataView","classId","localBufferOffset","name","dry","bufferSize","ArrayBuffer","DataView","setUint8","Uint8Array","BYTES_PER_ELEMENT","_iterator","_createForOfIteratorHelper","sort","_step","n","done","property","writeDataView","Uint16Array","objectInstanceBufferOffset","_iterator2","_step2","item","itemType","listBufferOffset","getTypeByteSize","err","f","prunedStringsClone","prevObject","deserialize","isString","p","hasChanged","changedStrings","filter","prunedCopy","syncTo","other","_i2","_Object$keys2","TwoVector","_Serializable","_inherits","_super","_createSuper","x","y","_possibleConstructorReturn","_assertThisInitialized","round3","round","multiply","multiplyScalar","subtract","sqrt","normalize","copy","sourceObj","clone","lerp","target","getBendingDelta","increment","percent","min","increments","update_RECOMPUTE","grid","meta","objAABB","newObjHash","_globalObjects","HSHG","getAABB","toHash","update_REMOVEALL","testAABBOverlap","objA","objB","a","b","getLongestAABBEdge","abs","MAX_OBJECT_CELL_DENSITY","INITIAL_GRID_LENGTH","HIERARCHY_FACTOR","HIERARCHY_FACTOR_SQRT","SQRT2","UPDATE_METHOD","_grids","cellSize","objSize","oneGrid","newGrid","globalObjectsIndex","Grid","initCells","replacementObj","pop","update","queryForCollisionPairs","broadOverlapTestCallback","j","k","cell","offset","adjacentCell","biggerGrid","objAAABB","objAHashInBiggerGrid","possibleCollisions","broadOverlapTest","occupiedCells","objectContainer","neighborOffsetArray","allCells","allCellsIndex","allObjects","cellCount","parentHierarchy","inverseCellSize","rowColumnCount","xyHashMask","sharedInnerOffsets","_parentHierarchy","gridLength","wh","isOnRightEdge","isOnLeftEdge","isOnTopEdge","isOnBottomEdge","innerOffsets","leftOffset","rightOffset","topOffset","bottomOffset","uniqueOffsets","Cell","z","xHash","yHash","objHash","targetCell","occupiedCellsIndex","objectContainerIndex","allGridObjectsIndex","expandGrid","containerIndex","replacementCell","currentCellCount","newCellCount","newRowColumnCount","newXYHashMask","_private","HSHGCollisionDetection","COLLISION_DISTANCE","init","previousCollisionPairs","stepCollidingPairs","detect","reduce","accumulator","currentValue","pairId","getArrayPairId","o1","o2","pairObj","_pairId","_pairObj","areObjectsColliding","arrayPair","sortedArrayPair","differenceVector","BruteForceCollisionDetection","autoResolve","collisionPairs","findCollision","isStatic","collidesWith","collisionDistance","position","o1Box","getBox","o2Box","xMin","xMax","yMin","yMax","shiftY1","shiftY2","shiftX1","shiftX2","smallestYShift","smallestXShift","velocity","checkPair","id1","id2","join","split","_keys","k1","k2","width","height","dv","dx","SimplePhysicsEngine","_PhysicsEngine","collisions","collisionDetection","gravity","collisionOptions","objectStep","isRotatingRight","angle","rotationSpeed","isRotatingLeft","isAccelerating","rad","PI","cos","sin","acceleration","velMagnitude","maxSpeed","friction","worldWrap","objId","ob","CANNON","require","CannonPhysicsEngine","World","quatNormalizeSkip","quatNormalizeFast","broadphase","NaiveBroadphase","addSphere","radius","mass","shape","Sphere","body","Body","addBody","addBox","Box","Vec3","material","Material","addCylinder","radiusTop","radiusBottom","numSegments","Cylinder","removeBody","ThreeVector","MAX_DEL_THETA","Quaternion","axisAngle","toAxisAngle","axis","acos","divS","setFromAxisAngle","halfAngle","conjugate","aw","ax","ay","az","bw","bx","by","bz","slerp","bending","cosHalfTheta","sqrSinHalfTheta","EPSILON","sinHalfTheta","halfTheta","atan2","delTheta","sign","ratioA","ratioB","GameObject","props","bendingToString","saveState","savedCopy","angularVelocity","angleLocal","bendToCurrentState","isLocal","bendingIncrements","bendToCurrent","original","_get","_getPrototypeOf","refreshToPhysics","applyIncrementalBending","addComponent","componentInstance","parentObject","removeComponent","componentName","getComponent","MathUtils","interpolate","end","interpolateDelta","interpolateDeltaWithWrapping","wrapMin","wrapMax","wrapTest","log","interpolateWithWrapping","interpolatedVal","wrapLength","DynamicObject","_GameObject","deceleration","turnRight","deltaAngle","turnLeft","accelerate","bendingPositionDelta","bendingVelocityDelta","bendingAngleDelta","bendingAngle","positionBending","velocityBending","angleBending","positionLocal","velocityLocal","incrementScale","bendingTarget","bendingOptions","stepDesc","timeFactor","posDelta","velDelta","PhysicalObject2D","v","av","avBending","angularVelocityLocal","bendingAVDelta","keepVelocity","physicsObj","copyVector","source","sourceVec","Float32Array","nextObj","PhysicalObject3D","quaternion","q","bendingQuaternionDelta","avDelta","lib","PACKET_TYPES","PACKET_TYPES_REVERSE","ERROR_PACKET","withNativeBlob$1","Blob","withNativeArrayBuffer$2","isView$1","isView","encodePacket","_ref","supportsBinary","encodeBlobAsBase64","fileReader","FileReader","content","readAsDataURL","toArray","byteOffset","TEXT_ENCODER","encodePacketToBinary","packet","arrayBuffer","then","encoded","TextEncoder","encode","chars","lookup$1","decode$1","decode","base64","bufferLength","len","encoded1","encoded2","encoded3","encoded4","arraybuffer","bytes","withNativeArrayBuffer$1","decodePacket","encodedPacket","binaryType","mapBinary","charAt","decodeBase64Packet","substring","packetType","decoded","SEPARATOR","fromCharCode","encodePayload","packets","encodedPackets","count","decodePayload","encodedPayload","decodedPacket","createPacketEncoderStream","TransformStream","transform","controller","payloadLength","header","view","setUint16","setBigUint64","BigInt","enqueue","TEXT_DECODER","totalLength","chunks","acc","chunk","concatChunks","size","shift","createPacketDecoderStream","maxPayload","TextDecoder","state","expectedLength","isBinary","headerArray","getUint16","getUint32","protocol$1","Emitter","mixin","addEventListener","_callbacks","removeAllListeners","removeEventListener","callbacks","cb","emitReserved","hasListeners","globalThisShim","pick","_len","attr","_key","NATIVE_SET_TIMEOUT","setTimeout","NATIVE_CLEAR_TIMEOUT","clearTimeout","installTimerFunctions","opts","useNativeTimers","setTimeoutFn","clearTimeoutFn","BASE64_OVERHEAD","utf8Length","ceil","encode$1","encodeURIComponent","qs","qry","pairs","pair","decodeURIComponent","TransportError","_Error","_inherits2","_super2","_createSuper2","reason","description","context","_this5","_classCallCheck2","_createClass2","_wrapNativeSuper","Transport","_Emitter","_super3","_this6","_assertThisInitialized2","socket","onError","_get2","_getPrototypeOf2","readyState","doOpen","close","doClose","onClose","write","onOpen","onData","onPacket","details","pause","onPause","createUri","schema","_hostname","_port","path","_query","hostname","port","secure","encodedQuery","alphabet","map","seed","prev","num","floor","yeast","now","hasCORS","XHR","xdomain","createCookieJar","empty","hasXHR2","xhr","responseType","Polling","_Transport","_super4","_this7","polling","location","isSSL","protocol","xd","forceBase64","withCredentials","cookieJar","poll","_this8","total","doPoll","_this9","_this10","_this11","doWrite","uri","timestampRequests","timestampParam","sid","b64","request","Request","_this12","method","xhrStatus","_this13","pollXhr","_Emitter2","_super5","_this14","_this15","_a","extraHeaders","setDisableHeaderCheck","setRequestHeader","addCookies","requestTimeout","timeout","onreadystatechange","parseCookies","onLoad","document","index","requestsCount","requests","cleanup","fromError","abort","attachEvent","unloadHandler","terminationEvent","nextTick","isPromiseAvailable","WebSocket","MozWebSocket","usingBrowserWebSocket","defaultBinaryType","isReactNative","navigator","product","toLowerCase","WS","_Transport2","_super6","_this16","check","protocols","headers","ws","addEventListeners","_this17","onopen","autoUnref","_socket","unref","onclose","closeEvent","onmessage","ev","_this18","_loop5","lastPacket","WT","_Transport3","_super7","_this19","WebTransport","transport","transportOptions","closed","ready","createBidirectionalStream","stream","decoderStream","MAX_SAFE_INTEGER","reader","readable","pipeThrough","getReader","encoderStream","pipeTo","writer","getWriter","read","_ref2","_this20","_loop6","transports","websocket","webtransport","re","parts","replace","m","exec","host","authority","ipv6uri","pathNames","queryKey","regx","names","$0","$1","$2","Socket$1","_Emitter3","_super8","_this21","writeBuffer","prevBufferLen","agent","upgrade","rememberUpgrade","addTrailingSlash","rejectUnauthorized","perMessageDeflate","threshold","closeOnBeforeunload","upgrades","pingInterval","pingTimeout","pingTimeoutTimer","beforeunloadEventListener","offlineEventListener","createTransport","EIO","_this22","priorWebsocketSuccess","setTransport","_this23","onDrain","probe","_this24","failed","onTransportOpen","msg","upgrading","flush","freezeTransport","onTransportClose","onupgrade","to","resetPingTimeout","onHandshake","sendPacket","code","filterUpgrades","_this25","getWritablePackets","shouldCheckPayloadSize","payloadSize","compress","_this26","cleanupAndClose","waitForUpgrade","filteredUpgrades","loc","ipv6","href","withNativeArrayBuffer","withNativeBlob","withNativeFile","File","hasBinary","toJSON","isArray","deconstructPacket","buffers","packetData","pack","_deconstructPacket","attachments","placeholder","_placeholder","newData","reconstructPacket","_reconstructPacket","isIndexValid","RESERVED_EVENTS$1","PacketType","Encoder","replacer","EVENT","ACK","encodeAsBinary","BINARY_EVENT","BINARY_ACK","nsp","encodeAsString","stringify","deconstruction","unshift","isObject","Decoder","_Emitter4","_super9","reviver","_this27","reconstructor","decodeString","isBinaryEvent","BinaryReconstructor","takeBinaryData","buf","next","payload","tryParse","substr","isPayloadValid","finishedReconstruction","CONNECT","DISCONNECT","CONNECT_ERROR","reconPack","binData","subDestroy","RESERVED_EVENTS","freeze","connect","connect_error","disconnect","disconnecting","newListener","Socket","_Emitter5","_super10","io","_this28","connected","recovered","receiveBuffer","sendBuffer","_queue","_queueSeq","ids","acks","flags","auth","_opts","_autoConnect","subEvents","subs","onpacket","_readyState","_len2","_key2","_len3","_key3","retries","fromQueue","_addToQueue","ack","_registerAckCallback","isTransportWritable","engine","discardPacket","notifyOutgoingListeners","_this29","ackTimeout","_len4","_key4","emitWithAck","_this30","_len5","_key5","withErr","arg1","arg2","_this31","tryCount","pending","hasError","_len6","responseArgs","_key6","_drainQueue","force","_packet","_this32","_sendConnectPacket","_pid","pid","_lastOffset","sameNamespace","onconnect","onevent","onack","ondisconnect","message","emitEvent","_anyListeners","_iterator3","_createForOfIteratorHelper2","_step3","sent","_len7","_key7","emitBuffered","_this33","onAny","prependAny","offAny","listenersAny","onAnyOutgoing","_anyOutgoingListeners","prependAnyOutgoing","offAnyOutgoing","listenersAnyOutgoing","_iterator4","_step4","Backoff","ms","factor","jitter","attempts","duration","rand","random","deviation","reset","setMin","setMax","setJitter","Manager","_Emitter6","_super11","_this34","nsps","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","_parser","parser","encoder","decoder","autoConnect","_reconnection","_reconnectionAttempts","_reconnectionDelay","_randomizationFactor","_reconnectionDelayMax","_timeout","maybeReconnectOnOpen","_reconnecting","reconnect","_this35","skipReconnect","openSubDestroy","errorSub","onping","ondata","ondecoded","_this36","active","_destroy","_i24","_nsps","_close","_this37","delay","onreconnect","attempt","cache","lookup","parsed","newConnection","forceNew","multiplex","SIXTY_PER_SEC","LOOP_SLOW_THRESH","LOOP_SLOW_COUNT","Scheduler","period","nextExecTime","requestedDelay","delayCounter","nextTickChecker","callTick","stepPeriod","requestAnimationFrame","stepStartTime","delayTick","hurryTick","SyncStrategy","clientEngine","inputOptions","needFirstSync","syncStep","collectSync","requiredSyncs","SYNC_APPLIED","STEP_DRIFT_THRESHOLDS","onServerSync","MAX_LEAD","MAX_LAG","onEveryStep","clientReset","fullUpdate","lastSync","required","syncObjects","syncSteps","syncEvents","sEvent","objectInstance","eventName","eventCount","objCount","addNewObject","newObj","curObj","__proto__","verbose","_loop","requiredStep","applySync","_ret","rc","defaults$2","clientStepHold","localObjBending","remoteObjBending","reflect","InterpolateStrategy","_SyncStrategy","ignoreInputs","sync","_loop2","refreshRenderObject","_loop3","_Object$keys3","_i3","objEvents","defaults$1","syncsBufferLength","maxReEnactSteps","RTTEstimate","extrapolate","ExtrapolateStrategy","recentInputs","clientInputSave","inputEvent","cleanRecentInputs","lastServerStep","serverStep","localShadowObj","visible","clientStep","movement","_Object$keys4","_i4","_loop4","_Object$keys5","_i5","defaults","worldBufferLength","clientStepLag","FrameSyncStrategy","strategies","frameSync","Synchronizer","syncStrategy","MAX_UINT_16","Serializer","registeredClasses","customTypes","registerClass","addCustomType","customType","classObj","localByteOffset","objectClassId","getUint8","objectClass","readDataView","netSchemProp","setFloat32","setInt32","setInt16","setInt8","strLen","_localBufferOffset","serializedObj","_strLen","getFloat32","getInt32","getInt16","getInt8","deserializeData","_localBufferOffset2","items","itemCount","Int32Array","Int16Array","typeCanAssign","NetworkMonitor","server","gameName","getPrototypeOf","registerClient","queryIdCounter","RTTQueries","movingRTTAverage","movingRTTAverageFrame","movingFPSAverageSize","healthCheckRTTSample","onReceivedRTTQuery","setInterval","sendRTTQuery","healthCheckInterval","queryId","RTT","RTTAverage","registerPlayerOnServer","respondToRTTQuery","NetworkedEventFactory","seriazlier","networkedEvent","NetworkedEventCollection","NetworkTransmitter","registeredEvents","registerNetworkedEventFactory","networkedEventCollection","classHash","networkedEventPrototype","addNetworkedEvent","stagedNetworkedEvent","serializePayload","deserializePayload","clearPayload","GAME_UPS","STEP_DELAY_MSEC","STEP_HURRY_MSEC","ClientEngine","Renderer","scheduler","serverURL","networkTransmitter","networkMonitor","inboundMessages","outboundMessages","renderer","lastStepTime","correction","standaloneMode","configureSynchronization","delayInputCount","delayedInputs","syncOptions","synchronizer","connectSocket","matchMakerAnswer","playerData","worldData","roomData","matchmaker","stopped","resolved","alert","renderLoop","stop","lastTimestamp","draw","resolveGame","checkDrift","checkType","highestServerStep","thresholds","maxLead","maxLag","skipOneStep","handleInboundMessage","handleOutboundInput","applyDelayedInputs","doInputLocal","that","delayed","sendInput","_this3","command","syncData","_this4","syncHeader","find","oldStep","newStep","keyCodeTable","KeyboardControls","setupListeners","keyState","boundKeys","keyName","isDown","parameters","actionName","onKeyChange","bindKey","keyOptions","keyCode","lastKeyPressed","preventDefault","singleton","TIME_RESET_THRESHOLD","doReset","reportSlowFrameRate","runClientStep","getInstance","FRAME_HISTORY_SIZE","MAX_SLOW_FRAMES","networkedPhysics","CAMERA_OFFSET_VEC","THREE","Vector3","frameRateHistory","frameRateTest","chaseCameras","getElementsByClassName","cameraEl","frh","slowFrames","el","renderEl","setAttribute","object3D","camera","children","relativeCameraOffset","cameraOffset","applyMatrix4","matrixWorld","lookAt","setGlobals","AFrameRenderer","_Renderer","AFRAME","registerSystem","sceneElArray","getElementsByTagName","scene","renderObj","remove","Symbol","iterator","instance","Constructor","_defineProperties","_toPropertyKey","protoProps","staticProps","arg","_toPrimitive","hint","prim","toPrimitive","res","subClass","superClass","_setPrototypeOf","setPrototypeOf","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","NewTarget","Reflect","construct","ReferenceError","sham","Proxy","valueOf","receiver","_superPropBase","getOwnPropertyDescriptor","Wiggle","_DynamicObject","bodyParts","score","stat_foodPerGame","direction","bodyLength","Food","qsOptions","querystring","search","Lib","WiggleGameEngine","WiggleClientEngine","_ClientEngine","WiggleRenderer","params","URLSearchParams","searchParams","prop","classList","querySelector","disabled","className","clickEvent","currentTarget","mouseX","mouseY","updateMouseXY","sendMouseAngle","touches","pageX","pageY","player","clientWidth","zoom","clientHeight","dy","directionStop","innerHTML","ctx","canvas","game","createElement","innerWidth","innerHeight","insertBefore","getElementById","h","spaceHeight","spaceWidth","getContext","lineWidth","strokeStyle","fillStyle","clearRect","save","translate","scale","drawWiggle","drawFood","restore","playerColor","nonPlayerColor","isPlayer","drawCircle","headRadius","nextPos","bodyRadius","eye1","eyeAngle","eye2","eyeDist","eyeRadius","fontSize","font","textToFill","fillText","timeInt","parseInt","foodRadius","fill","beginPath","arc","stroke","closePath","drawBounds","moveTo","lineTo","_GameEngine","moveAll","moveDist","foodCount","eatDistance","collideDistance","startBodyLength","aiCount","hungerTick","xpPerBlock","xpPerFood","xpLevelConstant","randPos","stepInfo","pos","move","inputData"],"mappings":"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AAC16C,OAAO,CAAC;AAChD,IAAM4nC,YAAY,GAAG,IAAI+S,2EAAkB,CAAC10C,UAAU,EAAEjG,OAAO,CAAC;AAEhE4wB,QAAQ,CAACzI,gBAAgB,CAAC,kBAAkB,EAAE,UAAU3pB,CAAC,EAAE;EACzDopC,YAAY,CAAC1gC,KAAK,CAAC,CAAC;AACtB,CAAC,CAAC,C;;;;;;;AC/BW;AACb,sBAAsB,mBAAO,CAAC,CAAmB;AACjD,mBAAmB,mBAAO,CAAC,CAAe;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB,oBAAoB;;AAE1C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA,EAAE;AACF;AACA,EAAE;AACF;;;;;;;;AC5Ma;AACb;AACA;AACA;AACA,EAAE;AACF;;;;;;;;ACLA;AACA;AACA;AACA;AACA;;AAEa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH,kCAAkC;AAClC;AACA;AACA;;AAEA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,sBAAsB;AACtC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;ACzFA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,GAAG,IAAoD,oBAAoB,sDAAsD,KAAK,MAAM,yHAAyH,YAAY,0BAA0B,0BAA0B,gBAAgB,UAAU,UAAU,0CAA0C,gBAAgB,OAAC,OAAO,oBAAoB,8CAA8C,YAAY,YAAY,mCAAmC,iBAAiB,gBAAgB,sBAAsB,oBAAoB,0CAA0C,YAAY,WAAW,YAAY,SAAS,GAAG;AACztB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,CAAC,GAAG;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,kxCAAkxC;AACrxC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;;AAEA;AACA;AACA;AACA;;AAEA,sBAAsB,WAAW;AACjC,sBAAsB,WAAW;AACjC,sBAAsB,WAAW;AACjC,sBAAsB,WAAW;AACjC,sBAAsB,WAAW;AACjC,sBAAsB,WAAW;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,UAAU;AACtB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,UAAU;AACtB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;;AAEA,CAAC,EAAE,sCAAsC;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA,CAAC,GAAG;AACJ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA,uCAAuC,UAAU;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA;AACA;;AAEA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,MAAM;AAClB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,yGAAyG;AAC5G;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gBAAgB,WAAW;AAC3B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,WAAW,EAAE,wBAAwB,gBAAgB;AACvE,kBAAkB,WAAW,EAAE,wBAAwB,gBAAgB;AACvE,kBAAkB,WAAW,EAAE,wBAAwB,gBAAgB;AACvE,kBAAkB,WAAW,EAAE,wBAAwB,gBAAgB;AACvE,kBAAkB,WAAW,EAAE,wBAAwB,gBAAgB;AACvE,kBAAkB,WAAW,EAAE,wBAAwB,gBAAgB;;AAEvE;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,eAAe;AACvC,yBAAyB,eAAe;AACxC,0BAA0B,eAAe;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,6BAA6B,WAAW;AACxC,8BAA8B,WAAW;AACzC,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,gBAAgB;AAChC;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,SAAS;AACpC;AACA,4BAA4B,SAAS;AACrC;AACA,6BAA6B,SAAS;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,CAAC,EAAE,wDAAwD;AAC3D;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY,OAAO;AACnB,gBAAgB,OAAO;;AAEvB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,WAAW,MAAM;AACjB,YAAY;AACZ;AACA;AACA;;AAEA,kBAAkB,yBAAyB;AAC3C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC,EAAE,4BAA4B;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;;AAEA,CAAC,GAAG;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,cAAc;AAChC;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,2CAA2C,OAAO;AAClD;;AAEA;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAuC,mCAAmC;AAC1E;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,kBAAkB;AACnE,iDAAiD,kBAAkB;AACnE,iDAAiD,kBAAkB;AACnE,iDAAiD,kBAAkB;AACnE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,YAAY;AAClC,0BAA0B,YAAY;;AAEtC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;;AAEA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB,mCAAmC;AACtD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,sBAAsB,4CAA4C;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,yCAAyC,qCAAqC;AAC9E;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA,CAAC,EAAE,+LAA+L;AAClM;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,KAAK;AACpB;AACA;;AAEA;AACA,eAAe,KAAK;AACpB;AACA;;AAEA;AACA,eAAe,KAAK;AACpB;AACA;;AAEA;AACA,eAAe,KAAK;AACpB;AACA;;AAEA;AACA,eAAe,QAAQ;AACvB;AACA;;AAEA;AACA;AACA,eAAe,MAAM;AACrB;AACA;;AAEA;AACA;AACA,eAAe,KAAK;AACpB;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,kBAAkB;AACrB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,uBAAuB;AACvC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY;AACZ;AACA;AACA,2BAA2B,IAAI;AAC/B;AACA,wBAAwB,KAAK;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY;AACZ;AACA;AACA,2BAA2B,IAAI;AAC/B;AACA,wBAAwB,KAAK;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY;AACZ;AACA;AACA,2BAA2B,IAAI;AAC/B;AACA,wBAAwB,KAAK;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,YAAY,SAAS;AACrB;;AAEA,kBAAkB,OAAO;AACzB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,OAAO;AACnB,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,WAAW,MAAM;AACjB,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,YAAY;AACpC,wBAAwB,YAAY;;AAEpC;AACA;AACA;AACA,kBAAkB,qBAAqB;AACvC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC,EAAE,iDAAiD;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA,kBAAkB,mBAAmB;AACrC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA,CAAC,EAAE,wKAAwK;AAC3K;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;;AAEA;;AAEA,CAAC,EAAE,oBAAoB;AACvB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,oDAAoD;AACvD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;AACA;;AAEA;AACA,kBAAkB,mBAAmB;AACrC;AACA;;AAEA;AACA,kBAAkB,mBAAmB;AACrC;AACA;;AAEA;AACA,kBAAkB,wBAAwB;AAC1C;AACA;AACA,0BAA0B;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA,CAAC,EAAE,mLAAmL;AACtL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,mBAAmB;AACrC;AACA;;AAEA;AACA,kBAAkB,mBAAmB;AACrC;AACA;;AAEA;AACA,kBAAkB,mBAAmB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA,CAAC,EAAE,mLAAmL;AACtL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA,6BAA6B,UAAU;AACvC,6BAA6B,UAAU;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,gBAAgB;AAClC;AACA;;AAEA;AACA,kBAAkB,gBAAgB;AAClC;AACA;;AAEA;AACA,kBAAkB,gBAAgB;AAClC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,sEAAsE;AACzE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sDAAsD,sBAAsB;;AAE5E;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA,CAAC,EAAE,oDAAoD;AACvD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,2BAA2B;;AAE3B;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;AACA;;AAEA;AACA;;AAEA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;;AAGA,CAAC,EAAE,oDAAoD;AACvD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,gBAAgB;AAClC;AACA;;AAEA;AACA,kBAAkB,gBAAgB;AAClC;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAAgC,oDAAoD;AACpF,UAAU,6BAA6B;AACvC,gCAAgC,oDAAoD;AACpF,UAAU,6BAA6B;;AAEvC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY;AACZ;AACA;AACA;AACA;;AAEA,CAAC,EAAE,+CAA+C;AAClD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA,CAAC,EAAE,oDAAoD;AACvD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA,CAAC,EAAE,oDAAoD;AACvD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA,4BAA4B;;AAE5B;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA,CAAC,EAAE,oDAAoD;AACvD;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;;AAEA,CAAC,EAAE,oBAAoB;AACvB;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;;AAEA,CAAC,GAAG;AACJ;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,gBAAgB;AAC5B,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;;AAEA,CAAC,EAAE,YAAY;AACf;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,YAAY,KAAK;AACjB;AACA;AACA;AACA,gBAAgB,KAAK;AACrB,oBAAoB,KAAK;AACzB;AACA,wBAAwB,KAAK;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,YAAY,KAAK;AACjB;AACA;AACA;AACA;;AAEA;AACA,eAAe;AACf,eAAe;AACf;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA,YAAY,KAAK;AACjB,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,2BAA2B,OAAO;AAClC;AACA;AACA,wBAAwB;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,2BAA2B,OAAO;AAClC;AACA;AACA,oBAAoB;AACpB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,YAAY,KAAK;AACjB;AACA;AACA,gBAAgB,4BAA4B;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,YAAY,KAAK;AACjB;AACA;;AAEA;;AAEA;AACA,eAAe;AACf,eAAe;AACf;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA,YAAY,KAAK;AACjB,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,2BAA2B,OAAO;AAClC;AACA;AACA,wBAAwB;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,2BAA2B,OAAO;AAClC;AACA;AACA,oBAAoB;AACpB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;;AAEA;AACA;;AAEA,gBAAgB,OAAO;AACvB,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA,CAAC,EAAE,YAAY;AACf;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,uCAAuC;AACvC,oBAAoB;AACpB;AACA,8BAA8B,qEAAqE;AACnG;AACA;AACA,KAAK;AACL,kCAAkC;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,WAAW;AACtB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE;AACpE,yCAAyC;AACzC,iEAAiE;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,CAAC,EAAE,YAAY;AACf;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,KAAK;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,WAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,8BAA8B;AACjC;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc,KAAK;AACnB;AACA;;AAEA;AACA;AACA,cAAc,KAAK;AACnB;AACA;;AAEA;AACA;AACA,cAAc,KAAK;AACnB;AACA;;AAEA;AACA;AACA,cAAc,KAAK;AACnB;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,OAAO;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA,CAAC,EAAE,YAAY;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,KAAK;AAChB;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;;AAEA;;;AAGA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;;;AAIA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,cAAc;AAC1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA,SAAS;AACT,0BAA0B;AAC1B,SAAS;AACT,yBAAyB;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,YAAY,KAAK;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,8KAA8K;AACjL;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA,kBAAkB,MAAM;AACxB;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mBAAmB,eAAe;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mBAAmB,eAAe;AAClC;AACA;;AAEA;;AAEA;AACA;AACA,mBAAmB,eAAe;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,eAAe,eAAe;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8CAA8C;AAC9C,oCAAoC;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,kBAAkB;AACxC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA,iGAAiG;AACjG;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY;AACZ;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,mBAAmB,eAAe;AAClC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,eAAe;AAClC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,mBAAmB,eAAe;AAClC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,mDAAmD;;AAEnD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,eAAe;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,eAAe;AAClC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,CAAC,EAAE,qIAAqI;AACxI;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA,mBAAmB,mBAAmB;AACtC;AACA;;AAEA,mBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA,mBAAmB,wBAAwB;AAC3C;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA,mBAAmB,mBAAmB;AACtC;AACA;;AAEA,mBAAmB,wBAAwB;AAC3C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,2GAA2G;AAC9G;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB,kCAAkC;AAClC;;AAEA;AACA;AACA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA,oBAAoB,kBAAkB;;AAEtC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;;AAEvB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,kBAAkB;;AAEtC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,sIAAsI;AACzI;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,kBAAkB;AACrB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,cAAc;AAChC;AACA;;AAEA;AACA;AACA,kBAAkB,UAAU;AAC5B;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,6FAA6F;AAChG;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,WAAW;AACtB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA,CAAC,EAAE,uDAAuD;AAC1D;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA,4BAA4B;AAC5B;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA,+BAA+B;;AAE/B;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,gBAAgB,oBAAoB;AACpC;AACA;AACA,sBAAsB,mBAAmB;AACzC;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,qBAAqB;;AAErC;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,iBAAiB;AAC5B,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,oBAAoB,aAAa;AACjC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA,sBAAsB,+BAA+B;;AAErD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,oBAAoB,YAAY;;AAEhC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,sBAAsB,+BAA+B;AACrD;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,iCAAiC;;AAElD;AACA;;AAEA,qBAAqB,iCAAiC;;AAEtD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,iBAAiB;AAC5B,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,OAAO;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC,oBAAoB,yBAAyB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,iBAAiB;AAClC,6DAA6D;AAC7D,yJAAyJ;AACzJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,mBAAmB,eAAe;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,KAAK;AACzB;AACA;AACA;AACA;AACA,oBAAoB,2BAA2B;AAC/C;AACA;AACA;AACA;AACA;AACA,oBAAoB,2BAA2B;AAC/C;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA,oBAAoB,KAAK;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA,mCAAmC;;AAEnC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,kBAAkB,OAAO;AACzB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,8EAA8E;AACjF;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT,0CAA0C;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,qBAAqB;AACrC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,CAAC,EAAE,+EAA+E;AAClF;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,qBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB;AACA;AACA;;AAEA;AACA;AACA,4BAA4B;AAC5B,sBAAsB,YAAY;AAClC,0BAA0B,YAAY;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,MAAM;AAClB,YAAY,QAAQ;AACpB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,mBAAmB,QAAQ;AAC3B,mBAAmB,QAAQ;AAC3B,kCAAkC,sBAAsB;AACxD,qCAAqC,yBAAyB;AAC9D;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,uCAAuC;AACvC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B;AAC5B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,2EAA2E;AAC9E;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,+BAA+B;AAClC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B;AAC5B;;AAEA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA,2BAA2B,eAAe;AAC1C,2BAA2B,eAAe;AAC1C,2BAA2B,eAAe;;AAE1C,4BAA4B,eAAe;AAC3C,4BAA4B,eAAe;AAC3C,4BAA4B,eAAe;AAC3C;;AAEA;AACA;AACA;AACA,CAAC,EAAE,+BAA+B;AAClC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,CAAC,EAAE,iFAAiF;AACpF;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,+BAA+B;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6BAA6B;AAChD;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,MAAM;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,6BAA6B;AAC7C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAA6B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,SAAS;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,qBAAqB;AACzC,wBAAwB,sBAAsB;AAC9C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,qBAAqB;AACzC,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,CAAC,EAAE,yHAAyH;AAC5H;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,gBAAgB;;AAEnC;AACA;;AAEA,wBAAwB,SAAS;;AAEjC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA,iFAAiF;;AAEjF;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,CAAC,EAAE,wDAAwD;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,CAAC,GAAG;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC;AACjC,oCAAoC;AACpC,+BAA+B;AAC/B,+BAA+B;AAC/B,oCAAoC,WAAW;;AAE/C;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,aAAa;AAChC;AACA;;AAEA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,oBAAoB,UAAU;AAC9B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,CAAC,EAAE,6EAA6E;AAChF;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,gBAAgB,SAAS;AACzB,gBAAgB,YAAY;AAC5B;AACA;AACA,6CAA6C,sBAAsB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,gBAAgB,SAAS;AACzB,gBAAgB;AAChB;AACA;AACA,6CAA6C,cAAc;AAC3D;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,gBAAgB,SAAS;AACzB,gBAAgB,YAAY;AAC5B;AACA;AACA,6CAA6C,aAAa;AAC1D;AACA,6CAA6C,aAAa;AAC1D;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,gBAAgB,OAAO;AACvB,gBAAgB,YAAY;AAC5B;AACA;AACA,6CAA6C,aAAa;AAC1D;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,GAAG;AACJ;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,WAAW;AAC7B;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;;AAEA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,wBAAwB,iBAAiB,8BAA8B,GAAG;AAC1E,wBAAwB,iBAAiB,8BAA8B,GAAG;AAC1E,wBAAwB,iBAAiB,8BAA8B,GAAG;AAC1E,wBAAwB,iBAAiB,8BAA8B,GAAG;AAC1E,wBAAwB,iBAAiB,8BAA8B,GAAG;AAC1E,wBAAwB,iBAAiB,8BAA8B,GAAG;AAC1E,wBAAwB,iBAAiB,8BAA8B,GAAG;AAC1E,wBAAwB,iBAAiB,8BAA8B,GAAG;AAC1E;;AAEA;AACA;;AAEA;;AAEA,mBAAmB,SAAS;AAC5B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA,gDAAgD,SAAS;AACzD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY,IAAI;AAChB,YAAY,UAAU;AACtB,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,wCAAwC;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;;AAEA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA,CAAC,GAAG;AACJ;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,GAAG;AACJ;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,CAAC,GAAG;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA,CAAC,EAAE,8BAA8B;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA,oDAAoD;AACpD,kEAAkE;AAClE;AACA,SAAS;AACT,oDAAoD;AACpD,kEAAkE;AAClE;AACA;AACA;;AAEA;AACA,sDAAsD;AACtD,sDAAsD;AACtD,sBAAsB;AACtB;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA6B,OAAO;;AAEpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;;AAEA,2BAA2B,sBAAsB;;AAEjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAmC;;AAEnC,gBAAgB,oCAAoC;;AAEpD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,8BAA8B;;AAE9B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,qCAAqC,wBAAwB;;AAElF;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC,uBAAuB,OAAO;;AAE9B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,oBAAoB;AACpC,uBAAuB,OAAO;;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAsC,SAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB;AACtB,qBAAqB;;AAErB;AACA;;AAEA;AACA;AACA;AACA,8DAA8D;;AAE9D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,+BAA+B;AACrE;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,oBAAoB,iBAAiB;AACrC,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD,uDAAuD;;AAEvD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gBAAgB,kBAAkB;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC,6BAA6B;AAClE;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,+BAA+B;AAC/B,4CAA4C,YAAY;AACxD;AACA;AACA;AACA;AACA;;AAEA,yDAAyD;AACzD;AACA;;AAEA,2CAA2C;AAC3C,yCAAyC;;AAEzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,yDAAyD,gBAAgB;AACzE;AACA;;AAEA,uBAAuB;AACvB,aAAa;AACb;AACA,4BAA4B,iBAAiB;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,iEAAiE,gBAAgB;AACjF;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qDAAqD,gBAAgB;AACrE;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;;AAE7C;AACA;AACA,kBAAkB,mCAAmC;;AAErD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD;;AAEhD,mCAAmC;;AAEnC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,2BAA2B;;AAEjD;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB,kBAAkB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,wBAAwB;;AAExB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,wBAAwB;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C,YAAY;;AAEvD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gDAAgD;AAChD,4BAA4B;;AAE5B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,WAAW;AAC7B,kBAAkB,WAAW;AAC7B,kBAAkB,WAAW;AAC7B,kBAAkB,WAAW;AAC7B,6BAA6B,yBAAyB;AACtD,6BAA6B,yBAAyB;AACtD,gCAAgC,4BAA4B;AAC5D,gCAAgC,4BAA4B;;AAE5D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,sBAAsB,WAAW;AACjC,0BAA0B,WAAW;;AAErC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,WAAW;AAC7B,kBAAkB,WAAW;AAC7B,kBAAkB,WAAW;AAC7B,kBAAkB,WAAW;AAC7B,6BAA6B,yBAAyB;AACtD,6BAA6B,yBAAyB;AACtD,gCAAgC,4BAA4B;AAC5D,gCAAgC,4BAA4B;;AAE5D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,WAAW;AACjC,0BAA0B,WAAW;;AAErC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,2BAA2B,qBAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,mRAAmR;AACtR;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,kBAAkB,qBAAqB;AACvC,WAAW;AACX;AACA;;AAEA;AACA;AACA,kBAAkB,qBAAqB;AACvC,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA,mGAAmG,kCAAkC;;AAErI;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,YAAY,gBAAgB;AAC5B;AACA;AACA,sDAAsD;AACtD;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,uBAAuB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,SAAS;AACrB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,cAAc;AAC1B,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,cAAc;AAC1B,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;;AAE9B;AACA,oBAAoB,mBAAmB;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kCAAkC;;AAElC;;AAEA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,qBAAqB;AACzC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA,gCAAgC,gBAAgB;AAChD,+BAA+B,eAAe;AAC9C,+BAA+B,yCAAyC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAY,OAAO;AACnB;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oDAAoD,iBAAiB;AACrE;AACA;;AAEA;AACA,oBAAoB,oCAAoC;AACxD,kBAAkB;AAClB;AACA;AACA,oBAAoB,yDAAyD;;AAE7E;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA,oCAAoC,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,oBAAoB,oCAAoC;AACxD;AACA;;AAEA,YAAY,kBAAkB;AAC9B;AACA;AACA;;AAEA;AACA;AACA,YAAY,2BAA2B;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,mCAAmC;AACtD;AACA;;AAEA;AACA,gBAAgB,eAAe;;AAE/B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA,4CAA4C,SAAS;AACrD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY,OAAO;AACnB;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAY,OAAO;AACnB;AACA;AACA;AACA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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","file":"bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap d9fc9b096a7665b2cc07","/**\n * This class implements a singleton game world instance, created by Lance.\n * It represents an instance of the game world, and includes all the game objects.\n * It is the state of the game.\n */\nclass GameWorld {\n /**\n * Constructor of the World instance. Invoked by Lance on startup.\n *\n * @hideconstructor\n */\n constructor() {\n this.stepCount = 0;\n this.objects = {};\n this.playerCount = 0;\n this.idCount = 0;\n }\n\n /**\n * Gets a new, fresh and unused id that can be used for a new object\n * @private\n * @return {Number} the new id\n */\n getNewId() {\n let possibleId = this.idCount;\n // find a free id\n while (possibleId in this.objects) possibleId++;\n\n this.idCount = possibleId + 1;\n return possibleId;\n }\n\n /**\n * Returns all the game world objects which match a criteria\n * @param {Object} query The query object\n * @param {Object} [query.id] object id\n * @param {Object} [query.playerId] player id\n * @param {Object} [query.roomName] roomName\n * @param {Object} [query.AI] Is AI. {AI: true} or {AI: false}\n * @param {Class} [query.instanceType] matches whether `object instanceof instanceType`\n * @param {Array} [query.components] An array of component names\n * @param {Boolean} [query.returnSingle] Return the first object matched\n * @return {Array | Object} All game objects which match all the query parameters, or the first match if returnSingle was specified\n */\n queryObjects(query) {\n let queriedObjects = [];\n\n // todo this is currently a somewhat inefficient implementation for API testing purposes.\n // It should be implemented with cached dictionaries like in nano-ecs\n this.forEachObject((id, object) => {\n let conditions = [];\n\n // object id condition\n conditions.push(!(\"id\" in query) || (query.id !== null && object.id === query.id));\n\n // player id condition\n conditions.push(!(\"playerId\" in query) || (query.playerId !== null && object.playerId === query.playerId));\n\n // roomName condition\n conditions.push(!(\"roomName\" in query) || (query.roomName !== null && object.roomName === query.roomName));\n\n // roomName condition\n conditions.push(!(\"AI\" in query) || (query.AI !== null && !!object.AI === !!query.AI));\n\n // instance type conditio\n conditions.push(\n !(\"instanceType\" in query) || (query.instanceType !== null && object instanceof query.instanceType),\n );\n\n // components conditions\n if (\"components\" in query) {\n query.components.forEach((componentClass) => {\n conditions.push(object.hasComponent(componentClass));\n });\n }\n\n // all conditions are true, object is qualified for the query\n if (conditions.every((value) => value)) {\n queriedObjects.push(object);\n if (query.returnSingle) return false;\n }\n });\n\n // return a single object or null\n if (query.returnSingle) {\n return queriedObjects.length > 0 ? queriedObjects[0] : null;\n }\n\n return queriedObjects;\n }\n\n /**\n * Returns The first game object encountered which matches a criteria.\n * Syntactic sugar for {@link queryObjects} with `returnSingle: true`\n * @param {Object} query See queryObjects\n * @return {Object} The game object, if found\n */\n queryObject(query) {\n return this.queryObjects(\n Object.assign(query, {\n returnSingle: true,\n }),\n );\n }\n\n /**\n * Add an object to the game world\n * @private\n * @param {Object} object object to add\n */\n addObject(object) {\n this.objects[object.id] = object;\n }\n\n /**\n * Remove an object from the game world\n * @private\n * @param {number} id id of the object to remove\n */\n removeObject(id) {\n delete this.objects[id];\n }\n\n /**\n * World object iterator.\n * Invoke callback(objId, obj) for each object\n *\n * @param {function} callback function receives id and object. If callback returns false, the iteration will cease\n */\n forEachObject(callback) {\n for (let id of Object.keys(this.objects)) {\n let returnValue = callback(id, this.objects[id]); // TODO: the key should be Number(id)\n if (returnValue === false) break;\n }\n }\n}\n\nexport default GameWorld;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/GameWorld.js","\"use strict\";\n\n// ES3 safe\nvar _undefined = void 0;\n\nmodule.exports = function (value) { return value !== _undefined && value !== null; };\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/type/value/is.js","\"use strict\";\n\nvar isValue = require(\"../value/is\");\n\n// prettier-ignore\nvar possibleTypes = { \"object\": true, \"function\": true, \"undefined\": true /* document.all */ };\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) return false;\n\treturn hasOwnProperty.call(possibleTypes, typeof value);\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/type/object/is.js","\"use strict\";\n\nvar isObject = require(\"../object/is\");\n\nmodule.exports = function (value) {\n\tif (!isObject(value)) return false;\n\ttry {\n\t\tif (!value.constructor) return false;\n\t\treturn value.constructor.prototype === value;\n\t} catch (error) {\n\t\treturn false;\n\t}\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/type/prototype/is.js","\"use strict\";\n\nvar isPrototype = require(\"../prototype/is\");\n\nmodule.exports = function (value) {\n\tif (typeof value !== \"function\") return false;\n\n\tif (!hasOwnProperty.call(value, \"length\")) return false;\n\n\ttry {\n\t\tif (typeof value.length !== \"number\") return false;\n\t\tif (typeof value.call !== \"function\") return false;\n\t\tif (typeof value.apply !== \"function\") return false;\n\t} catch (error) {\n\t\treturn false;\n\t}\n\n\treturn !isPrototype(value);\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/type/function/is.js","\"use strict\";\n\nvar isFunction = require(\"../function/is\");\n\nvar classRe = /^\\s*class[\\s{/}]/, functionToString = Function.prototype.toString;\n\nmodule.exports = function (value) {\n\tif (!isFunction(value)) return false;\n\tif (classRe.test(functionToString.call(value))) return false;\n\treturn true;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/type/plain-function/is.js","\"use strict\";\n\nmodule.exports = function () {\n\tvar assign = Object.assign, obj;\n\tif (typeof assign !== \"function\") return false;\n\tobj = { foo: \"raz\" };\n\tassign(obj, { bar: \"dwa\" }, { trzy: \"trzy\" });\n\treturn obj.foo + obj.bar + obj.trzy === \"razdwatrzy\";\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/object/assign/is-implemented.js","\"use strict\";\n\nmodule.exports = function () {\n\ttry {\n\t\tObject.keys(\"primitive\");\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/object/keys/is-implemented.js","\"use strict\";\n\n// eslint-disable-next-line no-empty-function\nmodule.exports = function () {};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/function/noop.js","\"use strict\";\n\nvar _undefined = require(\"../function/noop\")(); // Support ES3 engines\n\nmodule.exports = function (val) { return val !== _undefined && val !== null; };\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/object/is-value.js","\"use strict\";\n\nvar isValue = require(\"../is-value\");\n\nvar keys = Object.keys;\n\nmodule.exports = function (object) { return keys(isValue(object) ? Object(object) : object); };\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/object/keys/shim.js","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? Object.keys : require(\"./shim\");\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/object/keys/index.js","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) throw new TypeError(\"Cannot use null or undefined\");\n\treturn value;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/object/valid-value.js","\"use strict\";\n\nvar keys = require(\"../keys\")\n , value = require(\"../valid-value\")\n , max = Math.max;\n\nmodule.exports = function (dest, src /*, …srcn*/) {\n\tvar error, i, length = max(arguments.length, 2), assign;\n\tdest = Object(value(dest));\n\tassign = function (key) {\n\t\ttry {\n\t\t\tdest[key] = src[key];\n\t\t} catch (e) {\n\t\t\tif (!error) error = e;\n\t\t}\n\t};\n\tfor (i = 1; i < length; ++i) {\n\t\tsrc = arguments[i];\n\t\tkeys(src).forEach(assign);\n\t}\n\tif (error !== undefined) throw error;\n\treturn dest;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/object/assign/shim.js","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? Object.assign : require(\"./shim\");\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/object/assign/index.js","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nvar forEach = Array.prototype.forEach, create = Object.create;\n\nvar process = function (src, obj) {\n\tvar key;\n\tfor (key in src) obj[key] = src[key];\n};\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function (opts1 /*, …options*/) {\n\tvar result = create(null);\n\tforEach.call(arguments, function (options) {\n\t\tif (!isValue(options)) return;\n\t\tprocess(Object(options), result);\n\t});\n\treturn result;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/object/normalize-options.js","\"use strict\";\n\nvar str = \"razdwatrzy\";\n\nmodule.exports = function () {\n\tif (typeof str.contains !== \"function\") return false;\n\treturn str.contains(\"dwa\") === true && str.contains(\"foo\") === false;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/string/#/contains/is-implemented.js","\"use strict\";\n\nvar indexOf = String.prototype.indexOf;\n\nmodule.exports = function (searchString /*, position*/) {\n\treturn indexOf.call(this, searchString, arguments[1]) > -1;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/string/#/contains/shim.js","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? String.prototype.contains : require(\"./shim\");\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/string/#/contains/index.js","\"use strict\";\n\nvar isValue = require(\"type/value/is\")\n , isPlainFunction = require(\"type/plain-function/is\")\n , assign = require(\"es5-ext/object/assign\")\n , normalizeOpts = require(\"es5-ext/object/normalize-options\")\n , contains = require(\"es5-ext/string/#/contains\");\n\nvar d = (module.exports = function (dscr, value/*, options*/) {\n\tvar c, e, w, options, desc;\n\tif (arguments.length < 2 || typeof dscr !== \"string\") {\n\t\toptions = value;\n\t\tvalue = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[2];\n\t}\n\tif (isValue(dscr)) {\n\t\tc = contains.call(dscr, \"c\");\n\t\te = contains.call(dscr, \"e\");\n\t\tw = contains.call(dscr, \"w\");\n\t} else {\n\t\tc = w = true;\n\t\te = false;\n\t}\n\n\tdesc = { value: value, configurable: c, enumerable: e, writable: w };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n});\n\nd.gs = function (dscr, get, set/*, options*/) {\n\tvar c, e, options, desc;\n\tif (typeof dscr !== \"string\") {\n\t\toptions = set;\n\t\tset = get;\n\t\tget = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[3];\n\t}\n\tif (!isValue(get)) {\n\t\tget = undefined;\n\t} else if (!isPlainFunction(get)) {\n\t\toptions = get;\n\t\tget = set = undefined;\n\t} else if (!isValue(set)) {\n\t\tset = undefined;\n\t} else if (!isPlainFunction(set)) {\n\t\toptions = set;\n\t\tset = undefined;\n\t}\n\tif (isValue(dscr)) {\n\t\tc = contains.call(dscr, \"c\");\n\t\te = contains.call(dscr, \"e\");\n\t} else {\n\t\tc = true;\n\t\te = false;\n\t}\n\n\tdesc = { get: get, set: set, configurable: c, enumerable: e };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/d/index.js","\"use strict\";\n\nmodule.exports = function (fn) {\n\tif (typeof fn !== \"function\") throw new TypeError(fn + \" is not a function\");\n\treturn fn;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/object/valid-callable.js","'use strict';\n\nvar d = require('d')\n , callable = require('es5-ext/object/valid-callable')\n\n , apply = Function.prototype.apply, call = Function.prototype.call\n , create = Object.create, defineProperty = Object.defineProperty\n , defineProperties = Object.defineProperties\n , hasOwnProperty = Object.prototype.hasOwnProperty\n , descriptor = { configurable: true, enumerable: false, writable: true }\n\n , on, once, off, emit, methods, descriptors, base;\n\non = function (type, listener) {\n\tvar data;\n\n\tcallable(listener);\n\n\tif (!hasOwnProperty.call(this, '__ee__')) {\n\t\tdata = descriptor.value = create(null);\n\t\tdefineProperty(this, '__ee__', descriptor);\n\t\tdescriptor.value = null;\n\t} else {\n\t\tdata = this.__ee__;\n\t}\n\tif (!data[type]) data[type] = listener;\n\telse if (typeof data[type] === 'object') data[type].push(listener);\n\telse data[type] = [data[type], listener];\n\n\treturn this;\n};\n\nonce = function (type, listener) {\n\tvar once, self;\n\n\tcallable(listener);\n\tself = this;\n\ton.call(this, type, once = function () {\n\t\toff.call(self, type, once);\n\t\tapply.call(listener, this, arguments);\n\t});\n\n\tonce.__eeOnceListener__ = listener;\n\treturn this;\n};\n\noff = function (type, listener) {\n\tvar data, listeners, candidate, i;\n\n\tcallable(listener);\n\n\tif (!hasOwnProperty.call(this, '__ee__')) return this;\n\tdata = this.__ee__;\n\tif (!data[type]) return this;\n\tlisteners = data[type];\n\n\tif (typeof listeners === 'object') {\n\t\tfor (i = 0; (candidate = listeners[i]); ++i) {\n\t\t\tif ((candidate === listener) ||\n\t\t\t\t\t(candidate.__eeOnceListener__ === listener)) {\n\t\t\t\tif (listeners.length === 2) data[type] = listeners[i ? 0 : 1];\n\t\t\t\telse listeners.splice(i, 1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif ((listeners === listener) ||\n\t\t\t\t(listeners.__eeOnceListener__ === listener)) {\n\t\t\tdelete data[type];\n\t\t}\n\t}\n\n\treturn this;\n};\n\nemit = function (type) {\n\tvar i, l, listener, listeners, args;\n\n\tif (!hasOwnProperty.call(this, '__ee__')) return;\n\tlisteners = this.__ee__[type];\n\tif (!listeners) return;\n\n\tif (typeof listeners === 'object') {\n\t\tl = arguments.length;\n\t\targs = new Array(l - 1);\n\t\tfor (i = 1; i < l; ++i) args[i - 1] = arguments[i];\n\n\t\tlisteners = listeners.slice();\n\t\tfor (i = 0; (listener = listeners[i]); ++i) {\n\t\t\tapply.call(listener, this, args);\n\t\t}\n\t} else {\n\t\tswitch (arguments.length) {\n\t\tcase 1:\n\t\t\tcall.call(listeners, this);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tcall.call(listeners, this, arguments[1]);\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tcall.call(listeners, this, arguments[1], arguments[2]);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tl = arguments.length;\n\t\t\targs = new Array(l - 1);\n\t\t\tfor (i = 1; i < l; ++i) {\n\t\t\t\targs[i - 1] = arguments[i];\n\t\t\t}\n\t\t\tapply.call(listeners, this, args);\n\t\t}\n\t}\n};\n\nmethods = {\n\ton: on,\n\tonce: once,\n\toff: off,\n\temit: emit\n};\n\ndescriptors = {\n\ton: d(on),\n\tonce: d(once),\n\toff: d(off),\n\temit: d(emit)\n};\n\nbase = defineProperties({}, descriptors);\n\nmodule.exports = exports = function (o) {\n\treturn (o == null) ? create(base) : defineProperties(Object(o), descriptors);\n};\nexports.methods = methods;\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/event-emitter/index.js","// TODO: needs documentation\n// I think the API could be simpler\n// - Timer.run(waitSteps, cb)\n// - Timer.repeat(waitSteps, count, cb) // count=null=>forever\n// - Timer.cancel(cb)\nexport default class Timer {\n\n constructor() {\n this.currentTime = 0;\n this.isActive = false;\n this.idCounter = 0;\n\n this.events = {};\n }\n\n play() {\n this.isActive = true;\n }\n\n tick() {\n let event;\n let eventId;\n\n if (this.isActive) {\n this.currentTime++;\n\n for (eventId in this.events) {\n event = this.events[eventId];\n if (event) {\n\n if (event.type == 'repeat') {\n if ((this.currentTime - event.startOffset) % event.time == 0) {\n event.callback.apply(event.thisContext, event.args);\n }\n }\n if (event.type == 'single') {\n if ((this.currentTime - event.startOffset) % event.time == 0) {\n event.callback.apply(event.thisContext, event.args);\n event.destroy();\n }\n }\n\n }\n\n }\n }\n }\n\n destroyEvent(eventId) {\n delete this.events[eventId];\n }\n\n loop(time, callback) {\n let timerEvent = new TimerEvent(this,\n TimerEvent.TYPES.repeat,\n time,\n callback\n );\n\n this.events[timerEvent.id] = timerEvent;\n\n return timerEvent;\n }\n\n add(time, callback, thisContext, args) {\n let timerEvent = new TimerEvent(this,\n TimerEvent.TYPES.single,\n time,\n callback,\n thisContext,\n args\n );\n\n this.events[timerEvent.id] = timerEvent;\n return timerEvent;\n }\n\n // todo implement timer delete all events\n\n destroy(id) {\n delete this.events[id];\n }\n}\n\n// timer event\nclass TimerEvent {\n constructor(timer, type, time, callback, thisContext, args) {\n this.id = ++timer.idCounter;\n this.timer = timer;\n this.type = type;\n this.time = time;\n this.callback = callback;\n this.startOffset = timer.currentTime;\n this.thisContext = thisContext;\n this.args = args;\n\n this.destroy = function() {\n this.timer.destroy(this.id);\n };\n }\n}\n\nTimerEvent.TYPES = {\n repeat: 'repeat',\n single: 'single'\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../src/game/Timer.js","/**\n * Tracing Services.\n * Use the trace functions to trace game state. Turn on tracing by\n * specifying the minimum trace level which should be recorded. For\n * example, setting traceLevel to Trace.TRACE_INFO will cause info,\n * warn, and error traces to be recorded.\n */\nclass Trace {\n\n constructor(options) {\n\n this.options = Object.assign({\n traceLevel: this.TRACE_DEBUG\n }, options);\n\n this.traceBuffer = [];\n this.step = 'initializing';\n\n // syntactic sugar functions\n this.error = this.trace.bind(this, Trace.TRACE_ERROR);\n this.warn = this.trace.bind(this, Trace.TRACE_WARN);\n this.info = this.trace.bind(this, Trace.TRACE_INFO);\n this.debug = this.trace.bind(this, Trace.TRACE_DEBUG);\n this.trace = this.trace.bind(this, Trace.TRACE_ALL);\n }\n\n /**\n * Include all trace levels.\n * @memberof Trace\n * @member {Number} TRACE_ALL\n */\n static get TRACE_ALL() { return 0; }\n\n /**\n * Include debug traces and higher.\n * @memberof Trace\n * @member {Number} TRACE_DEBUG\n */\n static get TRACE_DEBUG() { return 1; }\n\n /**\n * Include info traces and higher.\n * @memberof Trace\n * @member {Number} TRACE_INFO\n */\n static get TRACE_INFO() { return 2; }\n\n /**\n * Include warn traces and higher.\n * @memberof Trace\n * @member {Number} TRACE_WARN\n */\n static get TRACE_WARN() { return 3; }\n\n /**\n * Include error traces and higher.\n * @memberof Trace\n * @member {Number} TRACE_ERROR\n */\n static get TRACE_ERROR() { return 4; }\n\n /**\n * Disable all tracing.\n * @memberof Trace\n * @member {Number} TRACE_NONE\n */\n static get TRACE_NONE() { return 1000; }\n\n trace(level, dataCB) {\n\n // all traces must be functions which return strings\n if (typeof dataCB !== 'function') {\n throw new Error(`Lance trace was called but instead of passing a function, it received a [${typeof dataCB}]`);\n }\n\n if (level < this.options.traceLevel)\n return;\n\n this.traceBuffer.push({ data: dataCB(), level, step: this.step, time: new Date() });\n }\n\n rotate() {\n let buffer = this.traceBuffer;\n this.traceBuffer = [];\n return buffer;\n }\n\n get length() {\n return this.traceBuffer.length;\n }\n\n setStep(s) {\n this.step = s;\n }\n}\n\nexport default Trace;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/lib/Trace.js","import GameWorld from './GameWorld';\nimport EventEmitter from 'event-emitter';\nimport Timer from './game/Timer';\nimport Trace from './lib/Trace';\n\n/**\n * The GameEngine contains the game logic. Extend this class\n * to implement game mechanics. The GameEngine derived\n * instance runs once on the server, where the final decisions\n * are always taken, and one instance will run on each client as well,\n * where the client emulates what it expects to be happening\n * on the server.\n *\n * The game engine's logic must listen to user inputs and\n * act on these inputs to change the game state. For example,\n * the game engine listens to controller/keyboard inputs to infer\n * movement for the player/ship/first-person. The game engine listens\n * to clicks, button-presses to infer firing, etc..\n *\n * Note that the game engine runs on both the server and on the\n * clients - but the server decisions always have the final say,\n * and therefore clients must resolve server updates which conflict\n * with client-side predictions.\n */\nclass GameEngine {\n\n /**\n * Create a game engine instance. This needs to happen\n * once on the server, and once on each client.\n *\n * @param {Object} options - options object\n * @param {Number} options.traceLevel - the trace level.\n */\n constructor(options) {\n\n // place the game engine in the LANCE globals\n const isServerSide = (typeof window === 'undefined');\n const glob = isServerSide ? global : window;\n glob.LANCE = { gameEngine: this };\n\n // set options\n const defaultOpts = { traceLevel: Trace.TRACE_NONE };\n if (!isServerSide) defaultOpts.clientIDSpace = 1000000;\n this.options = Object.assign(defaultOpts, options);\n\n /**\n * client's player ID, as a string. If running on the client, this is set at runtime by the clientEngine\n * @member {String}\n */\n this.playerId = NaN;\n\n // set up event emitting and interface\n let eventEmitter = this.options.eventEmitter;\n if (typeof eventEmitter === 'undefined')\n eventEmitter = new EventEmitter();\n\n /**\n * Register a handler for an event\n *\n * @method on\n * @memberof GameEngine\n * @instance\n * @param {String} eventName - name of the event\n * @param {Function} eventHandler - handler function\n */\n this.on = eventEmitter.on;\n\n /**\n * Register a handler for an event, called just once (if at all)\n *\n * @method once\n * @memberof GameEngine\n * @instance\n * @param {String} eventName - name of the event\n * @param {Function} eventHandler - handler function\n */\n this.once = eventEmitter.once;\n\n /**\n * Remove a handler\n *\n * @method removeListener\n * @memberof GameEngine\n * @instance\n * @param {String} eventName - name of the event\n * @param {Function} eventHandler - handler function\n */\n this.removeListener = eventEmitter.off;\n this.off = eventEmitter.off;\n\n this.emit = eventEmitter.emit;\n\n // set up trace\n this.trace = new Trace({ traceLevel: this.options.traceLevel });\n }\n\n findLocalShadow(serverObj) {\n\n for (let localId of Object.keys(this.world.objects)) {\n if (Number(localId) < this.options.clientIDSpace) continue;\n let localObj = this.world.objects[localId];\n if (localObj.hasOwnProperty('inputId') && localObj.inputId === serverObj.inputId)\n return localObj;\n }\n\n return null;\n }\n\n initWorld(worldSettings) {\n\n this.world = new GameWorld();\n\n // on the client we have a different ID space\n if (this.options.clientIDSpace) {\n this.world.idCount = this.options.clientIDSpace;\n }\n\n /**\n * The worldSettings defines the game world constants, such\n * as width, height, depth, etc. such that all other classes\n * can reference these values.\n * @member {Object} worldSettings\n * @memberof GameEngine\n */\n this.worldSettings = Object.assign({}, worldSettings);\n }\n\n /**\n * Start the game. This method runs on both server\n * and client. Extending the start method is useful\n * for setting up the game's worldSettings attribute,\n * and registering methods on the event handler.\n */\n start() {\n this.trace.info(() => '========== game engine started ==========');\n this.initWorld();\n\n // create the default timer\n this.timer = new Timer();\n this.timer.play();\n this.on('postStep', (step, isReenact) => {\n if (!isReenact) this.timer.tick();\n });\n\n this.emit('start', { timestamp: (new Date()).getTime() });\n }\n\n /**\n * Single game step.\n *\n * @param {Boolean} isReenact - is this step a re-enactment of the past.\n * @param {Number} t - the current time (optional)\n * @param {Number} dt - elapsed time since last step was called. (optional)\n * @param {Boolean} physicsOnly - do a physics step only, no game logic\n */\n step(isReenact, t, dt, physicsOnly) {\n // physics-only step\n if (physicsOnly) {\n if (dt) dt /= 1000; // physics engines work in seconds\n this.physicsEngine.step(dt, objectFilter);\n return;\n }\n\n // emit preStep event\n if (isReenact === undefined)\n throw new Error('game engine does not forward argument isReenact to super class');\n\n isReenact = Boolean(isReenact);\n let step = ++this.world.stepCount;\n let clientIDSpace = this.options.clientIDSpace;\n this.emit('preStep', { step, isReenact, dt });\n\n // skip physics for shadow objects during re-enactment\n function objectFilter(o) {\n return !isReenact || o.id < clientIDSpace;\n }\n\n // physics step\n if (this.physicsEngine && !this.ignorePhysics) {\n if (dt) dt /= 1000; // physics engines work in seconds\n this.physicsEngine.step(dt, objectFilter);\n }\n\n // for each object\n // - apply incremental bending\n // - refresh object positions after physics\n this.world.forEachObject((id, o) => {\n if (typeof o.refreshFromPhysics === 'function')\n o.refreshFromPhysics();\n this.trace.trace(() => `object[${id}] after ${isReenact ? 'reenact' : 'step'} : ${o.toString()}`);\n });\n\n // emit postStep event\n this.emit('postStep', { step, isReenact });\n }\n\n /**\n * Add object to the game world.\n * On the client side, the object may not be created, if the server copy\n * of this object is already in the game world. This could happen when the client\n * is using delayed-input, and the RTT is very low.\n *\n * @param {Object} object - the object.\n * @return {Object} the final object.\n */\n addObjectToWorld(object) {\n\n // if we are asked to create a local shadow object\n // the server copy may already have arrived.\n if (Number(object.id) >= this.options.clientIDSpace) {\n let serverCopyArrived = false;\n this.world.forEachObject((id, o) => {\n if (o.hasOwnProperty('inputId') && o.inputId === object.inputId) {\n serverCopyArrived = true;\n return false;\n }\n });\n if (serverCopyArrived) {\n this.trace.info(() => `========== shadow object NOT added ${object.toString()} ==========`);\n return null;\n }\n }\n\n this.world.addObject(object);\n\n // tell the object to join the game, by creating\n // its corresponding physical entities and renderer entities.\n if (typeof object.onAddToWorld === 'function')\n object.onAddToWorld(this);\n\n this.emit('objectAdded', object);\n this.trace.info(() => `========== object added ${object.toString()} ==========`);\n\n return object;\n }\n\n /**\n * Override this function to implement input handling.\n * This method will be called on the specific client where the\n * input was received, and will also be called on the server\n * when the input reaches the server. The client does not call this\n * method directly, rather the client calls {@link ClientEngine#sendInput}\n * so that the input is sent to both server and client, and so that\n * the input is delayed artificially if so configured.\n *\n * The input is described by a short string, and is given an index.\n * The index is used internally to keep track of inputs which have already been applied\n * on the client during synchronization. The input is also associated with\n * the ID of a player.\n *\n * @param {Object} inputDesc - input descriptor object\n * @param {String} inputDesc.input - describe the input (e.g. \"up\", \"down\", \"fire\")\n * @param {Number} inputDesc.messageIndex - input identifier\n * @param {Number} inputDesc.step - the step on which this input occurred\n * @param {Number} playerId - the player ID\n * @param {Boolean} isServer - indicate if this function is being called on the server side\n */\n processInput(inputDesc, playerId, isServer) {\n this.trace.info(() => `game engine processing input[${inputDesc.messageIndex}] <${inputDesc.input}> from playerId ${playerId}`);\n }\n\n /**\n * Remove an object from the game world.\n *\n * @param {Object|String} objectId - the object or object ID\n */\n removeObjectFromWorld(objectId) {\n\n if (typeof objectId === 'object') objectId = objectId.id;\n let object = this.world.objects[objectId];\n\n if (!object) {\n throw new Error(`Game attempted to remove a game object which doesn't (or never did) exist, id=${objectId}`);\n }\n this.trace.info(() => `========== destroying object ${object.toString()} ==========`);\n\n if (typeof object.onRemoveFromWorld === 'function')\n object.onRemoveFromWorld(this);\n\n this.emit('objectDestroyed', object);\n this.world.removeObject(objectId);\n }\n\n /**\n * Check if a given object is owned by the player on this client\n *\n * @param {Object} object the game object to check\n * @return {Boolean} true if the game object is owned by the player on this client\n */\n isOwnedByPlayer(object) {\n return (object.playerId == this.playerId);\n }\n\n /**\n * Register Game Object Classes\n *\n * @example\n * registerClasses(serializer) {\n * serializer.registerClass(Paddle);\n * serializer.registerClass(Ball);\n * }\n *\n * @param {Serializer} serializer - the serializer\n */\n registerClasses(serializer) {\n }\n\n /**\n * Decide whether the player game is over by returning an Object, need to be implemented\n *\n * @return {Object} truthful if the game is over for the player and the object is returned as GameOver data\n */\n getPlayerGameOverResult() {\n return null;\n }\n}\n\n/**\n * EVENTS\n */\n\n/**\n * Marks the beginning of a new game step\n *\n * @event GameEngine#preStep\n * @param {Number} stepNumber - the step number\n * @param {Boolean} isReenact - is this step a re-enactment\n */\n\n/**\n * Marks the end of a game step\n *\n * @event GameEngine#postStep\n * @param {Number} stepNumber - the step number\n * @param {Boolean} isReenact - is this step a re-enactment\n */\n\n/**\n * An object has been added to the world\n *\n * @event GameEngine#objectAdded\n * @param {Object} obj - the new object\n */\n\n/**\n * An object has been removed from the world\n *\n * @event GameEngine#objectDestroyed\n * @param {Object} obj - the object\n */\n\n/**\n * A player has joined\n *\n * @event GameEngine#playerJoined\n * @param {Number} joinTime - epoch of join time\n * @param {Object} playerDesc - player descriptor\n * @param {String} playerDesc.playerId - the player ID\n */\n\n/**\n * A player has left\n *\n * @event GameEngine#playerDisconnected\n * @param {Number} joinTime - epoch of join time\n * @param {Number} disconnectTime - epoch of disconnect time\n * @param {Object} playerDesc - player descriptor\n * @param {String} playerDesc.playerId - the player ID\n */\n\n/**\n * A player has joined on the server\n *\n * @event GameEngine#server__playerJoined\n * @param {Number} joinTime - epoch of join time\n * @param {Object} playerDesc - player descriptor\n * @param {String} playerDesc.playerId - the player ID\n */\n\n/**\n * A player has left on the server\n *\n * @event GameEngine#server__playerDisconnected\n * @param {Number} joinTime - epoch of join time\n * @param {Number} disconnectTime - epoch of disconnect time\n * @param {Object} playerDesc - player descriptor\n * @param {String} playerDesc.playerId - the player ID\n */\n\n/**\n * A synchronization update arrived from the server\n *\n * @event GameEngine#syncReceived\n * @param {Object} sync - the synchronization object\n */\n\n /**\n * Marks the beginning of a game step on the client\n *\n * @event GameEngine#client__preStep\n */\n\n /**\n * Marks the end of a game step on the client\n *\n * @event GameEngine#client__postStep\n */\n\n/**\n * An input needs to be handled. Emitted just before the GameEngine\n * method processInput is invoked.\n *\n * @event GameEngine#processInput\n * @param {Object} input - input descriptor object\n * @param {String} input.input - describe the input (e.g. \"up\", \"down\", \"fire\")\n * @param {Number} input.messageIndex - input identifier\n * @param {Object} input.options - the object which was passed as SendInput's InputOptions parameter\n * @param {Number} input.step - input execution step\n * @param {Number} playerId - the player ID\n */\n\n/**\n * An input needs to be handled.\n * This event is emitted on the server only, just before the\n * general processInput event.\n *\n * @event GameEngine#server__processInput\n * @param {Object} input - input descriptor object\n * @param {String} input.input - describe the input (e.g. \"up\", \"down\", \"fire\")\n * @param {Number} input.messageIndex - input identifier\n * @param {Object} input.options - the object which was passed as SendInput's InputOptions parameter\n * @param {Number} input.step - input execution step\n * @param {Number} playerId - the player ID\n */\n\n /**\n * Client moved from one room to another\n *\n * @event GameEngine#server__roomUpdate\n * @param {Number} playerId - the player ID\n * @param {String} from - the room from which the client came\n * @param {String} to - the room to which the client went\n */\n\n/**\n * An input needs to be handled.\n * This event is emitted on the client only, just before the\n * general processInput event.\n *\n * @event GameEngine#client__processInput\n * @param {Object} input - input descriptor object\n * @param {String} input.input - describe the input (e.g. \"up\", \"down\", \"fire\")\n * @param {Number} input.messageIndex - input identifier\n * @param {Object} input.options - the object which was passed as SendInput's InputOptions parameter\n * @param {Number} input.step - input execution step\n * @param {Number} playerId - the player ID\n */\n\n/**\n * Client received a sync from the server\n *\n * @event GameEngine#client__syncReceived\n * @param {Object} sync - sync from the server\n * @param {Array} syncEvents - array of events in the sync\n * @param {Number} maxStepCount - highest step in the sync\n */\n\n /**\n * Client moved from one room to another\n *\n * @event GameEngine#client__roomUpdate\n * @param {Number} playerId - the player ID\n * @param {String} from - the room from which the client came\n * @param {String} to - the room to which the client went\n */\n\n /**\n * Client reset the world step\n *\n * @event GameEngine#client__stepReset\n * @param {Object} resetDesc - sync from the server\n * @param {Number} oldStep - the old step count\n * @param {Number} newStep - the new step count\n */\n\n/**\n * Marks the beginning of a game step on the server\n *\n * @event GameEngine#server__preStep\n * @param {Number} stepNumber - the step number\n */\n\n/**\n * Marks the end of a game step on the server\n *\n * @event GameEngine#server__postStep\n * @param {Number} stepNumber - the step number\n */\n\n/**\n * User input received on the server\n *\n * @event GameEngine#server__inputReceived\n * @param {Object} input - input descriptor\n * @param {Object} input.data - input descriptor\n * @param {String} input.playerId - player that sent the input\n */\n\n /**\n * Report slow frame rate on the browser.\n * The browser did not achieve a reasonable frame rate\n *\n * @event GameEngine#client__slowFrameRate\n */\n\n /**\n * server has started\n *\n * @event GameEngine#start\n * @param {Number} timestamp - UTC epoch of start time\n */\n\n// TODO: the declaration \"export default\" could be done as part of the class\n// declaration up above, but the current version of jsdoc doesn't support this.\n// when jsdoc is fixed, move this descriptor back to the class declaration,\n// in all relevant files (12 files)\n// see: https://github.com/jsdoc3/jsdoc/issues/1132\nexport default GameEngine;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/GameEngine.js","// The base Physics Engine class defines the expected interface\n// for all physics engines\nexport default class PhysicsEngine {\n\n constructor(options) {\n this.options = options;\n this.gameEngine = options.gameEngine;\n\n if (!options.gameEngine) {\n console.warn('Physics engine initialized without gameEngine!');\n }\n }\n\n /**\n * A single Physics step.\n *\n * @param {Number} dt - time elapsed since last step\n * @param {Function} objectFilter - a test function which filters which objects should move\n */\n step(dt, objectFilter) {}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/physics/PhysicsEngine.js","export default class Utils {\n\n static hashStr(str, bits) {\n let hash = 5381;\n let i = str.length;\n bits = bits ? bits : 8;\n\n while (i) {\n hash = (hash * 33) ^ str.charCodeAt(--i);\n }\n hash = hash >>> 0;\n hash = hash % (Math.pow(2, bits) - 1);\n\n // JavaScript does bitwise operations (like XOR, above) on 32-bit signed\n // integers. Since we want the results to be always positive, convert the\n // signed int to an unsigned by doing an unsigned bitshift. */\n return hash;\n }\n\n static arrayBuffersEqual(buf1, buf2) {\n if (buf1.byteLength !== buf2.byteLength) return false;\n let dv1 = new Int8Array(buf1);\n let dv2 = new Int8Array(buf2);\n for (let i = 0; i !== buf1.byteLength; i++) {\n if (dv1[i] !== dv2[i]) return false;\n }\n return true;\n }\n\n static httpGetPromise(url) {\n return new Promise((resolve, reject) => {\n let req = new XMLHttpRequest();\n req.open('GET', url, true);\n req.onload = () => {\n if (req.status >= 200 && req.status < 400) resolve(JSON.parse(req.responseText));\n else reject();\n };\n req.onerror = () => {};\n req.send();\n });\n }\n}\n\n\n// WEBPACK FOOTER //\n// ../../src/lib/Utils.js","\n/**\n * The BaseTypes class defines the base types used in Lance.\n * These are the types which can be used to define an object's netscheme attributes,\n * which can be serialized by lance.\n * @example\n * static get netScheme() {\n * return {\n * strength: { type: BaseTypes.TYPES.FLOAT32 },\n * shield: { type: BaseTypes.TYPES.INT8 },\n * name: { type: BaseTypes.TYPES.STRING },\n * backpack: { type: BaseTypes.TYPES.CLASSINSTANCE },\n * coins: {\n * type: BaseTypes.TYPES.LIST,\n * itemType: BaseTypes.TYPES.UINT8\n * }\n * };\n * }\n */\nclass BaseTypes {}\n\n/**\n * @type {object}\n * @property {string} FLOAT32 Seriablizable float\n * @property {string} INT32 Seriablizable 32-bit integer\n * @property {string} INT16 Seriablizable 16-bit integer\n * @property {string} INT8 Seriablizable 8-bit integer\n * @property {string} UINT8 Seriablizable unsigned 8-bit integer\n * @property {string} STRING Seriablizable string\n * @property {string} CLASSINSTANCE Seriablizable class. Make sure you register all the classes included in this way.\n * @property {string} LIST Seriablizable list. In the netScheme definition, if an attribute is defined as a list, the itemType should also be defined.\n */\nBaseTypes.TYPES = {\n\n /**\n * Seriablizable float\n * @alias TYPES.FLOAT32\n * @memberof! BaseTypes#\n */\n FLOAT32: 'FLOAT32',\n\n /**\n * Seriablizable 32-bit int\n * @alias TYPES.INT32\n * @memberof! BaseTypes#\n */\n INT32: 'INT32',\n\n /**\n * Seriablizable 16-bit int\n * @alias TYPES.INT16\n * @memberof! BaseTypes#\n */\n INT16: 'INT16',\n\n /**\n * Seriablizable 8-bit int\n * @alias TYPES.INT8\n * @memberof! BaseTypes#\n */\n INT8: 'INT8',\n\n /**\n * Seriablizable unsigned 8-bit int\n * @alias TYPES.UINT8\n * @memberof! BaseTypes#\n */\n UINT8: 'UINT8',\n\n /**\n * Seriablizable string\n * @alias TYPES.STRING\n * @memberof! BaseTypes#\n */\n STRING: 'STRING',\n\n /**\n * Seriablizable class. Make sure you registered the classes included in this way.\n * @alias TYPES.CLASSINSTANCE\n * @memberof! BaseTypes#\n */\n CLASSINSTANCE: 'CLASSINSTANCE',\n\n /**\n * Seriablizable list.\n * @alias TYPES.LIST\n * @memberof! BaseTypes#\n */\n LIST: 'LIST'\n};\n\nexport default BaseTypes;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/serialize/BaseTypes.js","import Utils from './../lib/Utils';\nimport BaseTypes from './BaseTypes';\n\nclass Serializable {\n /**\n * Class can be serialized using either:\n * - a class based netScheme\n * - an instance based netScheme\n * - completely dynamically (not implemented yet)\n *\n * @param {Object} serializer - Serializer instance\n * @param {Object} [options] - Options object\n * @param {Object} options.dataBuffer [optional] - Data buffer to write to. If null a new data buffer will be created\n * @param {Number} options.bufferOffset [optional] - The buffer data offset to start writing at. Default: 0\n * @param {String} options.dry [optional] - Does not actually write to the buffer (useful to gather serializeable size)\n * @return {Object} the serialized object. Contains attributes: dataBuffer - buffer which contains the serialized data; bufferOffset - offset where the serialized data starts.\n */\n serialize(serializer, options) {\n options = Object.assign({\n bufferOffset: 0\n }, options);\n\n let netScheme;\n let dataBuffer;\n let dataView;\n let classId = 0;\n let bufferOffset = options.bufferOffset;\n let localBufferOffset = 0; // used for counting the bufferOffset\n\n // instance classId\n if (this.classId) {\n classId = this.classId;\n } else {\n classId = Utils.hashStr(this.constructor.name);\n }\n\n // instance netScheme\n if (this.netScheme) {\n netScheme = this.netScheme;\n } else if (this.constructor.netScheme) {\n netScheme = this.constructor.netScheme;\n } else {\n // todo define behaviour when a netScheme is undefined\n console.warn('no netScheme defined! This will result in awful performance');\n }\n\n // TODO: currently we serialize every node twice, once to calculate the size\n // of the buffers and once to write them out. This can be reduced to\n // a single pass by starting with a large (and static) ArrayBuffer and\n // recursively building it up.\n // buffer has one Uint8Array for class id, then payload\n if (options.dataBuffer == null && options.dry != true) {\n let bufferSize = this.serialize(serializer, { dry: true }).bufferOffset;\n dataBuffer = new ArrayBuffer(bufferSize);\n } else {\n dataBuffer = options.dataBuffer;\n }\n\n if (options.dry != true) {\n dataView = new DataView(dataBuffer);\n // first set the id of the class, so that the deserializer can fetch information about it\n dataView.setUint8(bufferOffset + localBufferOffset, classId);\n }\n\n // advance the offset counter\n localBufferOffset += Uint8Array.BYTES_PER_ELEMENT;\n\n if (netScheme) {\n for (let property of Object.keys(netScheme).sort()) {\n\n // write the property to buffer\n if (options.dry != true) {\n serializer.writeDataView(dataView, this[property], bufferOffset + localBufferOffset, netScheme[property]);\n }\n\n if (netScheme[property].type === BaseTypes.TYPES.STRING) {\n // derive the size of the string\n localBufferOffset += Uint16Array.BYTES_PER_ELEMENT;\n if (this[property] !== null && this[property] !== undefined)\n localBufferOffset += this[property].length * Uint16Array.BYTES_PER_ELEMENT;\n } else if (netScheme[property].type === BaseTypes.TYPES.CLASSINSTANCE) {\n // derive the size of the included class\n let objectInstanceBufferOffset = this[property].serialize(serializer, { dry: true }).bufferOffset;\n localBufferOffset += objectInstanceBufferOffset;\n } else if (netScheme[property].type === BaseTypes.TYPES.LIST) {\n // derive the size of the list\n // list starts with number of elements\n localBufferOffset += Uint16Array.BYTES_PER_ELEMENT;\n\n for (let item of this[property]) {\n // todo inelegant, currently doesn't support list of lists\n if (netScheme[property].itemType === BaseTypes.TYPES.CLASSINSTANCE) {\n let listBufferOffset = item.serialize(serializer, { dry: true }).bufferOffset;\n localBufferOffset += listBufferOffset;\n } else if (netScheme[property].itemType === BaseTypes.TYPES.STRING) {\n // size includes string length plus double-byte characters\n localBufferOffset += Uint16Array.BYTES_PER_ELEMENT * (1 + item.length);\n } else {\n localBufferOffset += serializer.getTypeByteSize(netScheme[property].itemType);\n }\n }\n } else {\n // advance offset\n localBufferOffset += serializer.getTypeByteSize(netScheme[property].type);\n }\n\n }\n } else {\n // TODO no netScheme, dynamic class\n }\n\n return { dataBuffer, bufferOffset: localBufferOffset };\n }\n\n // build a clone of this object with pruned strings (if necessary)\n prunedStringsClone(serializer, prevObject) {\n\n if (!prevObject) return this;\n prevObject = serializer.deserialize(prevObject).obj;\n\n // get list of string properties which changed\n let netScheme = this.constructor.netScheme;\n let isString = p => netScheme[p].type === BaseTypes.TYPES.STRING;\n let hasChanged = p => prevObject[p] !== this[p];\n let changedStrings = Object.keys(netScheme).filter(isString).filter(hasChanged);\n if (changedStrings.length == 0) return this;\n\n // build a clone with pruned strings\n let prunedCopy = new this.constructor(null, { id: null });\n for (let p of Object.keys(netScheme))\n prunedCopy[p] = changedStrings.indexOf(p) < 0 ? this[p] : null;\n\n return prunedCopy;\n }\n\n syncTo(other) {\n let netScheme = this.constructor.netScheme;\n for (let p of Object.keys(netScheme)) {\n\n // ignore classes and lists\n if (netScheme[p].type === BaseTypes.TYPES.LIST || netScheme[p].type === BaseTypes.TYPES.CLASSINSTANCE)\n continue;\n\n // strings might be pruned\n if (netScheme[p].type === BaseTypes.TYPES.STRING) {\n if (typeof other[p] === 'string') this[p] = other[p];\n continue;\n }\n\n // all other values are copied\n this[p] = other[p];\n }\n }\n\n}\n\nexport default Serializable;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/serialize/Serializable.js","import Serializable from './Serializable';\nimport BaseTypes from './BaseTypes';\n\n/**\n * A TwoVector is a geometric object which is completely described\n * by two values.\n */\nclass TwoVector extends Serializable {\n\n static get netScheme() {\n return {\n x: { type: BaseTypes.TYPES.FLOAT32 },\n y: { type: BaseTypes.TYPES.FLOAT32 }\n };\n }\n\n /**\n * Creates an instance of a TwoVector.\n * @param {Number} x - first value\n * @param {Number} y - second value\n * @return {TwoVector} v - the new TwoVector\n */\n constructor(x, y) {\n super();\n this.x = x;\n this.y = y;\n\n return this;\n }\n\n /**\n * Formatted textual description of the TwoVector.\n * @return {String} description\n */\n toString() {\n function round3(x) { return Math.round(x * 1000) / 1000; }\n return `[${round3(this.x)}, ${round3(this.y)}]`;\n }\n\n /**\n * Set TwoVector values\n *\n * @param {Number} x x-value\n * @param {Number} y y-value\n * @return {TwoVector} returns self\n */\n set(x, y) {\n this.x = x;\n this.y = y;\n return this;\n }\n\n multiply(other) {\n this.x *= other.x;\n this.y *= other.y;\n\n return this;\n }\n\n /**\n * Multiply this TwoVector by a scalar\n *\n * @param {Number} s the scale\n * @return {TwoVector} returns self\n */\n multiplyScalar(s) {\n this.x *= s;\n this.y *= s;\n\n return this;\n }\n\n /**\n * Add other vector to this vector\n *\n * @param {TwoVector} other the other vector\n * @return {TwoVector} returns self\n */\n add(other) {\n this.x += other.x;\n this.y += other.y;\n\n return this;\n }\n\n /**\n * Subtract other vector to this vector\n *\n * @param {TwoVector} other the other vector\n * @return {TwoVector} returns self\n */\n subtract(other) {\n this.x -= other.x;\n this.y -= other.y;\n\n return this;\n }\n\n /**\n * Get vector length\n *\n * @return {Number} length of this vector\n */\n length() {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n\n /**\n * Normalize this vector, in-place\n *\n * @return {TwoVector} returns self\n */\n normalize() {\n this.multiplyScalar(1 / this.length());\n return this;\n }\n\n /**\n * Copy values from another TwoVector into this TwoVector\n *\n * @param {TwoVector} sourceObj the other vector\n * @return {TwoVector} returns self\n */\n copy(sourceObj) {\n this.x = sourceObj.x;\n this.y = sourceObj.y;\n\n return this;\n }\n\n /**\n * Create a clone of this vector\n *\n * @return {TwoVector} returns clone\n */\n clone() {\n return new TwoVector(this.x, this.y);\n }\n\n /**\n * Apply in-place lerp (linear interpolation) to this TwoVector\n * towards another TwoVector\n * @param {TwoVector} target the target vector\n * @param {Number} p The percentage to interpolate\n * @return {TwoVector} returns self\n */\n lerp(target, p) {\n this.x += (target.x - this.x) * p;\n this.y += (target.y - this.y) * p;\n\n return this;\n }\n\n /**\n * Get bending Delta Vector\n * towards another TwoVector\n * @param {TwoVector} target the target vector\n * @param {Object} options bending options\n * @param {Number} options.increments number of increments\n * @param {Number} options.percent The percentage to bend\n * @param {Number} options.min No less than this value\n * @param {Number} options.max No more than this value\n * @return {TwoVector} returns new Incremental Vector\n */\n getBendingDelta(target, options) {\n let increment = target.clone();\n increment.subtract(this);\n increment.multiplyScalar(options.percent);\n\n // check for max case\n if (((typeof options.max === 'number') && increment.length() > options.max) ||\n ((typeof options.min === 'number') && increment.length() < options.min)) {\n return new TwoVector(0, 0);\n }\n\n // divide into increments\n increment.multiplyScalar(1 / options.increments);\n\n return increment;\n }\n}\n\nexport default TwoVector;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/serialize/TwoVector.js","// Hierarchical Spatial Hash Grid: HSHG\n// source: https://gist.github.com/kirbysayshi/1760774\n\n// ---------------------------------------------------------------------\n// GLOBAL FUNCTIONS\n// ---------------------------------------------------------------------\n\n/**\n * Updates every object's position in the grid, but only if\n * the hash value for that object has changed.\n * This method DOES NOT take into account object expansion or\n * contraction, just position, and does not attempt to change\n * the grid the object is currently in; it only (possibly) changes\n * the cell.\n *\n * If the object has significantly changed in size, the best bet is to\n * call removeObject() and addObject() sequentially, outside of the\n * normal update cycle of HSHG.\n *\n * @return void desc\n */\nfunction update_RECOMPUTE() {\n\n var i,\n obj,\n grid,\n meta,\n objAABB,\n newObjHash;\n\n // for each object\n for (i = 0; i < this._globalObjects.length; i++) {\n obj = this._globalObjects[i];\n meta = obj.HSHG;\n grid = meta.grid;\n\n // recompute hash\n objAABB = obj.getAABB();\n newObjHash = grid.toHash(objAABB.min[0], objAABB.min[1]);\n\n if (newObjHash !== meta.hash) {\n // grid position has changed, update!\n grid.removeObject(obj);\n grid.addObject(obj, newObjHash);\n }\n }\n}\n\n// not implemented yet :)\nfunction update_REMOVEALL() {\n\n}\n\nfunction testAABBOverlap(objA, objB) {\n var a = objA.getAABB(),\n b = objB.getAABB();\n\n // if(a.min[0] > b.max[0] || a.min[1] > b.max[1] || a.min[2] > b.max[2]\n // || a.max[0] < b.min[0] || a.max[1] < b.min[1] || a.max[2] < b.min[2]){\n\n if (a.min[0] > b.max[0] || a.min[1] > b.max[1] ||\n a.max[0] < b.min[0] || a.max[1] < b.min[1]) {\n return false;\n }\n return true;\n\n}\n\nfunction getLongestAABBEdge(min, max) {\n return Math.max(\n Math.abs(max[0] - min[0])\n , Math.abs(max[1] - min[1])\n // ,Math.abs(max[2] - min[2])\n );\n}\n\n// ---------------------------------------------------------------------\n// ENTITIES\n// ---------------------------------------------------------------------\n\nfunction HSHG() {\n\n this.MAX_OBJECT_CELL_DENSITY = 1 / 8; // objects / cells\n this.INITIAL_GRID_LENGTH = 256; // 16x16\n this.HIERARCHY_FACTOR = 2;\n this.HIERARCHY_FACTOR_SQRT = Math.SQRT2;\n this.UPDATE_METHOD = update_RECOMPUTE; // or update_REMOVEALL\n\n this._grids = [];\n this._globalObjects = [];\n}\n\n// HSHG.prototype.init = function(){\n//\tthis._grids = [];\n//\tthis._globalObjects = [];\n// }\n\nHSHG.prototype.addObject = function (obj) {\n var x, i,\n cellSize,\n objAABB = obj.getAABB(),\n objSize = getLongestAABBEdge(objAABB.min, objAABB.max),\n oneGrid, newGrid;\n\n // for HSHG metadata\n obj.HSHG = {\n globalObjectsIndex: this._globalObjects.length\n };\n\n // add to global object array\n this._globalObjects.push(obj);\n\n if (this._grids.length == 0) {\n // no grids exist yet\n cellSize = objSize * this.HIERARCHY_FACTOR_SQRT;\n newGrid = new Grid(cellSize, this.INITIAL_GRID_LENGTH, this);\n newGrid.initCells();\n newGrid.addObject(obj);\n\n this._grids.push(newGrid);\n } else {\n x = 0;\n\n // grids are sorted by cellSize, smallest to largest\n for (i = 0; i < this._grids.length; i++) {\n oneGrid = this._grids[i];\n x = oneGrid.cellSize;\n if (objSize < x) {\n x /= this.HIERARCHY_FACTOR;\n if (objSize < x) {\n // find appropriate size\n while (objSize < x) {\n x /= this.HIERARCHY_FACTOR;\n }\n newGrid = new Grid(x * this.HIERARCHY_FACTOR, this.INITIAL_GRID_LENGTH, this);\n newGrid.initCells();\n // assign obj to grid\n newGrid.addObject(obj);\n // insert grid into list of grids directly before oneGrid\n this._grids.splice(i, 0, newGrid);\n } else {\n // insert obj into grid oneGrid\n oneGrid.addObject(obj);\n }\n return;\n }\n }\n\n while (objSize >= x) {\n x *= this.HIERARCHY_FACTOR;\n }\n\n newGrid = new Grid(x, this.INITIAL_GRID_LENGTH, this);\n newGrid.initCells();\n // insert obj into grid\n newGrid.addObject(obj);\n // add newGrid as last element in grid list\n this._grids.push(newGrid);\n }\n};\n\nHSHG.prototype.removeObject = function (obj) {\n var meta = obj.HSHG,\n globalObjectsIndex,\n replacementObj;\n\n if (meta === undefined) {\n throw Error(obj + ' was not in the HSHG.');\n return;\n }\n\n // remove object from global object list\n globalObjectsIndex = meta.globalObjectsIndex;\n if (globalObjectsIndex === this._globalObjects.length - 1) {\n this._globalObjects.pop();\n } else {\n replacementObj = this._globalObjects.pop();\n replacementObj.HSHG.globalObjectsIndex = globalObjectsIndex;\n this._globalObjects[globalObjectsIndex] = replacementObj;\n }\n\n meta.grid.removeObject(obj);\n\n // remove meta data\n delete obj.HSHG;\n};\n\nHSHG.prototype.update = function () {\n this.UPDATE_METHOD.call(this);\n};\n\nHSHG.prototype.queryForCollisionPairs = function (broadOverlapTestCallback) {\n\n var i, j, k, l, c,\n grid,\n cell,\n objA,\n objB,\n offset,\n adjacentCell,\n biggerGrid,\n objAAABB,\n objAHashInBiggerGrid,\n possibleCollisions = [];\n\n // default broad test to internal aabb overlap test\n let broadOverlapTest = broadOverlapTestCallback || testAABBOverlap;\n\n // for all grids ordered by cell size ASC\n for (i = 0; i < this._grids.length; i++) {\n grid = this._grids[i];\n\n // for each cell of the grid that is occupied\n for (j = 0; j < grid.occupiedCells.length; j++) {\n cell = grid.occupiedCells[j];\n\n // collide all objects within the occupied cell\n for (k = 0; k < cell.objectContainer.length; k++) {\n objA = cell.objectContainer[k];\n for (l = k + 1; l < cell.objectContainer.length; l++) {\n objB = cell.objectContainer[l];\n if (broadOverlapTest(objA, objB) === true) {\n possibleCollisions.push([objA, objB]);\n }\n }\n }\n\n // for the first half of all adjacent cells (offset 4 is the current cell)\n for (c = 0; c < 4; c++) {\n offset = cell.neighborOffsetArray[c];\n\n // if(offset === null) { continue; }\n\n adjacentCell = grid.allCells[cell.allCellsIndex + offset];\n\n // collide all objects in cell with adjacent cell\n for (k = 0; k < cell.objectContainer.length; k++) {\n objA = cell.objectContainer[k];\n for (l = 0; l < adjacentCell.objectContainer.length; l++) {\n objB = adjacentCell.objectContainer[l];\n if (broadOverlapTest(objA, objB) === true) {\n possibleCollisions.push([objA, objB]);\n }\n }\n }\n }\n }\n\n // forall objects that are stored in this grid\n for (j = 0; j < grid.allObjects.length; j++) {\n objA = grid.allObjects[j];\n objAAABB = objA.getAABB();\n\n // for all grids with cellsize larger than grid\n for (k = i + 1; k < this._grids.length; k++) {\n biggerGrid = this._grids[k];\n objAHashInBiggerGrid = biggerGrid.toHash(objAAABB.min[0], objAAABB.min[1]);\n cell = biggerGrid.allCells[objAHashInBiggerGrid];\n\n // check objA against every object in all cells in offset array of cell\n // for all adjacent cells...\n for (c = 0; c < cell.neighborOffsetArray.length; c++) {\n offset = cell.neighborOffsetArray[c];\n\n // if(offset === null) { continue; }\n\n adjacentCell = biggerGrid.allCells[cell.allCellsIndex + offset];\n\n // for all objects in the adjacent cell...\n for (l = 0; l < adjacentCell.objectContainer.length; l++) {\n objB = adjacentCell.objectContainer[l];\n // test against object A\n if (broadOverlapTest(objA, objB) === true) {\n possibleCollisions.push([objA, objB]);\n }\n }\n }\n }\n }\n }\n\n // return list of object pairs\n return possibleCollisions;\n};\n\nHSHG.update_RECOMPUTE = update_RECOMPUTE;\nHSHG.update_REMOVEALL = update_REMOVEALL;\n\n/**\n * Grid\n *\n * @constructor\n * @param int cellSize the pixel size of each cell of the grid\n * @param int cellCount the total number of cells for the grid (width x height)\n * @param HSHG parentHierarchy the HSHG to which this grid belongs\n * @return void\n */\nfunction Grid(cellSize, cellCount, parentHierarchy) {\n this.cellSize = cellSize;\n this.inverseCellSize = 1 / cellSize;\n this.rowColumnCount = ~~Math.sqrt(cellCount);\n this.xyHashMask = this.rowColumnCount - 1;\n this.occupiedCells = [];\n this.allCells = Array(this.rowColumnCount * this.rowColumnCount);\n this.allObjects = [];\n this.sharedInnerOffsets = [];\n\n this._parentHierarchy = parentHierarchy || null;\n}\n\nGrid.prototype.initCells = function () {\n\n // TODO: inner/unique offset rows 0 and 2 may need to be\n // swapped due to +y being \"down\" vs \"up\"\n\n var i,\n gridLength = this.allCells.length,\n x, y,\n wh = this.rowColumnCount,\n isOnRightEdge, isOnLeftEdge, isOnTopEdge, isOnBottomEdge,\n innerOffsets = [\n // y+ down offsets\n // -1 + -wh, -wh, -wh + 1,\n // -1, 0, 1,\n // wh - 1, wh, wh + 1\n\n // y+ up offsets\n wh - 1, wh, wh + 1,\n -1, 0, 1,\n -1 + -wh, -wh, -wh + 1\n ],\n leftOffset, rightOffset, topOffset, bottomOffset,\n uniqueOffsets = [],\n cell;\n\n this.sharedInnerOffsets = innerOffsets;\n\n // init all cells, creating offset arrays as needed\n\n for (i = 0; i < gridLength; i++) {\n\n cell = new Cell();\n // compute row (y) and column (x) for an index\n y = ~~(i / this.rowColumnCount);\n x = ~~(i - (y * this.rowColumnCount));\n\n // reset / init\n isOnRightEdge = false;\n isOnLeftEdge = false;\n isOnTopEdge = false;\n isOnBottomEdge = false;\n\n // right or left edge cell\n if ((x + 1) % this.rowColumnCount == 0) {\n isOnRightEdge = true;\n } else if (x % this.rowColumnCount == 0) {\n isOnLeftEdge = true;\n }\n\n // top or bottom edge cell\n if ((y + 1) % this.rowColumnCount == 0) {\n isOnTopEdge = true;\n } else if (y % this.rowColumnCount == 0) {\n isOnBottomEdge = true;\n }\n\n // if cell is edge cell, use unique offsets, otherwise use inner offsets\n if (isOnRightEdge || isOnLeftEdge || isOnTopEdge || isOnBottomEdge) {\n\n // figure out cardinal offsets first\n rightOffset = isOnRightEdge === true ? -wh + 1 : 1;\n leftOffset = isOnLeftEdge === true ? wh - 1 : -1;\n topOffset = isOnTopEdge === true ? -gridLength + wh : wh;\n bottomOffset = isOnBottomEdge === true ? gridLength - wh : -wh;\n\n // diagonals are composites of the cardinals\n uniqueOffsets = [\n // y+ down offset\n // leftOffset + bottomOffset, bottomOffset, rightOffset + bottomOffset,\n // leftOffset, 0, rightOffset,\n // leftOffset + topOffset, topOffset, rightOffset + topOffset\n\n // y+ up offset\n leftOffset + topOffset, topOffset, rightOffset + topOffset,\n leftOffset, 0, rightOffset,\n leftOffset + bottomOffset, bottomOffset, rightOffset + bottomOffset\n ];\n\n cell.neighborOffsetArray = uniqueOffsets;\n } else {\n cell.neighborOffsetArray = this.sharedInnerOffsets;\n }\n\n cell.allCellsIndex = i;\n this.allCells[i] = cell;\n }\n};\n\nGrid.prototype.toHash = function (x, y, z) {\n var i, xHash, yHash, zHash;\n\n if (x < 0) {\n i = (-x) * this.inverseCellSize;\n xHash = this.rowColumnCount - 1 - (~~i & this.xyHashMask);\n } else {\n i = x * this.inverseCellSize;\n xHash = ~~i & this.xyHashMask;\n }\n\n if (y < 0) {\n i = (-y) * this.inverseCellSize;\n yHash = this.rowColumnCount - 1 - (~~i & this.xyHashMask);\n } else {\n i = y * this.inverseCellSize;\n yHash = ~~i & this.xyHashMask;\n }\n\n // if(z < 0){\n //\ti = (-z) * this.inverseCellSize;\n //\tzHash = this.rowColumnCount - 1 - ( ~~i & this.xyHashMask );\n // } else {\n //\ti = z * this.inverseCellSize;\n //\tzHash = ~~i & this.xyHashMask;\n // }\n\n return xHash + yHash * this.rowColumnCount;\n // + zHash * this.rowColumnCount * this.rowColumnCount;\n};\n\nGrid.prototype.addObject = function (obj, hash) {\n var objAABB,\n objHash,\n targetCell;\n\n // technically, passing this in this should save some computational effort when updating objects\n if (hash !== undefined) {\n objHash = hash;\n } else {\n objAABB = obj.getAABB();\n objHash = this.toHash(objAABB.min[0], objAABB.min[1]);\n }\n targetCell = this.allCells[objHash];\n\n if (targetCell.objectContainer.length === 0) {\n // insert this cell into occupied cells list\n targetCell.occupiedCellsIndex = this.occupiedCells.length;\n this.occupiedCells.push(targetCell);\n }\n\n // add meta data to obj, for fast update/removal\n obj.HSHG.objectContainerIndex = targetCell.objectContainer.length;\n obj.HSHG.hash = objHash;\n obj.HSHG.grid = this;\n obj.HSHG.allGridObjectsIndex = this.allObjects.length;\n // add obj to cell\n targetCell.objectContainer.push(obj);\n\n // we can assume that the targetCell is already a member of the occupied list\n\n // add to grid-global object list\n this.allObjects.push(obj);\n\n // do test for grid density\n if (this.allObjects.length / this.allCells.length > this._parentHierarchy.MAX_OBJECT_CELL_DENSITY) {\n // grid must be increased in size\n this.expandGrid();\n }\n};\n\nGrid.prototype.removeObject = function (obj) {\n var meta = obj.HSHG,\n hash,\n containerIndex,\n allGridObjectsIndex,\n cell,\n replacementCell,\n replacementObj;\n\n hash = meta.hash;\n containerIndex = meta.objectContainerIndex;\n allGridObjectsIndex = meta.allGridObjectsIndex;\n cell = this.allCells[hash];\n\n // remove object from cell object container\n if (cell.objectContainer.length === 1) {\n // this is the last object in the cell, so reset it\n cell.objectContainer.length = 0;\n\n // remove cell from occupied list\n if (cell.occupiedCellsIndex === this.occupiedCells.length - 1) {\n // special case if the cell is the newest in the list\n this.occupiedCells.pop();\n } else {\n replacementCell = this.occupiedCells.pop();\n replacementCell.occupiedCellsIndex = cell.occupiedCellsIndex;\n this.occupiedCells[cell.occupiedCellsIndex] = replacementCell;\n }\n\n cell.occupiedCellsIndex = null;\n } else {\n // there is more than one object in the container\n if (containerIndex === cell.objectContainer.length - 1) {\n // special case if the obj is the newest in the container\n cell.objectContainer.pop();\n } else {\n replacementObj = cell.objectContainer.pop();\n replacementObj.HSHG.objectContainerIndex = containerIndex;\n cell.objectContainer[containerIndex] = replacementObj;\n }\n }\n\n // remove object from grid object list\n if (allGridObjectsIndex === this.allObjects.length - 1) {\n this.allObjects.pop();\n } else {\n replacementObj = this.allObjects.pop();\n replacementObj.HSHG.allGridObjectsIndex = allGridObjectsIndex;\n this.allObjects[allGridObjectsIndex] = replacementObj;\n }\n};\n\nGrid.prototype.expandGrid = function () {\n var i, j,\n currentCellCount = this.allCells.length,\n currentRowColumnCount = this.rowColumnCount,\n currentXYHashMask = this.xyHashMask,\n\n newCellCount = currentCellCount * 4, // double each dimension\n newRowColumnCount = ~~Math.sqrt(newCellCount),\n newXYHashMask = newRowColumnCount - 1,\n allObjects = this.allObjects.slice(0), // duplicate array, not objects contained\n aCell,\n push = Array.prototype.push;\n\n // remove all objects\n for (i = 0; i < allObjects.length; i++) {\n this.removeObject(allObjects[i]);\n }\n\n // reset grid values, set new grid to be 4x larger than last\n this.rowColumnCount = newRowColumnCount;\n this.allCells = Array(this.rowColumnCount * this.rowColumnCount);\n this.xyHashMask = newXYHashMask;\n\n // initialize new cells\n this.initCells();\n\n // re-add all objects to grid\n for (i = 0; i < allObjects.length; i++) {\n this.addObject(allObjects[i]);\n }\n};\n\n/**\n * A cell of the grid\n *\n * @constructor\n * @return void desc\n */\nfunction Cell() {\n this.objectContainer = [];\n this.neighborOffsetArray;\n this.occupiedCellsIndex = null;\n this.allCellsIndex = null;\n}\n\n// ---------------------------------------------------------------------\n// EXPORTS\n// ---------------------------------------------------------------------\n\nHSHG._private = {\n Grid: Grid,\n Cell: Cell,\n testAABBOverlap: testAABBOverlap,\n getLongestAABBEdge: getLongestAABBEdge\n};\n\nexport default HSHG;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/physics/SimplePhysics/HSHG.js","import HSHG from './HSHG';\n\n// Collision detection based on Hierarchical Spatial Hash Grid\n// uses this implementation https://gist.github.com/kirbysayshi/1760774\nclass HSHGCollisionDetection {\n\n constructor(options) {\n this.options = Object.assign({ COLLISION_DISTANCE: 28 }, options);\n }\n\n init(options) {\n this.gameEngine = options.gameEngine;\n this.grid = new HSHG();\n this.previousCollisionPairs = {};\n this.stepCollidingPairs = {};\n\n this.gameEngine.on('objectAdded', obj => {\n // add the gameEngine obj the the spatial grid\n this.grid.addObject(obj);\n });\n\n this.gameEngine.on('objectDestroyed', obj => {\n // add the gameEngine obj the the spatial grid\n this.grid.removeObject(obj);\n });\n }\n\n detect() {\n this.grid.update();\n this.stepCollidingPairs = this.grid.queryForCollisionPairs().reduce((accumulator, currentValue, i) => {\n let pairId = getArrayPairId(currentValue);\n accumulator[pairId] = { o1: currentValue[0], o2: currentValue[1] };\n return accumulator;\n }, {});\n\n for (let pairId of Object.keys(this.previousCollisionPairs)) {\n let pairObj = this.previousCollisionPairs[pairId];\n\n // existed in previous pairs, but not during this step: this pair stopped colliding\n if (pairId in this.stepCollidingPairs === false) {\n this.gameEngine.emit('collisionStop', pairObj);\n }\n }\n\n for (let pairId of Object.keys(this.stepCollidingPairs)) {\n let pairObj = this.stepCollidingPairs[pairId];\n\n // didn't exist in previous pairs, but exists now: this is a new colliding pair\n if (pairId in this.previousCollisionPairs === false) {\n this.gameEngine.emit('collisionStart', pairObj);\n }\n }\n\n this.previousCollisionPairs = this.stepCollidingPairs;\n }\n\n /**\n * checks wheter two objects are currently colliding\n * @param {Object} o1 first object\n * @param {Object} o2 second object\n * @return {boolean} are the two objects colliding?\n */\n areObjectsColliding(o1, o2) {\n return getArrayPairId([o1, o2]) in this.stepCollidingPairs;\n }\n\n}\n\nfunction getArrayPairId(arrayPair) {\n // make sure to get the same id regardless of object order\n let sortedArrayPair = arrayPair.slice(0).sort();\n return sortedArrayPair[0].id + '-' + sortedArrayPair[1].id;\n}\n\nexport default HSHGCollisionDetection;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/physics/SimplePhysics/HSHGCollisionDetection.js","import TwoVector from '../../serialize/TwoVector';\nlet differenceVector = new TwoVector();\n\n// The collision detection of SimplePhysicsEngine is a brute-force approach\nexport default class BruteForceCollisionDetection {\n\n constructor(options) {\n this.options = Object.assign({\n autoResolve: true\n }, options);\n this.collisionPairs = {};\n }\n\n init(options) {\n this.gameEngine = options.gameEngine;\n }\n\n findCollision(o1, o2) {\n\n // static objects don't collide\n if (o1.isStatic && o2.isStatic)\n return false;\n\n // allow a collision checker function\n if (typeof o1.collidesWith === 'function') {\n if (!o1.collidesWith(o2))\n return false;\n }\n\n // radius-based collision\n if (this.options.collisionDistance) {\n differenceVector.copy(o1.position).subtract(o2.position);\n return differenceVector.length() < this.options.collisionDistance;\n }\n\n // check for no-collision first\n let o1Box = getBox(o1);\n let o2Box = getBox(o2);\n if (o1Box.xMin > o2Box.xMax ||\n o1Box.yMin > o2Box.yMax ||\n o2Box.xMin > o1Box.xMax ||\n o2Box.yMin > o1Box.yMax)\n return false;\n\n if (!this.options.autoResolve)\n return true;\n\n // need to auto-resolve\n let shiftY1 = o2Box.yMax - o1Box.yMin;\n let shiftY2 = o1Box.yMax - o2Box.yMin;\n let shiftX1 = o2Box.xMax - o1Box.xMin;\n let shiftX2 = o1Box.xMax - o2Box.xMin;\n let smallestYShift = Math.min(Math.abs(shiftY1), Math.abs(shiftY2));\n let smallestXShift = Math.min(Math.abs(shiftX1), Math.abs(shiftX2));\n\n // choose to apply the smallest shift which solves the collision\n if (smallestYShift < smallestXShift) {\n if (o1Box.yMin > o2Box.yMin && o1Box.yMin < o2Box.yMax) {\n if (o2.isStatic) o1.position.y += shiftY1;\n else if (o1.isStatic) o2.position.y -= shiftY1;\n else {\n o1.position.y += shiftY1 / 2;\n o2.position.y -= shiftY1 / 2;\n }\n } else if (o1Box.yMax > o2Box.yMin && o1Box.yMax < o2Box.yMax) {\n if (o2.isStatic) o1.position.y -= shiftY2;\n else if (o1.isStatic) o2.position.y += shiftY2;\n else {\n o1.position.y -= shiftY2 / 2;\n o2.position.y += shiftY2 / 2;\n }\n }\n o1.velocity.y = 0;\n o2.velocity.y = 0;\n } else {\n if (o1Box.xMin > o2Box.xMin && o1Box.xMin < o2Box.xMax) {\n if (o2.isStatic) o1.position.x += shiftX1;\n else if (o1.isStatic) o2.position.x -= shiftX1;\n else {\n o1.position.x += shiftX1 / 2;\n o2.position.x -= shiftX1 / 2;\n }\n } else if (o1Box.xMax > o2Box.xMin && o1Box.xMax < o2Box.xMax) {\n if (o2.isStatic) o1.position.x -= shiftX2;\n else if (o1.isStatic) o2.position.x += shiftX2;\n else {\n o1.position.x -= shiftX2 / 2;\n o2.position.x += shiftX2 / 2;\n }\n }\n o1.velocity.x = 0;\n o2.velocity.x = 0;\n }\n\n return true;\n }\n\n // check if pair (id1, id2) have collided\n checkPair(id1, id2) {\n let objects = this.gameEngine.world.objects;\n let o1 = objects[id1];\n let o2 = objects[id2];\n\n // make sure that objects actually exist. might have been destroyed\n if (!o1 || !o2) return;\n let pairId = [id1, id2].join(',');\n\n if (this.findCollision(o1, o2)) {\n if (!(pairId in this.collisionPairs)) {\n this.collisionPairs[pairId] = true;\n this.gameEngine.emit('collisionStart', { o1, o2 });\n }\n } else if (pairId in this.collisionPairs) {\n this.gameEngine.emit('collisionStop', { o1, o2 });\n delete this.collisionPairs[pairId];\n }\n }\n\n // detect by checking all pairs\n detect() {\n let objects = this.gameEngine.world.objects;\n let keys = Object.keys(objects);\n\n // delete non existant object pairs\n for (let pairId in this.collisionPairs)\n if (this.collisionPairs.hasOwnProperty(pairId))\n if (keys.indexOf(pairId.split(',')[0]) === -1 || keys.indexOf(pairId.split(',')[1]) === -1)\n delete this.collisionPairs[pairId];\n\n // check all pairs\n for (let k1 of keys)\n for (let k2 of keys)\n if (k2 > k1) this.checkPair(k1, k2);\n }\n}\n\n// get bounding box of object o\nfunction getBox(o) {\n return {\n xMin: o.position.x,\n xMax: o.position.x + o.width,\n yMin: o.position.y,\n yMax: o.position.y + o.height\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/physics/SimplePhysics/BruteForceCollisionDetection.js","import PhysicsEngine from './PhysicsEngine';\nimport TwoVector from '../serialize/TwoVector';\nimport HSHGCollisionDetection from './SimplePhysics/HSHGCollisionDetection';\nimport BruteForceCollisionDetection from './SimplePhysics/BruteForceCollisionDetection';\n\nlet dv = new TwoVector();\nlet dx = new TwoVector();\n\n/**\n * SimplePhysicsEngine is a pseudo-physics engine which works with\n * objects of class DynamicObject.\n * The Simple Physics Engine is a \"fake\" physics engine, which is more\n * appropriate for arcade games, and it is sometimes referred to as \"arcade\"\n * physics. For example if a character is standing at the edge of a platform,\n * with only one foot on the platform, it won't fall over. This is a desired\n * game behaviour in platformer games.\n */\nclass SimplePhysicsEngine extends PhysicsEngine {\n\n /**\n * Creates an instance of the Simple Physics Engine.\n * @param {Object} options - physics options\n * @param {Object} options.collisions - collision options\n * @param {String} options.collisions.type - can be set to \"HSHG\" or \"bruteForce\". Default is Brute-Force collision detection.\n * @param {Number} options.collisions.collisionDistance - for brute force, this can be set for a simple distance-based (radius) collision detection.\n * @param {Boolean} options.collisions.autoResolve - for brute force collision, colliding objects should be moved apart\n * @param {TwoVector} options.gravity - TwoVector instance which describes gravity, which will be added to the velocity of all objects at every step. For example TwoVector(0, -0.01)\n */\n constructor(options) {\n super(options);\n\n // todo does this mean both modules always get loaded?\n if (options.collisions && options.collisions.type === 'HSHG') {\n this.collisionDetection = new HSHGCollisionDetection(options.collisions);\n } else {\n this.collisionDetection = new BruteForceCollisionDetection(options.collisions);\n }\n\n /**\n * The actor's name.\n * @memberof SimplePhysicsEngine\n * @member {TwoVector} gravity affecting all objects\n */\n this.gravity = new TwoVector(0, 0);\n\n if (options.gravity)\n this.gravity.copy(options.gravity);\n\n let collisionOptions = Object.assign({ gameEngine: this.gameEngine }, options.collisionOptions);\n this.collisionDetection.init(collisionOptions);\n }\n\n // a single object advances, based on:\n // isRotatingRight, isRotatingLeft, isAccelerating, current velocity\n // wrap-around the world if necessary\n objectStep(o, dt) {\n\n // calculate factor\n if (dt === 0)\n return;\n\n if (dt)\n dt /= (1 / 60);\n else\n dt = 1;\n\n // TODO: worldsettings is a hack. Find all places which use it in all games\n // and come up with a better solution. for example an option sent to the physics Engine\n // with a \"worldWrap:true\" options\n // replace with a \"worldBounds\" parameter to the PhysicsEngine constructor\n\n let worldSettings = this.gameEngine.worldSettings;\n\n // TODO: remove this code in version 4: these attributes are deprecated\n if (o.isRotatingRight) { o.angle += o.rotationSpeed; }\n if (o.isRotatingLeft) { o.angle -= o.rotationSpeed; }\n\n // TODO: remove this code in version 4: these attributes are deprecated\n if (o.angle >= 360) { o.angle -= 360; }\n if (o.angle < 0) { o.angle += 360; }\n\n // TODO: remove this code in version 4: these attributes are deprecated\n if (o.isAccelerating) {\n let rad = o.angle * (Math.PI / 180);\n dv.set(Math.cos(rad), Math.sin(rad)).multiplyScalar(o.acceleration).multiplyScalar(dt);\n o.velocity.add(dv);\n }\n\n // apply gravity\n if (!o.isStatic) o.velocity.add(this.gravity);\n\n let velMagnitude = o.velocity.length();\n if ((o.maxSpeed !== null) && (velMagnitude > o.maxSpeed)) {\n o.velocity.multiplyScalar(o.maxSpeed / velMagnitude);\n }\n\n o.isAccelerating = false;\n o.isRotatingLeft = false;\n o.isRotatingRight = false;\n\n dx.copy(o.velocity).multiplyScalar(dt);\n o.position.add(dx);\n\n o.velocity.multiply(o.friction);\n\n // wrap around the world edges\n if (worldSettings.worldWrap) {\n if (o.position.x >= worldSettings.width) { o.position.x -= worldSettings.width; }\n if (o.position.y >= worldSettings.height) { o.position.y -= worldSettings.height; }\n if (o.position.x < 0) { o.position.x += worldSettings.width; }\n if (o.position.y < 0) { o.position.y += worldSettings.height; }\n }\n }\n\n // entry point for a single step of the Simple Physics\n step(dt, objectFilter) {\n\n // each object should advance\n let objects = this.gameEngine.world.objects;\n for (let objId of Object.keys(objects)) {\n\n // shadow objects are not re-enacted\n let ob = objects[objId];\n if (!objectFilter(ob))\n continue;\n\n // run the object step\n this.objectStep(ob, dt);\n }\n\n // emit event on collision\n this.collisionDetection.detect(this.gameEngine);\n }\n}\n\nexport default SimplePhysicsEngine;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/physics/SimplePhysicsEngine.js","import PhysicsEngine from './PhysicsEngine';\nconst CANNON = require('cannon');\n\n/**\n * CannonPhysicsEngine is a three-dimensional lightweight physics engine\n */\nclass CannonPhysicsEngine extends PhysicsEngine {\n\n constructor(options) {\n super(options);\n\n this.options.dt = this.options.dt || (1 / 60);\n let world = this.world = new CANNON.World();\n world.quatNormalizeSkip = 0;\n world.quatNormalizeFast = false;\n world.gravity.set(0, -10, 0);\n world.broadphase = new CANNON.NaiveBroadphase();\n this.CANNON = CANNON;\n }\n\n // entry point for a single step of the Simple Physics\n step(dt, objectFilter) {\n this.world.step(dt || this.options.dt);\n }\n\n addSphere(radius, mass) {\n let shape = new CANNON.Sphere(radius);\n let body = new CANNON.Body({ mass, shape });\n body.position.set(0, 0, 0);\n this.world.addBody(body);\n return body;\n }\n\n addBox(x, y, z, mass, friction) {\n let shape = new CANNON.Box(new CANNON.Vec3(x, y, z));\n let options = { mass, shape };\n if (friction !== undefined)\n options.material = new CANNON.Material({ friction });\n\n let body = new CANNON.Body(options);\n body.position.set(0, 0, 0);\n this.world.addBody(body);\n return body;\n }\n\n addCylinder(radiusTop, radiusBottom, height, numSegments, mass) {\n let shape = new CANNON.Cylinder(radiusTop, radiusBottom, height, numSegments);\n let body = new CANNON.Body({ mass, shape });\n this.world.addBody(body);\n return body;\n }\n\n removeObject(obj) {\n this.world.removeBody(obj);\n }\n}\n\nexport default CannonPhysicsEngine;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/physics/CannonPhysicsEngine.js","import Serializable from './Serializable';\nimport BaseTypes from './BaseTypes';\n\n/**\n * A ThreeVector is a geometric object which is completely described\n * by three values.\n */\nclass ThreeVector extends Serializable {\n\n static get netScheme() {\n return {\n x: { type: BaseTypes.TYPES.FLOAT32 },\n y: { type: BaseTypes.TYPES.FLOAT32 },\n z: { type: BaseTypes.TYPES.FLOAT32 }\n };\n }\n\n /**\n * Creates an instance of a ThreeVector.\n * @param {Number} x - first value\n * @param {Number} y - second value\n * @param {Number} z - second value\n * @return {ThreeVector} v - the new ThreeVector\n */\n constructor(x, y, z) {\n super();\n this.x = x;\n this.y = y;\n this.z = z;\n\n return this;\n }\n\n /**\n * Formatted textual description of the ThreeVector.\n * @return {String} description\n */\n toString() {\n function round3(x) { return Math.round(x * 1000) / 1000; }\n return `[${round3(this.x)}, ${round3(this.y)}, ${round3(this.z)}]`;\n }\n\n /**\n * Multiply this ThreeVector by a scalar\n *\n * @param {Number} s the scale\n * @return {ThreeVector} returns self\n */\n multiplyScalar(s) {\n this.x *= s;\n this.y *= s;\n this.z *= s;\n return this;\n }\n\n /**\n * Get vector length\n *\n * @return {Number} length of this vector\n */\n length() {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n }\n\n /**\n * Add other vector to this vector\n *\n * @param {ThreeVector} other the other vector\n * @return {ThreeVector} returns self\n */\n add(other) {\n this.x += other.x;\n this.y += other.y;\n this.z += other.z;\n return this;\n }\n\n /**\n * Subtract other vector from this vector\n *\n * @param {ThreeVector} other the other vector\n * @return {ThreeVector} returns self\n */\n subtract(other) {\n this.x -= other.x;\n this.y -= other.y;\n this.z -= other.z;\n return this;\n }\n\n /**\n * Normalize this vector, in-place\n *\n * @return {ThreeVector} returns self\n */\n normalize() {\n this.multiplyScalar(1 / this.length());\n return this;\n }\n\n /**\n * Copy values from another ThreeVector into this ThreeVector\n *\n * @param {ThreeVector} sourceObj the other vector\n * @return {ThreeVector} returns self\n */\n copy(sourceObj) {\n this.x = sourceObj.x;\n this.y = sourceObj.y;\n this.z = sourceObj.z;\n return this;\n }\n\n /**\n * Set ThreeVector values\n *\n * @param {Number} x x-value\n * @param {Number} y y-value\n * @param {Number} z z-value\n * @return {ThreeVector} returns self\n */\n set(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n }\n\n /**\n * Create a clone of this vector\n *\n * @return {ThreeVector} returns clone\n */\n clone() {\n return new ThreeVector(this.x, this.y, this.z);\n }\n\n /**\n * Apply in-place lerp (linear interpolation) to this ThreeVector\n * towards another ThreeVector\n * @param {ThreeVector} target the target vector\n * @param {Number} p The percentage to interpolate\n * @return {ThreeVector} returns self\n */\n lerp(target, p) {\n this.x += (target.x - this.x) * p;\n this.y += (target.y - this.y) * p;\n this.z += (target.z - this.z) * p;\n return this;\n }\n\n /**\n * Get bending Delta Vector\n * towards another ThreeVector\n * @param {ThreeVector} target the target vector\n * @param {Object} options bending options\n * @param {Number} options.increments number of increments\n * @param {Number} options.percent The percentage to bend\n * @param {Number} options.min No less than this value\n * @param {Number} options.max No more than this value\n * @return {ThreeVector} returns new Incremental Vector\n */\n getBendingDelta(target, options) {\n let increment = target.clone();\n increment.subtract(this);\n increment.multiplyScalar(options.percent);\n\n // check for max case\n if ((options.max && increment.length() > options.max) ||\n (options.max && increment.length() < options.min)) {\n return new ThreeVector(0, 0, 0);\n }\n\n // divide into increments\n increment.multiplyScalar(1 / options.increments);\n\n return increment;\n }\n}\n\nexport default ThreeVector;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/serialize/ThreeVector.js","import Serializable from './Serializable';\nimport BaseTypes from './BaseTypes';\nimport ThreeVector from './ThreeVector';\n\nconst SHOW_AS_AXIS_ANGLE = true;\nconst MAX_DEL_THETA = 0.2;\n\n/**\n * A Quaternion is a geometric object which can be used to\n * represent a three-dimensional rotation.\n */\nclass Quaternion extends Serializable {\n\n static get netScheme() {\n return {\n w: { type: BaseTypes.TYPES.FLOAT32 },\n x: { type: BaseTypes.TYPES.FLOAT32 },\n y: { type: BaseTypes.TYPES.FLOAT32 },\n z: { type: BaseTypes.TYPES.FLOAT32 }\n };\n }\n\n /**\n * Creates an instance of a Quaternion.\n * @param {Number} w - first value\n * @param {Number} x - second value\n * @param {Number} y - third value\n * @param {Number} z - fourth value\n * @return {Quaternion} v - the new Quaternion\n */\n constructor(w, x, y, z) {\n super();\n this.w = w;\n this.x = x;\n this.y = y;\n this.z = z;\n\n return this;\n }\n\n /**\n * Formatted textual description of the Quaternion.\n * @return {String} description\n */\n toString() {\n function round3(x) { return Math.round(x * 1000) / 1000; }\n if (SHOW_AS_AXIS_ANGLE) {\n let axisAngle = this.toAxisAngle();\n return `[${round3(axisAngle.angle)},${axisAngle.axis.toString()}]`;\n }\n return `[${round3(this.w)}, ${round3(this.x)}, ${round3(this.y)}, ${round3(this.z)}]`;\n }\n\n /**\n * copy values from another quaternion into this quaternion\n *\n * @param {Quaternion} sourceObj the quaternion to copy from\n * @return {Quaternion} returns self\n */\n copy(sourceObj) {\n this.set(sourceObj.w, sourceObj.x, sourceObj.y, sourceObj.z);\n return this;\n }\n\n /**\n * set quaternion values\n *\n * @param {Number} w w-value\n * @param {Number} x x-value\n * @param {Number} y y-value\n * @param {Number} z z-value\n * @return {Quaternion} returns self\n */\n set(w, x, y, z) {\n this.w = w;\n this.x = x;\n this.y = y;\n this.z = z;\n\n return this;\n }\n\n /**\n * return an axis-angle representation of this quaternion\n *\n * @return {Object} contains two attributes: axis (ThreeVector) and angle.\n */\n toAxisAngle() {\n\n // assuming quaternion normalised then w is less than 1, so term always positive.\n let axis = new ThreeVector(1, 0, 0);\n this.normalize();\n let angle = 2 * Math.acos(this.w);\n let s = Math.sqrt(1 - this.w * this.w);\n if (s > 0.001) {\n let divS = 1 / s;\n axis.x = this.x * divS;\n axis.y = this.y * divS;\n axis.z = this.z * divS;\n }\n if (s > Math.PI) {\n s -= 2 * Math.PI;\n }\n return { axis, angle };\n }\n\n normalize() {\n let l = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);\n if (l === 0) {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n this.w = 0;\n } else {\n l = 1 / l;\n this.x *= l;\n this.y *= l;\n this.z *= l;\n this.w *= l;\n }\n\n return this;\n }\n\n /**\n * set the values of this quaternion from an axis/angle representation\n *\n * @param {ThreeVector} axis The axis\n * @param {Number} angle angle in radians\n * @return {Quaternion} returns self\n */\n setFromAxisAngle(axis, angle) {\n\n if (angle < 0)\n angle += Math.PI * 2;\n let halfAngle = angle * 0.5;\n let s = Math.sin(halfAngle);\n this.x = axis.x * s;\n this.y = axis.y * s;\n this.z = axis.z * s;\n this.w = Math.cos(halfAngle);\n\n return this;\n }\n\n /**\n * conjugate the quaternion, in-place\n *\n * @return {Quaternion} returns self\n */\n conjugate() {\n this.x *= -1;\n this.y *= -1;\n this.z *= -1;\n return this;\n }\n\n /* eslint-disable */\n /**\n * multiply this quaternion by another, in-place\n *\n * @param {Quaternion} other The other quaternion\n * @return {Quaternion} returns self\n */\n multiply(other) {\n let aw = this.w, ax = this.x, ay = this.y, az = this.z;\n let bw = other.w, bx = other.x, by = other.y, bz = other.z;\n\n this.x = ax * bw + aw * bx + ay * bz - az * by;\n this.y = ay * bw + aw * by + az * bx - ax * bz;\n this.z = az * bw + aw * bz + ax * by - ay * bx;\n this.w = aw * bw - ax * bx - ay * by - az * bz;\n\n return this;\n }\n /* eslint-enable */\n\n /* eslint-disable */\n /**\n * Apply in-place slerp (spherical linear interpolation) to this quaternion,\n * towards another quaternion.\n *\n * @param {Quaternion} target The target quaternion\n * @param {Number} bending The percentage to interpolate\n * @return {Quaternion} returns self\n */\n slerp(target, bending) {\n\n if (bending <= 0) return this;\n if (bending >= 1) return this.copy(target);\n\n let aw = this.w, ax = this.x, ay = this.y, az = this.z;\n let bw = target.w, bx = target.x, by = target.y, bz = target.z;\n\n let cosHalfTheta = aw*bw + ax*bx + ay*by + az*bz;\n if (cosHalfTheta < 0) {\n this.set(-bw, -bx, -by, -bz);\n cosHalfTheta = -cosHalfTheta;\n } else {\n this.copy(target);\n }\n\n if (cosHalfTheta >= 1.0) {\n this.set(aw, ax, ay, az);\n return this;\n }\n\n let sqrSinHalfTheta = 1.0 - cosHalfTheta*cosHalfTheta;\n if (sqrSinHalfTheta < Number.EPSILON) {\n let s = 1 - bending;\n this.set(s*aw + bending*this.w, s*ax + bending*this.x, s*ay + bending*this.y, s*az + bending*this.z);\n return this.normalize();\n }\n\n let sinHalfTheta = Math.sqrt(sqrSinHalfTheta);\n let halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta);\n let delTheta = bending * halfTheta;\n if (Math.abs(delTheta) > MAX_DEL_THETA)\n delTheta = MAX_DEL_THETA * Math.sign(delTheta);\n let ratioA = Math.sin(halfTheta - delTheta)/sinHalfTheta;\n let ratioB = Math.sin(delTheta)/sinHalfTheta;\n this.set(aw*ratioA + this.w*ratioB,\n ax*ratioA + this.x*ratioB,\n ay*ratioA + this.y*ratioB,\n az*ratioA + this.z*ratioB);\n return this;\n }\n /* eslint-enable */\n}\n\nexport default Quaternion;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/serialize/Quaternion.js","import Serializable from './Serializable';\nimport BaseTypes from './BaseTypes';\n\n/**\n * GameObject is the base class of all game objects.\n * It is created only for the purpose of clearly defining the game\n * object interface.\n * Game developers will use one of the subclasses such as DynamicObject,\n * or PhysicalObject.\n */\nclass GameObject extends Serializable {\n\n static get netScheme() {\n return {\n id: { type: BaseTypes.TYPES.INT32 },\n playerId: { type: BaseTypes.TYPES.INT16 }\n };\n }\n\n /**\n * Creates an instance of a game object.\n * @param {GameEngine} gameEngine - the gameEngine this object will be used in\n * @param {Object} options - options for instantiation of the GameObject\n * @param {Number} id - if set, the new instantiated object will be set to this id instead of being generated a new one. Use with caution!\n * @param {Object} props - additional properties for creation\n * @param {Number} props.playerId - the playerId value of the player who owns this object\n */\n constructor(gameEngine, options, props) {\n super();\n /**\n * The gameEngine this object will be used in\n * @member {GameEngine}\n */\n this.gameEngine = gameEngine;\n\n /**\n * ID of this object's instance.\n * There are three cases of instance creation which can occur:\n * 1. In the normal case, the constructor is asked to assign an ID which is unique\n * across the entire game world, including the server and all the clients.\n * 2. In extrapolation mode, the client may have an object instance which does not\n * yet exist on the server, these objects are known as shadow objects. Their IDs must\n * be allocated from a different range.\n * 3. Also, temporary objects are created on the client side each time a sync is received.\n * These are used for interpolation purposes and as bending targets of position, velocity,\n * angular velocity, and orientation. In this case the id will be set to null.\n * @member {Number}\n */\n this.id = null;\n if (options && 'id' in options)\n this.id = options.id;\n else if (this.gameEngine)\n this.id = this.gameEngine.world.getNewId();\n\n /**\n * playerId of player who created this object\n * @member {Number}\n */\n this.playerId = (props && props.playerId) ? props.playerId : 0;\n\n this.components = {};\n }\n\n /**\n * Called after the object is added to to the game world.\n * This is the right place to add renderer sub-objects, physics sub-objects\n * and any other resources that should be created\n * @param {GameEngine} gameEngine the game engine\n */\n onAddToWorld(gameEngine) {}\n\n /**\n * Called after the object is removed from game-world.\n * This is where renderer sub-objects and any other resources should be freed\n * @param {GameEngine} gameEngine the game engine\n */\n onRemoveFromWorld(gameEngine) {}\n\n /**\n * Formatted textual description of the game object.\n * @return {String} description - a string description\n */\n toString() {\n return `game-object[${this.id}]`;\n }\n\n /**\n * Formatted textual description of the game object's current bending properties.\n * @return {String} description - a string description\n */\n bendingToString() {\n return 'no bending';\n }\n\n saveState(other) {\n this.savedCopy = (new this.constructor(this.gameEngine, { id: null }));\n this.savedCopy.syncTo(other ? other : this);\n }\n /**\n * Bending is defined as the amount of error correction that will be applied\n * on the client side to a given object's physical attributes, incrementally,\n * by the time the next server broadcast is expected to arrive.\n *\n * When this percentage is 0.0, the client always ignores the server object's value.\n * When this percentage is 1.0, the server object's attributes will be applied in full.\n *\n * The GameObject bending attribute is implemented as a getter, and can provide\n * distinct values for position, velocity, angle, and angularVelocity.\n * And in each case, you can also provide overrides for local objects,\n * these attributes will be called, respectively, positionLocal, velocityLocal,\n * angleLocal, angularVelocityLocal.\n *\n * @example\n * get bending() {\n * return {\n * position: { percent: 1.0, min: 0.0 },\n * velocity: { percent: 0.0, min: 0.0 },\n * angularVelocity: { percent: 0.0 },\n * angleLocal: { percent: 1.0 }\n * }\n * };\n *\n * @memberof GameObject\n * @member {Object} bending\n */\n get bending() {\n return {\n position: { percent: 1.0, min: 0.0 },\n velocity: { percent: 0.0, min: 0.0 },\n angularVelocity: { percent: 0.0 },\n angleLocal: { percent: 1.0 }\n };\n }\n\n // TODO:\n // rather than pass worldSettings on each bend, they could\n // be passed in on the constructor just once.\n bendToCurrentState(bending, worldSettings, isLocal, bendingIncrements) {\n if (this.savedCopy) {\n this.bendToCurrent(this.savedCopy, bending, worldSettings, isLocal, bendingIncrements);\n }\n this.savedCopy = null;\n }\n\n bendToCurrent(original, bending, worldSettings, isLocal, bendingIncrements) {\n }\n\n /**\n * synchronize this object to the state of an other object, by copying all the netscheme variables.\n * This is used by the synchronizer to create temporary objects, and must be implemented by all sub-classes as well.\n * @param {GameObject} other the other object to synchronize to\n */\n syncTo(other) {\n super.syncTo(other);\n this.playerId = other.playerId;\n }\n\n // copy physical attributes to physics sub-object\n refreshToPhysics() {}\n\n // copy physical attributes from physics sub-object\n refreshFromPhysics() {}\n\n // apply a single bending increment\n applyIncrementalBending() { }\n\n // clean up resources\n destroy() {}\n\n addComponent(componentInstance) {\n componentInstance.parentObject = this;\n this.components[componentInstance.constructor.name] = componentInstance;\n\n // a gameEngine might not exist if this class is instantiated by the serializer\n if (this.gameEngine) {\n this.gameEngine.emit('componentAdded', this, componentInstance);\n }\n }\n\n removeComponent(componentName) {\n // todo cleanup of the component ?\n delete this.components[componentName];\n\n // a gameEngine might not exist if this class is instantiated by the serializer\n if (this.gameEngine) {\n this.gameEngine.emit('componentRemoved', this, componentName);\n }\n }\n\n /**\n * Check whether this game object has a certain component\n * @param {Object} componentClass the comp\n * @return {Boolean} true if the gameObject contains this component\n */\n hasComponent(componentClass) {\n return componentClass.name in this.components;\n }\n\n getComponent(componentClass) {\n return this.components[componentClass.name];\n }\n\n}\n\nexport default GameObject;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/serialize/GameObject.js","export default class MathUtils {\n\n // interpolate from start to end, advancing \"percent\" of the way\n static interpolate(start, end, percent) {\n return (end - start) * percent + start;\n }\n\n // interpolate from start to end, advancing \"percent\" of the way\n //\n // returns just the delta. i.e. the value that must be added to the start value\n static interpolateDelta(start, end, percent) {\n return (end - start) * percent;\n }\n\n // interpolate from start to end, advancing \"percent\" of the way\n // and noting that the dimension wraps around {x >= wrapMin, x < wrapMax}\n //\n // returns just the delta. i.e. the value that must be added to the start value\n static interpolateDeltaWithWrapping(start, end, percent, wrapMin, wrapMax) {\n let wrapTest = wrapMax - wrapMin;\n if (start - end > wrapTest / 2) end += wrapTest;\n else if (end - start > wrapTest / 2) start += wrapTest;\n if (Math.abs(start - end) > wrapTest / 3) {\n console.log('wrap interpolation is close to limit. Not sure which edge to wrap to.');\n }\n return (end - start) * percent;\n }\n\n static interpolateWithWrapping(start, end, percent, wrapMin, wrapMax) {\n let interpolatedVal = start + this.interpolateDeltaWithWrapping(start, end, percent, wrapMin, wrapMax);\n let wrapLength = wrapMax - wrapMin;\n if (interpolatedVal >= wrapLength) interpolatedVal -= wrapLength;\n if (interpolatedVal < 0) interpolatedVal += wrapLength;\n return interpolatedVal;\n }\n}\n\n\n// WEBPACK FOOTER //\n// ../../src/lib/MathUtils.js","import TwoVector from './TwoVector';\nimport GameObject from './GameObject';\nimport BaseTypes from './BaseTypes';\nimport MathUtils from '../lib/MathUtils';\n\n/**\n * DynamicObject is the base class of the game's objects, for 2D games which\n * rely on {@link SimplePhysicsEngine}. It defines the\n * base object which can move around in the game world. The\n * extensions of this object (the subclasses)\n * will be periodically synchronized from the server to every client.\n *\n * The dynamic objects have pseudo-physical properties, which\n * allow the client to extrapolate the position\n * of dynamic objects in-between server updates.\n */\nclass DynamicObject extends GameObject {\n\n /**\n * The netScheme is a dictionary of attributes in this game\n * object. The attributes listed in the netScheme are those exact\n * attributes which will be serialized and sent from the server\n * to each client on every server update.\n * The netScheme member is implemented as a getter.\n *\n * You may choose not to implement this method, in which\n * case your object only transmits the default attributes\n * which are already part of {@link DynamicObject}.\n * But if you choose to add more attributes, make sure\n * the return value includes the netScheme of the super class.\n *\n * @memberof DynamicObject\n * @member {Object} netScheme\n * @example\n * static get netScheme() {\n * return Object.assign({\n * mojo: { type: BaseTypes.TYPES.UINT8 },\n * }, super.netScheme);\n * }\n */\n static get netScheme() {\n return Object.assign({\n position: { type: BaseTypes.TYPES.CLASSINSTANCE },\n width: { type: BaseTypes.TYPES.INT16 },\n height: { type: BaseTypes.TYPES.INT16 },\n isStatic: { type: BaseTypes.TYPES.UINT8 },\n velocity: { type: BaseTypes.TYPES.CLASSINSTANCE },\n angle: { type: BaseTypes.TYPES.FLOAT32 }\n }, super.netScheme);\n }\n\n /**\n * Creates an instance of a dynamic object.\n * NOTE 1: do not add logic to subcclasses of this function, instead, create an instance and\n * assign attributes to the new objects.\n * NOTE 2: all subclasses of this class must comply with this constructor signature.\n * This is required because the engine will create temporary instances when\n * syncs arrive on the clients.\n * @param {GameEngine} gameEngine - the gameEngine this object will be used in\n * @param {Object} options - options for the new object. See {@link GameObject}\n * @param {Object} props - properties to be set in the new object\n * @param {TwoVector} props.position - position vector\n * @param {TwoVector} props.velocity - velocity vector\n * @param {Number} props.height - object height\n * @param {Number} props.width - object width\n */\n constructor(gameEngine, options, props) {\n super(gameEngine, options, props);\n\n this.bendingIncrements = 0;\n\n this.position = new TwoVector(0, 0);\n this.velocity = new TwoVector(0, 0);\n\n /**\n * Object width for collision detection purposes. Default is 1\n * @member {Number}\n */\n this.width = (props && props.width) ? props.width : 1;\n\n /**\n * Object height for collision detection purposes. Default is 1\n * @member {Number}\n */\n this.height = (props && props.height) ? props.height : 1;\n\n /**\n * Determine if the object is static (i.e. it never moves, like a wall). The value 0 implies the object is dynamic. Default is 0 (dynamic).\n * @member {Number}\n */\n this.isStatic = (props && props.isStatic) ? props.isStatic : 0;\n\n /**\n * The friction coefficient. Velocity is multiplied by this for each step. Default is (1,1)\n * @member {TwoVector}\n */\n this.friction = new TwoVector(1, 1);\n\n /**\n * position\n * @member {TwoVector}\n */\n if (props && props.position) this.position.copy(props.position);\n\n /**\n * velocity\n * @member {TwoVector}\n */\n if (props && props.velocity) this.velocity.copy(props.velocity);\n\n /**\n * object orientation angle in degrees\n * @member {Number}\n */\n this.angle = 90;\n\n /**\n * @deprecated since version 3.0.8\n * should rotate left by {@link DynamicObject#rotationSpeed} on next step\n * @member {Boolean}\n */\n this.isRotatingLeft = false;\n\n /**\n * @deprecated since version 3.0.8\n * should rotate right by {@link DynamicObject#rotationSpeed} on next step\n * @member {Boolean}\n */\n this.isRotatingRight = false;\n\n /**\n * @deprecated since version 3.0.8\n * should accelerate by {@link DynamicObject#acceleration} on next step\n * @member {Boolean}\n */\n this.isAccelerating = false;\n\n /**\n * @deprecated since version 3.0.8\n * angle rotation per step\n * @member {Number}\n */\n this.rotationSpeed = 2.5;\n\n /**\n * @deprecated since version 3.0.8\n * acceleration per step\n * @member {Number}\n */\n this.acceleration = 0.1;\n\n this.deceleration = 0.99;\n }\n\n // convenience getters\n get x() { return this.position.x; }\n get y() { return this.position.y; }\n\n /**\n * Formatted textual description of the dynamic object.\n * The output of this method is used to describe each instance in the traces,\n * which significantly helps in debugging.\n *\n * @return {String} description - a string describing the DynamicObject\n */\n toString() {\n function round3(x) { return Math.round(x * 1000) / 1000; }\n return `${this.constructor.name}[${this.id}] player${this.playerId} Pos=${this.position} Vel=${this.velocity} angle${round3(this.angle)}`;\n }\n\n /**\n * Each object class can define its own bending overrides.\n * return an object which can include attributes: position, velocity,\n * and angle. In each case, you can specify a min value, max\n * value, and a percent value. { @see GameObject.bending }\n *\n * @return {Object} bending - an object with bending paramters\n */\n get bending() {\n return {\n // example:\n // position: { percent: 0.8, min: 0.0, max: 4.0 },\n // velocity: { percent: 0.4, min: 0.0 },\n // angleLocal: { percent: 0.0 }\n };\n }\n\n /**\n * turn object clock-wise\n * @param {Number} deltaAngle - the angle to turn, in degrees\n * @return {DynamicObject} return this object\n */\n turnRight(deltaAngle) {\n this.angle += deltaAngle;\n if (this.angle >= 360) { this.angle -= 360; }\n if (this.angle < 0) { this.angle += 360; }\n return this;\n }\n\n /**\n * turn object counter-clock-wise\n * @param {Number} deltaAngle - the angle to turn, in degrees\n * @return {DynamicObject} return this object\n */\n turnLeft(deltaAngle) {\n return this.turnRight(-deltaAngle);\n }\n\n /**\n * accelerate along the direction that the object is facing\n * @param {Number} acceleration - the acceleration\n * @return {DynamicObject} return this object\n */\n accelerate(acceleration) {\n let rad = this.angle * (Math.PI / 180);\n let dv = new TwoVector(Math.cos(rad), Math.sin(rad));\n dv.multiplyScalar(acceleration);\n this.velocity.add(dv);\n\n return this;\n }\n\n /**\n * Formatted textual description of the game object's current bending properties.\n * @return {String} description - a string description\n */\n bendingToString() {\n if (this.bendingIncrements)\n return `ΔPos=${this.bendingPositionDelta} ΔVel=${this.bendingVelocityDelta} ΔAngle=${this.bendingAngleDelta} increments=${this.bendingIncrements}`;\n return 'no bending';\n }\n\n /**\n * The maximum velocity allowed. If returns null then ignored.\n * @memberof DynamicObject\n * @member {Number} maxSpeed\n */\n get maxSpeed() { return null; }\n\n /**\n * Copy the netscheme variables from another DynamicObject.\n * This is used by the synchronizer to create temporary objects, and must be implemented by all sub-classes as well.\n * @param {DynamicObject} other DynamicObject\n */\n syncTo(other) {\n super.syncTo(other);\n this.position.copy(other.position);\n this.velocity.copy(other.velocity);\n this.width = other.width;\n this.height = other.height;\n this.bendingAngle = other.bendingAngle;\n this.rotationSpeed = other.rotationSpeed;\n this.acceleration = other.acceleration;\n this.deceleration = other.deceleration;\n }\n\n bendToCurrent(original, percent, worldSettings, isLocal, increments) {\n\n let bending = { increments, percent };\n // if the object has defined a bending multiples for this object, use them\n let positionBending = Object.assign({}, bending, this.bending.position);\n let velocityBending = Object.assign({}, bending, this.bending.velocity);\n let angleBending = Object.assign({}, bending, this.bending.angle);\n\n if (isLocal) {\n Object.assign(positionBending, this.bending.positionLocal);\n Object.assign(velocityBending, this.bending.velocityLocal);\n Object.assign(angleBending, this.bending.angleLocal);\n }\n\n // get the incremental delta position & velocity\n this.incrementScale = percent / increments;\n this.bendingPositionDelta = original.position.getBendingDelta(this.position, positionBending);\n this.bendingVelocityDelta = original.velocity.getBendingDelta(this.velocity, velocityBending);\n this.bendingAngleDelta = MathUtils.interpolateDeltaWithWrapping(original.angle, this.angle, angleBending.percent, 0, 360) / increments;\n\n this.bendingTarget = (new this.constructor());\n this.bendingTarget.syncTo(this);\n\n // revert to original\n this.position.copy(original.position);\n this.velocity.copy(original.velocity);\n this.angle = original.angle;\n\n // keep parameters\n this.bendingIncrements = increments;\n this.bendingOptions = bending;\n }\n\n applyIncrementalBending(stepDesc) {\n if (this.bendingIncrements === 0)\n return;\n\n let timeFactor = 1;\n if (stepDesc && stepDesc.dt)\n timeFactor = stepDesc.dt / (1000 / 60);\n\n const posDelta = this.bendingPositionDelta.clone().multiplyScalar(timeFactor);\n const velDelta = this.bendingVelocityDelta.clone().multiplyScalar(timeFactor);\n this.position.add(posDelta);\n this.velocity.add(velDelta);\n this.angle += (this.bendingAngleDelta * timeFactor);\n\n this.bendingIncrements--;\n }\n\n getAABB() {\n // todo take rotation into account\n // registration point is in the middle\n return {\n min: [this.x - this.width / 2, this.y - this.height / 2],\n max: [this.x + this.width / 2, this.y + this.height / 2]\n };\n }\n\n /**\n * Determine if this object will collide with another object.\n * Only applicable on \"bruteForce\" physics engine.\n * @param {DynamicObject} other DynamicObject\n * @return {Boolean} true if the two objects collide\n */\n collidesWith(other) {\n return true;\n }\n\n}\n\nexport default DynamicObject;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/serialize/DynamicObject.js","import GameObject from './GameObject';\nimport BaseTypes from './BaseTypes';\nimport TwoVector from './TwoVector';\nimport MathUtils from '../lib/MathUtils';\n\n/**\n * The PhysicalObject2D is the base class for physical game objects in 2D Physics\n */\nclass PhysicalObject2D extends GameObject {\n\n /**\n * The netScheme is a dictionary of attributes in this game\n * object. The attributes listed in the netScheme are those exact\n * attributes which will be serialized and sent from the server\n * to each client on every server update.\n * The netScheme member is implemented as a getter.\n *\n * You may choose not to implement this method, in which\n * case your object only transmits the default attributes\n * which are already part of {@link PhysicalObject2D}.\n * But if you choose to add more attributes, make sure\n * the return value includes the netScheme of the super class.\n *\n * @memberof PhysicalObject2D\n * @member {Object} netScheme\n * @example\n * static get netScheme() {\n * return Object.assign({\n * mojo: { type: BaseTypes.TYPES.UINT8 },\n * }, super.netScheme);\n * }\n */\n static get netScheme() {\n return Object.assign({\n mass: { type: BaseTypes.TYPES.FLOAT32 },\n position: { type: BaseTypes.TYPES.CLASSINSTANCE },\n angle: { type: BaseTypes.TYPES.FLOAT32 },\n velocity: { type: BaseTypes.TYPES.CLASSINSTANCE },\n angularVelocity: { type: BaseTypes.TYPES.FLOAT32 }\n }, super.netScheme);\n }\n\n /**\n * Creates an instance of a physical object.\n * Override to provide starting values for position, velocity, angle and angular velocity.\n * NOTE: all subclasses of this class must comply with this constructor signature.\n * This is required because the engine will create temporary instances when\n * syncs arrive on the clients.\n * @param {GameEngine} gameEngine - the gameEngine this object will be used in\n * @param {Object} options - options for the new object. See {@link GameObject}\n * @param {Object} props - properties to be set in the new object\n * @param {TwoVector} props.position - position vector\n * @param {TwoVector} props.velocity - velocity vector\n * @param {Number} props.angle - orientation angle\n * @param {Number} props.mass - the mass\n * @param {Number} props.angularVelocity - angular velocity\n */\n constructor(gameEngine, options, props) {\n super(gameEngine, options, props);\n this.bendingIncrements = 0;\n\n // set default position, velocity and quaternion\n this.position = new TwoVector(0, 0);\n this.velocity = new TwoVector(0, 0);\n this.angle = 0;\n this.angularVelocity = 0;\n this.mass = 0;\n\n // use values if provided\n props = props || {};\n if (props.position) this.position.copy(props.position);\n if (props.velocity) this.velocity.copy(props.velocity);\n if (props.angle) this.angle = props.angle;\n if (props.angularVelocity) this.angularVelocity = props.angularVelocity;\n if (props.mass) this.mass = props.mass;\n\n this.class = PhysicalObject2D;\n }\n\n /**\n * Called after the object is added to to the game world.\n * This is the right place to add renderer sub-objects, physics sub-objects\n * and any other resources that should be created\n */\n onAddToWorld() {}\n\n /**\n * Formatted textual description of the dynamic object.\n * The output of this method is used to describe each instance in the traces,\n * which significantly helps in debugging.\n *\n * @return {String} description - a string describing the PhysicalObject2D\n */\n toString() {\n let p = this.position.toString();\n let v = this.velocity.toString();\n let a = this.angle;\n let av = this.angularVelocity;\n return `phyObj2D[${this.id}] player${this.playerId} Pos=${p} Vel=${v} Ang=${a} AVel=${av}`;\n }\n\n /**\n * Each object class can define its own bending overrides.\n * return an object which can include attributes: position, velocity,\n * angle, and angularVelocity. In each case, you can specify a min value, max\n * value, and a percent value.\n *\n * @return {Object} bending - an object with bending paramters\n */\n get bending() {\n return {\n // example:\n // position: { percent: 0.8, min: 0.0, max: 4.0 },\n // velocity: { percent: 0.4, min: 0.0 },\n // angularVelocity: { percent: 0.0 },\n // angleLocal: { percent: 0.0 }\n };\n }\n\n // display object's physical attributes as a string\n // for debugging purposes mostly\n bendingToString() {\n if (this.bendingIncrements)\n return `ΔPos=${this.bendingPositionDelta} ΔVel=${this.bendingVelocityDelta} ΔAngle=${this.bendingAngleDelta} increments=${this.bendingIncrements}`;\n return 'no bending';\n }\n\n // derive and save the bending increment parameters:\n // - bendingPositionDelta\n // - bendingVelocityDelta\n // - bendingAVDelta\n // - bendingAngleDelta\n // these can later be used to \"bend\" incrementally from the state described\n // by \"original\" to the state described by \"self\"\n bendToCurrent(original, percent, worldSettings, isLocal, increments) {\n\n let bending = { increments, percent };\n // if the object has defined a bending multiples for this object, use them\n let positionBending = Object.assign({}, bending, this.bending.position);\n let velocityBending = Object.assign({}, bending, this.bending.velocity);\n let angleBending = Object.assign({}, bending, this.bending.angle);\n let avBending = Object.assign({}, bending, this.bending.angularVelocity);\n\n // check for local object overrides to bendingTarget\n if (isLocal) {\n Object.assign(positionBending, this.bending.positionLocal);\n Object.assign(velocityBending, this.bending.velocityLocal);\n Object.assign(angleBending, this.bending.angleLocal);\n Object.assign(avBending, this.bending.angularVelocityLocal);\n }\n\n // get the incremental delta position & velocity\n this.incrementScale = percent / increments;\n this.bendingPositionDelta = original.position.getBendingDelta(this.position, positionBending);\n this.bendingVelocityDelta = original.velocity.getBendingDelta(this.velocity, velocityBending);\n\n // get the incremental angular-velocity\n this.bendingAVDelta = (this.angularVelocity - original.angularVelocity) * this.incrementScale * avBending.percent;\n\n // get the incremental angle correction\n this.bendingAngleDelta = MathUtils.interpolateDeltaWithWrapping(original.angle, this.angle, angleBending.percent, 0, 2 * Math.PI) / increments;\n\n this.bendingTarget = (new this.constructor());\n this.bendingTarget.syncTo(this);\n\n // revert to original\n this.position.copy(original.position);\n this.angle = original.angle;\n this.angularVelocity = original.angularVelocity;\n this.velocity.copy(original.velocity);\n\n this.bendingIncrements = increments;\n this.bendingOptions = bending;\n\n this.refreshToPhysics();\n }\n\n syncTo(other, options) {\n\n super.syncTo(other);\n\n this.position.copy(other.position);\n this.angle = other.angle;\n this.angularVelocity = other.angularVelocity;\n\n if (!options || !options.keepVelocity) {\n this.velocity.copy(other.velocity);\n }\n\n if (this.physicsObj) this.refreshToPhysics();\n }\n\n // update position, angle, angular velocity, and velocity from new physical state.\n refreshFromPhysics() {\n this.copyVector(this.physicsObj.position, this.position);\n this.copyVector(this.physicsObj.velocity, this.velocity);\n this.angle = this.physicsObj.angle;\n this.angularVelocity = this.physicsObj.angularVelocity;\n }\n\n // generic vector copy. We need this because different\n // physics engines have different implementations.\n // TODO: Better implementation: the physics engine implementor\n // should define copyFromLanceVector and copyToLanceVector\n copyVector(source, target) {\n let sourceVec = source;\n if (typeof source[0] === 'number' && typeof source[1] === 'number')\n sourceVec = { x: source[0], y: source[1] };\n\n if (typeof target.copy === 'function') {\n target.copy(sourceVec);\n } else if (target instanceof Float32Array) {\n target[0] = sourceVec.x;\n target[1] = sourceVec.y;\n } else {\n target.x = sourceVec.x;\n target.y = sourceVec.y;\n }\n }\n\n // update position, angle, angular velocity, and velocity from new game state.\n refreshToPhysics() {\n this.copyVector(this.position, this.physicsObj.position);\n this.copyVector(this.velocity, this.physicsObj.velocity);\n this.physicsObj.angle = this.angle;\n this.physicsObj.angularVelocity = this.angularVelocity;\n }\n\n // apply one increment of bending\n applyIncrementalBending(stepDesc) {\n if (this.bendingIncrements === 0)\n return;\n\n let timeFactor = 1;\n if (stepDesc && stepDesc.dt)\n timeFactor = stepDesc.dt / (1000 / 60);\n\n const posDelta = this.bendingPositionDelta.clone().multiplyScalar(timeFactor);\n const velDelta = this.bendingVelocityDelta.clone().multiplyScalar(timeFactor);\n this.position.add(posDelta);\n this.velocity.add(velDelta);\n this.angularVelocity += (this.bendingAVDelta * timeFactor);\n this.angle += (this.bendingAngleDelta * timeFactor);\n\n this.bendingIncrements--;\n }\n\n // interpolate implementation\n interpolate(nextObj, percent) {\n\n // slerp to target position\n this.position.lerp(nextObj.position, percent);\n this.angle = MathUtils.interpolateDeltaWithWrapping(this.angle, nextObj.angle, percent, 0, 2 * Math.PI);\n }\n}\n\nexport default PhysicalObject2D;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/serialize/PhysicalObject2D.js","import GameObject from './GameObject';\nimport BaseTypes from './BaseTypes';\nimport ThreeVector from './ThreeVector';\nimport Quaternion from './Quaternion';\n\n/**\n * The PhysicalObject3D is the base class for physical game objects\n */\nclass PhysicalObject3D extends GameObject {\n\n /**\n * The netScheme is a dictionary of attributes in this game\n * object. The attributes listed in the netScheme are those exact\n * attributes which will be serialized and sent from the server\n * to each client on every server update.\n * The netScheme member is implemented as a getter.\n *\n * You may choose not to implement this method, in which\n * case your object only transmits the default attributes\n * which are already part of {@link PhysicalObject3D}.\n * But if you choose to add more attributes, make sure\n * the return value includes the netScheme of the super class.\n *\n * @memberof PhysicalObject3D\n * @member {Object} netScheme\n * @example\n * static get netScheme() {\n * return Object.assign({\n * mojo: { type: BaseTypes.TYPES.UINT8 },\n * }, super.netScheme);\n * }\n */\n static get netScheme() {\n return Object.assign({\n position: { type: BaseTypes.TYPES.CLASSINSTANCE },\n quaternion: { type: BaseTypes.TYPES.CLASSINSTANCE },\n velocity: { type: BaseTypes.TYPES.CLASSINSTANCE },\n angularVelocity: { type: BaseTypes.TYPES.CLASSINSTANCE }\n }, super.netScheme);\n }\n\n /**\n * Creates an instance of a physical object.\n * Override to provide starting values for position, velocity, quaternion and angular velocity.\n * NOTE: all subclasses of this class must comply with this constructor signature.\n * This is required because the engine will create temporary instances when\n * syncs arrive on the clients.\n * @param {GameEngine} gameEngine - the gameEngine this object will be used in\n * @param {Object} options - options for the new object. See {@link GameObject}\n * @param {Object} props - properties to be set in the new object\n * @param {ThreeVector} props.position - position vector\n * @param {ThreeVector} props.velocity - velocity vector\n * @param {Quaternion} props.quaternion - orientation quaternion\n * @param {ThreeVector} props.angularVelocity - 3-vector representation of angular velocity\n */\n constructor(gameEngine, options, props) {\n super(gameEngine, options, props);\n this.bendingIncrements = 0;\n\n // set default position, velocity and quaternion\n this.position = new ThreeVector(0, 0, 0);\n this.velocity = new ThreeVector(0, 0, 0);\n this.quaternion = new Quaternion(1, 0, 0, 0);\n this.angularVelocity = new ThreeVector(0, 0, 0);\n\n // use values if provided\n props = props || {};\n if (props.position) this.position.copy(props.position);\n if (props.velocity) this.velocity.copy(props.velocity);\n if (props.quaternion) this.quaternion.copy(props.quaternion);\n if (props.angularVelocity) this.angularVelocity.copy(props.angularVelocity);\n\n this.class = PhysicalObject3D;\n }\n\n /**\n * Formatted textual description of the dynamic object.\n * The output of this method is used to describe each instance in the traces,\n * which significantly helps in debugging.\n *\n * @return {String} description - a string describing the PhysicalObject3D\n */\n toString() {\n let p = this.position.toString();\n let v = this.velocity.toString();\n let q = this.quaternion.toString();\n let a = this.angularVelocity.toString();\n return `phyObj[${this.id}] player${this.playerId} Pos${p} Vel${v} Dir${q} AVel${a}`;\n }\n\n // display object's physical attributes as a string\n // for debugging purposes mostly\n bendingToString() {\n if (this.bendingOptions)\n return `bend=${this.bendingOptions.percent} deltaPos=${this.bendingPositionDelta} deltaVel=${this.bendingVelocityDelta} deltaQuat=${this.bendingQuaternionDelta}`;\n return 'no bending';\n }\n\n // derive and save the bending increment parameters:\n // - bendingPositionDelta\n // - bendingAVDelta\n // - bendingQuaternionDelta\n // these can later be used to \"bend\" incrementally from the state described\n // by \"original\" to the state described by \"self\"\n bendToCurrent(original, percent, worldSettings, isLocal, increments) {\n\n let bending = { increments, percent };\n // if the object has defined a bending multiples for this object, use them\n let positionBending = Object.assign({}, bending, this.bending.position);\n let velocityBending = Object.assign({}, bending, this.bending.velocity);\n\n // check for local object overrides to bendingTarget\n if (isLocal) {\n Object.assign(positionBending, this.bending.positionLocal);\n Object.assign(velocityBending, this.bending.velocityLocal);\n }\n\n // get the incremental delta position & velocity\n this.incrementScale = percent / increments;\n this.bendingPositionDelta = original.position.getBendingDelta(this.position, positionBending);\n this.bendingVelocityDelta = original.velocity.getBendingDelta(this.velocity, velocityBending);\n this.bendingAVDelta = new ThreeVector(0, 0, 0);\n\n // get the incremental quaternion rotation\n this.bendingQuaternionDelta = (new Quaternion()).copy(original.quaternion).conjugate();\n this.bendingQuaternionDelta.multiply(this.quaternion);\n\n let axisAngle = this.bendingQuaternionDelta.toAxisAngle();\n axisAngle.angle *= this.incrementScale;\n this.bendingQuaternionDelta.setFromAxisAngle(axisAngle.axis, axisAngle.angle);\n\n this.bendingTarget = (new this.constructor());\n this.bendingTarget.syncTo(this);\n\n this.position.copy(original.position);\n this.quaternion.copy(original.quaternion);\n this.angularVelocity.copy(original.angularVelocity);\n\n this.bendingIncrements = increments;\n this.bendingOptions = bending;\n\n this.refreshToPhysics();\n }\n\n syncTo(other, options) {\n\n super.syncTo(other);\n\n this.position.copy(other.position);\n this.quaternion.copy(other.quaternion);\n this.angularVelocity.copy(other.angularVelocity);\n\n if (!options || !options.keepVelocity) {\n this.velocity.copy(other.velocity);\n }\n\n if (this.physicsObj)\n this.refreshToPhysics();\n }\n\n // update position, quaternion, and velocity from new physical state.\n refreshFromPhysics() {\n this.position.copy(this.physicsObj.position);\n this.quaternion.copy(this.physicsObj.quaternion);\n this.velocity.copy(this.physicsObj.velocity);\n this.angularVelocity.copy(this.physicsObj.angularVelocity);\n }\n\n // update position, quaternion, and velocity from new game state.\n refreshToPhysics() {\n this.physicsObj.position.copy(this.position);\n this.physicsObj.quaternion.copy(this.quaternion);\n this.physicsObj.velocity.copy(this.velocity);\n this.physicsObj.angularVelocity.copy(this.angularVelocity);\n }\n\n // apply one increment of bending\n applyIncrementalBending(stepDesc) {\n if (this.bendingIncrements === 0)\n return;\n\n if (stepDesc && stepDesc.dt) {\n const timeFactor = stepDesc.dt / (1000 / 60);\n // TODO: use clone() below. it's cleaner\n const posDelta = (new ThreeVector()).copy(this.bendingPositionDelta).multiplyScalar(timeFactor);\n const avDelta = (new ThreeVector()).copy(this.bendingAVDelta).multiplyScalar(timeFactor);\n this.position.add(posDelta);\n this.angularVelocity.add(avDelta);\n\n // one approach to orientation bending is slerp:\n this.quaternion.slerp(this.bendingTarget.quaternion, this.incrementScale * timeFactor * 0.8);\n } else {\n this.position.add(this.bendingPositionDelta);\n this.angularVelocity.add(this.bendingAVDelta);\n this.quaternion.slerp(this.bendingTarget.quaternion, this.incrementScale);\n }\n\n // alternative: fixed delta-quaternion correction\n // TODO: adjust quaternion bending to dt timefactor precision\n // this.quaternion.multiply(this.bendingQuaternionDelta);\n this.bendingIncrements--;\n }\n\n // interpolate implementation\n interpolate(nextObj, percent) {\n\n // slerp to target position\n this.position.lerp(nextObj.position, percent);\n this.quaternion.slerp(nextObj.quaternion, percent);\n }\n}\n\nexport default PhysicalObject3D;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/serialize/PhysicalObject3D.js","import Trace from './Trace.js';\n\nexport default {\n Trace\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../src/lib/lib.js","const PACKET_TYPES = Object.create(null); // no Map = no polyfill\nPACKET_TYPES[\"open\"] = \"0\";\nPACKET_TYPES[\"close\"] = \"1\";\nPACKET_TYPES[\"ping\"] = \"2\";\nPACKET_TYPES[\"pong\"] = \"3\";\nPACKET_TYPES[\"message\"] = \"4\";\nPACKET_TYPES[\"upgrade\"] = \"5\";\nPACKET_TYPES[\"noop\"] = \"6\";\nconst PACKET_TYPES_REVERSE = Object.create(null);\nObject.keys(PACKET_TYPES).forEach(key => {\n PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;\n});\nconst ERROR_PACKET = { type: \"error\", data: \"parser error\" };\nexport { PACKET_TYPES, PACKET_TYPES_REVERSE, ERROR_PACKET };\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-parser/build/esm/commons.js","import { PACKET_TYPES } from \"./commons.js\";\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n Object.prototype.toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n// ArrayBuffer.isView method is not defined in IE10\nconst isView = obj => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj && obj.buffer instanceof ArrayBuffer;\n};\nconst encodePacket = ({ type, data }, supportsBinary, callback) => {\n if (withNativeBlob && data instanceof Blob) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(data, callback);\n }\n }\n else if (withNativeArrayBuffer &&\n (data instanceof ArrayBuffer || isView(data))) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(new Blob([data]), callback);\n }\n }\n // plain string\n return callback(PACKET_TYPES[type] + (data || \"\"));\n};\nconst encodeBlobAsBase64 = (data, callback) => {\n const fileReader = new FileReader();\n fileReader.onload = function () {\n const content = fileReader.result.split(\",\")[1];\n callback(\"b\" + (content || \"\"));\n };\n return fileReader.readAsDataURL(data);\n};\nfunction toArray(data) {\n if (data instanceof Uint8Array) {\n return data;\n }\n else if (data instanceof ArrayBuffer) {\n return new Uint8Array(data);\n }\n else {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n }\n}\nlet TEXT_ENCODER;\nexport function encodePacketToBinary(packet, callback) {\n if (withNativeBlob && packet.data instanceof Blob) {\n return packet.data\n .arrayBuffer()\n .then(toArray)\n .then(callback);\n }\n else if (withNativeArrayBuffer &&\n (packet.data instanceof ArrayBuffer || isView(packet.data))) {\n return callback(toArray(packet.data));\n }\n encodePacket(packet, false, encoded => {\n if (!TEXT_ENCODER) {\n TEXT_ENCODER = new TextEncoder();\n }\n callback(TEXT_ENCODER.encode(encoded));\n });\n}\nexport { encodePacket };\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-parser/build/esm/encodePacket.browser.js","// imported from https://github.com/socketio/base64-arraybuffer\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nexport const encode = (arraybuffer) => {\n let bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nexport const decode = (base64) => {\n let bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n const arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return arraybuffer;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"./contrib/base64-arraybuffer.js\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nexport const decodePacket = (encodedPacket, binaryType) => {\n if (typeof encodedPacket !== \"string\") {\n return {\n type: \"message\",\n data: mapBinary(encodedPacket, binaryType)\n };\n }\n const type = encodedPacket.charAt(0);\n if (type === \"b\") {\n return {\n type: \"message\",\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType)\n };\n }\n const packetType = PACKET_TYPES_REVERSE[type];\n if (!packetType) {\n return ERROR_PACKET;\n }\n return encodedPacket.length > 1\n ? {\n type: PACKET_TYPES_REVERSE[type],\n data: encodedPacket.substring(1)\n }\n : {\n type: PACKET_TYPES_REVERSE[type]\n };\n};\nconst decodeBase64Packet = (data, binaryType) => {\n if (withNativeArrayBuffer) {\n const decoded = decode(data);\n return mapBinary(decoded, binaryType);\n }\n else {\n return { base64: true, data }; // fallback for old browsers\n }\n};\nconst mapBinary = (data, binaryType) => {\n switch (binaryType) {\n case \"blob\":\n if (data instanceof Blob) {\n // from WebSocket + binaryType \"blob\"\n return data;\n }\n else {\n // from HTTP long-polling or WebTransport\n return new Blob([data]);\n }\n case \"arraybuffer\":\n default:\n if (data instanceof ArrayBuffer) {\n // from HTTP long-polling (base64) or WebSocket + binaryType \"arraybuffer\"\n return data;\n }\n else {\n // from WebTransport (Uint8Array)\n return data.buffer;\n }\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-parser/build/esm/decodePacket.browser.js","import { encodePacket, encodePacketToBinary } from \"./encodePacket.js\";\nimport { decodePacket } from \"./decodePacket.js\";\nimport { ERROR_PACKET } from \"./commons.js\";\nconst SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\nconst encodePayload = (packets, callback) => {\n // some packets may be added to the array while encoding, so the initial length must be saved\n const length = packets.length;\n const encodedPackets = new Array(length);\n let count = 0;\n packets.forEach((packet, i) => {\n // force base64 encoding for binary packets\n encodePacket(packet, false, encodedPacket => {\n encodedPackets[i] = encodedPacket;\n if (++count === length) {\n callback(encodedPackets.join(SEPARATOR));\n }\n });\n });\n};\nconst decodePayload = (encodedPayload, binaryType) => {\n const encodedPackets = encodedPayload.split(SEPARATOR);\n const packets = [];\n for (let i = 0; i < encodedPackets.length; i++) {\n const decodedPacket = decodePacket(encodedPackets[i], binaryType);\n packets.push(decodedPacket);\n if (decodedPacket.type === \"error\") {\n break;\n }\n }\n return packets;\n};\nexport function createPacketEncoderStream() {\n return new TransformStream({\n transform(packet, controller) {\n encodePacketToBinary(packet, encodedPacket => {\n const payloadLength = encodedPacket.length;\n let header;\n // inspired by the WebSocket format: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#decoding_payload_length\n if (payloadLength < 126) {\n header = new Uint8Array(1);\n new DataView(header.buffer).setUint8(0, payloadLength);\n }\n else if (payloadLength < 65536) {\n header = new Uint8Array(3);\n const view = new DataView(header.buffer);\n view.setUint8(0, 126);\n view.setUint16(1, payloadLength);\n }\n else {\n header = new Uint8Array(9);\n const view = new DataView(header.buffer);\n view.setUint8(0, 127);\n view.setBigUint64(1, BigInt(payloadLength));\n }\n // first bit indicates whether the payload is plain text (0) or binary (1)\n if (packet.data && typeof packet.data !== \"string\") {\n header[0] |= 0x80;\n }\n controller.enqueue(header);\n controller.enqueue(encodedPacket);\n });\n }\n });\n}\nlet TEXT_DECODER;\nfunction totalLength(chunks) {\n return chunks.reduce((acc, chunk) => acc + chunk.length, 0);\n}\nfunction concatChunks(chunks, size) {\n if (chunks[0].length === size) {\n return chunks.shift();\n }\n const buffer = new Uint8Array(size);\n let j = 0;\n for (let i = 0; i < size; i++) {\n buffer[i] = chunks[0][j++];\n if (j === chunks[0].length) {\n chunks.shift();\n j = 0;\n }\n }\n if (chunks.length && j < chunks[0].length) {\n chunks[0] = chunks[0].slice(j);\n }\n return buffer;\n}\nexport function createPacketDecoderStream(maxPayload, binaryType) {\n if (!TEXT_DECODER) {\n TEXT_DECODER = new TextDecoder();\n }\n const chunks = [];\n let state = 0 /* READ_HEADER */;\n let expectedLength = -1;\n let isBinary = false;\n return new TransformStream({\n transform(chunk, controller) {\n chunks.push(chunk);\n while (true) {\n if (state === 0 /* READ_HEADER */) {\n if (totalLength(chunks) < 1) {\n break;\n }\n const header = concatChunks(chunks, 1);\n isBinary = (header[0] & 0x80) === 0x80;\n expectedLength = header[0] & 0x7f;\n if (expectedLength < 126) {\n state = 3 /* READ_PAYLOAD */;\n }\n else if (expectedLength === 126) {\n state = 1 /* READ_EXTENDED_LENGTH_16 */;\n }\n else {\n state = 2 /* READ_EXTENDED_LENGTH_64 */;\n }\n }\n else if (state === 1 /* READ_EXTENDED_LENGTH_16 */) {\n if (totalLength(chunks) < 2) {\n break;\n }\n const headerArray = concatChunks(chunks, 2);\n expectedLength = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length).getUint16(0);\n state = 3 /* READ_PAYLOAD */;\n }\n else if (state === 2 /* READ_EXTENDED_LENGTH_64 */) {\n if (totalLength(chunks) < 8) {\n break;\n }\n const headerArray = concatChunks(chunks, 8);\n const view = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length);\n const n = view.getUint32(0);\n if (n > Math.pow(2, 53 - 32) - 1) {\n // the maximum safe integer in JavaScript is 2^53 - 1\n controller.enqueue(ERROR_PACKET);\n break;\n }\n expectedLength = n * Math.pow(2, 32) + view.getUint32(4);\n state = 3 /* READ_PAYLOAD */;\n }\n else {\n if (totalLength(chunks) < expectedLength) {\n break;\n }\n const data = concatChunks(chunks, expectedLength);\n controller.enqueue(decodePacket(isBinary ? data : TEXT_DECODER.decode(data), binaryType));\n state = 0 /* READ_HEADER */;\n }\n if (expectedLength === 0 || expectedLength > maxPayload) {\n controller.enqueue(ERROR_PACKET);\n break;\n }\n }\n }\n });\n}\nexport const protocol = 4;\nexport { encodePacket, encodePayload, decodePacket, decodePayload };\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-parser/build/esm/index.js","/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nexport function Emitter(obj) {\n if (obj) return mixin(obj);\n}\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n .push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n function on() {\n this.off(event, on);\n fn.apply(this, arguments);\n }\n\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks['$' + event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks['$' + event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this._callbacks['$' + event];\n }\n\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n this._callbacks = this._callbacks || {};\n\n var args = new Array(arguments.length - 1)\n , callbacks = this._callbacks['$' + event];\n\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n\n return this;\n};\n\n// alias used for reserved events (protected method)\nEmitter.prototype.emitReserved = Emitter.prototype.emit;\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n this._callbacks = this._callbacks || {};\n return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n return !! this.listeners(event).length;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/@socket.io/component-emitter/index.mjs","export const globalThisShim = (() => {\n if (typeof self !== \"undefined\") {\n return self;\n }\n else if (typeof window !== \"undefined\") {\n return window;\n }\n else {\n return Function(\"return this\")();\n }\n})();\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/globalThis.browser.js","import { globalThisShim as globalThis } from \"./globalThis.js\";\nexport function pick(obj, ...attr) {\n return attr.reduce((acc, k) => {\n if (obj.hasOwnProperty(k)) {\n acc[k] = obj[k];\n }\n return acc;\n }, {});\n}\n// Keep a reference to the real timeout functions so they can be used when overridden\nconst NATIVE_SET_TIMEOUT = globalThis.setTimeout;\nconst NATIVE_CLEAR_TIMEOUT = globalThis.clearTimeout;\nexport function installTimerFunctions(obj, opts) {\n if (opts.useNativeTimers) {\n obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globalThis);\n obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globalThis);\n }\n else {\n obj.setTimeoutFn = globalThis.setTimeout.bind(globalThis);\n obj.clearTimeoutFn = globalThis.clearTimeout.bind(globalThis);\n }\n}\n// base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64)\nconst BASE64_OVERHEAD = 1.33;\n// we could also have used `new Blob([obj]).size`, but it isn't supported in IE9\nexport function byteLength(obj) {\n if (typeof obj === \"string\") {\n return utf8Length(obj);\n }\n // arraybuffer or blob\n return Math.ceil((obj.byteLength || obj.size) * BASE64_OVERHEAD);\n}\nfunction utf8Length(str) {\n let c = 0, length = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/util.js","// imported from https://github.com/galkn/querystring\n/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\nexport function encode(obj) {\n let str = '';\n for (let i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (str.length)\n str += '&';\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n }\n }\n return str;\n}\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\nexport function decode(qs) {\n let qry = {};\n let pairs = qs.split('&');\n for (let i = 0, l = pairs.length; i < l; i++) {\n let pair = pairs[i].split('=');\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n return qry;\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/contrib/parseqs.js","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nimport { encode } from \"./contrib/parseqs.js\";\nclass TransportError extends Error {\n constructor(reason, description, context) {\n super(reason);\n this.description = description;\n this.context = context;\n this.type = \"TransportError\";\n }\n}\nexport class Transport extends Emitter {\n /**\n * Transport abstract constructor.\n *\n * @param {Object} opts - options\n * @protected\n */\n constructor(opts) {\n super();\n this.writable = false;\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.query = opts.query;\n this.socket = opts.socket;\n }\n /**\n * Emits an error.\n *\n * @param {String} reason\n * @param description\n * @param context - the error context\n * @return {Transport} for chaining\n * @protected\n */\n onError(reason, description, context) {\n super.emitReserved(\"error\", new TransportError(reason, description, context));\n return this;\n }\n /**\n * Opens the transport.\n */\n open() {\n this.readyState = \"opening\";\n this.doOpen();\n return this;\n }\n /**\n * Closes the transport.\n */\n close() {\n if (this.readyState === \"opening\" || this.readyState === \"open\") {\n this.doClose();\n this.onClose();\n }\n return this;\n }\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n */\n send(packets) {\n if (this.readyState === \"open\") {\n this.write(packets);\n }\n else {\n // this might happen if the transport was silently closed in the beforeunload event handler\n }\n }\n /**\n * Called upon open\n *\n * @protected\n */\n onOpen() {\n this.readyState = \"open\";\n this.writable = true;\n super.emitReserved(\"open\");\n }\n /**\n * Called with data.\n *\n * @param {String} data\n * @protected\n */\n onData(data) {\n const packet = decodePacket(data, this.socket.binaryType);\n this.onPacket(packet);\n }\n /**\n * Called with a decoded packet.\n *\n * @protected\n */\n onPacket(packet) {\n super.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon close.\n *\n * @protected\n */\n onClose(details) {\n this.readyState = \"closed\";\n super.emitReserved(\"close\", details);\n }\n /**\n * Pauses the transport, in order not to lose packets during an upgrade.\n *\n * @param onPause\n */\n pause(onPause) { }\n createUri(schema, query = {}) {\n return (schema +\n \"://\" +\n this._hostname() +\n this._port() +\n this.opts.path +\n this._query(query));\n }\n _hostname() {\n const hostname = this.opts.hostname;\n return hostname.indexOf(\":\") === -1 ? hostname : \"[\" + hostname + \"]\";\n }\n _port() {\n if (this.opts.port &&\n ((this.opts.secure && Number(this.opts.port !== 443)) ||\n (!this.opts.secure && Number(this.opts.port) !== 80))) {\n return \":\" + this.opts.port;\n }\n else {\n return \"\";\n }\n }\n _query(query) {\n const encodedQuery = encode(query);\n return encodedQuery.length ? \"?\" + encodedQuery : \"\";\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/transport.js","// imported from https://github.com/unshiftio/yeast\n'use strict';\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), length = 64, map = {};\nlet seed = 0, i = 0, prev;\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nexport function encode(num) {\n let encoded = '';\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n return encoded;\n}\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nexport function decode(str) {\n let decoded = 0;\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n return decoded;\n}\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nexport function yeast() {\n const now = encode(+new Date());\n if (now !== prev)\n return seed = 0, prev = now;\n return now + '.' + encode(seed++);\n}\n//\n// Map each character to its index.\n//\nfor (; i < length; i++)\n map[alphabet[i]] = i;\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/contrib/yeast.js","// imported from https://github.com/component/has-cors\nlet value = false;\ntry {\n value = typeof XMLHttpRequest !== 'undefined' &&\n 'withCredentials' in new XMLHttpRequest();\n}\ncatch (err) {\n // if XMLHttp support is disabled in IE then it will throw\n // when trying to create\n}\nexport const hasCORS = value;\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/contrib/has-cors.js","// browser shim for xmlhttprequest module\nimport { hasCORS } from \"../contrib/has-cors.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nexport function XHR(opts) {\n const xdomain = opts.xdomain;\n // XMLHttpRequest can be disabled on IE\n try {\n if (\"undefined\" !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n return new XMLHttpRequest();\n }\n }\n catch (e) { }\n if (!xdomain) {\n try {\n return new globalThis[[\"Active\"].concat(\"Object\").join(\"X\")](\"Microsoft.XMLHTTP\");\n }\n catch (e) { }\n }\n}\nexport function createCookieJar() { }\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/transports/xmlhttprequest.browser.js","import { Transport } from \"../transport.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nimport { createCookieJar, XHR as XMLHttpRequest, } from \"./xmlhttprequest.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nfunction empty() { }\nconst hasXHR2 = (function () {\n const xhr = new XMLHttpRequest({\n xdomain: false,\n });\n return null != xhr.responseType;\n})();\nexport class Polling extends Transport {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @package\n */\n constructor(opts) {\n super(opts);\n this.polling = false;\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? \"443\" : \"80\";\n }\n this.xd =\n (typeof location !== \"undefined\" &&\n opts.hostname !== location.hostname) ||\n port !== opts.port;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n if (this.opts.withCredentials) {\n this.cookieJar = createCookieJar();\n }\n }\n get name() {\n return \"polling\";\n }\n /**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @protected\n */\n doOpen() {\n this.poll();\n }\n /**\n * Pauses polling.\n *\n * @param {Function} onPause - callback upon buffers are flushed and transport is paused\n * @package\n */\n pause(onPause) {\n this.readyState = \"pausing\";\n const pause = () => {\n this.readyState = \"paused\";\n onPause();\n };\n if (this.polling || !this.writable) {\n let total = 0;\n if (this.polling) {\n total++;\n this.once(\"pollComplete\", function () {\n --total || pause();\n });\n }\n if (!this.writable) {\n total++;\n this.once(\"drain\", function () {\n --total || pause();\n });\n }\n }\n else {\n pause();\n }\n }\n /**\n * Starts polling cycle.\n *\n * @private\n */\n poll() {\n this.polling = true;\n this.doPoll();\n this.emitReserved(\"poll\");\n }\n /**\n * Overloads onData to detect payloads.\n *\n * @protected\n */\n onData(data) {\n const callback = (packet) => {\n // if its the first message we consider the transport open\n if (\"opening\" === this.readyState && packet.type === \"open\") {\n this.onOpen();\n }\n // if its a close packet, we close the ongoing requests\n if (\"close\" === packet.type) {\n this.onClose({ description: \"transport closed by the server\" });\n return false;\n }\n // otherwise bypass onData and handle the message\n this.onPacket(packet);\n };\n // decode payload\n decodePayload(data, this.socket.binaryType).forEach(callback);\n // if an event did not trigger closing\n if (\"closed\" !== this.readyState) {\n // if we got data we're not polling\n this.polling = false;\n this.emitReserved(\"pollComplete\");\n if (\"open\" === this.readyState) {\n this.poll();\n }\n else {\n }\n }\n }\n /**\n * For polling, send a close packet.\n *\n * @protected\n */\n doClose() {\n const close = () => {\n this.write([{ type: \"close\" }]);\n };\n if (\"open\" === this.readyState) {\n close();\n }\n else {\n // in case we're trying to close while\n // handshaking is in progress (GH-164)\n this.once(\"open\", close);\n }\n }\n /**\n * Writes a packets payload.\n *\n * @param {Array} packets - data packets\n * @protected\n */\n write(packets) {\n this.writable = false;\n encodePayload(packets, (data) => {\n this.doWrite(data, () => {\n this.writable = true;\n this.emitReserved(\"drain\");\n });\n });\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"https\" : \"http\";\n const query = this.query || {};\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n /**\n * Creates a request.\n *\n * @param {String} method\n * @private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, cookieJar: this.cookieJar }, this.opts);\n return new Request(this.uri(), opts);\n }\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @private\n */\n doWrite(data, fn) {\n const req = this.request({\n method: \"POST\",\n data: data,\n });\n req.on(\"success\", fn);\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr post error\", xhrStatus, context);\n });\n }\n /**\n * Starts a poll cycle.\n *\n * @private\n */\n doPoll() {\n const req = this.request();\n req.on(\"data\", this.onData.bind(this));\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr poll error\", xhrStatus, context);\n });\n this.pollXhr = req;\n }\n}\nexport class Request extends Emitter {\n /**\n * Request constructor\n *\n * @param {Object} options\n * @package\n */\n constructor(uri, opts) {\n super();\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.data = undefined !== opts.data ? opts.data : null;\n this.create();\n }\n /**\n * Creates the XHR object and sends the request.\n *\n * @private\n */\n create() {\n var _a;\n const opts = pick(this.opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this.opts.xd;\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n try {\n xhr.open(this.method, this.uri, true);\n try {\n if (this.opts.extraHeaders) {\n xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n for (let i in this.opts.extraHeaders) {\n if (this.opts.extraHeaders.hasOwnProperty(i)) {\n xhr.setRequestHeader(i, this.opts.extraHeaders[i]);\n }\n }\n }\n }\n catch (e) { }\n if (\"POST\" === this.method) {\n try {\n xhr.setRequestHeader(\"Content-type\", \"text/plain;charset=UTF-8\");\n }\n catch (e) { }\n }\n try {\n xhr.setRequestHeader(\"Accept\", \"*/*\");\n }\n catch (e) { }\n (_a = this.opts.cookieJar) === null || _a === void 0 ? void 0 : _a.addCookies(xhr);\n // ie6 check\n if (\"withCredentials\" in xhr) {\n xhr.withCredentials = this.opts.withCredentials;\n }\n if (this.opts.requestTimeout) {\n xhr.timeout = this.opts.requestTimeout;\n }\n xhr.onreadystatechange = () => {\n var _a;\n if (xhr.readyState === 3) {\n (_a = this.opts.cookieJar) === null || _a === void 0 ? void 0 : _a.parseCookies(xhr);\n }\n if (4 !== xhr.readyState)\n return;\n if (200 === xhr.status || 1223 === xhr.status) {\n this.onLoad();\n }\n else {\n // make sure the `error` event handler that's user-set\n // does not throw in the same tick and gets caught here\n this.setTimeoutFn(() => {\n this.onError(typeof xhr.status === \"number\" ? xhr.status : 0);\n }, 0);\n }\n };\n xhr.send(this.data);\n }\n catch (e) {\n // Need to defer since .create() is called directly from the constructor\n // and thus the 'error' event can only be only bound *after* this exception\n // occurs. Therefore, also, we cannot throw here at all.\n this.setTimeoutFn(() => {\n this.onError(e);\n }, 0);\n return;\n }\n if (typeof document !== \"undefined\") {\n this.index = Request.requestsCount++;\n Request.requests[this.index] = this;\n }\n }\n /**\n * Called upon error.\n *\n * @private\n */\n onError(err) {\n this.emitReserved(\"error\", err, this.xhr);\n this.cleanup(true);\n }\n /**\n * Cleans up house.\n *\n * @private\n */\n cleanup(fromError) {\n if (\"undefined\" === typeof this.xhr || null === this.xhr) {\n return;\n }\n this.xhr.onreadystatechange = empty;\n if (fromError) {\n try {\n this.xhr.abort();\n }\n catch (e) { }\n }\n if (typeof document !== \"undefined\") {\n delete Request.requests[this.index];\n }\n this.xhr = null;\n }\n /**\n * Called upon load.\n *\n * @private\n */\n onLoad() {\n const data = this.xhr.responseText;\n if (data !== null) {\n this.emitReserved(\"data\", data);\n this.emitReserved(\"success\");\n this.cleanup();\n }\n }\n /**\n * Aborts the request.\n *\n * @package\n */\n abort() {\n this.cleanup();\n }\n}\nRequest.requestsCount = 0;\nRequest.requests = {};\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\nif (typeof document !== \"undefined\") {\n // @ts-ignore\n if (typeof attachEvent === \"function\") {\n // @ts-ignore\n attachEvent(\"onunload\", unloadHandler);\n }\n else if (typeof addEventListener === \"function\") {\n const terminationEvent = \"onpagehide\" in globalThis ? \"pagehide\" : \"unload\";\n addEventListener(terminationEvent, unloadHandler, false);\n }\n}\nfunction unloadHandler() {\n for (let i in Request.requests) {\n if (Request.requests.hasOwnProperty(i)) {\n Request.requests[i].abort();\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/transports/polling.js","import { globalThisShim as globalThis } from \"../globalThis.js\";\nexport const nextTick = (() => {\n const isPromiseAvailable = typeof Promise === \"function\" && typeof Promise.resolve === \"function\";\n if (isPromiseAvailable) {\n return (cb) => Promise.resolve().then(cb);\n }\n else {\n return (cb, setTimeoutFn) => setTimeoutFn(cb, 0);\n }\n})();\nexport const WebSocket = globalThis.WebSocket || globalThis.MozWebSocket;\nexport const usingBrowserWebSocket = true;\nexport const defaultBinaryType = \"arraybuffer\";\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/transports/websocket-constructor.browser.js","import { Transport } from \"../transport.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { pick } from \"../util.js\";\nimport { nextTick, usingBrowserWebSocket, WebSocket, } from \"./websocket-constructor.js\";\nimport { encodePacket } from \"engine.io-parser\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class WS extends Transport {\n /**\n * WebSocket transport constructor.\n *\n * @param {Object} opts - connection options\n * @protected\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n get name() {\n return \"websocket\";\n }\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\n const uri = this.uri();\n const protocols = this.opts.protocols;\n // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n const opts = isReactNative\n ? {}\n : pick(this.opts, \"agent\", \"perMessageDeflate\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"localAddress\", \"protocolVersion\", \"origin\", \"maxPayload\", \"family\", \"checkServerIdentity\");\n if (this.opts.extraHeaders) {\n opts.headers = this.opts.extraHeaders;\n }\n try {\n this.ws =\n usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new WebSocket(uri, protocols)\n : new WebSocket(uri)\n : new WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType;\n this.addEventListeners();\n }\n /**\n * Adds event listeners to the socket\n *\n * @private\n */\n addEventListeners() {\n this.ws.onopen = () => {\n if (this.opts.autoUnref) {\n this.ws._socket.unref();\n }\n this.onOpen();\n };\n this.ws.onclose = (closeEvent) => this.onClose({\n description: \"websocket connection closed\",\n context: closeEvent,\n });\n this.ws.onmessage = (ev) => this.onData(ev.data);\n this.ws.onerror = (e) => this.onError(\"websocket error\", e);\n }\n write(packets) {\n this.writable = false;\n // encodePacket efficient as it uses WS framing\n // no need for encodePayload\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n encodePacket(packet, this.supportsBinary, (data) => {\n // always create a new object (GH-437)\n const opts = {};\n if (!usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \n // @ts-ignore\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\n // Sometimes the websocket has already been closed but the browser didn't\n // have a chance of informing us about it yet, in that case send will\n // throw an error\n try {\n if (usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\n }\n catch (e) {\n }\n if (lastPacket) {\n // fake drain\n // defer to next tick to allow Socket to clear writeBuffer\n nextTick(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n if (typeof this.ws !== \"undefined\") {\n this.ws.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n const query = this.query || {};\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @private\n */\n check() {\n return !!WebSocket;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/transports/websocket.js","import { Transport } from \"../transport.js\";\nimport { nextTick } from \"./websocket-constructor.js\";\nimport { createPacketDecoderStream, createPacketEncoderStream, } from \"engine.io-parser\";\nexport class WT extends Transport {\n get name() {\n return \"webtransport\";\n }\n doOpen() {\n // @ts-ignore\n if (typeof WebTransport !== \"function\") {\n return;\n }\n // @ts-ignore\n this.transport = new WebTransport(this.createUri(\"https\"), this.opts.transportOptions[this.name]);\n this.transport.closed\n .then(() => {\n this.onClose();\n })\n .catch((err) => {\n this.onError(\"webtransport error\", err);\n });\n // note: we could have used async/await, but that would require some additional polyfills\n this.transport.ready.then(() => {\n this.transport.createBidirectionalStream().then((stream) => {\n const decoderStream = createPacketDecoderStream(Number.MAX_SAFE_INTEGER, this.socket.binaryType);\n const reader = stream.readable.pipeThrough(decoderStream).getReader();\n const encoderStream = createPacketEncoderStream();\n encoderStream.readable.pipeTo(stream.writable);\n this.writer = encoderStream.writable.getWriter();\n const read = () => {\n reader\n .read()\n .then(({ done, value }) => {\n if (done) {\n return;\n }\n this.onPacket(value);\n read();\n })\n .catch((err) => {\n });\n };\n read();\n const packet = { type: \"open\" };\n if (this.query.sid) {\n packet.data = `{\"sid\":\"${this.query.sid}\"}`;\n }\n this.writer.write(packet).then(() => this.onOpen());\n });\n });\n }\n write(packets) {\n this.writable = false;\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n this.writer.write(packet).then(() => {\n if (lastPacket) {\n nextTick(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n var _a;\n (_a = this.transport) === null || _a === void 0 ? void 0 : _a.close();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/transports/webtransport.js","import { Polling } from \"./polling.js\";\nimport { WS } from \"./websocket.js\";\nimport { WT } from \"./webtransport.js\";\nexport const transports = {\n websocket: WS,\n webtransport: WT,\n polling: Polling,\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/transports/index.js","// imported from https://github.com/galkn/parseuri\n/**\n * Parses a URI\n *\n * Note: we could also have used the built-in URL object, but it isn't supported on all platforms.\n *\n * See:\n * - https://developer.mozilla.org/en-US/docs/Web/API/URL\n * - https://caniuse.com/url\n * - https://www.rfc-editor.org/rfc/rfc3986#appendix-B\n *\n * History of the parse() method:\n * - first commit: https://github.com/socketio/socket.io-client/commit/4ee1d5d94b3906a9c052b459f1a818b15f38f91c\n * - export into its own module: https://github.com/socketio/engine.io-client/commit/de2c561e4564efeb78f1bdb1ba39ef81b2822cb3\n * - reimport: https://github.com/socketio/engine.io-client/commit/df32277c3f6d622eec5ed09f493cae3f3391d242\n *\n * @author Steven Levithan (MIT license)\n * @api private\n */\nconst re = /^(?:(?![^:@\\/?#]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@\\/?#]*)(?::([^:@\\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\nconst parts = [\n 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\nexport function parse(str) {\n const src = str, b = str.indexOf('['), e = str.indexOf(']');\n if (b != -1 && e != -1) {\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n }\n let m = re.exec(str || ''), uri = {}, i = 14;\n while (i--) {\n uri[parts[i]] = m[i] || '';\n }\n if (b != -1 && e != -1) {\n uri.source = src;\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n uri.ipv6uri = true;\n }\n uri.pathNames = pathNames(uri, uri['path']);\n uri.queryKey = queryKey(uri, uri['query']);\n return uri;\n}\nfunction pathNames(obj, path) {\n const regx = /\\/{2,9}/g, names = path.replace(regx, \"/\").split(\"/\");\n if (path.slice(0, 1) == '/' || path.length === 0) {\n names.splice(0, 1);\n }\n if (path.slice(-1) == '/') {\n names.splice(names.length - 1, 1);\n }\n return names;\n}\nfunction queryKey(uri, query) {\n const data = {};\n query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n if ($1) {\n data[$1] = $2;\n }\n });\n return data;\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/contrib/parseuri.js","import { transports } from \"./transports/index.js\";\nimport { installTimerFunctions, byteLength } from \"./util.js\";\nimport { decode } from \"./contrib/parseqs.js\";\nimport { parse } from \"./contrib/parseuri.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { protocol } from \"engine.io-parser\";\nimport { defaultBinaryType } from \"./transports/websocket-constructor.js\";\nexport class Socket extends Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri - uri or options\n * @param {Object} opts - options\n */\n constructor(uri, opts = {}) {\n super();\n this.binaryType = defaultBinaryType;\n this.writeBuffer = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n uri = parse(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query)\n opts.query = uri.query;\n }\n else if (opts.host) {\n opts.hostname = parse(opts.host).host;\n }\n installTimerFunctions(this, opts);\n this.secure =\n null != opts.secure\n ? opts.secure\n : typeof location !== \"undefined\" && \"https:\" === location.protocol;\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? \"443\" : \"80\";\n }\n this.hostname =\n opts.hostname ||\n (typeof location !== \"undefined\" ? location.hostname : \"localhost\");\n this.port =\n opts.port ||\n (typeof location !== \"undefined\" && location.port\n ? location.port\n : this.secure\n ? \"443\"\n : \"80\");\n this.transports = opts.transports || [\n \"polling\",\n \"websocket\",\n \"webtransport\",\n ];\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n this.opts = Object.assign({\n path: \"/engine.io\",\n agent: false,\n withCredentials: false,\n upgrade: true,\n timestampParam: \"t\",\n rememberUpgrade: false,\n addTrailingSlash: true,\n rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024,\n },\n transportOptions: {},\n closeOnBeforeunload: false,\n }, opts);\n this.opts.path =\n this.opts.path.replace(/\\/$/, \"\") +\n (this.opts.addTrailingSlash ? \"/\" : \"\");\n if (typeof this.opts.query === \"string\") {\n this.opts.query = decode(this.opts.query);\n }\n // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n // set on heartbeat\n this.pingTimeoutTimer = null;\n if (typeof addEventListener === \"function\") {\n if (this.opts.closeOnBeforeunload) {\n // Firefox closes the connection when the \"beforeunload\" event is emitted but not Chrome. This event listener\n // ensures every browser behaves the same (no \"disconnect\" event at the Socket.IO level when the page is\n // closed/reloaded)\n this.beforeunloadEventListener = () => {\n if (this.transport) {\n // silently close the transport\n this.transport.removeAllListeners();\n this.transport.close();\n }\n };\n addEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n }\n if (this.hostname !== \"localhost\") {\n this.offlineEventListener = () => {\n this.onClose(\"transport close\", {\n description: \"network connection lost\",\n });\n };\n addEventListener(\"offline\", this.offlineEventListener, false);\n }\n }\n this.open();\n }\n /**\n * Creates transport of the given type.\n *\n * @param {String} name - transport name\n * @return {Transport}\n * @private\n */\n createTransport(name) {\n const query = Object.assign({}, this.opts.query);\n // append engine.io protocol identifier\n query.EIO = protocol;\n // transport name\n query.transport = name;\n // session id if we already have one\n if (this.id)\n query.sid = this.id;\n const opts = Object.assign({}, this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port,\n }, this.opts.transportOptions[name]);\n return new transports[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @private\n */\n open() {\n let transport;\n if (this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1) {\n transport = \"websocket\";\n }\n else if (0 === this.transports.length) {\n // Emit error on next tick so it can be listened to\n this.setTimeoutFn(() => {\n this.emitReserved(\"error\", \"No transports available\");\n }, 0);\n return;\n }\n else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n }\n catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\n transport.open();\n this.setTransport(transport);\n }\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @private\n */\n setTransport(transport) {\n if (this.transport) {\n this.transport.removeAllListeners();\n }\n // set up transport\n this.transport = transport;\n // set up transport listeners\n transport\n .on(\"drain\", this.onDrain.bind(this))\n .on(\"packet\", this.onPacket.bind(this))\n .on(\"error\", this.onError.bind(this))\n .on(\"close\", (reason) => this.onClose(\"transport close\", reason));\n }\n /**\n * Probes a transport.\n *\n * @param {String} name - transport name\n * @private\n */\n probe(name) {\n let transport = this.createTransport(name);\n let failed = false;\n Socket.priorWebsocketSuccess = false;\n const onTransportOpen = () => {\n if (failed)\n return;\n transport.send([{ type: \"ping\", data: \"probe\" }]);\n transport.once(\"packet\", (msg) => {\n if (failed)\n return;\n if (\"pong\" === msg.type && \"probe\" === msg.data) {\n this.upgrading = true;\n this.emitReserved(\"upgrading\", transport);\n if (!transport)\n return;\n Socket.priorWebsocketSuccess = \"websocket\" === transport.name;\n this.transport.pause(() => {\n if (failed)\n return;\n if (\"closed\" === this.readyState)\n return;\n cleanup();\n this.setTransport(transport);\n transport.send([{ type: \"upgrade\" }]);\n this.emitReserved(\"upgrade\", transport);\n transport = null;\n this.upgrading = false;\n this.flush();\n });\n }\n else {\n const err = new Error(\"probe error\");\n // @ts-ignore\n err.transport = transport.name;\n this.emitReserved(\"upgradeError\", err);\n }\n });\n };\n function freezeTransport() {\n if (failed)\n return;\n // Any callback called by transport should be ignored since now\n failed = true;\n cleanup();\n transport.close();\n transport = null;\n }\n // Handle any error that happens while probing\n const onerror = (err) => {\n const error = new Error(\"probe error: \" + err);\n // @ts-ignore\n error.transport = transport.name;\n freezeTransport();\n this.emitReserved(\"upgradeError\", error);\n };\n function onTransportClose() {\n onerror(\"transport closed\");\n }\n // When the socket is closed while we're probing\n function onclose() {\n onerror(\"socket closed\");\n }\n // When the socket is upgraded while we're probing\n function onupgrade(to) {\n if (transport && to.name !== transport.name) {\n freezeTransport();\n }\n }\n // Remove all listeners on the transport and on self\n const cleanup = () => {\n transport.removeListener(\"open\", onTransportOpen);\n transport.removeListener(\"error\", onerror);\n transport.removeListener(\"close\", onTransportClose);\n this.off(\"close\", onclose);\n this.off(\"upgrading\", onupgrade);\n };\n transport.once(\"open\", onTransportOpen);\n transport.once(\"error\", onerror);\n transport.once(\"close\", onTransportClose);\n this.once(\"close\", onclose);\n this.once(\"upgrading\", onupgrade);\n if (this.upgrades.indexOf(\"webtransport\") !== -1 &&\n name !== \"webtransport\") {\n // favor WebTransport\n this.setTimeoutFn(() => {\n if (!failed) {\n transport.open();\n }\n }, 200);\n }\n else {\n transport.open();\n }\n }\n /**\n * Called when connection is deemed open.\n *\n * @private\n */\n onOpen() {\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\"open\" === this.readyState && this.opts.upgrade) {\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\n }\n /**\n * Handles a packet.\n *\n * @private\n */\n onPacket(packet) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n this.emitReserved(\"packet\", packet);\n // Socket is live - any packet counts\n this.emitReserved(\"heartbeat\");\n this.resetPingTimeout();\n switch (packet.type) {\n case \"open\":\n this.onHandshake(JSON.parse(packet.data));\n break;\n case \"ping\":\n this.sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\n break;\n case \"error\":\n const err = new Error(\"server error\");\n // @ts-ignore\n err.code = packet.data;\n this.onError(err);\n break;\n case \"message\":\n this.emitReserved(\"data\", packet.data);\n this.emitReserved(\"message\", packet.data);\n break;\n }\n }\n else {\n }\n }\n /**\n * Called upon handshake completion.\n *\n * @param {Object} data - handshake obj\n * @private\n */\n onHandshake(data) {\n this.emitReserved(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this.upgrades = this.filterUpgrades(data.upgrades);\n this.pingInterval = data.pingInterval;\n this.pingTimeout = data.pingTimeout;\n this.maxPayload = data.maxPayload;\n this.onOpen();\n // In case open handler closes socket\n if (\"closed\" === this.readyState)\n return;\n this.resetPingTimeout();\n }\n /**\n * Sets and resets ping timeout timer based on server pings.\n *\n * @private\n */\n resetPingTimeout() {\n this.clearTimeoutFn(this.pingTimeoutTimer);\n this.pingTimeoutTimer = this.setTimeoutFn(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\n if (this.opts.autoUnref) {\n this.pingTimeoutTimer.unref();\n }\n }\n /**\n * Called on `drain` event\n *\n * @private\n */\n onDrain() {\n this.writeBuffer.splice(0, this.prevBufferLen);\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this.prevBufferLen = 0;\n if (0 === this.writeBuffer.length) {\n this.emitReserved(\"drain\");\n }\n else {\n this.flush();\n }\n }\n /**\n * Flush write buffers.\n *\n * @private\n */\n flush() {\n if (\"closed\" !== this.readyState &&\n this.transport.writable &&\n !this.upgrading &&\n this.writeBuffer.length) {\n const packets = this.getWritablePackets();\n this.transport.send(packets);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this.prevBufferLen = packets.length;\n this.emitReserved(\"flush\");\n }\n }\n /**\n * Ensure the encoded size of the writeBuffer is below the maxPayload value sent by the server (only for HTTP\n * long-polling)\n *\n * @private\n */\n getWritablePackets() {\n const shouldCheckPayloadSize = this.maxPayload &&\n this.transport.name === \"polling\" &&\n this.writeBuffer.length > 1;\n if (!shouldCheckPayloadSize) {\n return this.writeBuffer;\n }\n let payloadSize = 1; // first packet type\n for (let i = 0; i < this.writeBuffer.length; i++) {\n const data = this.writeBuffer[i].data;\n if (data) {\n payloadSize += byteLength(data);\n }\n if (i > 0 && payloadSize > this.maxPayload) {\n return this.writeBuffer.slice(0, i);\n }\n payloadSize += 2; // separator + packet type\n }\n return this.writeBuffer;\n }\n /**\n * Sends a message.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} callback function.\n * @return {Socket} for chaining.\n */\n write(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n send(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a packet.\n *\n * @param {String} type: packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @private\n */\n sendPacket(type, data, options, fn) {\n if (\"function\" === typeof data) {\n fn = data;\n data = undefined;\n }\n if (\"function\" === typeof options) {\n fn = options;\n options = null;\n }\n if (\"closing\" === this.readyState || \"closed\" === this.readyState) {\n return;\n }\n options = options || {};\n options.compress = false !== options.compress;\n const packet = {\n type: type,\n data: data,\n options: options,\n };\n this.emitReserved(\"packetCreate\", packet);\n this.writeBuffer.push(packet);\n if (fn)\n this.once(\"flush\", fn);\n this.flush();\n }\n /**\n * Closes the connection.\n */\n close() {\n const close = () => {\n this.onClose(\"forced close\");\n this.transport.close();\n };\n const cleanupAndClose = () => {\n this.off(\"upgrade\", cleanupAndClose);\n this.off(\"upgradeError\", cleanupAndClose);\n close();\n };\n const waitForUpgrade = () => {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n this.once(\"upgrade\", cleanupAndClose);\n this.once(\"upgradeError\", cleanupAndClose);\n };\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.readyState = \"closing\";\n if (this.writeBuffer.length) {\n this.once(\"drain\", () => {\n if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n });\n }\n else if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n }\n return this;\n }\n /**\n * Called upon transport error\n *\n * @private\n */\n onError(err) {\n Socket.priorWebsocketSuccess = false;\n this.emitReserved(\"error\", err);\n this.onClose(\"transport error\", err);\n }\n /**\n * Called upon transport close.\n *\n * @private\n */\n onClose(reason, description) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n // clear timers\n this.clearTimeoutFn(this.pingTimeoutTimer);\n // stop event from firing again for transport\n this.transport.removeAllListeners(\"close\");\n // ensure transport won't stay open\n this.transport.close();\n // ignore further transport communication\n this.transport.removeAllListeners();\n if (typeof removeEventListener === \"function\") {\n removeEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n removeEventListener(\"offline\", this.offlineEventListener, false);\n }\n // set ready state\n this.readyState = \"closed\";\n // clear session id\n this.id = null;\n // emit close event\n this.emitReserved(\"close\", reason, description);\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n }\n }\n /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} upgrades - server upgrades\n * @private\n */\n filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nSocket.protocol = protocol;\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/socket.js","import { parse } from \"engine.io-client\";\n/**\n * URL parser.\n *\n * @param uri - url\n * @param path - the request path of the connection\n * @param loc - An object meant to mimic window.location.\n * Defaults to window.location.\n * @public\n */\nexport function url(uri, path = \"\", loc) {\n let obj = uri;\n // default to window.location\n loc = loc || (typeof location !== \"undefined\" && location);\n if (null == uri)\n uri = loc.protocol + \"//\" + loc.host;\n // relative path support\n if (typeof uri === \"string\") {\n if (\"/\" === uri.charAt(0)) {\n if (\"/\" === uri.charAt(1)) {\n uri = loc.protocol + uri;\n }\n else {\n uri = loc.host + uri;\n }\n }\n if (!/^(https?|wss?):\\/\\//.test(uri)) {\n if (\"undefined\" !== typeof loc) {\n uri = loc.protocol + \"//\" + uri;\n }\n else {\n uri = \"https://\" + uri;\n }\n }\n // parse\n obj = parse(uri);\n }\n // make sure we treat `localhost:80` and `localhost` equally\n if (!obj.port) {\n if (/^(http|ws)$/.test(obj.protocol)) {\n obj.port = \"80\";\n }\n else if (/^(http|ws)s$/.test(obj.protocol)) {\n obj.port = \"443\";\n }\n }\n obj.path = obj.path || \"/\";\n const ipv6 = obj.host.indexOf(\":\") !== -1;\n const host = ipv6 ? \"[\" + obj.host + \"]\" : obj.host;\n // define unique id\n obj.id = obj.protocol + \"://\" + host + \":\" + obj.port + path;\n // define href\n obj.href =\n obj.protocol +\n \"://\" +\n host +\n (loc && loc.port === obj.port ? \"\" : \":\" + obj.port);\n return obj;\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/socket.io-client/build/esm/url.js","const withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst isView = (obj) => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj.buffer instanceof ArrayBuffer;\n};\nconst toString = Object.prototype.toString;\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeFile = typeof File === \"function\" ||\n (typeof File !== \"undefined\" &&\n toString.call(File) === \"[object FileConstructor]\");\n/**\n * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.\n *\n * @private\n */\nexport function isBinary(obj) {\n return ((withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj))) ||\n (withNativeBlob && obj instanceof Blob) ||\n (withNativeFile && obj instanceof File));\n}\nexport function hasBinary(obj, toJSON) {\n if (!obj || typeof obj !== \"object\") {\n return false;\n }\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (hasBinary(obj[i])) {\n return true;\n }\n }\n return false;\n }\n if (isBinary(obj)) {\n return true;\n }\n if (obj.toJSON &&\n typeof obj.toJSON === \"function\" &&\n arguments.length === 1) {\n return hasBinary(obj.toJSON(), true);\n }\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n return true;\n }\n }\n return false;\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/socket.io-parser/build/esm/is-binary.js","import { isBinary } from \"./is-binary.js\";\n/**\n * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @public\n */\nexport function deconstructPacket(packet) {\n const buffers = [];\n const packetData = packet.data;\n const pack = packet;\n pack.data = _deconstructPacket(packetData, buffers);\n pack.attachments = buffers.length; // number of binary 'attachments'\n return { packet: pack, buffers: buffers };\n}\nfunction _deconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (isBinary(data)) {\n const placeholder = { _placeholder: true, num: buffers.length };\n buffers.push(data);\n return placeholder;\n }\n else if (Array.isArray(data)) {\n const newData = new Array(data.length);\n for (let i = 0; i < data.length; i++) {\n newData[i] = _deconstructPacket(data[i], buffers);\n }\n return newData;\n }\n else if (typeof data === \"object\" && !(data instanceof Date)) {\n const newData = {};\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newData[key] = _deconstructPacket(data[key], buffers);\n }\n }\n return newData;\n }\n return data;\n}\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @public\n */\nexport function reconstructPacket(packet, buffers) {\n packet.data = _reconstructPacket(packet.data, buffers);\n delete packet.attachments; // no longer useful\n return packet;\n}\nfunction _reconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (data && data._placeholder === true) {\n const isIndexValid = typeof data.num === \"number\" &&\n data.num >= 0 &&\n data.num < buffers.length;\n if (isIndexValid) {\n return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n }\n else {\n throw new Error(\"illegal attachments\");\n }\n }\n else if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n data[i] = _reconstructPacket(data[i], buffers);\n }\n }\n else if (typeof data === \"object\") {\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n data[key] = _reconstructPacket(data[key], buffers);\n }\n }\n }\n return data;\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/socket.io-parser/build/esm/binary.js","import { Emitter } from \"@socket.io/component-emitter\";\nimport { deconstructPacket, reconstructPacket } from \"./binary.js\";\nimport { isBinary, hasBinary } from \"./is-binary.js\";\n/**\n * These strings must not be used as event names, as they have a special meaning.\n */\nconst RESERVED_EVENTS = [\n \"connect\",\n \"connect_error\",\n \"disconnect\",\n \"disconnecting\",\n \"newListener\",\n \"removeListener\", // used by the Node.js EventEmitter\n];\n/**\n * Protocol version.\n *\n * @public\n */\nexport const protocol = 5;\nexport var PacketType;\n(function (PacketType) {\n PacketType[PacketType[\"CONNECT\"] = 0] = \"CONNECT\";\n PacketType[PacketType[\"DISCONNECT\"] = 1] = \"DISCONNECT\";\n PacketType[PacketType[\"EVENT\"] = 2] = \"EVENT\";\n PacketType[PacketType[\"ACK\"] = 3] = \"ACK\";\n PacketType[PacketType[\"CONNECT_ERROR\"] = 4] = \"CONNECT_ERROR\";\n PacketType[PacketType[\"BINARY_EVENT\"] = 5] = \"BINARY_EVENT\";\n PacketType[PacketType[\"BINARY_ACK\"] = 6] = \"BINARY_ACK\";\n})(PacketType || (PacketType = {}));\n/**\n * A socket.io Encoder instance\n */\nexport class Encoder {\n /**\n * Encoder constructor\n *\n * @param {function} replacer - custom replacer to pass down to JSON.parse\n */\n constructor(replacer) {\n this.replacer = replacer;\n }\n /**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n */\n encode(obj) {\n if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n if (hasBinary(obj)) {\n return this.encodeAsBinary({\n type: obj.type === PacketType.EVENT\n ? PacketType.BINARY_EVENT\n : PacketType.BINARY_ACK,\n nsp: obj.nsp,\n data: obj.data,\n id: obj.id,\n });\n }\n }\n return [this.encodeAsString(obj)];\n }\n /**\n * Encode packet as string.\n */\n encodeAsString(obj) {\n // first is type\n let str = \"\" + obj.type;\n // attachments if we have them\n if (obj.type === PacketType.BINARY_EVENT ||\n obj.type === PacketType.BINARY_ACK) {\n str += obj.attachments + \"-\";\n }\n // if we have a namespace other than `/`\n // we append it followed by a comma `,`\n if (obj.nsp && \"/\" !== obj.nsp) {\n str += obj.nsp + \",\";\n }\n // immediately followed by the id\n if (null != obj.id) {\n str += obj.id;\n }\n // json data\n if (null != obj.data) {\n str += JSON.stringify(obj.data, this.replacer);\n }\n return str;\n }\n /**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n */\n encodeAsBinary(obj) {\n const deconstruction = deconstructPacket(obj);\n const pack = this.encodeAsString(deconstruction.packet);\n const buffers = deconstruction.buffers;\n buffers.unshift(pack); // add packet info to beginning of data list\n return buffers; // write all the buffers\n }\n}\n// see https://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript\nfunction isObject(value) {\n return Object.prototype.toString.call(value) === \"[object Object]\";\n}\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\nexport class Decoder extends Emitter {\n /**\n * Decoder constructor\n *\n * @param {function} reviver - custom reviver to pass down to JSON.stringify\n */\n constructor(reviver) {\n super();\n this.reviver = reviver;\n }\n /**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n */\n add(obj) {\n let packet;\n if (typeof obj === \"string\") {\n if (this.reconstructor) {\n throw new Error(\"got plaintext data when reconstructing a packet\");\n }\n packet = this.decodeString(obj);\n const isBinaryEvent = packet.type === PacketType.BINARY_EVENT;\n if (isBinaryEvent || packet.type === PacketType.BINARY_ACK) {\n packet.type = isBinaryEvent ? PacketType.EVENT : PacketType.ACK;\n // binary packet's json\n this.reconstructor = new BinaryReconstructor(packet);\n // no attachments, labeled binary but no binary data to follow\n if (packet.attachments === 0) {\n super.emitReserved(\"decoded\", packet);\n }\n }\n else {\n // non-binary full packet\n super.emitReserved(\"decoded\", packet);\n }\n }\n else if (isBinary(obj) || obj.base64) {\n // raw binary data\n if (!this.reconstructor) {\n throw new Error(\"got binary data when not reconstructing a packet\");\n }\n else {\n packet = this.reconstructor.takeBinaryData(obj);\n if (packet) {\n // received final buffer\n this.reconstructor = null;\n super.emitReserved(\"decoded\", packet);\n }\n }\n }\n else {\n throw new Error(\"Unknown type: \" + obj);\n }\n }\n /**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n */\n decodeString(str) {\n let i = 0;\n // look up type\n const p = {\n type: Number(str.charAt(0)),\n };\n if (PacketType[p.type] === undefined) {\n throw new Error(\"unknown packet type \" + p.type);\n }\n // look up attachments if type binary\n if (p.type === PacketType.BINARY_EVENT ||\n p.type === PacketType.BINARY_ACK) {\n const start = i + 1;\n while (str.charAt(++i) !== \"-\" && i != str.length) { }\n const buf = str.substring(start, i);\n if (buf != Number(buf) || str.charAt(i) !== \"-\") {\n throw new Error(\"Illegal attachments\");\n }\n p.attachments = Number(buf);\n }\n // look up namespace (if any)\n if (\"/\" === str.charAt(i + 1)) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (\",\" === c)\n break;\n if (i === str.length)\n break;\n }\n p.nsp = str.substring(start, i);\n }\n else {\n p.nsp = \"/\";\n }\n // look up id\n const next = str.charAt(i + 1);\n if (\"\" !== next && Number(next) == next) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (null == c || Number(c) != c) {\n --i;\n break;\n }\n if (i === str.length)\n break;\n }\n p.id = Number(str.substring(start, i + 1));\n }\n // look up json data\n if (str.charAt(++i)) {\n const payload = this.tryParse(str.substr(i));\n if (Decoder.isPayloadValid(p.type, payload)) {\n p.data = payload;\n }\n else {\n throw new Error(\"invalid payload\");\n }\n }\n return p;\n }\n tryParse(str) {\n try {\n return JSON.parse(str, this.reviver);\n }\n catch (e) {\n return false;\n }\n }\n static isPayloadValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return isObject(payload);\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || isObject(payload);\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n return (Array.isArray(payload) &&\n (typeof payload[0] === \"number\" ||\n (typeof payload[0] === \"string\" &&\n RESERVED_EVENTS.indexOf(payload[0]) === -1)));\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n return Array.isArray(payload);\n }\n }\n /**\n * Deallocates a parser's resources\n */\n destroy() {\n if (this.reconstructor) {\n this.reconstructor.finishedReconstruction();\n this.reconstructor = null;\n }\n }\n}\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n */\nclass BinaryReconstructor {\n constructor(packet) {\n this.packet = packet;\n this.buffers = [];\n this.reconPack = packet;\n }\n /**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n * a reconstructed packet object if all buffers have been received.\n */\n takeBinaryData(binData) {\n this.buffers.push(binData);\n if (this.buffers.length === this.reconPack.attachments) {\n // done with buffer list\n const packet = reconstructPacket(this.reconPack, this.buffers);\n this.finishedReconstruction();\n return packet;\n }\n return null;\n }\n /**\n * Cleans up binary packet reconstruction variables.\n */\n finishedReconstruction() {\n this.reconPack = null;\n this.buffers = [];\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/socket.io-parser/build/esm/index.js","export function on(obj, ev, fn) {\n obj.on(ev, fn);\n return function subDestroy() {\n obj.off(ev, fn);\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/socket.io-client/build/esm/on.js","import { PacketType } from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\nconst RESERVED_EVENTS = Object.freeze({\n connect: 1,\n connect_error: 1,\n disconnect: 1,\n disconnecting: 1,\n // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n newListener: 1,\n removeListener: 1,\n});\n/**\n * A Socket is the fundamental class for interacting with the server.\n *\n * A Socket belongs to a certain Namespace (by default /) and uses an underlying {@link Manager} to communicate.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(\"connected\");\n * });\n *\n * // send an event to the server\n * socket.emit(\"foo\", \"bar\");\n *\n * socket.on(\"foobar\", () => {\n * // an event was received from the server\n * });\n *\n * // upon disconnection\n * socket.on(\"disconnect\", (reason) => {\n * console.log(`disconnected due to ${reason}`);\n * });\n */\nexport class Socket extends Emitter {\n /**\n * `Socket` constructor.\n */\n constructor(io, nsp, opts) {\n super();\n /**\n * Whether the socket is currently connected to the server.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.connected); // true\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.connected); // false\n * });\n */\n this.connected = false;\n /**\n * Whether the connection state was recovered after a temporary disconnection. In that case, any missed packets will\n * be transmitted by the server.\n */\n this.recovered = false;\n /**\n * Buffer for packets received before the CONNECT packet\n */\n this.receiveBuffer = [];\n /**\n * Buffer for packets that will be sent once the socket is connected\n */\n this.sendBuffer = [];\n /**\n * The queue of packets to be sent with retry in case of failure.\n *\n * Packets are sent one by one, each waiting for the server acknowledgement, in order to guarantee the delivery order.\n * @private\n */\n this._queue = [];\n /**\n * A sequence to generate the ID of the {@link QueuedPacket}.\n * @private\n */\n this._queueSeq = 0;\n this.ids = 0;\n this.acks = {};\n this.flags = {};\n this.io = io;\n this.nsp = nsp;\n if (opts && opts.auth) {\n this.auth = opts.auth;\n }\n this._opts = Object.assign({}, opts);\n if (this.io._autoConnect)\n this.open();\n }\n /**\n * Whether the socket is currently disconnected\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.disconnected); // false\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.disconnected); // true\n * });\n */\n get disconnected() {\n return !this.connected;\n }\n /**\n * Subscribe to open, close and packet events\n *\n * @private\n */\n subEvents() {\n if (this.subs)\n return;\n const io = this.io;\n this.subs = [\n on(io, \"open\", this.onopen.bind(this)),\n on(io, \"packet\", this.onpacket.bind(this)),\n on(io, \"error\", this.onerror.bind(this)),\n on(io, \"close\", this.onclose.bind(this)),\n ];\n }\n /**\n * Whether the Socket will try to reconnect when its Manager connects or reconnects.\n *\n * @example\n * const socket = io();\n *\n * console.log(socket.active); // true\n *\n * socket.on(\"disconnect\", (reason) => {\n * if (reason === \"io server disconnect\") {\n * // the disconnection was initiated by the server, you need to manually reconnect\n * console.log(socket.active); // false\n * }\n * // else the socket will automatically try to reconnect\n * console.log(socket.active); // true\n * });\n */\n get active() {\n return !!this.subs;\n }\n /**\n * \"Opens\" the socket.\n *\n * @example\n * const socket = io({\n * autoConnect: false\n * });\n *\n * socket.connect();\n */\n connect() {\n if (this.connected)\n return this;\n this.subEvents();\n if (!this.io[\"_reconnecting\"])\n this.io.open(); // ensure open\n if (\"open\" === this.io._readyState)\n this.onopen();\n return this;\n }\n /**\n * Alias for {@link connect()}.\n */\n open() {\n return this.connect();\n }\n /**\n * Sends a `message` event.\n *\n * This method mimics the WebSocket.send() method.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send\n *\n * @example\n * socket.send(\"hello\");\n *\n * // this is equivalent to\n * socket.emit(\"message\", \"hello\");\n *\n * @return self\n */\n send(...args) {\n args.unshift(\"message\");\n this.emit.apply(this, args);\n return this;\n }\n /**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @example\n * socket.emit(\"hello\", \"world\");\n *\n * // all serializable datastructures are supported (no need to call JSON.stringify)\n * socket.emit(\"hello\", 1, \"2\", { 3: [\"4\"], 5: Uint8Array.from([6]) });\n *\n * // with an acknowledgement from the server\n * socket.emit(\"hello\", \"world\", (val) => {\n * // ...\n * });\n *\n * @return self\n */\n emit(ev, ...args) {\n if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n throw new Error('\"' + ev.toString() + '\" is a reserved event name');\n }\n args.unshift(ev);\n if (this._opts.retries && !this.flags.fromQueue && !this.flags.volatile) {\n this._addToQueue(args);\n return this;\n }\n const packet = {\n type: PacketType.EVENT,\n data: args,\n };\n packet.options = {};\n packet.options.compress = this.flags.compress !== false;\n // event ack callback\n if (\"function\" === typeof args[args.length - 1]) {\n const id = this.ids++;\n const ack = args.pop();\n this._registerAckCallback(id, ack);\n packet.id = id;\n }\n const isTransportWritable = this.io.engine &&\n this.io.engine.transport &&\n this.io.engine.transport.writable;\n const discardPacket = this.flags.volatile && (!isTransportWritable || !this.connected);\n if (discardPacket) {\n }\n else if (this.connected) {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n }\n else {\n this.sendBuffer.push(packet);\n }\n this.flags = {};\n return this;\n }\n /**\n * @private\n */\n _registerAckCallback(id, ack) {\n var _a;\n const timeout = (_a = this.flags.timeout) !== null && _a !== void 0 ? _a : this._opts.ackTimeout;\n if (timeout === undefined) {\n this.acks[id] = ack;\n return;\n }\n // @ts-ignore\n const timer = this.io.setTimeoutFn(() => {\n delete this.acks[id];\n for (let i = 0; i < this.sendBuffer.length; i++) {\n if (this.sendBuffer[i].id === id) {\n this.sendBuffer.splice(i, 1);\n }\n }\n ack.call(this, new Error(\"operation has timed out\"));\n }, timeout);\n this.acks[id] = (...args) => {\n // @ts-ignore\n this.io.clearTimeoutFn(timer);\n ack.apply(this, [null, ...args]);\n };\n }\n /**\n * Emits an event and waits for an acknowledgement\n *\n * @example\n * // without timeout\n * const response = await socket.emitWithAck(\"hello\", \"world\");\n *\n * // with a specific timeout\n * try {\n * const response = await socket.timeout(1000).emitWithAck(\"hello\", \"world\");\n * } catch (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n *\n * @return a Promise that will be fulfilled when the server acknowledges the event\n */\n emitWithAck(ev, ...args) {\n // the timeout flag is optional\n const withErr = this.flags.timeout !== undefined || this._opts.ackTimeout !== undefined;\n return new Promise((resolve, reject) => {\n args.push((arg1, arg2) => {\n if (withErr) {\n return arg1 ? reject(arg1) : resolve(arg2);\n }\n else {\n return resolve(arg1);\n }\n });\n this.emit(ev, ...args);\n });\n }\n /**\n * Add the packet to the queue.\n * @param args\n * @private\n */\n _addToQueue(args) {\n let ack;\n if (typeof args[args.length - 1] === \"function\") {\n ack = args.pop();\n }\n const packet = {\n id: this._queueSeq++,\n tryCount: 0,\n pending: false,\n args,\n flags: Object.assign({ fromQueue: true }, this.flags),\n };\n args.push((err, ...responseArgs) => {\n if (packet !== this._queue[0]) {\n // the packet has already been acknowledged\n return;\n }\n const hasError = err !== null;\n if (hasError) {\n if (packet.tryCount > this._opts.retries) {\n this._queue.shift();\n if (ack) {\n ack(err);\n }\n }\n }\n else {\n this._queue.shift();\n if (ack) {\n ack(null, ...responseArgs);\n }\n }\n packet.pending = false;\n return this._drainQueue();\n });\n this._queue.push(packet);\n this._drainQueue();\n }\n /**\n * Send the first packet of the queue, and wait for an acknowledgement from the server.\n * @param force - whether to resend a packet that has not been acknowledged yet\n *\n * @private\n */\n _drainQueue(force = false) {\n if (!this.connected || this._queue.length === 0) {\n return;\n }\n const packet = this._queue[0];\n if (packet.pending && !force) {\n return;\n }\n packet.pending = true;\n packet.tryCount++;\n this.flags = packet.flags;\n this.emit.apply(this, packet.args);\n }\n /**\n * Sends a packet.\n *\n * @param packet\n * @private\n */\n packet(packet) {\n packet.nsp = this.nsp;\n this.io._packet(packet);\n }\n /**\n * Called upon engine `open`.\n *\n * @private\n */\n onopen() {\n if (typeof this.auth == \"function\") {\n this.auth((data) => {\n this._sendConnectPacket(data);\n });\n }\n else {\n this._sendConnectPacket(this.auth);\n }\n }\n /**\n * Sends a CONNECT packet to initiate the Socket.IO session.\n *\n * @param data\n * @private\n */\n _sendConnectPacket(data) {\n this.packet({\n type: PacketType.CONNECT,\n data: this._pid\n ? Object.assign({ pid: this._pid, offset: this._lastOffset }, data)\n : data,\n });\n }\n /**\n * Called upon engine or manager `error`.\n *\n * @param err\n * @private\n */\n onerror(err) {\n if (!this.connected) {\n this.emitReserved(\"connect_error\", err);\n }\n }\n /**\n * Called upon engine `close`.\n *\n * @param reason\n * @param description\n * @private\n */\n onclose(reason, description) {\n this.connected = false;\n delete this.id;\n this.emitReserved(\"disconnect\", reason, description);\n }\n /**\n * Called with socket packet.\n *\n * @param packet\n * @private\n */\n onpacket(packet) {\n const sameNamespace = packet.nsp === this.nsp;\n if (!sameNamespace)\n return;\n switch (packet.type) {\n case PacketType.CONNECT:\n if (packet.data && packet.data.sid) {\n this.onconnect(packet.data.sid, packet.data.pid);\n }\n else {\n this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n }\n break;\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n this.onevent(packet);\n break;\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n this.onack(packet);\n break;\n case PacketType.DISCONNECT:\n this.ondisconnect();\n break;\n case PacketType.CONNECT_ERROR:\n this.destroy();\n const err = new Error(packet.data.message);\n // @ts-ignore\n err.data = packet.data.data;\n this.emitReserved(\"connect_error\", err);\n break;\n }\n }\n /**\n * Called upon a server event.\n *\n * @param packet\n * @private\n */\n onevent(packet) {\n const args = packet.data || [];\n if (null != packet.id) {\n args.push(this.ack(packet.id));\n }\n if (this.connected) {\n this.emitEvent(args);\n }\n else {\n this.receiveBuffer.push(Object.freeze(args));\n }\n }\n emitEvent(args) {\n if (this._anyListeners && this._anyListeners.length) {\n const listeners = this._anyListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, args);\n }\n }\n super.emit.apply(this, args);\n if (this._pid && args.length && typeof args[args.length - 1] === \"string\") {\n this._lastOffset = args[args.length - 1];\n }\n }\n /**\n * Produces an ack callback to emit with an event.\n *\n * @private\n */\n ack(id) {\n const self = this;\n let sent = false;\n return function (...args) {\n // prevent double callbacks\n if (sent)\n return;\n sent = true;\n self.packet({\n type: PacketType.ACK,\n id: id,\n data: args,\n });\n };\n }\n /**\n * Called upon a server acknowlegement.\n *\n * @param packet\n * @private\n */\n onack(packet) {\n const ack = this.acks[packet.id];\n if (\"function\" === typeof ack) {\n ack.apply(this, packet.data);\n delete this.acks[packet.id];\n }\n else {\n }\n }\n /**\n * Called upon server connect.\n *\n * @private\n */\n onconnect(id, pid) {\n this.id = id;\n this.recovered = pid && this._pid === pid;\n this._pid = pid; // defined only if connection state recovery is enabled\n this.connected = true;\n this.emitBuffered();\n this.emitReserved(\"connect\");\n this._drainQueue(true);\n }\n /**\n * Emit buffered events (received and emitted).\n *\n * @private\n */\n emitBuffered() {\n this.receiveBuffer.forEach((args) => this.emitEvent(args));\n this.receiveBuffer = [];\n this.sendBuffer.forEach((packet) => {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n });\n this.sendBuffer = [];\n }\n /**\n * Called upon server disconnect.\n *\n * @private\n */\n ondisconnect() {\n this.destroy();\n this.onclose(\"io server disconnect\");\n }\n /**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @private\n */\n destroy() {\n if (this.subs) {\n // clean subscriptions to avoid reconnections\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs = undefined;\n }\n this.io[\"_destroy\"](this);\n }\n /**\n * Disconnects the socket manually. In that case, the socket will not try to reconnect.\n *\n * If this is the last active Socket instance of the {@link Manager}, the low-level connection will be closed.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"disconnect\", (reason) => {\n * // console.log(reason); prints \"io client disconnect\"\n * });\n *\n * socket.disconnect();\n *\n * @return self\n */\n disconnect() {\n if (this.connected) {\n this.packet({ type: PacketType.DISCONNECT });\n }\n // remove socket from pool\n this.destroy();\n if (this.connected) {\n // fire events\n this.onclose(\"io client disconnect\");\n }\n return this;\n }\n /**\n * Alias for {@link disconnect()}.\n *\n * @return self\n */\n close() {\n return this.disconnect();\n }\n /**\n * Sets the compress flag.\n *\n * @example\n * socket.compress(false).emit(\"hello\");\n *\n * @param compress - if `true`, compresses the sending data\n * @return self\n */\n compress(compress) {\n this.flags.compress = compress;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n * ready to send messages.\n *\n * @example\n * socket.volatile.emit(\"hello\"); // the server may or may not receive it\n *\n * @returns self\n */\n get volatile() {\n this.flags.volatile = true;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the callback will be called with an error when the\n * given number of milliseconds have elapsed without an acknowledgement from the server:\n *\n * @example\n * socket.timeout(5000).emit(\"my-event\", (err) => {\n * if (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n * });\n *\n * @returns self\n */\n timeout(timeout) {\n this.flags.timeout = timeout;\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * @example\n * socket.onAny((event, ...args) => {\n * console.log(`got ${event}`);\n * });\n *\n * @param listener\n */\n onAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * @example\n * socket.prependAny((event, ...args) => {\n * console.log(`got event ${event}`);\n * });\n *\n * @param listener\n */\n prependAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`got event ${event}`);\n * }\n *\n * socket.onAny(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAny(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAny();\n *\n * @param listener\n */\n offAny(listener) {\n if (!this._anyListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAny() {\n return this._anyListeners || [];\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.onAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n onAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.prependAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n prependAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`sent event ${event}`);\n * }\n *\n * socket.onAnyOutgoing(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAnyOutgoing(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAnyOutgoing();\n *\n * @param [listener] - the catch-all listener (optional)\n */\n offAnyOutgoing(listener) {\n if (!this._anyOutgoingListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyOutgoingListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyOutgoingListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAnyOutgoing() {\n return this._anyOutgoingListeners || [];\n }\n /**\n * Notify the listeners for each packet sent\n *\n * @param packet\n *\n * @private\n */\n notifyOutgoingListeners(packet) {\n if (this._anyOutgoingListeners && this._anyOutgoingListeners.length) {\n const listeners = this._anyOutgoingListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, packet.data);\n }\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/socket.io-client/build/esm/socket.js","/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\nexport function Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\nBackoff.prototype.duration = function () {\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\nBackoff.prototype.reset = function () {\n this.attempts = 0;\n};\n/**\n * Set the minimum duration\n *\n * @api public\n */\nBackoff.prototype.setMin = function (min) {\n this.ms = min;\n};\n/**\n * Set the maximum duration\n *\n * @api public\n */\nBackoff.prototype.setMax = function (max) {\n this.max = max;\n};\n/**\n * Set the jitter\n *\n * @api public\n */\nBackoff.prototype.setJitter = function (jitter) {\n this.jitter = jitter;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/socket.io-client/build/esm/contrib/backo2.js","import { Socket as Engine, installTimerFunctions, nextTick, } from \"engine.io-client\";\nimport { Socket } from \"./socket.js\";\nimport * as parser from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Backoff } from \"./contrib/backo2.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\nexport class Manager extends Emitter {\n constructor(uri, opts) {\n var _a;\n super();\n this.nsps = {};\n this.subs = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n opts.path = opts.path || \"/socket.io\";\n this.opts = opts;\n installTimerFunctions(this, opts);\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor((_a = opts.randomizationFactor) !== null && _a !== void 0 ? _a : 0.5);\n this.backoff = new Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor(),\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this._readyState = \"closed\";\n this.uri = uri;\n const _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this._autoConnect = opts.autoConnect !== false;\n if (this._autoConnect)\n this.open();\n }\n reconnection(v) {\n if (!arguments.length)\n return this._reconnection;\n this._reconnection = !!v;\n return this;\n }\n reconnectionAttempts(v) {\n if (v === undefined)\n return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n }\n reconnectionDelay(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelay;\n this._reconnectionDelay = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n return this;\n }\n randomizationFactor(v) {\n var _a;\n if (v === undefined)\n return this._randomizationFactor;\n this._randomizationFactor = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n return this;\n }\n reconnectionDelayMax(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n return this;\n }\n timeout(v) {\n if (!arguments.length)\n return this._timeout;\n this._timeout = v;\n return this;\n }\n /**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @private\n */\n maybeReconnectOnOpen() {\n // Only try to reconnect if it's the first time we're connecting\n if (!this._reconnecting &&\n this._reconnection &&\n this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n }\n /**\n * Sets the current transport `socket`.\n *\n * @param {Function} fn - optional, callback\n * @return self\n * @public\n */\n open(fn) {\n if (~this._readyState.indexOf(\"open\"))\n return this;\n this.engine = new Engine(this.uri, this.opts);\n const socket = this.engine;\n const self = this;\n this._readyState = \"opening\";\n this.skipReconnect = false;\n // emit `open`\n const openSubDestroy = on(socket, \"open\", function () {\n self.onopen();\n fn && fn();\n });\n const onError = (err) => {\n this.cleanup();\n this._readyState = \"closed\";\n this.emitReserved(\"error\", err);\n if (fn) {\n fn(err);\n }\n else {\n // Only do this if there is no fn to handle the error\n this.maybeReconnectOnOpen();\n }\n };\n // emit `error`\n const errorSub = on(socket, \"error\", onError);\n if (false !== this._timeout) {\n const timeout = this._timeout;\n // set timer\n const timer = this.setTimeoutFn(() => {\n openSubDestroy();\n onError(new Error(\"timeout\"));\n socket.close();\n }, timeout);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n this.subs.push(openSubDestroy);\n this.subs.push(errorSub);\n return this;\n }\n /**\n * Alias for open()\n *\n * @return self\n * @public\n */\n connect(fn) {\n return this.open(fn);\n }\n /**\n * Called upon transport open.\n *\n * @private\n */\n onopen() {\n // clear old subs\n this.cleanup();\n // mark as open\n this._readyState = \"open\";\n this.emitReserved(\"open\");\n // add new subs\n const socket = this.engine;\n this.subs.push(on(socket, \"ping\", this.onping.bind(this)), on(socket, \"data\", this.ondata.bind(this)), on(socket, \"error\", this.onerror.bind(this)), on(socket, \"close\", this.onclose.bind(this)), on(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n }\n /**\n * Called upon a ping.\n *\n * @private\n */\n onping() {\n this.emitReserved(\"ping\");\n }\n /**\n * Called with data.\n *\n * @private\n */\n ondata(data) {\n try {\n this.decoder.add(data);\n }\n catch (e) {\n this.onclose(\"parse error\", e);\n }\n }\n /**\n * Called when parser fully decodes a packet.\n *\n * @private\n */\n ondecoded(packet) {\n // the nextTick call prevents an exception in a user-provided event listener from triggering a disconnection due to a \"parse error\"\n nextTick(() => {\n this.emitReserved(\"packet\", packet);\n }, this.setTimeoutFn);\n }\n /**\n * Called upon socket error.\n *\n * @private\n */\n onerror(err) {\n this.emitReserved(\"error\", err);\n }\n /**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @public\n */\n socket(nsp, opts) {\n let socket = this.nsps[nsp];\n if (!socket) {\n socket = new Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n }\n else if (this._autoConnect && !socket.active) {\n socket.connect();\n }\n return socket;\n }\n /**\n * Called upon a socket close.\n *\n * @param socket\n * @private\n */\n _destroy(socket) {\n const nsps = Object.keys(this.nsps);\n for (const nsp of nsps) {\n const socket = this.nsps[nsp];\n if (socket.active) {\n return;\n }\n }\n this._close();\n }\n /**\n * Writes a packet.\n *\n * @param packet\n * @private\n */\n _packet(packet) {\n const encodedPackets = this.encoder.encode(packet);\n for (let i = 0; i < encodedPackets.length; i++) {\n this.engine.write(encodedPackets[i], packet.options);\n }\n }\n /**\n * Clean up transport subscriptions and packet buffer.\n *\n * @private\n */\n cleanup() {\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs.length = 0;\n this.decoder.destroy();\n }\n /**\n * Close the current socket.\n *\n * @private\n */\n _close() {\n this.skipReconnect = true;\n this._reconnecting = false;\n this.onclose(\"forced close\");\n if (this.engine)\n this.engine.close();\n }\n /**\n * Alias for close()\n *\n * @private\n */\n disconnect() {\n return this._close();\n }\n /**\n * Called upon engine close.\n *\n * @private\n */\n onclose(reason, description) {\n this.cleanup();\n this.backoff.reset();\n this._readyState = \"closed\";\n this.emitReserved(\"close\", reason, description);\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n }\n /**\n * Attempt a reconnection.\n *\n * @private\n */\n reconnect() {\n if (this._reconnecting || this.skipReconnect)\n return this;\n const self = this;\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n this.backoff.reset();\n this.emitReserved(\"reconnect_failed\");\n this._reconnecting = false;\n }\n else {\n const delay = this.backoff.duration();\n this._reconnecting = true;\n const timer = this.setTimeoutFn(() => {\n if (self.skipReconnect)\n return;\n this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n // check again for the case socket closed in above events\n if (self.skipReconnect)\n return;\n self.open((err) => {\n if (err) {\n self._reconnecting = false;\n self.reconnect();\n this.emitReserved(\"reconnect_error\", err);\n }\n else {\n self.onreconnect();\n }\n });\n }, delay);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n }\n /**\n * Called upon successful reconnect.\n *\n * @private\n */\n onreconnect() {\n const attempt = this.backoff.attempts;\n this._reconnecting = false;\n this.backoff.reset();\n this.emitReserved(\"reconnect\", attempt);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/socket.io-client/build/esm/manager.js","import { url } from \"./url.js\";\nimport { Manager } from \"./manager.js\";\nimport { Socket } from \"./socket.js\";\n/**\n * Managers cache.\n */\nconst cache = {};\nfunction lookup(uri, opts) {\n if (typeof uri === \"object\") {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n const parsed = url(uri, opts.path || \"/socket.io\");\n const source = parsed.source;\n const id = parsed.id;\n const path = parsed.path;\n const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n const newConnection = opts.forceNew ||\n opts[\"force new connection\"] ||\n false === opts.multiplex ||\n sameNamespace;\n let io;\n if (newConnection) {\n io = new Manager(source, opts);\n }\n else {\n if (!cache[id]) {\n cache[id] = new Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.queryKey;\n }\n return io.socket(parsed.path, opts);\n}\n// so that \"lookup\" can be used both as a function (e.g. `io(...)`) and as a\n// namespace (e.g. `io.connect(...)`), for backward compatibility\nObject.assign(lookup, {\n Manager,\n Socket,\n io: lookup,\n connect: lookup,\n});\n/**\n * Protocol version.\n *\n * @public\n */\nexport { protocol } from \"socket.io-parser\";\n/**\n * Expose constructors for standalone build.\n *\n * @public\n */\nexport { Manager, Socket, lookup as io, lookup as connect, lookup as default, };\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/socket.io-client/build/esm/index.js","import EventEmitter from 'event-emitter';\n\nconst SIXTY_PER_SEC = 1000 / 60;\nconst LOOP_SLOW_THRESH = 0.3;\nconst LOOP_SLOW_COUNT = 10;\n\n/**\n * Scheduler class\n *\n */\nexport default class Scheduler {\n\n /**\n * schedule a function to be called\n *\n * @param {Object} options the options\n * @param {Function} options.tick the function to be called\n * @param {Number} options.period number of milliseconds between each invocation, not including the function's execution time\n * @param {Number} options.delay number of milliseconds to add when delaying or hurrying the execution\n */\n constructor(options) {\n this.options = Object.assign({\n tick: null,\n period: SIXTY_PER_SEC,\n delay: SIXTY_PER_SEC / 3\n }, options);\n this.nextExecTime = null;\n this.requestedDelay = 0;\n this.delayCounter = 0;\n\n // mixin for EventEmitter\n let eventEmitter = new EventEmitter();\n this.on = eventEmitter.on;\n this.once = eventEmitter.once;\n this.removeListener = eventEmitter.removeListener;\n this.emit = eventEmitter.emit;\n\n }\n\n // in same cases, setTimeout is ignored by the browser,\n // this is known to happen during the first 100ms of a touch event\n // on android chrome. Double-check the game loop using requestAnimationFrame\n nextTickChecker() {\n let currentTime = (new Date()).getTime();\n if (currentTime > this.nextExecTime) {\n this.delayCounter++;\n this.callTick();\n this.nextExecTime = currentTime + this.options.stepPeriod;\n }\n window.requestAnimationFrame(this.nextTickChecker.bind(this));\n }\n\n nextTick() {\n let stepStartTime = (new Date()).getTime();\n if (stepStartTime > this.nextExecTime + this.options.period * LOOP_SLOW_THRESH) {\n this.delayCounter++;\n } else\n this.delayCounter = 0;\n\n this.callTick();\n this.nextExecTime = stepStartTime + this.options.period + this.requestedDelay;\n this.requestedDelay = 0;\n setTimeout(this.nextTick.bind(this), this.nextExecTime - (new Date()).getTime());\n }\n\n callTick() {\n if (this.delayCounter >= LOOP_SLOW_COUNT) {\n this.emit('loopRunningSlow');\n this.delayCounter = 0;\n }\n this.options.tick();\n }\n\n /**\n * start the schedule\n * @return {Scheduler} returns this scheduler instance\n */\n start() {\n setTimeout(this.nextTick.bind(this));\n if (typeof window === 'object' && typeof window.requestAnimationFrame === 'function')\n window.requestAnimationFrame(this.nextTickChecker.bind(this));\n return this;\n }\n\n /**\n * delay next execution\n */\n delayTick() {\n this.requestedDelay += this.options.delay;\n }\n\n /**\n * hurry the next execution\n */\n hurryTick() {\n this.requestedDelay -= this.options.delay;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/lib/Scheduler.js","export default class SyncStrategy {\n\n constructor(clientEngine, inputOptions) {\n this.clientEngine = clientEngine;\n this.gameEngine = clientEngine.gameEngine;\n this.needFirstSync = true;\n this.options = Object.assign({}, inputOptions);\n this.gameEngine.on('client__postStep', this.syncStep.bind(this));\n this.gameEngine.on('client__syncReceived', this.collectSync.bind(this));\n this.requiredSyncs = [];\n this.SYNC_APPLIED = 'SYNC_APPLIED';\n this.STEP_DRIFT_THRESHOLDS = {\n onServerSync: { MAX_LEAD: 1, MAX_LAG: 3 }, // max step lead/lag allowed after every server sync\n onEveryStep: { MAX_LEAD: 7, MAX_LAG: 8 }, // max step lead/lag allowed at every step\n clientReset: 20 // if we are behind this many steps, just reset the step counter\n };\n }\n\n // collect a sync and its events\n // maintain a \"lastSync\" member which describes the last sync we received from\n // the server. the lastSync object contains:\n // - syncObjects: all events in the sync indexed by the id of the object involved\n // - syncSteps: all events in the sync indexed by the step on which they occurred\n // - objCount\n // - eventCount\n // - stepCount\n collectSync(e) {\n\n // on first connect we need to wait for a full world update\n if (this.needFirstSync) {\n if (!e.fullUpdate)\n return;\n } else {\n\n // TODO: there is a problem below in the case where the client is 10 steps behind the server,\n // and the syncs that arrive are always in the future and never get processed. To address this\n // we may need to store more than one sync.\n\n // ignore syncs which are older than the latest\n if (this.lastSync && this.lastSync.stepCount && this.lastSync.stepCount > e.stepCount)\n return;\n }\n\n // before we overwrite the last sync, check if it was a required sync\n // syncs that create or delete objects are saved because they must be applied.\n if (this.lastSync && this.lastSync.required) {\n this.requiredSyncs.push(this.lastSync);\n }\n\n // build new sync object\n let lastSync = this.lastSync = {\n stepCount: e.stepCount,\n fullUpdate: e.fullUpdate,\n syncObjects: {},\n syncSteps: {}\n };\n\n e.syncEvents.forEach(sEvent => {\n\n // keep a reference of events by object id\n if (sEvent.objectInstance) {\n let objectId = sEvent.objectInstance.id;\n if (!lastSync.syncObjects[objectId]) lastSync.syncObjects[objectId] = [];\n lastSync.syncObjects[objectId].push(sEvent);\n }\n\n // keep a reference of events by step\n let stepCount = sEvent.stepCount;\n let eventName = sEvent.eventName;\n if (eventName === 'objectDestroy' || eventName === 'objectCreate')\n lastSync.required = true;\n\n if (!lastSync.syncSteps[stepCount]) lastSync.syncSteps[stepCount] = {};\n if (!lastSync.syncSteps[stepCount][eventName]) lastSync.syncSteps[stepCount][eventName] = [];\n lastSync.syncSteps[stepCount][eventName].push(sEvent);\n });\n\n let eventCount = e.syncEvents.length;\n let objCount = (Object.keys(lastSync.syncObjects)).length;\n let stepCount = (Object.keys(lastSync.syncSteps)).length;\n this.gameEngine.trace.debug(() => `sync contains ${objCount} objects ${eventCount} events ${stepCount} steps`);\n }\n\n // add an object to our world\n addNewObject(objId, newObj, options) {\n\n let curObj = new newObj.constructor(this.gameEngine, {\n id: objId\n });\n\n // enforce object implementations of syncTo\n if (!curObj.__proto__.hasOwnProperty('syncTo')) {\n throw `GameObject of type ${curObj.class} does not implement the syncTo() method, which must copy the netscheme`;\n }\n\n curObj.syncTo(newObj);\n this.gameEngine.addObjectToWorld(curObj);\n if (this.clientEngine.options.verbose)\n console.log(`adding new object ${curObj}`);\n\n return curObj;\n }\n\n // sync to step, by applying bending, and applying the latest sync\n syncStep(stepDesc) {\n\n // apply incremental bending\n this.gameEngine.world.forEachObject((id, o) => {\n if (typeof o.applyIncrementalBending === 'function') {\n o.applyIncrementalBending(stepDesc);\n o.refreshToPhysics();\n }\n });\n\n // apply all pending required syncs\n while (this.requiredSyncs.length) {\n\n let requiredStep = this.requiredSyncs[0].stepCount;\n\n // if we haven't reached the corresponding step, it's too soon to apply syncs\n if (requiredStep > this.gameEngine.world.stepCount)\n return;\n\n this.gameEngine.trace.trace(() => `applying a required sync ${requiredStep}`);\n this.applySync(this.requiredSyncs.shift(), true);\n }\n\n // apply the sync and delete it on success\n if (this.lastSync) {\n let rc = this.applySync(this.lastSync, false);\n if (rc === this.SYNC_APPLIED)\n this.lastSync = null;\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/syncStrategies/SyncStrategy.js","import SyncStrategy from './SyncStrategy';\n\nconst defaults = {\n clientStepHold: 6,\n localObjBending: 1.0, // amount of bending towards position of sync object\n remoteObjBending: 1.0, // amount of bending towards position of sync object\n bendingIncrements: 6, // the bending should be applied increments (how many steps for entire bend)\n reflect: false\n};\n\nexport default class InterpolateStrategy extends SyncStrategy {\n\n constructor(clientEngine, inputOptions) {\n\n const options = Object.assign({}, defaults, inputOptions);\n super(clientEngine, options);\n\n this.gameEngine.ignoreInputs = true; // client side engine ignores inputs\n this.gameEngine.ignorePhysics = true; // client side engine ignores physics\n this.STEP_DRIFT_THRESHOLDS = {\n onServerSync: { MAX_LEAD: -8, MAX_LAG: 16 }, // max step lead/lag allowed after every server sync\n onEveryStep: { MAX_LEAD: -4, MAX_LAG: 24 }, // max step lead/lag allowed at every step\n clientReset: 40 // if we are behind this many steps, just reset the step counter\n };\n }\n\n // apply a new sync\n applySync(sync, required) {\n\n // if sync is in the past we cannot interpolate to it\n if (!required && sync.stepCount <= this.gameEngine.world.stepCount) {\n return this.SYNC_APPLIED;\n }\n\n this.gameEngine.trace.debug(() => 'interpolate applying sync');\n //\n // scan all the objects in the sync\n //\n // 1. if the object exists locally, sync to the server object\n // 2. if the object is new, just create it\n //\n this.needFirstSync = false;\n let world = this.gameEngine.world;\n for (let ids of Object.keys(sync.syncObjects)) {\n\n // TODO: we are currently taking only the first event out of\n // the events that may have arrived for this object\n let ev = sync.syncObjects[ids][0];\n let curObj = world.objects[ev.objectInstance.id];\n\n if (curObj) {\n\n // case 1: this object already exists locally\n this.gameEngine.trace.trace(() => `object before syncTo: ${curObj.toString()}`);\n curObj.saveState();\n curObj.syncTo(ev.objectInstance);\n this.gameEngine.trace.trace(() => `object after syncTo: ${curObj.toString()} synced to step[${ev.stepCount}]`);\n\n } else {\n\n // case 2: object does not exist. create it now\n this.addNewObject(ev.objectInstance.id, ev.objectInstance);\n }\n }\n\n //\n // bend back to original state\n //\n for (let objId of Object.keys(world.objects)) {\n\n let obj = world.objects[objId];\n let isLocal = (obj.playerId == this.gameEngine.playerId); // eslint-disable-line eqeqeq\n let bending = isLocal ? this.options.localObjBending : this.options.remoteObjBending;\n obj.bendToCurrentState(bending, this.gameEngine.worldSettings, isLocal, this.options.bendingIncrements);\n if (typeof obj.refreshRenderObject === 'function')\n obj.refreshRenderObject();\n this.gameEngine.trace.trace(() => `object[${objId}] ${obj.bendingToString()}`);\n }\n\n // destroy objects\n // TODO: use world.forEachObject((id, ob) => {});\n // TODO: identical code is in InterpolateStrategy\n for (let objId of Object.keys(world.objects)) {\n\n let objEvents = sync.syncObjects[objId];\n\n // if this was a full sync, and we did not get a corresponding object,\n // remove the local object\n if (sync.fullUpdate && !objEvents && objId < this.gameEngine.options.clientIDSpace) {\n this.gameEngine.removeObjectFromWorld(objId);\n continue;\n }\n\n if (!objEvents || objId >= this.gameEngine.options.clientIDSpace)\n continue;\n\n // if we got an objectDestroy event, destroy the object\n objEvents.forEach((e) => {\n if (e.eventName === 'objectDestroy') this.gameEngine.removeObjectFromWorld(objId);\n });\n }\n\n return this.SYNC_APPLIED;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/syncStrategies/InterpolateStrategy.js","import SyncStrategy from './SyncStrategy';\n\nconst defaults = {\n syncsBufferLength: 5,\n maxReEnactSteps: 60, // maximum number of steps to re-enact\n RTTEstimate: 2, // estimate the RTT as two steps (for updateRate=6, that's 200ms)\n extrapolate: 2, // player performs method \"X\" which means extrapolate to match server time. that 100 + (0..100)\n localObjBending: 0.1, // amount of bending towards position of sync object\n remoteObjBending: 0.6, // amount of bending towards position of sync object\n bendingIncrements: 10 // the bending should be applied increments (how many steps for entire bend)\n};\n\nexport default class ExtrapolateStrategy extends SyncStrategy {\n\n constructor(clientEngine, inputOptions) {\n\n const options = Object.assign({}, defaults, inputOptions);\n super(clientEngine, options);\n\n this.lastSync = null;\n this.recentInputs = {};\n this.gameEngine.on('client__processInput', this.clientInputSave.bind(this));\n this.STEP_DRIFT_THRESHOLDS = {\n onServerSync: { MAX_LEAD: 2, MAX_LAG: 3 }, // max step lead/lag allowed after every server sync\n onEveryStep: { MAX_LEAD: 7, MAX_LAG: 4 }, // max step lead/lag allowed at every step\n clientReset: 40 // if we are behind this many steps, just reset the step counter\n };\n }\n\n // keep a buffer of inputs so that we can replay them on extrapolation\n clientInputSave(inputEvent) {\n\n // if no inputs have been stored for this step, create an array\n if (!this.recentInputs[inputEvent.input.step]) {\n this.recentInputs[inputEvent.input.step] = [];\n }\n this.recentInputs[inputEvent.input.step].push(inputEvent.input);\n }\n\n // clean up the input buffer\n cleanRecentInputs(lastServerStep) {\n for (let input of Object.keys(this.recentInputs)) {\n if (this.recentInputs[input][0].step <= lastServerStep) {\n delete this.recentInputs[input];\n }\n }\n }\n\n // apply a new sync\n applySync(sync, required) {\n\n // if sync is in the future, we are not ready to apply yet.\n if (!required && sync.stepCount > this.gameEngine.world.stepCount) {\n return null;\n }\n\n this.gameEngine.trace.debug(() => 'extrapolate applying sync');\n\n //\n // scan all the objects in the sync\n //\n // 1. if the object has a local shadow, adopt the server object,\n // and destroy the shadow\n //\n // 2. if the object exists locally, sync to the server object,\n // later we will re-enact the missing steps and then bend to\n // the current position\n //\n // 3. if the object is new, just create it\n //\n this.needFirstSync = false;\n let world = this.gameEngine.world;\n let serverStep = sync.stepCount;\n for (let ids of Object.keys(sync.syncObjects)) {\n\n // TODO: we are currently taking only the first event out of\n // the events that may have arrived for this object\n let ev = sync.syncObjects[ids][0];\n let curObj = world.objects[ev.objectInstance.id];\n\n let localShadowObj = this.gameEngine.findLocalShadow(ev.objectInstance);\n if (localShadowObj) {\n // case 1: this object has a local shadow object on the client\n this.gameEngine.trace.debug(() => `object ${ev.objectInstance.id} replacing local shadow ${localShadowObj.id}`);\n\n if (!world.objects.hasOwnProperty(ev.objectInstance.id)) {\n let newObj = this.addNewObject(ev.objectInstance.id, ev.objectInstance, { visible: false });\n newObj.saveState(localShadowObj);\n }\n this.gameEngine.removeObjectFromWorld(localShadowObj.id);\n\n } else if (curObj) {\n\n // case 2: this object already exists locally\n this.gameEngine.trace.trace(() => `object before syncTo: ${curObj.toString()}`);\n curObj.saveState();\n curObj.syncTo(ev.objectInstance);\n this.gameEngine.trace.trace(() => `object after syncTo: ${curObj.toString()} synced to step[${ev.stepCount}]`);\n\n } else {\n\n // case 3: object does not exist. create it now\n this.addNewObject(ev.objectInstance.id, ev.objectInstance);\n }\n }\n\n //\n // reenact the steps that we want to extrapolate forwards\n //\n this.gameEngine.trace.debug(() => `extrapolate re-enacting steps from [${serverStep}] to [${world.stepCount}]`);\n if (serverStep < world.stepCount - this.options.maxReEnactSteps) {\n serverStep = world.stepCount - this.options.maxReEnactSteps;\n this.gameEngine.trace.info(() => `too many steps to re-enact. Starting from [${serverStep}] to [${world.stepCount}]`);\n }\n\n let clientStep = world.stepCount;\n for (world.stepCount = serverStep; world.stepCount < clientStep;) {\n\n if (this.recentInputs[world.stepCount]) {\n this.recentInputs[world.stepCount].forEach(inputDesc => {\n\n // only movement inputs are re-enacted\n if (!inputDesc.options || !inputDesc.options.movement) return;\n\n this.gameEngine.trace.trace(() => `extrapolate re-enacting movement input[${inputDesc.messageIndex}]: ${inputDesc.input}`);\n this.gameEngine.processInput(inputDesc, this.gameEngine.playerId);\n });\n }\n\n // run the game engine step in \"reenact\" mode\n this.gameEngine.step(true);\n }\n this.cleanRecentInputs(serverStep);\n\n //\n // bend back to original state\n //\n for (let objId of Object.keys(world.objects)) {\n\n // shadow objects are not bent\n if (objId >= this.gameEngine.options.clientIDSpace)\n continue;\n\n // TODO: using == instead of === because of string/number mismatch\n // These values should always be strings (which contain a number)\n // Reminder: the reason we use a string is that these\n // values are sometimes used as object keys\n let obj = world.objects[objId];\n let isLocal = (obj.playerId == this.gameEngine.playerId); // eslint-disable-line eqeqeq\n let bending = isLocal ? this.options.localObjBending : this.options.remoteObjBending;\n obj.bendToCurrentState(bending, this.gameEngine.worldSettings, isLocal, this.options.bendingIncrements);\n if (typeof obj.refreshRenderObject === 'function')\n obj.refreshRenderObject();\n this.gameEngine.trace.trace(() => `object[${objId}] ${obj.bendingToString()}`);\n }\n\n // trace object state after sync\n for (let objId of Object.keys(world.objects)) {\n this.gameEngine.trace.trace(() => `object after extrapolate replay: ${world.objects[objId].toString()}`);\n }\n\n // destroy objects\n // TODO: use world.forEachObject((id, ob) => {});\n // TODO: identical code is in InterpolateStrategy\n for (let objId of Object.keys(world.objects)) {\n\n let objEvents = sync.syncObjects[objId];\n\n // if this was a full sync, and we did not get a corresponding object,\n // remove the local object\n if (sync.fullUpdate && !objEvents && objId < this.gameEngine.options.clientIDSpace) {\n this.gameEngine.removeObjectFromWorld(objId);\n continue;\n }\n\n if (!objEvents || objId >= this.gameEngine.options.clientIDSpace)\n continue;\n\n // if we got an objectDestroy event, destroy the object\n objEvents.forEach((e) => {\n if (e.eventName === 'objectDestroy') this.gameEngine.removeObjectFromWorld(objId);\n });\n }\n\n return this.SYNC_APPLIED;\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/syncStrategies/ExtrapolateStrategy.js","import SyncStrategy from './SyncStrategy'\n\nconst defaults = {\n worldBufferLength: 60,\n clientStepLag: 0\n};\n\nexport default class FrameSyncStrategy extends SyncStrategy {\n\n constructor(clientEngine, inputOptions) {\n\n const options = Object.assign({}, defaults, inputOptions);\n super(clientEngine, options);\n\n this.gameEngine = this.clientEngine.gameEngine;\n }\n\n // apply a new sync\n applySync(sync, required) {\n\n this.needFirstSync = false;\n this.gameEngine.trace.debug(() => 'framySync applying sync');\n let world = this.gameEngine.world;\n\n for (let ids of Object.keys(sync.syncObjects)) {\n let ev = sync.syncObjects[ids][0];\n let curObj = world.objects[ev.objectInstance.id];\n if (curObj) {\n curObj.syncTo(ev.objectInstance);\n } else {\n this.addNewObject(ev.objectInstance.id, ev.objectInstance);\n }\n }\n\n // destroy objects\n for (let objId of Object.keys(world.objects)) {\n\n let objEvents = sync.syncObjects[objId];\n\n // if this was a full sync, and we did not get a corresponding object,\n // remove the local object\n if (sync.fullUpdate && !objEvents && objId < this.gameEngine.options.clientIDSpace) {\n this.gameEngine.removeObjectFromWorld(objId);\n continue;\n }\n\n if (!objEvents || objId >= this.gameEngine.options.clientIDSpace)\n continue;\n\n // if we got an objectDestroy event, destroy the object\n objEvents.forEach((e) => {\n if (e.eventName === 'objectDestroy') this.gameEngine.removeObjectFromWorld(objId);\n });\n }\n\n return this.SYNC_APPLIED;\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/syncStrategies/FrameSyncStrategy.js","import InterpolateStrategy from './syncStrategies/InterpolateStrategy';\nimport ExtrapolateStrategy from './syncStrategies/ExtrapolateStrategy';\nimport FrameSyncStrategy from './syncStrategies/FrameSyncStrategy';\n\nconst strategies = {\n extrapolate: ExtrapolateStrategy,\n interpolate: InterpolateStrategy,\n frameSync: FrameSyncStrategy\n};\n\nexport default class Synchronizer {\n // create a synchronizer instance\n constructor(clientEngine, options) {\n this.clientEngine = clientEngine;\n this.options = options || {};\n if (!strategies.hasOwnProperty(this.options.sync)) {\n throw new Error(`ERROR: unknown synchronzation strategy ${this.options.sync}`);\n }\n this.syncStrategy = new strategies[this.options.sync](this.clientEngine, this.options);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/Synchronizer.js","import Utils from './../lib/Utils';\nimport TwoVector from './TwoVector';\nimport ThreeVector from './ThreeVector';\nimport Quaternion from './Quaternion';\nimport BaseTypes from './BaseTypes';\n\nconst MAX_UINT_16 = 0xFFFF;\n\n/**\n * The Serializer is responsible for serializing the game world and its\n * objects on the server, before they are sent to each client. On the client side the\n * Serializer deserializes these objects.\n *\n */\nclass Serializer {\n\n constructor() {\n this.registeredClasses = {};\n this.customTypes = {};\n this.registerClass(TwoVector);\n this.registerClass(ThreeVector);\n this.registerClass(Quaternion);\n }\n\n /**\n * Adds a custom primitive to the serializer instance.\n * This will enable you to use it in an object's netScheme\n * @param customType\n */\n // TODO: the function below is not used, and it is not clear what that\n // first argument is supposed to be\n addCustomType(customType) {\n this.customTypes[customType.type] = customType;\n }\n\n /**\n * Checks if type can be assigned by value.\n * @param {String} type Type to Checks\n * @return {Boolean} True if type can be assigned\n */\n static typeCanAssign(type) {\n return type !== BaseTypes.TYPES.CLASSINSTANCE && type !== BaseTypes.TYPES.LIST;\n }\n\n /**\n * Registers a new class with the serializer, so it may be deserialized later\n * @param {Function} classObj reference to the class (not an instance!)\n * @param {String} classId Unit specifying a class ID\n */\n registerClass(classObj, classId) {\n // if no classId is specified, hash one from the class name\n classId = classId ? classId : Utils.hashStr(classObj.name);\n if (this.registeredClasses[classId]) {\n console.error(`Serializer: accidental override of classId ${classId} when registering class`, classObj);\n }\n\n this.registeredClasses[classId] = classObj;\n }\n\n deserialize(dataBuffer, byteOffset) {\n byteOffset = byteOffset ? byteOffset : 0;\n let localByteOffset = 0;\n\n let dataView = new DataView(dataBuffer);\n\n let objectClassId = dataView.getUint8(byteOffset + localByteOffset);\n\n // todo if classId is 0 - take care of dynamic serialization.\n let objectClass = this.registeredClasses[objectClassId];\n if (objectClass == null) {\n console.error('Serializer: Found a class which was not registered. Please use serializer.registerClass() to register all serialized classes.');\n }\n\n localByteOffset += Uint8Array.BYTES_PER_ELEMENT; // advance the byteOffset after the classId\n\n // create de-referenced instance of the class. gameEngine and id will be 'tacked on' later at the sync strategies\n let obj = new objectClass(null, { id: null });\n for (let property of Object.keys(objectClass.netScheme).sort()) {\n let read = this.readDataView(dataView, byteOffset + localByteOffset, objectClass.netScheme[property]);\n obj[property] = read.data;\n localByteOffset += read.bufferSize;\n }\n\n return { obj, byteOffset: localByteOffset };\n }\n\n writeDataView(dataView, value, bufferOffset, netSchemProp) {\n if (netSchemProp.type === BaseTypes.TYPES.FLOAT32) {\n dataView.setFloat32(bufferOffset, value);\n } else if (netSchemProp.type === BaseTypes.TYPES.INT32) {\n dataView.setInt32(bufferOffset, value);\n } else if (netSchemProp.type === BaseTypes.TYPES.INT16) {\n dataView.setInt16(bufferOffset, value);\n } else if (netSchemProp.type === BaseTypes.TYPES.INT8) {\n dataView.setInt8(bufferOffset, value);\n } else if (netSchemProp.type === BaseTypes.TYPES.UINT8) {\n dataView.setUint8(bufferOffset, value);\n } else if (netSchemProp.type === BaseTypes.TYPES.STRING) {\n\n // MAX_UINT_16 is a reserved (length) value which indicates string hasn't changed\n if (value === null) {\n dataView.setUint16(bufferOffset, MAX_UINT_16);\n } else {\n let strLen = value.length;\n dataView.setUint16(bufferOffset, strLen);\n let localBufferOffset = 2;\n for (let i = 0; i < strLen; i++)\n dataView.setUint16(bufferOffset + localBufferOffset + i * 2, value.charCodeAt(i));\n }\n } else if (netSchemProp.type === BaseTypes.TYPES.CLASSINSTANCE) {\n value.serialize(this, {\n dataBuffer: dataView.buffer,\n bufferOffset: bufferOffset\n });\n } else if (netSchemProp.type === BaseTypes.TYPES.LIST) {\n let localBufferOffset = 0;\n\n // a list is comprised of the number of items followed by the items\n dataView.setUint16(bufferOffset + localBufferOffset, value.length);\n localBufferOffset += Uint16Array.BYTES_PER_ELEMENT;\n\n for (let item of value) {\n // TODO: inelegant, currently doesn't support list of lists\n if (netSchemProp.itemType === BaseTypes.TYPES.CLASSINSTANCE) {\n let serializedObj = item.serialize(this, {\n dataBuffer: dataView.buffer,\n bufferOffset: bufferOffset + localBufferOffset\n });\n localBufferOffset += serializedObj.bufferOffset;\n } else if (netSchemProp.itemType === BaseTypes.TYPES.STRING) {\n // MAX_UINT_16 is a reserved (length) value which indicates string hasn't changed\n if (item === null) {\n dataView.setUint16(bufferOffset + localBufferOffset, MAX_UINT_16);\n localBufferOffset += Uint16Array.BYTES_PER_ELEMENT;\n } else {\n let strLen = item.length;\n dataView.setUint16(bufferOffset + localBufferOffset, strLen);\n localBufferOffset += Uint16Array.BYTES_PER_ELEMENT;\n for (let i = 0; i < strLen; i++)\n dataView.setUint16(bufferOffset + localBufferOffset + i * 2, item.charCodeAt(i));\n localBufferOffset += Uint16Array.BYTES_PER_ELEMENT * strLen;\n }\n } else {\n this.writeDataView(dataView, item, bufferOffset + localBufferOffset, { type: netSchemProp.itemType });\n localBufferOffset += this.getTypeByteSize(netSchemProp.itemType);\n }\n }\n } else if (this.customTypes[netSchemProp.type]) {\n // this is a custom data property which needs to define its own write method\n this.customTypes[netSchemProp.type].writeDataView(dataView, value, bufferOffset);\n } else {\n console.error(`No custom property ${netSchemProp.type} found!`);\n }\n\n }\n\n readDataView(dataView, bufferOffset, netSchemProp) {\n let data, bufferSize;\n\n if (netSchemProp.type === BaseTypes.TYPES.FLOAT32) {\n data = dataView.getFloat32(bufferOffset);\n bufferSize = this.getTypeByteSize(netSchemProp.type);\n } else if (netSchemProp.type === BaseTypes.TYPES.INT32) {\n data = dataView.getInt32(bufferOffset);\n bufferSize = this.getTypeByteSize(netSchemProp.type);\n } else if (netSchemProp.type === BaseTypes.TYPES.INT16) {\n data = dataView.getInt16(bufferOffset);\n bufferSize = this.getTypeByteSize(netSchemProp.type);\n } else if (netSchemProp.type === BaseTypes.TYPES.INT8) {\n data = dataView.getInt8(bufferOffset);\n bufferSize = this.getTypeByteSize(netSchemProp.type);\n } else if (netSchemProp.type === BaseTypes.TYPES.UINT8) {\n data = dataView.getUint8(bufferOffset);\n bufferSize = this.getTypeByteSize(netSchemProp.type);\n } else if (netSchemProp.type === BaseTypes.TYPES.STRING) {\n let length = dataView.getUint16(bufferOffset);\n let localBufferOffset = Uint16Array.BYTES_PER_ELEMENT;\n bufferSize = localBufferOffset;\n if (length === MAX_UINT_16) {\n data = null;\n } else {\n let a = [];\n for (let i = 0; i < length; i++)\n a[i] = dataView.getUint16(bufferOffset + localBufferOffset + i * 2);\n data = String.fromCharCode.apply(null, a);\n bufferSize += length * Uint16Array.BYTES_PER_ELEMENT;\n }\n } else if (netSchemProp.type === BaseTypes.TYPES.CLASSINSTANCE) {\n var deserializeData = this.deserialize(dataView.buffer, bufferOffset);\n data = deserializeData.obj;\n bufferSize = deserializeData.byteOffset;\n } else if (netSchemProp.type === BaseTypes.TYPES.LIST) {\n let localBufferOffset = 0;\n\n let items = [];\n let itemCount = dataView.getUint16(bufferOffset + localBufferOffset);\n localBufferOffset += Uint16Array.BYTES_PER_ELEMENT;\n\n for (let x = 0; x < itemCount; x++) {\n let read = this.readDataView(dataView, bufferOffset + localBufferOffset, { type: netSchemProp.itemType });\n items.push(read.data);\n localBufferOffset += read.bufferSize;\n }\n\n data = items;\n bufferSize = localBufferOffset;\n } else if (this.customTypes[netSchemProp.type] != null) {\n // this is a custom data property which needs to define its own read method\n data = this.customTypes[netSchemProp.type].readDataView(dataView, bufferOffset);\n } else {\n console.error(`No custom property ${netSchemProp.type} found!`);\n }\n\n return { data: data, bufferSize: bufferSize };\n }\n\n getTypeByteSize(type) {\n\n switch (type) {\n case BaseTypes.TYPES.FLOAT32: {\n return Float32Array.BYTES_PER_ELEMENT;\n }\n case BaseTypes.TYPES.INT32: {\n return Int32Array.BYTES_PER_ELEMENT;\n }\n case BaseTypes.TYPES.INT16: {\n return Int16Array.BYTES_PER_ELEMENT;\n }\n case BaseTypes.TYPES.INT8: {\n return Int8Array.BYTES_PER_ELEMENT;\n }\n case BaseTypes.TYPES.UINT8: {\n return Uint8Array.BYTES_PER_ELEMENT;\n }\n\n // not one of the basic properties\n default: {\n if (type === undefined) {\n throw 'netScheme property declared without type attribute!';\n } else if (this.customTypes[type] === null) {\n throw `netScheme property ${type} undefined! Did you forget to add it to the serializer?`;\n } else {\n return this.customTypes[type].BYTES_PER_ELEMENT;\n }\n }\n\n }\n\n }\n}\n\nexport default Serializer;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/serialize/Serializer.js","import EventEmitter from \"event-emitter\";\n// import http from 'http';\n\n/**\n * Measures network performance between the client and the server\n * Represents both the client and server portions of NetworkMonitor\n */\nexport default class NetworkMonitor {\n constructor(server) {\n // server-side keep game name\n if (server) {\n this.server = server;\n this.gameName = Object.getPrototypeOf(server.gameEngine).constructor.name;\n }\n\n // mixin for EventEmitter\n let eventEmitter = new EventEmitter();\n this.on = eventEmitter.on;\n this.once = eventEmitter.once;\n this.removeListener = eventEmitter.removeListener;\n this.emit = eventEmitter.emit;\n }\n\n // client\n registerClient(clientEngine) {\n this.queryIdCounter = 0;\n this.RTTQueries = {};\n\n this.movingRTTAverage = 0;\n this.movingRTTAverageFrame = [];\n this.movingFPSAverageSize = clientEngine.options.healthCheckRTTSample;\n this.clientEngine = clientEngine;\n clientEngine.socket.on(\"RTTResponse\", this.onReceivedRTTQuery.bind(this));\n setInterval(this.sendRTTQuery.bind(this), clientEngine.options.healthCheckInterval);\n }\n\n sendRTTQuery() {\n // todo implement cleanup of older timestamp\n this.RTTQueries[this.queryIdCounter] = new Date().getTime();\n this.clientEngine.socket.emit(\"RTTQuery\", this.queryIdCounter);\n this.queryIdCounter++;\n }\n\n onReceivedRTTQuery(queryId) {\n let RTT = new Date().getTime() - this.RTTQueries[queryId];\n\n this.movingRTTAverageFrame.push(RTT);\n if (this.movingRTTAverageFrame.length > this.movingFPSAverageSize) {\n this.movingRTTAverageFrame.shift();\n }\n this.movingRTTAverage = this.movingRTTAverageFrame.reduce((a, b) => a + b) / this.movingRTTAverageFrame.length;\n this.emit(\"RTTUpdate\", {\n RTT: RTT,\n RTTAverage: this.movingRTTAverage,\n });\n }\n\n // server\n registerPlayerOnServer(socket) {\n socket.on(\"RTTQuery\", this.respondToRTTQuery.bind(this, socket));\n // if (this.server && this.server.options.countConnections) {\n // http.get(`http://ping.games-eu.lance.gg:2000/${this.gameName}`).on('error', () => {});\n // }\n }\n\n respondToRTTQuery(socket, queryId) {\n socket.emit(\"RTTResponse\", queryId);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/network/NetworkMonitor.js","import Serializable from './../serialize/Serializable';\nimport Utils from './../lib/Utils';\n\nexport default class NetworkedEventFactory {\n\n constructor(serializer, eventName, options) {\n options = Object.assign({}, options);\n\n this.seriazlier = serializer;\n this.options = options;\n\n this.eventName = eventName;\n this.netScheme = options.netScheme;\n\n }\n\n /**\n * Creates a new networkedEvent\n * @param {Object} payload an object representing the payload to be transferred over the wire\n * @return {Serializable} the new networkedEvent object\n */\n create(payload) {\n let networkedEvent = new Serializable();\n networkedEvent.classId = Utils.hashStr(this.eventName);\n\n if (this.netScheme) {\n networkedEvent.netScheme = Object.assign({}, this.netScheme);\n\n // copy properties from the networkedEvent instance to its ad-hoc netsScheme\n for (let property of Object.keys(this.netScheme)) {\n networkedEvent[property] = payload[property];\n }\n\n } else {\n // todo take care of the event where no netScheme is defined\n }\n\n return networkedEvent;\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/network/NetworkedEventFactory.js","import BaseTypes from '../serialize/BaseTypes';\nimport Serializable from '../serialize/Serializable';\n\n/**\n * Defines a collection of NetworkEvents to be transmitted over the wire\n */\nexport default class NetworkedEventCollection extends Serializable {\n\n static get netScheme() {\n return {\n events: {\n type: BaseTypes.TYPES.LIST,\n itemType: BaseTypes.TYPES.CLASSINSTANCE\n },\n };\n }\n\n constructor(events) {\n super();\n this.events = events || [];\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/network/NetworkedEventCollection.js","import BaseTypes from '../serialize/BaseTypes';\n\nimport NetworkedEventFactory from './NetworkedEventFactory';\nimport NetworkedEventCollection from './NetworkedEventCollection';\nimport Utils from './../lib/Utils';\n\nexport default class NetworkTransmitter {\n\n constructor(serializer) {\n this.serializer = serializer;\n\n this.registeredEvents = [];\n\n this.serializer.registerClass(NetworkedEventCollection);\n\n this.registerNetworkedEventFactory('objectUpdate', {\n netScheme: {\n stepCount: { type: BaseTypes.TYPES.INT32 },\n objectInstance: { type: BaseTypes.TYPES.CLASSINSTANCE }\n }\n });\n\n this.registerNetworkedEventFactory('objectCreate', {\n netScheme: {\n stepCount: { type: BaseTypes.TYPES.INT32 },\n objectInstance: { type: BaseTypes.TYPES.CLASSINSTANCE }\n }\n });\n\n this.registerNetworkedEventFactory('objectDestroy', {\n netScheme: {\n stepCount: { type: BaseTypes.TYPES.INT32 },\n objectInstance: { type: BaseTypes.TYPES.CLASSINSTANCE }\n }\n });\n\n this.registerNetworkedEventFactory('syncHeader', {\n netScheme: {\n stepCount: { type: BaseTypes.TYPES.INT32 },\n fullUpdate: { type: BaseTypes.TYPES.UINT8 }\n }\n });\n\n this.networkedEventCollection = new NetworkedEventCollection();\n }\n\n registerNetworkedEventFactory(eventName, options) {\n options = Object.assign({}, options);\n\n let classHash = Utils.hashStr(eventName);\n\n let networkedEventPrototype = function() {};\n networkedEventPrototype.prototype.classId = classHash;\n networkedEventPrototype.prototype.eventName = eventName;\n networkedEventPrototype.netScheme = options.netScheme;\n\n this.serializer.registerClass(networkedEventPrototype, classHash);\n\n this.registeredEvents[eventName] = new NetworkedEventFactory(this.serializer, eventName, options);\n }\n\n addNetworkedEvent(eventName, payload) {\n if (!this.registeredEvents[eventName]) {\n console.error(`NetworkTransmitter: no such event ${eventName}`);\n return null;\n }\n\n let stagedNetworkedEvent = this.registeredEvents[eventName].create(payload);\n this.networkedEventCollection.events.push(stagedNetworkedEvent);\n\n return stagedNetworkedEvent;\n }\n\n serializePayload() {\n if (this.networkedEventCollection.events.length === 0)\n return null;\n\n let dataBuffer = this.networkedEventCollection.serialize(this.serializer);\n\n return dataBuffer;\n }\n\n deserializePayload(payload) {\n return this.serializer.deserialize(payload.dataBuffer).obj;\n }\n\n clearPayload() {\n this.networkedEventCollection.events = [];\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/network/NetworkTransmitter.js","import io from 'socket.io-client';\nimport Utils from './lib/Utils';\nimport Scheduler from './lib/Scheduler';\nimport Synchronizer from './Synchronizer';\nimport Serializer from './serialize/Serializer';\nimport NetworkMonitor from './network/NetworkMonitor';\nimport NetworkTransmitter from './network/NetworkTransmitter';\n\n// TODO: the GAME_UPS below should be common to the value implemented in the server engine,\n// or better yet, it should be configurable in the GameEngine instead of ServerEngine+ClientEngine\nconst GAME_UPS = 60; // default number of game steps per second\nconst STEP_DELAY_MSEC = 12; // if forward drift detected, delay next execution by this amount\nconst STEP_HURRY_MSEC = 8; // if backward drift detected, hurry next execution by this amount\n\n/**\n * The client engine is the singleton which manages the client-side\n * process, starting the game engine, listening to network messages,\n * starting client steps, and handling world updates which arrive from\n * the server.\n * Normally, a game will implement its own sub-class of ClientEngine, and may\n * override the constructor {@link ClientEngine#constructor} and the methods\n * {@link ClientEngine#start} and {@link ClientEngine#connect}\n */\nclass ClientEngine {\n\n /**\n * Create a client engine instance.\n *\n * @param {GameEngine} gameEngine - a game engine\n * @param {Object} inputOptions - options object\n * @param {Boolean} inputOptions.verbose - print logs to console\n * @param {Boolean} inputOptions.autoConnect - if true, the client will automatically attempt connect to server.\n * @param {Boolean} inputOptions.standaloneMode - if true, the client will never try to connect to a server\n * @param {Number} inputOptions.delayInputCount - if set, inputs will be delayed by this many steps before they are actually applied on the client.\n * @param {Number} inputOptions.healthCheckInterval - health check message interval (millisec). Default is 1000.\n * @param {Number} inputOptions.healthCheckRTTSample - health check RTT calculation sample size. Default is 10.\n * @param {String} inputOptions.scheduler - When set to \"render-schedule\" the game step scheduling is controlled by the renderer and step time is variable. When set to \"fixed\" the game step is run independently with a fixed step time. Default is \"render-schedule\".\n * @param {Object} inputOptions.syncOptions - an object describing the synchronization method. If not set, will be set to extrapolate, with local object bending set to 0.0 and remote object bending set to 0.6. If the query-string parameter \"sync\" is defined, then that value is passed to this object's sync attribute.\n * @param {String} inputOptions.syncOptions.sync - chosen sync option, can be \"interpolate\", \"extrapolate\", or \"frameSync\"\n * @param {Number} inputOptions.syncOptions.localObjBending - amount (0 to 1.0) of bending towards original client position, after each sync, for local objects\n * @param {Number} inputOptions.syncOptions.remoteObjBending - amount (0 to 1.0) of bending towards original client position, after each sync, for remote objects\n * @param {String} inputOptions.serverURL - Socket server url\n * @param {Renderer} Renderer - the Renderer class constructor\n */\n constructor(gameEngine, inputOptions, Renderer) {\n\n this.options = Object.assign({\n autoConnect: true,\n healthCheckInterval: 1000,\n healthCheckRTTSample: 10,\n stepPeriod: 1000 / GAME_UPS,\n scheduler: 'render-schedule',\n serverURL: null,\n }, inputOptions);\n\n /**\n * reference to serializer\n * @member {Serializer}\n */\n this.serializer = new Serializer();\n\n /**\n * reference to game engine\n * @member {GameEngine}\n */\n this.gameEngine = gameEngine;\n this.gameEngine.registerClasses(this.serializer);\n this.networkTransmitter = new NetworkTransmitter(this.serializer);\n this.networkMonitor = new NetworkMonitor();\n\n this.inboundMessages = [];\n this.outboundMessages = [];\n\n // create the renderer\n this.renderer = this.gameEngine.renderer = new Renderer(gameEngine, this);\n\n // step scheduler\n this.scheduler = null;\n this.lastStepTime = 0;\n this.correction = 0;\n\n if (this.options.standaloneMode !== true) {\n this.configureSynchronization();\n }\n\n // create a buffer of delayed inputs (fifo)\n if (inputOptions && inputOptions.delayInputCount) {\n this.delayedInputs = [];\n for (let i = 0; i < inputOptions.delayInputCount; i++)\n this.delayedInputs[i] = [];\n }\n\n this.gameEngine.emit('client__init');\n }\n\n // configure the Synchronizer singleton\n configureSynchronization() {\n\n // the reflect syncronizer is just interpolate strategy,\n // configured to show server syncs\n let syncOptions = this.options.syncOptions;\n if (syncOptions.sync === 'reflect') {\n syncOptions.sync = 'interpolate';\n syncOptions.reflect = true;\n }\n\n this.synchronizer = new Synchronizer(this, syncOptions);\n }\n\n /**\n * Makes a connection to the game server. Extend this method if you want to add additional\n * logic on every connection. Call the super-class connect first, and return a promise which\n * executes when the super-class promise completes.\n *\n * @param {Object} [options] additional socket.io options\n * @return {Promise} Resolved when the connection is made to the server\n */\n connect(options = {}) {\n\n let connectSocket = matchMakerAnswer => {\n return new Promise((resolve, reject) => {\n\n if (matchMakerAnswer.status !== 'ok')\n reject('matchMaker failed status: ' + matchMakerAnswer.status);\n\n if (this.options.verbose)\n console.log(`connecting to game server ${matchMakerAnswer.serverURL}`);\n this.socket = io(matchMakerAnswer.serverURL, options);\n\n this.networkMonitor.registerClient(this);\n\n this.socket.once('connect', () => {\n if (this.options.verbose)\n console.log('connection made');\n resolve();\n });\n\n this.socket.once('error', (error) => {\n reject(error);\n });\n\n this.socket.on('playerJoined', (playerData) => {\n this.gameEngine.playerId = playerData.playerId;\n this.messageIndex = Number(this.gameEngine.playerId) * 10000;\n });\n\n this.socket.on('worldUpdate', (worldData) => {\n this.inboundMessages.push(worldData);\n });\n\n this.socket.on('roomUpdate', (roomData) => {\n this.gameEngine.emit('client__roomUpdate', roomData);\n });\n });\n };\n\n let matchmaker = Promise.resolve({ serverURL: this.options.serverURL, status: 'ok' });\n if (this.options.matchmaker)\n matchmaker = Utils.httpGetPromise(this.options.matchmaker);\n\n return matchmaker.then(connectSocket);\n }\n\n /**\n * Start the client engine, setting up the game loop, rendering loop and renderer.\n *\n * @return {Promise} Resolves once the Renderer has been initialized, and the game is\n * ready to connect\n */\n start() {\n this.stopped = false;\n this.resolved = false;\n // initialize the renderer\n // the render loop waits for next animation frame\n if (!this.renderer) alert('ERROR: game has not defined a renderer');\n let renderLoop = (timestamp) => {\n if (this.stopped) {\n this.renderer.stop();\n return;\n }\n this.lastTimestamp = this.lastTimestamp || timestamp;\n this.renderer.draw(timestamp, timestamp - this.lastTimestamp);\n this.lastTimestamp = timestamp;\n window.requestAnimationFrame(renderLoop);\n };\n\n return this.renderer.init().then(() => {\n this.gameEngine.start();\n\n if (this.options.scheduler === 'fixed') {\n // schedule and start the game loop\n this.scheduler = new Scheduler({\n period: this.options.stepPeriod,\n tick: this.step.bind(this),\n delay: STEP_DELAY_MSEC\n });\n this.scheduler.start();\n }\n\n if (typeof window !== 'undefined')\n window.requestAnimationFrame(renderLoop);\n if (this.options.autoConnect && this.options.standaloneMode !== true) {\n return this.connect()\n .catch((error) => {\n this.stopped = true;\n throw error;\n });\n }\n }).then(() => {\n return new Promise((resolve, reject) => {\n this.resolveGame = resolve;\n if (this.socket) {\n this.socket.on('disconnect', () => {\n if (!this.resolved && !this.stopped) {\n if (this.options.verbose)\n console.log('disconnected by server...');\n this.stopped = true;\n reject();\n }\n });\n }\n });\n });\n }\n\n /**\n * Disconnect from game server\n */\n disconnect() {\n if (!this.stopped) {\n this.socket.disconnect();\n this.stopped = true;\n }\n }\n\n // check if client step is too far ahead (leading) or too far\n // behing (lagging) the server step\n checkDrift(checkType) {\n\n if (!this.gameEngine.highestServerStep)\n return;\n\n let thresholds = this.synchronizer.syncStrategy.STEP_DRIFT_THRESHOLDS;\n let maxLead = thresholds[checkType].MAX_LEAD;\n let maxLag = thresholds[checkType].MAX_LAG;\n let clientStep = this.gameEngine.world.stepCount;\n let serverStep = this.gameEngine.highestServerStep;\n if (clientStep > serverStep + maxLead) {\n this.gameEngine.trace.warn(() => `step drift ${checkType}. [${clientStep} > ${serverStep} + ${maxLead}] Client is ahead of server. Delaying next step.`);\n if (this.scheduler) this.scheduler.delayTick();\n this.lastStepTime += STEP_DELAY_MSEC;\n this.correction += STEP_DELAY_MSEC;\n } else if (serverStep > clientStep + maxLag) {\n this.gameEngine.trace.warn(() => `step drift ${checkType}. [${serverStep} > ${clientStep} + ${maxLag}] Client is behind server. Hurrying next step.`);\n if (this.scheduler) this.scheduler.hurryTick();\n this.lastStepTime -= STEP_HURRY_MSEC;\n this.correction -= STEP_HURRY_MSEC;\n }\n }\n\n // execute a single game step. This is normally called by the Renderer\n // at each draw event.\n step(t, dt, physicsOnly) {\n\n if (!this.resolved) {\n const result = this.gameEngine.getPlayerGameOverResult();\n if (result) {\n this.resolved = true;\n this.resolveGame(result);\n // simulation can continue...\n // call disconnect to quit\n }\n }\n\n // physics only case\n if (physicsOnly) {\n this.gameEngine.step(false, t, dt, physicsOnly);\n return;\n }\n\n // first update the trace state\n this.gameEngine.trace.setStep(this.gameEngine.world.stepCount + 1);\n\n // skip one step if requested\n if (this.skipOneStep === true) {\n this.skipOneStep = false;\n return;\n }\n\n this.gameEngine.emit('client__preStep');\n while (this.inboundMessages.length > 0) {\n this.handleInboundMessage(this.inboundMessages.pop());\n this.checkDrift('onServerSync');\n }\n\n // check for server/client step drift without update\n this.checkDrift('onEveryStep');\n\n // perform game engine step\n if (this.options.standaloneMode !== true) {\n this.handleOutboundInput();\n }\n this.applyDelayedInputs();\n this.gameEngine.step(false, t, dt);\n this.gameEngine.emit('client__postStep', { dt });\n\n if (this.options.standaloneMode !== true && this.gameEngine.trace.length && this.socket) {\n // socket might not have been initialized at this point\n this.socket.emit('trace', JSON.stringify(this.gameEngine.trace.rotate()));\n }\n }\n\n // apply a user input on the client side\n doInputLocal(message) {\n\n // some synchronization strategies (interpolate) ignore inputs on client side\n if (this.gameEngine.ignoreInputs) {\n return;\n }\n\n const inputEvent = { input: message.data, playerId: this.gameEngine.playerId };\n this.gameEngine.emit('client__processInput', inputEvent);\n this.gameEngine.emit('processInput', inputEvent);\n this.gameEngine.processInput(message.data, this.gameEngine.playerId, false);\n }\n\n // apply user inputs which have been queued in order to create\n // an artificial delay\n applyDelayedInputs() {\n if (!this.delayedInputs) {\n return;\n }\n let that = this;\n let delayed = this.delayedInputs.shift();\n if (delayed && delayed.length) {\n delayed.forEach(that.doInputLocal.bind(that));\n }\n this.delayedInputs.push([]);\n }\n\n /**\n * This function should be called by the client whenever a user input\n * occurs. This function will emit the input event,\n * forward the input to the client's game engine (with a delay if\n * so configured) and will transmit the input to the server as well.\n *\n * This function can be called by the extended client engine class,\n * typically at the beginning of client-side step processing {@see GameEngine#client__preStep}.\n *\n * @param {String} input - string representing the input\n * @param {Object} inputOptions - options for the input\n */\n sendInput(input, inputOptions) {\n let inputEvent = {\n command: 'move',\n data: {\n messageIndex: this.messageIndex,\n step: this.gameEngine.world.stepCount,\n input: input,\n options: inputOptions\n }\n };\n\n this.gameEngine.trace.info(() => `USER INPUT[${this.messageIndex}]: ${input} ${inputOptions ? JSON.stringify(inputOptions) : '{}'}`);\n\n // if we delay input application on client, then queue it\n // otherwise apply it now\n if (this.delayedInputs) {\n this.delayedInputs[this.delayedInputs.length - 1].push(inputEvent);\n } else {\n this.doInputLocal(inputEvent);\n }\n\n if (this.options.standaloneMode !== true) {\n this.outboundMessages.push(inputEvent);\n }\n\n this.messageIndex++;\n }\n\n // handle a message that has been received from the server\n handleInboundMessage(syncData) {\n\n let syncEvents = this.networkTransmitter.deserializePayload(syncData).events;\n let syncHeader = syncEvents.find((e) => e.eventName === 'syncHeader');\n\n // emit that a snapshot has been received\n if (!this.gameEngine.highestServerStep || syncHeader.stepCount > this.gameEngine.highestServerStep)\n this.gameEngine.highestServerStep = syncHeader.stepCount;\n this.gameEngine.emit('client__syncReceived', {\n syncEvents: syncEvents,\n stepCount: syncHeader.stepCount,\n fullUpdate: syncHeader.fullUpdate\n });\n\n this.gameEngine.trace.info(() => `========== inbound world update ${syncHeader.stepCount} ==========`);\n\n // finally update the stepCount\n if (syncHeader.stepCount > this.gameEngine.world.stepCount + this.synchronizer.syncStrategy.STEP_DRIFT_THRESHOLDS.clientReset) {\n this.gameEngine.trace.info(() => `========== world step count updated from ${this.gameEngine.world.stepCount} to ${syncHeader.stepCount} ==========`);\n this.gameEngine.emit('client__stepReset', { oldStep: this.gameEngine.world.stepCount, newStep: syncHeader.stepCount });\n this.gameEngine.world.stepCount = syncHeader.stepCount;\n }\n }\n\n // emit an input to the authoritative server\n handleOutboundInput() {\n for (var x = 0; x < this.outboundMessages.length; x++) {\n this.socket.emit(this.outboundMessages[x].command, this.outboundMessages[x].data);\n }\n this.outboundMessages = [];\n }\n\n}\n\nexport default ClientEngine;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/ClientEngine.js","// based on http://keycode.info/\n\n// keyboard handling\nconst keyCodeTable = {\n 3: 'break',\n 8: 'backspace', // backspace / delete\n 9: 'tab',\n 12: 'clear',\n 13: 'enter',\n 16: 'shift',\n 17: 'ctrl',\n 18: 'alt',\n 19: 'pause/break',\n 20: 'caps lock',\n 27: 'escape',\n 28: 'conversion',\n 29: 'non-conversion',\n 32: 'space',\n 33: 'page up',\n 34: 'page down',\n 35: 'end',\n 36: 'home',\n 37: 'left',\n 38: 'up',\n 39: 'right',\n 40: 'down',\n 41: 'select',\n 42: 'print',\n 43: 'execute',\n 44: 'Print Screen',\n 45: 'insert',\n 46: 'delete',\n 48: '0',\n 49: '1',\n 50: '2',\n 51: '3',\n 52: '4',\n 53: '5',\n 54: '6',\n 55: '7',\n 56: '8',\n 57: '9',\n 58: ':',\n 59: 'semicolon (firefox), equals',\n 60: '<',\n 61: 'equals (firefox)',\n 63: 'ß',\n 64: '@',\n 65: 'a',\n 66: 'b',\n 67: 'c',\n 68: 'd',\n 69: 'e',\n 70: 'f',\n 71: 'g',\n 72: 'h',\n 73: 'i',\n 74: 'j',\n 75: 'k',\n 76: 'l',\n 77: 'm',\n 78: 'n',\n 79: 'o',\n 80: 'p',\n 81: 'q',\n 82: 'r',\n 83: 's',\n 84: 't',\n 85: 'u',\n 86: 'v',\n 87: 'w',\n 88: 'x',\n 89: 'y',\n 90: 'z',\n 91: 'Windows Key / Left ⌘ / Chromebook Search key',\n 92: 'right window key',\n 93: 'Windows Menu / Right ⌘',\n 96: 'numpad 0',\n 97: 'numpad 1',\n 98: 'numpad 2',\n 99: 'numpad 3',\n 100: 'numpad 4',\n 101: 'numpad 5',\n 102: 'numpad 6',\n 103: 'numpad 7',\n 104: 'numpad 8',\n 105: 'numpad 9',\n 106: 'multiply',\n 107: 'add',\n 108: 'numpad period (firefox)',\n 109: 'subtract',\n 110: 'decimal point',\n 111: 'divide',\n 112: 'f1',\n 113: 'f2',\n 114: 'f3',\n 115: 'f4',\n 116: 'f5',\n 117: 'f6',\n 118: 'f7',\n 119: 'f8',\n 120: 'f9',\n 121: 'f10',\n 122: 'f11',\n 123: 'f12',\n 124: 'f13',\n 125: 'f14',\n 126: 'f15',\n 127: 'f16',\n 128: 'f17',\n 129: 'f18',\n 130: 'f19',\n 131: 'f20',\n 132: 'f21',\n 133: 'f22',\n 134: 'f23',\n 135: 'f24',\n 144: 'num lock',\n 145: 'scroll lock',\n 160: '^',\n 161: '!',\n 163: '#',\n 164: '$',\n 165: 'ù',\n 166: 'page backward',\n 167: 'page forward',\n 169: 'closing paren (AZERTY)',\n 170: '*',\n 171: '~ + * key',\n 173: 'minus (firefox), mute/unmute',\n 174: 'decrease volume level',\n 175: 'increase volume level',\n 176: 'next',\n 177: 'previous',\n 178: 'stop',\n 179: 'play/pause',\n 180: 'e-mail',\n 181: 'mute/unmute (firefox)',\n 182: 'decrease volume level (firefox)',\n 183: 'increase volume level (firefox)',\n 186: 'semi-colon / ñ',\n 187: 'equal sign',\n 188: 'comma',\n 189: 'dash',\n 190: 'period',\n 191: 'forward slash / ç',\n 192: 'grave accent / ñ / æ',\n 193: '?, / or °',\n 194: 'numpad period (chrome)',\n 219: 'open bracket',\n 220: 'back slash',\n 221: 'close bracket / å',\n 222: 'single quote / ø',\n 223: '`',\n 224: 'left or right ⌘ key (firefox)',\n 225: 'altgr',\n 226: '< /git >',\n 230: 'GNOME Compose Key',\n 231: 'ç',\n 233: 'XF86Forward',\n 234: 'XF86Back',\n 240: 'alphanumeric',\n 242: 'hiragana/katakana',\n 243: 'half-width/full-width',\n 244: 'kanji',\n 255: 'toggle touchpad'\n};\n\n/**\n * This class allows easy usage of device keyboard controls. Use the method {@link KeyboardControls#bindKey} to\n * generate events whenever a key is pressed.\n *\n * @example\n * // in the ClientEngine constructor\n * this.controls = new KeyboardControls(this);\n * this.controls.bindKey('left', 'left', { repeat: true } );\n * this.controls.bindKey('right', 'right', { repeat: true } );\n * this.controls.bindKey('space', 'space');\n *\n */\nclass KeyboardControls {\n\n constructor(clientEngine) {\n\n this.clientEngine = clientEngine;\n this.gameEngine = clientEngine.gameEngine;\n\n this.setupListeners();\n\n // keep a reference for key press state\n this.keyState = {};\n\n // a list of bound keys and their corresponding actions\n this.boundKeys = {};\n\n this.gameEngine.on('client__preStep', () => {\n for (let keyName of Object.keys(this.boundKeys)) {\n if (this.keyState[keyName] && this.keyState[keyName].isDown) {\n\n // handle repeat press\n if (this.boundKeys[keyName].options.repeat || this.keyState[keyName].count == 0) {\n\n // callback to get live parameters if function\n let parameters = this.boundKeys[keyName].parameters;\n if (typeof parameters === \"function\") {\n parameters = parameters();\n }\n\n // todo movement is probably redundant\n let inputOptions = Object.assign({\n movement: true\n }, parameters || {});\n this.clientEngine.sendInput(this.boundKeys[keyName].actionName, inputOptions);\n this.keyState[keyName].count++;\n }\n }\n }\n });\n }\n\n setupListeners() {\n document.addEventListener('keydown', (e) => { this.onKeyChange(e, true);});\n document.addEventListener('keyup', (e) => { this.onKeyChange(e, false);});\n }\n\n /**\n * Bind a keyboard key to a Lance client event. Each time the key is pressed,\n * an event will be transmitted by the client engine, using {@link ClientEngine#sendInput},\n * and the specified event name.\n *\n * Common key names: up, down, left, right, enter, shift, ctrl, alt,\n * escape, space, page up, page down, end, home, 0..9, a..z, A..Z.\n * For a full list, please check the source link above.\n *\n * @param {String} keys - keyboard key (or array of keys) which will cause the event.\n * @param {String} actionName - the event name\n * @param {Object} options - options object\n * @param {Boolean} options.repeat - if set to true, an event continues to be sent on each game step, while the key is pressed\n * @param {Object/Function} parameters - parameters (or function to get parameters) to be sent to\n * the server with sendInput as the inputOptions\n */\n bindKey(keys, actionName, options, parameters) {\n if (!Array.isArray(keys)) keys = [keys];\n\n let keyOptions = Object.assign({\n repeat: false\n }, options);\n\n keys.forEach(keyName => {\n this.boundKeys[keyName] = { actionName, options: keyOptions, parameters: parameters };\n });\n }\n\n // todo implement unbindKey\n\n onKeyChange(e, isDown) {\n e = e || window.event;\n\n let keyName = keyCodeTable[e.keyCode];\n if (keyName && this.boundKeys[keyName]) {\n if (this.keyState[keyName] == null) {\n this.keyState[keyName] = {\n count: 0\n };\n }\n this.keyState[keyName].isDown = isDown;\n\n // key up, reset press count\n if (!isDown) this.keyState[keyName].count = 0;\n\n // keep reference to the last key pressed to avoid duplicates\n this.lastKeyPressed = isDown ? e.keyCode : null;\n // this.renderer.onKeyChange({ keyName, isDown });\n e.preventDefault();\n }\n }\n}\n\nexport default KeyboardControls;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/controls/KeyboardControls.js","let singleton = null;\n\nconst TIME_RESET_THRESHOLD = 100;\n\n/**\n * The Renderer is the component which must *draw* the game on the client.\n * It will be instantiated once on each client, and must implement the draw\n * method. The draw method will be invoked on every iteration of the browser's\n * render loop.\n */\nclass Renderer {\n\n static getInstance() {\n return singleton;\n }\n\n /**\n * Constructor of the Renderer singleton.\n * @param {GameEngine} gameEngine - Reference to the GameEngine instance.\n * @param {ClientEngine} clientEngine - Reference to the ClientEngine instance.\n */\n constructor(gameEngine, clientEngine) {\n this.gameEngine = gameEngine;\n this.clientEngine = clientEngine;\n this.gameEngine.on('client__stepReset', () => { this.doReset = true; });\n gameEngine.on('objectAdded', this.addObject.bind(this));\n gameEngine.on('objectDestroyed', this.removeObject.bind(this));\n\n // the singleton renderer has been created\n singleton = this;\n }\n\n /**\n * Initialize the renderer.\n * @return {Promise} Resolves when renderer is ready.\n */\n init() {\n if ((typeof window === 'undefined') || !document) {\n console.log('renderer invoked on server side.');\n }\n this.gameEngine.emit('client__rendererReady');\n return Promise.resolve(); // eslint-disable-line new-cap\n }\n\n reportSlowFrameRate() {\n this.gameEngine.emit('client__slowFrameRate');\n }\n\n /**\n * The main draw function. This method is called at high frequency,\n * at the rate of the render loop. Typically this is 60Hz, in WebVR 90Hz.\n * If the client engine has been configured to render-schedule, then this\n * method must call the clientEngine's step method.\n *\n * @param {Number} t - current time (only required in render-schedule mode)\n * @param {Number} dt - time elapsed since last draw\n */\n draw(t, dt) {\n this.gameEngine.emit('client__draw');\n\n if (this.clientEngine.options.scheduler === 'render-schedule')\n this.runClientStep(t);\n }\n\n /**\n * The main draw function. This method is called at high frequency,\n * at the rate of the render loop. Typically this is 60Hz, in WebVR 90Hz.\n *\n * @param {Number} t - current time\n * @param {Number} dt - time elapsed since last draw\n */\n runClientStep(t) {\n let p = this.clientEngine.options.stepPeriod;\n let dt = 0;\n\n // reset step time if we passed a threshold\n if (this.doReset || t > this.clientEngine.lastStepTime + TIME_RESET_THRESHOLD) {\n this.doReset = false;\n this.clientEngine.lastStepTime = t - p / 2;\n this.clientEngine.correction = p / 2;\n }\n\n // catch-up missed steps\n while (t > this.clientEngine.lastStepTime + p) {\n this.clientEngine.step(this.clientEngine.lastStepTime + p, p + this.clientEngine.correction);\n this.clientEngine.lastStepTime += p;\n this.clientEngine.correction = 0;\n }\n\n // if not ready for a real step yet, return\n // this might happen after catch up above\n if (t < this.clientEngine.lastStepTime) {\n dt = t - this.clientEngine.lastStepTime + this.clientEngine.correction;\n if (dt < 0) dt = 0;\n this.clientEngine.correction = this.clientEngine.lastStepTime - t;\n this.clientEngine.step(t, dt, true);\n return;\n }\n\n // render-controlled step\n dt = t - this.clientEngine.lastStepTime + this.clientEngine.correction;\n this.clientEngine.lastStepTime += p;\n this.clientEngine.correction = this.clientEngine.lastStepTime - t;\n this.clientEngine.step(t, dt);\n }\n\n /**\n * Handle the addition of a new object to the world.\n * @param {Object} obj - The object to be added.\n */\n addObject(obj) {}\n\n /**\n * Handle the removal of an old object from the world.\n * @param {Object} obj - The object to be removed.\n */\n removeObject(obj) {}\n\n /**\n * Called when clientEngine has stopped, time to clean up\n */\n stop() {}\n}\n\nexport default Renderer;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/render/Renderer.js","/* global THREE */\nconst FRAME_HISTORY_SIZE = 20;\nconst MAX_SLOW_FRAMES = 10;\n\nexport default {\n schema: {\n traceLevel: { default: 4 }\n },\n\n init: function() {\n\n // TODO: Sometimes an object is \"simple\". For example it uses\n // existing AFrame assets (an OBJ file and a material)\n // in this case, we can auto-generate the DOM element,\n // setting the quaternion, position, material, game-object-id\n // and obj-model. Same goes for objects which use primitive\n // geometric objects. Remember to also remove them.\n this.CAMERA_OFFSET_VEC = new THREE.Vector3(0, 5, -10);\n this.frameRateHistory = [];\n for (let i = 0; i < FRAME_HISTORY_SIZE; i++)\n this.frameRateHistory.push(false);\n this.frameRateTest = (1000 / 60) * 1.2;\n\n // capture the chase camera if available\n let chaseCameras = document.getElementsByClassName('chaseCamera');\n if (chaseCameras)\n this.cameraEl = chaseCameras[0];\n },\n\n tick: function(t, dt) {\n if (!this.gameEngine)\n return;\n this.renderer.tick(t, dt);\n\n let frh = this.frameRateHistory;\n frh.push(dt > this.frameRateTest);\n frh.shift();\n const slowFrames = frh.filter(x => x);\n if (slowFrames.length > MAX_SLOW_FRAMES) {\n this.frameRateHistory = frh.map(x => false);\n this.renderer.reportSlowFrameRate();\n }\n\n // for each object in the world, update the a-frame element\n this.gameEngine.world.forEachObject((id, o) => {\n let el = o.renderEl;\n if (el) {\n let q = o.quaternion;\n let p = o.position;\n el.setAttribute('position', `${p.x} ${p.y} ${p.z}`);\n el.object3D.quaternion.set(q.x, q.y, q.z, q.w);\n\n // if a chase camera is configured, update it\n if (this.cameraEl && this.gameEngine.playerId === o.playerId) {\n let camera = this.cameraEl.object3D.children[0];\n let relativeCameraOffset = this.CAMERA_OFFSET_VEC.clone();\n let cameraOffset = relativeCameraOffset.applyMatrix4(o.renderEl.object3D.matrixWorld);\n camera.position.copy(cameraOffset);\n camera.lookAt(o.renderEl.object3D.position);\n }\n\n }\n });\n },\n\n // NOTE: webpack generated incorrect code if you use arrow notation below\n // it sets \"this\" to \"undefined\"\n setGlobals: function(gameEngine, renderer) {\n this.gameEngine = gameEngine;\n this.renderer = renderer;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../src/render/aframe/system.js","/* globals AFRAME */\n\nimport Renderer from './Renderer';\nimport networkedPhysics from './aframe/system';\n\n/**\n * The A-Frame Renderer\n */\nclass AFrameRenderer extends Renderer {\n\n /**\n * Constructor of the Renderer singleton.\n * @param {GameEngine} gameEngine - Reference to the GameEngine instance.\n * @param {ClientEngine} clientEngine - Reference to the ClientEngine instance.\n */\n constructor(gameEngine, clientEngine) {\n super(gameEngine, clientEngine);\n\n // set up the networkedPhysics as an A-Frame system\n networkedPhysics.setGlobals(gameEngine, this);\n AFRAME.registerSystem('networked-physics', networkedPhysics);\n }\n\n reportSlowFrameRate() {\n this.gameEngine.emit('client__slowFrameRate');\n }\n\n /**\n * Initialize the renderer.\n * @return {Promise} Resolves when renderer is ready.\n */\n init() {\n\n let p = super.init();\n\n let sceneElArray = document.getElementsByTagName('a-scene');\n if (sceneElArray.length !== 1) {\n throw new Error('A-Frame scene element not found');\n }\n this.scene = sceneElArray[0];\n\n this.gameEngine.on('objectRemoved', (o) => {\n o.renderObj.remove();\n });\n\n return p; // eslint-disable-line new-cap\n }\n\n /**\n * In AFrame, we set the draw method (which is called at requestAnimationFrame)\n * to a NO-OP. See tick() instead\n */\n draw() {}\n\n tick(t, dt) {\n super.draw(t, dt);\n }\n\n}\n\nexport default AFrameRenderer;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/render/AFrameRenderer.js","\"use strict\";\n\nimport { BaseTypes, DynamicObject } from \"@rtsdk/lance-topia\";\n\nexport default class Wiggle extends DynamicObject {\n static get netScheme() {\n return Object.assign(\n {\n direction: { type: BaseTypes.TYPES.FLOAT32 },\n bodyLength: { type: BaseTypes.TYPES.INT16 },\n score: { type: BaseTypes.TYPES.INT16 },\n name: { type: BaseTypes.TYPES.STRING },\n },\n super.netScheme,\n );\n }\n\n constructor(gameEngine, options, props) {\n super(gameEngine, options, props);\n this.class = Wiggle;\n this.bodyParts = [];\n this.score = 0;\n this.stat_foodPerGame = \"\";\n }\n\n syncTo(other) {\n super.syncTo(other);\n this.direction = other.direction;\n this.bodyLength = other.bodyLength;\n this.name = other.name;\n this.score = other.score;\n }\n\n toString() {\n return `Wiggle::${super.toString()} direction=${this.direction} length=${this.bodyLength} name=${this.name} score=${\n this.score\n }`;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/common/Wiggle.js","\"use strict\";\nimport { DynamicObject } from \"@rtsdk/lance-topia\";\n\nexport default class Food extends DynamicObject {\n static get netScheme() {\n return Object.assign(\n {\n // add serializable properties here\n },\n super.netScheme,\n );\n }\n\n syncTo(other) {\n super.syncTo(other);\n }\n\n constructor(gameEngine, options, props) {\n super(gameEngine, options, props);\n this.class = Food;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/common/Food.js","import querystring from \"query-string\";\nimport { Lib } from \"@rtsdk/lance-topia\";\nimport WiggleClientEngine from \"../client/WiggleClientEngine\";\nimport WiggleGameEngine from \"../common/WiggleGameEngine\";\nconst qsOptions = querystring.parse(location.search);\n\n// default options, overwritten by query-string options\n// is sent to both game engine and client engine\nconst defaults = {\n traceLevel: Lib.Trace.TRACE_NONE,\n delayInputCount: 5,\n scheduler: \"render-schedule\",\n\n // Using interpolate because sending fullSyncRate every 5 steps on server. Extrapolate would try to predict and then undo.\n // Interpolate waits for the server instead of predicting, so there's less teleporting.\n // If increase fullSyncRate, might want to use extrapolate so has some prediction between server updates.\n // However, if have lots of collision in game and need that to be snappy, need to have low fullSyncRate as server controls collision.\n // Higher bending means it'll teleport to the server's truthiness. Higher bending value: With a higher bending value, the client state will adjust more quickly to match the server state. This can make the game feel more responsive, as the client will closely mirror the server state. However, if there are irregularities in the network (like jitter or packet loss), this can also lead to more noticeable jumps or \"teleportation\" of game entities, as the client state rapidly adjusts to the server state.\n syncOptions: {\n sync: qsOptions.sync || \"interpolate\",\n bendingIncrements: 5,\n },\n};\nlet options = Object.assign(defaults, qsOptions);\n\n// create a client engine and a game engine\nconst gameEngine = new WiggleGameEngine(options);\nconst clientEngine = new WiggleClientEngine(gameEngine, options);\n\ndocument.addEventListener(\"DOMContentLoaded\", function (e) {\n clientEngine.start();\n});\n\n\n\n// WEBPACK FOOTER //\n// ./src/client/clientEntryPoint.js","'use strict';\nvar strictUriEncode = require('strict-uri-encode');\nvar objectAssign = require('object-assign');\n\nfunction encoderForArrayFormat(opts) {\n\tswitch (opts.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn function (key, value, index) {\n\t\t\t\treturn value === null ? [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'[',\n\t\t\t\t\tindex,\n\t\t\t\t\t']'\n\t\t\t\t].join('') : [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'[',\n\t\t\t\t\tencode(index, opts),\n\t\t\t\t\t']=',\n\t\t\t\t\tencode(value, opts)\n\t\t\t\t].join('');\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn function (key, value) {\n\t\t\t\treturn value === null ? encode(key, opts) : [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'[]=',\n\t\t\t\t\tencode(value, opts)\n\t\t\t\t].join('');\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn function (key, value) {\n\t\t\t\treturn value === null ? encode(key, opts) : [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'=',\n\t\t\t\t\tencode(value, opts)\n\t\t\t\t].join('');\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(opts) {\n\tvar result;\n\n\tswitch (opts.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn function (key, value, accumulator) {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn function (key, value, accumulator) {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t} else if (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn function (key, value, accumulator) {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction encode(value, opts) {\n\tif (opts.encode) {\n\t\treturn opts.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t} else if (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input)).sort(function (a, b) {\n\t\t\treturn Number(a) - Number(b);\n\t\t}).map(function (key) {\n\t\t\treturn input[key];\n\t\t});\n\t}\n\n\treturn input;\n}\n\nexports.extract = function (str) {\n\treturn str.split('?')[1] || '';\n};\n\nexports.parse = function (str, opts) {\n\topts = objectAssign({arrayFormat: 'none'}, opts);\n\n\tvar formatter = parserForArrayFormat(opts);\n\n\t// Create an object with no prototype\n\t// https://github.com/sindresorhus/query-string/issues/47\n\tvar ret = Object.create(null);\n\n\tif (typeof str !== 'string') {\n\t\treturn ret;\n\t}\n\n\tstr = str.trim().replace(/^(\\?|#|&)/, '');\n\n\tif (!str) {\n\t\treturn ret;\n\t}\n\n\tstr.split('&').forEach(function (param) {\n\t\tvar parts = param.replace(/\\+/g, ' ').split('=');\n\t\t// Firefox (pre 40) decodes `%3D` to `=`\n\t\t// https://github.com/sindresorhus/query-string/pull/37\n\t\tvar key = parts.shift();\n\t\tvar val = parts.length > 0 ? parts.join('=') : undefined;\n\n\t\t// missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tval = val === undefined ? null : decodeURIComponent(val);\n\n\t\tformatter(decodeURIComponent(key), val, ret);\n\t});\n\n\treturn Object.keys(ret).sort().reduce(function (result, key) {\n\t\tvar val = ret[key];\n\t\tif (Boolean(val) && typeof val === 'object' && !Array.isArray(val)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(val);\n\t\t} else {\n\t\t\tresult[key] = val;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n};\n\nexports.stringify = function (obj, opts) {\n\tvar defaults = {\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none'\n\t};\n\n\topts = objectAssign(defaults, opts);\n\n\tvar formatter = encoderForArrayFormat(opts);\n\n\treturn obj ? Object.keys(obj).sort().map(function (key) {\n\t\tvar val = obj[key];\n\n\t\tif (val === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (val === null) {\n\t\t\treturn encode(key, opts);\n\t\t}\n\n\t\tif (Array.isArray(val)) {\n\t\t\tvar result = [];\n\n\t\t\tval.slice().forEach(function (val2) {\n\t\t\t\tif (val2 === undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresult.push(formatter(key, val2, result.length));\n\t\t\t});\n\n\t\t\treturn result.join('&');\n\t\t}\n\n\t\treturn encode(key, opts) + '=' + encode(val, opts);\n\t}).filter(function (x) {\n\t\treturn x.length > 0;\n\t}).join('&') : '';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/query-string/index.js\n// module id = 4\n// module chunks = 0","'use strict';\nmodule.exports = function (str) {\n\treturn encodeURIComponent(str).replace(/[!'()*]/g, function (c) {\n\t\treturn '%' + c.charCodeAt(0).toString(16).toUpperCase();\n\t});\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/strict-uri-encode/index.js\n// module id = 5\n// module chunks = 0","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/object-assign/index.js\n// module id = 6\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 7\n// module chunks = 0","/*\n * Copyright (c) 2015 cannon.js Authors\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use, copy,\n * modify, merge, publish, distribute, sublicense, and/or sell copies\n * of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&false)define([],e);else{var f;\"undefined\"!=typeof window?f=window:\"undefined\"!=typeof global?f=global:\"undefined\"!=typeof self&&(f=self),f.CANNON=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error(\"Cannot find module '\"+o+\"'\")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o (http://steffe.se)\",\n \"keywords\": [\n \"cannon.js\",\n \"cannon\",\n \"physics\",\n \"engine\",\n \"3d\"\n ],\n \"main\": \"./build/cannon.js\",\n \"engines\": {\n \"node\": \"*\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/schteppe/cannon.js.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/schteppe/cannon.js/issues\"\n },\n \"licenses\": [\n {\n \"type\": \"MIT\"\n }\n ],\n \"devDependencies\": {\n \"jshint\": \"latest\",\n \"uglify-js\": \"latest\",\n \"nodeunit\": \"^0.9.0\",\n \"grunt\": \"~0.4.0\",\n \"grunt-contrib-jshint\": \"~0.1.1\",\n \"grunt-contrib-nodeunit\": \"^0.4.1\",\n \"grunt-contrib-concat\": \"~0.1.3\",\n \"grunt-contrib-uglify\": \"^0.5.1\",\n \"grunt-browserify\": \"^2.1.4\",\n \"grunt-contrib-yuidoc\": \"^0.5.2\",\n \"browserify\": \"*\"\n },\n \"dependencies\": {}\n}\n\n},{}],2:[function(_dereq_,module,exports){\n// Export classes\nmodule.exports = {\n version : _dereq_('../package.json').version,\n\n AABB : _dereq_('./collision/AABB'),\n ArrayCollisionMatrix : _dereq_('./collision/ArrayCollisionMatrix'),\n Body : _dereq_('./objects/Body'),\n Box : _dereq_('./shapes/Box'),\n Broadphase : _dereq_('./collision/Broadphase'),\n Constraint : _dereq_('./constraints/Constraint'),\n ContactEquation : _dereq_('./equations/ContactEquation'),\n Narrowphase : _dereq_('./world/Narrowphase'),\n ConeTwistConstraint : _dereq_('./constraints/ConeTwistConstraint'),\n ContactMaterial : _dereq_('./material/ContactMaterial'),\n ConvexPolyhedron : _dereq_('./shapes/ConvexPolyhedron'),\n Cylinder : _dereq_('./shapes/Cylinder'),\n DistanceConstraint : _dereq_('./constraints/DistanceConstraint'),\n Equation : _dereq_('./equations/Equation'),\n EventTarget : _dereq_('./utils/EventTarget'),\n FrictionEquation : _dereq_('./equations/FrictionEquation'),\n GSSolver : _dereq_('./solver/GSSolver'),\n GridBroadphase : _dereq_('./collision/GridBroadphase'),\n Heightfield : _dereq_('./shapes/Heightfield'),\n HingeConstraint : _dereq_('./constraints/HingeConstraint'),\n LockConstraint : _dereq_('./constraints/LockConstraint'),\n Mat3 : _dereq_('./math/Mat3'),\n Material : _dereq_('./material/Material'),\n NaiveBroadphase : _dereq_('./collision/NaiveBroadphase'),\n ObjectCollisionMatrix : _dereq_('./collision/ObjectCollisionMatrix'),\n Pool : _dereq_('./utils/Pool'),\n Particle : _dereq_('./shapes/Particle'),\n Plane : _dereq_('./shapes/Plane'),\n PointToPointConstraint : _dereq_('./constraints/PointToPointConstraint'),\n Quaternion : _dereq_('./math/Quaternion'),\n Ray : _dereq_('./collision/Ray'),\n RaycastVehicle : _dereq_('./objects/RaycastVehicle'),\n RaycastResult : _dereq_('./collision/RaycastResult'),\n RigidVehicle : _dereq_('./objects/RigidVehicle'),\n RotationalEquation : _dereq_('./equations/RotationalEquation'),\n RotationalMotorEquation : _dereq_('./equations/RotationalMotorEquation'),\n SAPBroadphase : _dereq_('./collision/SAPBroadphase'),\n SPHSystem : _dereq_('./objects/SPHSystem'),\n Shape : _dereq_('./shapes/Shape'),\n Solver : _dereq_('./solver/Solver'),\n Sphere : _dereq_('./shapes/Sphere'),\n SplitSolver : _dereq_('./solver/SplitSolver'),\n Spring : _dereq_('./objects/Spring'),\n Trimesh : _dereq_('./shapes/Trimesh'),\n Vec3 : _dereq_('./math/Vec3'),\n Vec3Pool : _dereq_('./utils/Vec3Pool'),\n World : _dereq_('./world/World'),\n};\n\n},{\"../package.json\":1,\"./collision/AABB\":3,\"./collision/ArrayCollisionMatrix\":4,\"./collision/Broadphase\":5,\"./collision/GridBroadphase\":6,\"./collision/NaiveBroadphase\":7,\"./collision/ObjectCollisionMatrix\":8,\"./collision/Ray\":9,\"./collision/RaycastResult\":10,\"./collision/SAPBroadphase\":11,\"./constraints/ConeTwistConstraint\":12,\"./constraints/Constraint\":13,\"./constraints/DistanceConstraint\":14,\"./constraints/HingeConstraint\":15,\"./constraints/LockConstraint\":16,\"./constraints/PointToPointConstraint\":17,\"./equations/ContactEquation\":19,\"./equations/Equation\":20,\"./equations/FrictionEquation\":21,\"./equations/RotationalEquation\":22,\"./equations/RotationalMotorEquation\":23,\"./material/ContactMaterial\":24,\"./material/Material\":25,\"./math/Mat3\":27,\"./math/Quaternion\":28,\"./math/Vec3\":30,\"./objects/Body\":31,\"./objects/RaycastVehicle\":32,\"./objects/RigidVehicle\":33,\"./objects/SPHSystem\":34,\"./objects/Spring\":35,\"./shapes/Box\":37,\"./shapes/ConvexPolyhedron\":38,\"./shapes/Cylinder\":39,\"./shapes/Heightfield\":40,\"./shapes/Particle\":41,\"./shapes/Plane\":42,\"./shapes/Shape\":43,\"./shapes/Sphere\":44,\"./shapes/Trimesh\":45,\"./solver/GSSolver\":46,\"./solver/Solver\":47,\"./solver/SplitSolver\":48,\"./utils/EventTarget\":49,\"./utils/Pool\":51,\"./utils/Vec3Pool\":54,\"./world/Narrowphase\":55,\"./world/World\":56}],3:[function(_dereq_,module,exports){\nvar Vec3 = _dereq_('../math/Vec3');\nvar Utils = _dereq_('../utils/Utils');\n\nmodule.exports = AABB;\n\n/**\n * Axis aligned bounding box class.\n * @class AABB\n * @constructor\n * @param {Object} [options]\n * @param {Vec3} [options.upperBound]\n * @param {Vec3} [options.lowerBound]\n */\nfunction AABB(options){\n options = options || {};\n\n /**\n * The lower bound of the bounding box.\n * @property lowerBound\n * @type {Vec3}\n */\n this.lowerBound = new Vec3();\n if(options.lowerBound){\n this.lowerBound.copy(options.lowerBound);\n }\n\n /**\n * The upper bound of the bounding box.\n * @property upperBound\n * @type {Vec3}\n */\n this.upperBound = new Vec3();\n if(options.upperBound){\n this.upperBound.copy(options.upperBound);\n }\n}\n\nvar tmp = new Vec3();\n\n/**\n * Set the AABB bounds from a set of points.\n * @method setFromPoints\n * @param {Array} points An array of Vec3's.\n * @param {Vec3} position\n * @param {Quaternion} quaternion\n * @param {number} skinSize\n * @return {AABB} The self object\n */\nAABB.prototype.setFromPoints = function(points, position, quaternion, skinSize){\n var l = this.lowerBound,\n u = this.upperBound,\n q = quaternion;\n\n // Set to the first point\n l.copy(points[0]);\n if(q){\n q.vmult(l, l);\n }\n u.copy(l);\n\n for(var i = 1; i u.x){ u.x = p.x; }\n if(p.x < l.x){ l.x = p.x; }\n if(p.y > u.y){ u.y = p.y; }\n if(p.y < l.y){ l.y = p.y; }\n if(p.z > u.z){ u.z = p.z; }\n if(p.z < l.z){ l.z = p.z; }\n }\n\n // Add offset\n if (position) {\n position.vadd(l, l);\n position.vadd(u, u);\n }\n\n if(skinSize){\n l.x -= skinSize;\n l.y -= skinSize;\n l.z -= skinSize;\n u.x += skinSize;\n u.y += skinSize;\n u.z += skinSize;\n }\n\n return this;\n};\n\n/**\n * Copy bounds from an AABB to this AABB\n * @method copy\n * @param {AABB} aabb Source to copy from\n * @return {AABB} The this object, for chainability\n */\nAABB.prototype.copy = function(aabb){\n this.lowerBound.copy(aabb.lowerBound);\n this.upperBound.copy(aabb.upperBound);\n return this;\n};\n\n/**\n * Clone an AABB\n * @method clone\n */\nAABB.prototype.clone = function(){\n return new AABB().copy(this);\n};\n\n/**\n * Extend this AABB so that it covers the given AABB too.\n * @method extend\n * @param {AABB} aabb\n */\nAABB.prototype.extend = function(aabb){\n // Extend lower bound\n var l = aabb.lowerBound.x;\n if(this.lowerBound.x > l){\n this.lowerBound.x = l;\n }\n\n // Upper\n var u = aabb.upperBound.x;\n if(this.upperBound.x < u){\n this.upperBound.x = u;\n }\n\n // Extend lower bound\n var l = aabb.lowerBound.y;\n if(this.lowerBound.y > l){\n this.lowerBound.y = l;\n }\n\n // Upper\n var u = aabb.upperBound.y;\n if(this.upperBound.y < u){\n this.upperBound.y = u;\n }\n\n // Extend lower bound\n var l = aabb.lowerBound.z;\n if(this.lowerBound.z > l){\n this.lowerBound.z = l;\n }\n\n // Upper\n var u = aabb.upperBound.z;\n if(this.upperBound.z < u){\n this.upperBound.z = u;\n }\n};\n\n/**\n * Returns true if the given AABB overlaps this AABB.\n * @method overlaps\n * @param {AABB} aabb\n * @return {Boolean}\n */\nAABB.prototype.overlaps = function(aabb){\n var l1 = this.lowerBound,\n u1 = this.upperBound,\n l2 = aabb.lowerBound,\n u2 = aabb.upperBound;\n\n // l2 u2\n // |---------|\n // |--------|\n // l1 u1\n\n return ((l2.x <= u1.x && u1.x <= u2.x) || (l1.x <= u2.x && u2.x <= u1.x)) &&\n ((l2.y <= u1.y && u1.y <= u2.y) || (l1.y <= u2.y && u2.y <= u1.y)) &&\n ((l2.z <= u1.z && u1.z <= u2.z) || (l1.z <= u2.z && u2.z <= u1.z));\n};\n\n/**\n * Returns true if the given AABB is fully contained in this AABB.\n * @method contains\n * @param {AABB} aabb\n * @return {Boolean}\n */\nAABB.prototype.contains = function(aabb){\n var l1 = this.lowerBound,\n u1 = this.upperBound,\n l2 = aabb.lowerBound,\n u2 = aabb.upperBound;\n\n // l2 u2\n // |---------|\n // |---------------|\n // l1 u1\n\n return (\n (l1.x <= l2.x && u1.x >= u2.x) &&\n (l1.y <= l2.y && u1.y >= u2.y) &&\n (l1.z <= l2.z && u1.z >= u2.z)\n );\n};\n\n/**\n * @method getCorners\n * @param {Vec3} a\n * @param {Vec3} b\n * @param {Vec3} c\n * @param {Vec3} d\n * @param {Vec3} e\n * @param {Vec3} f\n * @param {Vec3} g\n * @param {Vec3} h\n */\nAABB.prototype.getCorners = function(a, b, c, d, e, f, g, h){\n var l = this.lowerBound,\n u = this.upperBound;\n\n a.copy(l);\n b.set( u.x, l.y, l.z );\n c.set( u.x, u.y, l.z );\n d.set( l.x, u.y, u.z );\n e.set( u.x, l.y, l.z );\n f.set( l.x, u.y, l.z );\n g.set( l.x, l.y, u.z );\n h.copy(u);\n};\n\nvar transformIntoFrame_corners = [\n new Vec3(),\n new Vec3(),\n new Vec3(),\n new Vec3(),\n new Vec3(),\n new Vec3(),\n new Vec3(),\n new Vec3()\n];\n\n/**\n * Get the representation of an AABB in another frame.\n * @method toLocalFrame\n * @param {Transform} frame\n * @param {AABB} target\n * @return {AABB} The \"target\" AABB object.\n */\nAABB.prototype.toLocalFrame = function(frame, target){\n\n var corners = transformIntoFrame_corners;\n var a = corners[0];\n var b = corners[1];\n var c = corners[2];\n var d = corners[3];\n var e = corners[4];\n var f = corners[5];\n var g = corners[6];\n var h = corners[7];\n\n // Get corners in current frame\n this.getCorners(a, b, c, d, e, f, g, h);\n\n // Transform them to new local frame\n for(var i=0; i !== 8; i++){\n var corner = corners[i];\n frame.pointToLocal(corner, corner);\n }\n\n return target.setFromPoints(corners);\n};\n\n/**\n * Get the representation of an AABB in the global frame.\n * @method toWorldFrame\n * @param {Transform} frame\n * @param {AABB} target\n * @return {AABB} The \"target\" AABB object.\n */\nAABB.prototype.toWorldFrame = function(frame, target){\n\n var corners = transformIntoFrame_corners;\n var a = corners[0];\n var b = corners[1];\n var c = corners[2];\n var d = corners[3];\n var e = corners[4];\n var f = corners[5];\n var g = corners[6];\n var h = corners[7];\n\n // Get corners in current frame\n this.getCorners(a, b, c, d, e, f, g, h);\n\n // Transform them to new local frame\n for(var i=0; i !== 8; i++){\n var corner = corners[i];\n frame.pointToWorld(corner, corner);\n }\n\n return target.setFromPoints(corners);\n};\n\n},{\"../math/Vec3\":30,\"../utils/Utils\":53}],4:[function(_dereq_,module,exports){\nmodule.exports = ArrayCollisionMatrix;\n\n/**\n * Collision \"matrix\". It's actually a triangular-shaped array of whether two bodies are touching this step, for reference next step\n * @class ArrayCollisionMatrix\n * @constructor\n */\nfunction ArrayCollisionMatrix() {\n\n /**\n * The matrix storage\n * @property matrix\n * @type {Array}\n */\n\tthis.matrix = [];\n}\n\n/**\n * Get an element\n * @method get\n * @param {Number} i\n * @param {Number} j\n * @return {Number}\n */\nArrayCollisionMatrix.prototype.get = function(i, j) {\n\ti = i.index;\n\tj = j.index;\n if (j > i) {\n var temp = j;\n j = i;\n i = temp;\n }\n\treturn this.matrix[(i*(i + 1)>>1) + j-1];\n};\n\n/**\n * Set an element\n * @method set\n * @param {Number} i\n * @param {Number} j\n * @param {Number} value\n */\nArrayCollisionMatrix.prototype.set = function(i, j, value) {\n\ti = i.index;\n\tj = j.index;\n if (j > i) {\n var temp = j;\n j = i;\n i = temp;\n }\n\tthis.matrix[(i*(i + 1)>>1) + j-1] = value ? 1 : 0;\n};\n\n/**\n * Sets all elements to zero\n * @method reset\n */\nArrayCollisionMatrix.prototype.reset = function() {\n\tfor (var i=0, l=this.matrix.length; i!==l; i++) {\n\t\tthis.matrix[i]=0;\n\t}\n};\n\n/**\n * Sets the max number of objects\n * @method setNumObjects\n * @param {Number} n\n */\nArrayCollisionMatrix.prototype.setNumObjects = function(n) {\n\tthis.matrix.length = n*(n-1)>>1;\n};\n\n},{}],5:[function(_dereq_,module,exports){\nvar Body = _dereq_('../objects/Body');\nvar Vec3 = _dereq_('../math/Vec3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar Shape = _dereq_('../shapes/Shape');\nvar Plane = _dereq_('../shapes/Plane');\n\nmodule.exports = Broadphase;\n\n/**\n * Base class for broadphase implementations\n * @class Broadphase\n * @constructor\n * @author schteppe\n */\nfunction Broadphase(){\n /**\n * The world to search for collisions in.\n * @property world\n * @type {World}\n */\n this.world = null;\n\n /**\n * If set to true, the broadphase uses bounding boxes for intersection test, else it uses bounding spheres.\n * @property useBoundingBoxes\n * @type {Boolean}\n */\n this.useBoundingBoxes = false;\n\n /**\n * Set to true if the objects in the world moved.\n * @property {Boolean} dirty\n */\n this.dirty = true;\n}\n\n/**\n * Get the collision pairs from the world\n * @method collisionPairs\n * @param {World} world The world to search in\n * @param {Array} p1 Empty array to be filled with body objects\n * @param {Array} p2 Empty array to be filled with body objects\n */\nBroadphase.prototype.collisionPairs = function(world,p1,p2){\n throw new Error(\"collisionPairs not implemented for this BroadPhase class!\");\n};\n\n/**\n * Check if a body pair needs to be intersection tested at all.\n * @method needBroadphaseCollision\n * @param {Body} bodyA\n * @param {Body} bodyB\n * @return {bool}\n */\nvar Broadphase_needBroadphaseCollision_STATIC_OR_KINEMATIC = Body.STATIC | Body.KINEMATIC;\nBroadphase.prototype.needBroadphaseCollision = function(bodyA,bodyB){\n\n // Check collision filter masks\n if( (bodyA.collisionFilterGroup & bodyB.collisionFilterMask)===0 || (bodyB.collisionFilterGroup & bodyA.collisionFilterMask)===0){\n return false;\n }\n\n // Check types\n if(((bodyA.type & Broadphase_needBroadphaseCollision_STATIC_OR_KINEMATIC)!==0 || bodyA.sleepState === Body.SLEEPING) &&\n ((bodyB.type & Broadphase_needBroadphaseCollision_STATIC_OR_KINEMATIC)!==0 || bodyB.sleepState === Body.SLEEPING)) {\n // Both bodies are static, kinematic or sleeping. Skip.\n return false;\n }\n\n return true;\n};\n\n/**\n * Check if the bounding volumes of two bodies intersect.\n * @method intersectionTest\n * @param {Body} bodyA\n * @param {Body} bodyB\n * @param {array} pairs1\n * @param {array} pairs2\n */\nBroadphase.prototype.intersectionTest = function(bodyA, bodyB, pairs1, pairs2){\n if(this.useBoundingBoxes){\n this.doBoundingBoxBroadphase(bodyA,bodyB,pairs1,pairs2);\n } else {\n this.doBoundingSphereBroadphase(bodyA,bodyB,pairs1,pairs2);\n }\n};\n\n/**\n * Check if the bounding spheres of two bodies are intersecting.\n * @method doBoundingSphereBroadphase\n * @param {Body} bodyA\n * @param {Body} bodyB\n * @param {Array} pairs1 bodyA is appended to this array if intersection\n * @param {Array} pairs2 bodyB is appended to this array if intersection\n */\nvar Broadphase_collisionPairs_r = new Vec3(), // Temp objects\n Broadphase_collisionPairs_normal = new Vec3(),\n Broadphase_collisionPairs_quat = new Quaternion(),\n Broadphase_collisionPairs_relpos = new Vec3();\nBroadphase.prototype.doBoundingSphereBroadphase = function(bodyA,bodyB,pairs1,pairs2){\n var r = Broadphase_collisionPairs_r;\n bodyB.position.vsub(bodyA.position,r);\n var boundingRadiusSum2 = Math.pow(bodyA.boundingRadius + bodyB.boundingRadius, 2);\n var norm2 = r.norm2();\n if(norm2 < boundingRadiusSum2){\n pairs1.push(bodyA);\n pairs2.push(bodyB);\n }\n};\n\n/**\n * Check if the bounding boxes of two bodies are intersecting.\n * @method doBoundingBoxBroadphase\n * @param {Body} bodyA\n * @param {Body} bodyB\n * @param {Array} pairs1\n * @param {Array} pairs2\n */\nBroadphase.prototype.doBoundingBoxBroadphase = function(bodyA,bodyB,pairs1,pairs2){\n if(bodyA.aabbNeedsUpdate){\n bodyA.computeAABB();\n }\n if(bodyB.aabbNeedsUpdate){\n bodyB.computeAABB();\n }\n\n // Check AABB / AABB\n if(bodyA.aabb.overlaps(bodyB.aabb)){\n pairs1.push(bodyA);\n pairs2.push(bodyB);\n }\n};\n\n/**\n * Removes duplicate pairs from the pair arrays.\n * @method makePairsUnique\n * @param {Array} pairs1\n * @param {Array} pairs2\n */\nvar Broadphase_makePairsUnique_temp = { keys:[] },\n Broadphase_makePairsUnique_p1 = [],\n Broadphase_makePairsUnique_p2 = [];\nBroadphase.prototype.makePairsUnique = function(pairs1,pairs2){\n var t = Broadphase_makePairsUnique_temp,\n p1 = Broadphase_makePairsUnique_p1,\n p2 = Broadphase_makePairsUnique_p2,\n N = pairs1.length;\n\n for(var i=0; i!==N; i++){\n p1[i] = pairs1[i];\n p2[i] = pairs2[i];\n }\n\n pairs1.length = 0;\n pairs2.length = 0;\n\n for(var i=0; i!==N; i++){\n var id1 = p1[i].id,\n id2 = p2[i].id;\n var key = id1 < id2 ? id1+\",\"+id2 : id2+\",\"+id1;\n t[key] = i;\n t.keys.push(key);\n }\n\n for(var i=0; i!==t.keys.length; i++){\n var key = t.keys.pop(),\n pairIndex = t[key];\n pairs1.push(p1[pairIndex]);\n pairs2.push(p2[pairIndex]);\n delete t[key];\n }\n};\n\n/**\n * To be implemented by subcasses\n * @method setWorld\n * @param {World} world\n */\nBroadphase.prototype.setWorld = function(world){\n};\n\n/**\n * Check if the bounding spheres of two bodies overlap.\n * @method boundingSphereCheck\n * @param {Body} bodyA\n * @param {Body} bodyB\n * @return {boolean}\n */\nvar bsc_dist = new Vec3();\nBroadphase.boundingSphereCheck = function(bodyA,bodyB){\n var dist = bsc_dist;\n bodyA.position.vsub(bodyB.position,dist);\n return Math.pow(bodyA.shape.boundingSphereRadius + bodyB.shape.boundingSphereRadius,2) > dist.norm2();\n};\n\n/**\n * Returns all the bodies within the AABB.\n * @method aabbQuery\n * @param {World} world\n * @param {AABB} aabb\n * @param {array} result An array to store resulting bodies in.\n * @return {array}\n */\nBroadphase.prototype.aabbQuery = function(world, aabb, result){\n console.warn('.aabbQuery is not implemented in this Broadphase subclass.');\n return [];\n};\n},{\"../math/Quaternion\":28,\"../math/Vec3\":30,\"../objects/Body\":31,\"../shapes/Plane\":42,\"../shapes/Shape\":43}],6:[function(_dereq_,module,exports){\nmodule.exports = GridBroadphase;\n\nvar Broadphase = _dereq_('./Broadphase');\nvar Vec3 = _dereq_('../math/Vec3');\nvar Shape = _dereq_('../shapes/Shape');\n\n/**\n * Axis aligned uniform grid broadphase.\n * @class GridBroadphase\n * @constructor\n * @extends Broadphase\n * @todo Needs support for more than just planes and spheres.\n * @param {Vec3} aabbMin\n * @param {Vec3} aabbMax\n * @param {Number} nx Number of boxes along x\n * @param {Number} ny Number of boxes along y\n * @param {Number} nz Number of boxes along z\n */\nfunction GridBroadphase(aabbMin,aabbMax,nx,ny,nz){\n Broadphase.apply(this);\n this.nx = nx || 10;\n this.ny = ny || 10;\n this.nz = nz || 10;\n this.aabbMin = aabbMin || new Vec3(100,100,100);\n this.aabbMax = aabbMax || new Vec3(-100,-100,-100);\n\tvar nbins = this.nx * this.ny * this.nz;\n\tif (nbins <= 0) {\n\t\tthrow \"GridBroadphase: Each dimension's n must be >0\";\n\t}\n this.bins = [];\n\tthis.binLengths = []; //Rather than continually resizing arrays (thrashing the memory), just record length and allow them to grow\n\tthis.bins.length = nbins;\n\tthis.binLengths.length = nbins;\n\tfor (var i=0;i= nx) { xoff0 = nx - 1; }\n\t\tif (yoff0 < 0) { yoff0 = 0; } else if (yoff0 >= ny) { yoff0 = ny - 1; }\n\t\tif (zoff0 < 0) { zoff0 = 0; } else if (zoff0 >= nz) { zoff0 = nz - 1; }\n\t\tif (xoff1 < 0) { xoff1 = 0; } else if (xoff1 >= nx) { xoff1 = nx - 1; }\n\t\tif (yoff1 < 0) { yoff1 = 0; } else if (yoff1 >= ny) { yoff1 = ny - 1; }\n\t\tif (zoff1 < 0) { zoff1 = 0; } else if (zoff1 >= nz) { zoff1 = nz - 1; }\n\n\t\txoff0 *= xstep;\n\t\tyoff0 *= ystep;\n\t\tzoff0 *= zstep;\n\t\txoff1 *= xstep;\n\t\tyoff1 *= ystep;\n\t\tzoff1 *= zstep;\n\n\t\tfor (var xoff = xoff0; xoff <= xoff1; xoff += xstep) {\n\t\t\tfor (var yoff = yoff0; yoff <= yoff1; yoff += ystep) {\n\t\t\t\tfor (var zoff = zoff0; zoff <= zoff1; zoff += zstep) {\n\t\t\t\t\tvar idx = xoff+yoff+zoff;\n\t\t\t\t\tbins[idx][binLengths[idx]++] = bi;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n // Put all bodies into the bins\n for(var i=0; i!==N; i++){\n var bi = bodies[i];\n var si = bi.shape;\n\n switch(si.type){\n case SPHERE:\n // Put in bin\n // check if overlap with other bins\n var x = bi.position.x,\n y = bi.position.y,\n z = bi.position.z;\n var r = si.radius;\n\n\t\t\taddBoxToBins(x-r, y-r, z-r, x+r, y+r, z+r, bi);\n break;\n\n case PLANE:\n if(si.worldNormalNeedsUpdate){\n si.computeWorldNormal(bi.quaternion);\n }\n var planeNormal = si.worldNormal;\n\n\t\t\t//Relative position from origin of plane object to the first bin\n\t\t\t//Incremented as we iterate through the bins\n\t\t\tvar xreset = xmin + binsizeX*0.5 - bi.position.x,\n\t\t\t\tyreset = ymin + binsizeY*0.5 - bi.position.y,\n\t\t\t\tzreset = zmin + binsizeZ*0.5 - bi.position.z;\n\n var d = GridBroadphase_collisionPairs_d;\n\t\t\td.set(xreset, yreset, zreset);\n\n\t\t\tfor (var xi = 0, xoff = 0; xi !== nx; xi++, xoff += xstep, d.y = yreset, d.x += binsizeX) {\n\t\t\t\tfor (var yi = 0, yoff = 0; yi !== ny; yi++, yoff += ystep, d.z = zreset, d.y += binsizeY) {\n\t\t\t\t\tfor (var zi = 0, zoff = 0; zi !== nz; zi++, zoff += zstep, d.z += binsizeZ) {\n\t\t\t\t\t\tif (d.dot(planeNormal) < binRadius) {\n\t\t\t\t\t\t\tvar idx = xoff + yoff + zoff;\n\t\t\t\t\t\t\tbins[idx][binLengths[idx]++] = bi;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n break;\n\n default:\n\t\t\tif (bi.aabbNeedsUpdate) {\n\t\t\t\tbi.computeAABB();\n\t\t\t}\n\n\t\t\taddBoxToBins(\n\t\t\t\tbi.aabb.lowerBound.x,\n\t\t\t\tbi.aabb.lowerBound.y,\n\t\t\t\tbi.aabb.lowerBound.z,\n\t\t\t\tbi.aabb.upperBound.x,\n\t\t\t\tbi.aabb.upperBound.y,\n\t\t\t\tbi.aabb.upperBound.z,\n\t\t\t\tbi);\n break;\n }\n }\n\n // Check each bin\n for(var i=0; i!==Nbins; i++){\n\t\tvar binLength = binLengths[i];\n\t\t//Skip bins with no potential collisions\n\t\tif (binLength > 1) {\n\t\t\tvar bin = bins[i];\n\n\t\t\t// Do N^2 broadphase inside\n\t\t\tfor(var xi=0; xi!==binLength; xi++){\n\t\t\t\tvar bi = bin[xi];\n\t\t\t\tfor(var yi=0; yi!==xi; yi++){\n\t\t\t\t\tvar bj = bin[yi];\n\t\t\t\t\tif(this.needBroadphaseCollision(bi,bj)){\n\t\t\t\t\t\tthis.intersectionTest(bi,bj,pairs1,pairs2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n }\n\n//\tfor (var zi = 0, zoff=0; zi < nz; zi++, zoff+= zstep) {\n//\t\tconsole.log(\"layer \"+zi);\n//\t\tfor (var yi = 0, yoff=0; yi < ny; yi++, yoff += ystep) {\n//\t\t\tvar row = '';\n//\t\t\tfor (var xi = 0, xoff=0; xi < nx; xi++, xoff += xstep) {\n//\t\t\t\tvar idx = xoff + yoff + zoff;\n//\t\t\t\trow += ' ' + binLengths[idx];\n//\t\t\t}\n//\t\t\tconsole.log(row);\n//\t\t}\n//\t}\n\n this.makePairsUnique(pairs1,pairs2);\n};\n\n},{\"../math/Vec3\":30,\"../shapes/Shape\":43,\"./Broadphase\":5}],7:[function(_dereq_,module,exports){\nmodule.exports = NaiveBroadphase;\n\nvar Broadphase = _dereq_('./Broadphase');\nvar AABB = _dereq_('./AABB');\n\n/**\n * Naive broadphase implementation, used in lack of better ones.\n * @class NaiveBroadphase\n * @constructor\n * @description The naive broadphase looks at all possible pairs without restriction, therefore it has complexity N^2 (which is bad)\n * @extends Broadphase\n */\nfunction NaiveBroadphase(){\n Broadphase.apply(this);\n}\nNaiveBroadphase.prototype = new Broadphase();\nNaiveBroadphase.prototype.constructor = NaiveBroadphase;\n\n/**\n * Get all the collision pairs in the physics world\n * @method collisionPairs\n * @param {World} world\n * @param {Array} pairs1\n * @param {Array} pairs2\n */\nNaiveBroadphase.prototype.collisionPairs = function(world,pairs1,pairs2){\n var bodies = world.bodies,\n n = bodies.length,\n i,j,bi,bj;\n\n // Naive N^2 ftw!\n for(i=0; i!==n; i++){\n for(j=0; j!==i; j++){\n\n bi = bodies[i];\n bj = bodies[j];\n\n if(!this.needBroadphaseCollision(bi,bj)){\n continue;\n }\n\n this.intersectionTest(bi,bj,pairs1,pairs2);\n }\n }\n};\n\nvar tmpAABB = new AABB();\n\n/**\n * Returns all the bodies within an AABB.\n * @method aabbQuery\n * @param {World} world\n * @param {AABB} aabb\n * @param {array} result An array to store resulting bodies in.\n * @return {array}\n */\nNaiveBroadphase.prototype.aabbQuery = function(world, aabb, result){\n result = result || [];\n\n for(var i = 0; i < world.bodies.length; i++){\n var b = world.bodies[i];\n\n if(b.aabbNeedsUpdate){\n b.computeAABB();\n }\n\n // Ugly hack until Body gets aabb\n if(b.aabb.overlaps(aabb)){\n result.push(b);\n }\n }\n\n return result;\n};\n},{\"./AABB\":3,\"./Broadphase\":5}],8:[function(_dereq_,module,exports){\nmodule.exports = ObjectCollisionMatrix;\n\n/**\n * Records what objects are colliding with each other\n * @class ObjectCollisionMatrix\n * @constructor\n */\nfunction ObjectCollisionMatrix() {\n\n /**\n * The matrix storage\n * @property matrix\n * @type {Object}\n */\n\tthis.matrix = {};\n}\n\n/**\n * @method get\n * @param {Number} i\n * @param {Number} j\n * @return {Number}\n */\nObjectCollisionMatrix.prototype.get = function(i, j) {\n\ti = i.id;\n\tj = j.id;\n if (j > i) {\n var temp = j;\n j = i;\n i = temp;\n }\n\treturn i+'-'+j in this.matrix;\n};\n\n/**\n * @method set\n * @param {Number} i\n * @param {Number} j\n * @param {Number} value\n */\nObjectCollisionMatrix.prototype.set = function(i, j, value) {\n\ti = i.id;\n\tj = j.id;\n if (j > i) {\n var temp = j;\n j = i;\n i = temp;\n\t}\n\tif (value) {\n\t\tthis.matrix[i+'-'+j] = true;\n\t}\n\telse {\n\t\tdelete this.matrix[i+'-'+j];\n\t}\n};\n\n/**\n * Empty the matrix\n * @method reset\n */\nObjectCollisionMatrix.prototype.reset = function() {\n\tthis.matrix = {};\n};\n\n/**\n * Set max number of objects\n * @method setNumObjects\n * @param {Number} n\n */\nObjectCollisionMatrix.prototype.setNumObjects = function(n) {\n};\n\n},{}],9:[function(_dereq_,module,exports){\nmodule.exports = Ray;\n\nvar Vec3 = _dereq_('../math/Vec3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar Transform = _dereq_('../math/Transform');\nvar ConvexPolyhedron = _dereq_('../shapes/ConvexPolyhedron');\nvar Box = _dereq_('../shapes/Box');\nvar RaycastResult = _dereq_('../collision/RaycastResult');\nvar Shape = _dereq_('../shapes/Shape');\nvar AABB = _dereq_('../collision/AABB');\n\n/**\n * A line in 3D space that intersects bodies and return points.\n * @class Ray\n * @constructor\n * @param {Vec3} from\n * @param {Vec3} to\n */\nfunction Ray(from, to){\n /**\n * @property {Vec3} from\n */\n this.from = from ? from.clone() : new Vec3();\n\n /**\n * @property {Vec3} to\n */\n this.to = to ? to.clone() : new Vec3();\n\n /**\n * @private\n * @property {Vec3} _direction\n */\n this._direction = new Vec3();\n\n /**\n * The precision of the ray. Used when checking parallelity etc.\n * @property {Number} precision\n */\n this.precision = 0.0001;\n\n /**\n * Set to true if you want the Ray to take .collisionResponse flags into account on bodies and shapes.\n * @property {Boolean} checkCollisionResponse\n */\n this.checkCollisionResponse = true;\n\n /**\n * If set to true, the ray skips any hits with normal.dot(rayDirection) < 0.\n * @property {Boolean} skipBackfaces\n */\n this.skipBackfaces = false;\n\n /**\n * @property {number} collisionFilterMask\n * @default -1\n */\n this.collisionFilterMask = -1;\n\n /**\n * @property {number} collisionFilterGroup\n * @default -1\n */\n this.collisionFilterGroup = -1;\n\n /**\n * The intersection mode. Should be Ray.ANY, Ray.ALL or Ray.CLOSEST.\n * @property {number} mode\n */\n this.mode = Ray.ANY;\n\n /**\n * Current result object.\n * @property {RaycastResult} result\n */\n this.result = new RaycastResult();\n\n /**\n * Will be set to true during intersectWorld() if the ray hit anything.\n * @property {Boolean} hasHit\n */\n this.hasHit = false;\n\n /**\n * Current, user-provided result callback. Will be used if mode is Ray.ALL.\n * @property {Function} callback\n */\n this.callback = function(result){};\n}\nRay.prototype.constructor = Ray;\n\nRay.CLOSEST = 1;\nRay.ANY = 2;\nRay.ALL = 4;\n\nvar tmpAABB = new AABB();\nvar tmpArray = [];\n\n/**\n * Do itersection against all bodies in the given World.\n * @method intersectWorld\n * @param {World} world\n * @param {object} options\n * @return {Boolean} True if the ray hit anything, otherwise false.\n */\nRay.prototype.intersectWorld = function (world, options) {\n this.mode = options.mode || Ray.ANY;\n this.result = options.result || new RaycastResult();\n this.skipBackfaces = !!options.skipBackfaces;\n this.collisionFilterMask = typeof(options.collisionFilterMask) !== 'undefined' ? options.collisionFilterMask : -1;\n this.collisionFilterGroup = typeof(options.collisionFilterGroup) !== 'undefined' ? options.collisionFilterGroup : -1;\n if(options.from){\n this.from.copy(options.from);\n }\n if(options.to){\n this.to.copy(options.to);\n }\n this.callback = options.callback || function(){};\n this.hasHit = false;\n\n this.result.reset();\n this._updateDirection();\n\n this.getAABB(tmpAABB);\n tmpArray.length = 0;\n world.broadphase.aabbQuery(world, tmpAABB, tmpArray);\n this.intersectBodies(tmpArray);\n\n return this.hasHit;\n};\n\nvar v1 = new Vec3(),\n v2 = new Vec3();\n\n/*\n * As per \"Barycentric Technique\" as named here http://www.blackpawn.com/texts/pointinpoly/default.html But without the division\n */\nRay.pointInTriangle = pointInTriangle;\nfunction pointInTriangle(p, a, b, c) {\n c.vsub(a,v0);\n b.vsub(a,v1);\n p.vsub(a,v2);\n\n var dot00 = v0.dot( v0 );\n var dot01 = v0.dot( v1 );\n var dot02 = v0.dot( v2 );\n var dot11 = v1.dot( v1 );\n var dot12 = v1.dot( v2 );\n\n var u,v;\n\n return ( (u = dot11 * dot02 - dot01 * dot12) >= 0 ) &&\n ( (v = dot00 * dot12 - dot01 * dot02) >= 0 ) &&\n ( u + v < ( dot00 * dot11 - dot01 * dot01 ) );\n}\n\n/**\n * Shoot a ray at a body, get back information about the hit.\n * @method intersectBody\n * @private\n * @param {Body} body\n * @param {RaycastResult} [result] Deprecated - set the result property of the Ray instead.\n */\nvar intersectBody_xi = new Vec3();\nvar intersectBody_qi = new Quaternion();\nRay.prototype.intersectBody = function (body, result) {\n if(result){\n this.result = result;\n this._updateDirection();\n }\n var checkCollisionResponse = this.checkCollisionResponse;\n\n if(checkCollisionResponse && !body.collisionResponse){\n return;\n }\n\n if((this.collisionFilterGroup & body.collisionFilterMask)===0 || (body.collisionFilterGroup & this.collisionFilterMask)===0){\n return;\n }\n\n var xi = intersectBody_xi;\n var qi = intersectBody_qi;\n\n for (var i = 0, N = body.shapes.length; i < N; i++) {\n var shape = body.shapes[i];\n\n if(checkCollisionResponse && !shape.collisionResponse){\n continue; // Skip\n }\n\n body.quaternion.mult(body.shapeOrientations[i], qi);\n body.quaternion.vmult(body.shapeOffsets[i], xi);\n xi.vadd(body.position, xi);\n\n this.intersectShape(\n shape,\n qi,\n xi,\n body\n );\n\n if(this.result._shouldStop){\n break;\n }\n }\n};\n\n/**\n * @method intersectBodies\n * @param {Array} bodies An array of Body objects.\n * @param {RaycastResult} [result] Deprecated\n */\nRay.prototype.intersectBodies = function (bodies, result) {\n if(result){\n this.result = result;\n this._updateDirection();\n }\n\n for ( var i = 0, l = bodies.length; !this.result._shouldStop && i < l; i ++ ) {\n this.intersectBody(bodies[i]);\n }\n};\n\n/**\n * Updates the _direction vector.\n * @private\n * @method _updateDirection\n */\nRay.prototype._updateDirection = function(){\n this.to.vsub(this.from, this._direction);\n this._direction.normalize();\n};\n\n/**\n * @method intersectShape\n * @private\n * @param {Shape} shape\n * @param {Quaternion} quat\n * @param {Vec3} position\n * @param {Body} body\n */\nRay.prototype.intersectShape = function(shape, quat, position, body){\n var from = this.from;\n\n\n // Checking boundingSphere\n var distance = distanceFromIntersection(from, this._direction, position);\n if ( distance > shape.boundingSphereRadius ) {\n return;\n }\n\n var intersectMethod = this[shape.type];\n if(intersectMethod){\n intersectMethod.call(this, shape, quat, position, body);\n }\n};\n\nvar vector = new Vec3();\nvar normal = new Vec3();\nvar intersectPoint = new Vec3();\n\nvar a = new Vec3();\nvar b = new Vec3();\nvar c = new Vec3();\nvar d = new Vec3();\n\nvar tmpRaycastResult = new RaycastResult();\n\n/**\n * @method intersectBox\n * @private\n * @param {Shape} shape\n * @param {Quaternion} quat\n * @param {Vec3} position\n * @param {Body} body\n */\nRay.prototype.intersectBox = function(shape, quat, position, body){\n return this.intersectConvex(shape.convexPolyhedronRepresentation, quat, position, body);\n};\nRay.prototype[Shape.types.BOX] = Ray.prototype.intersectBox;\n\n/**\n * @method intersectPlane\n * @private\n * @param {Shape} shape\n * @param {Quaternion} quat\n * @param {Vec3} position\n * @param {Body} body\n */\nRay.prototype.intersectPlane = function(shape, quat, position, body){\n var from = this.from;\n var to = this.to;\n var direction = this._direction;\n\n // Get plane normal\n var worldNormal = new Vec3(0, 0, 1);\n quat.vmult(worldNormal, worldNormal);\n\n var len = new Vec3();\n from.vsub(position, len);\n var planeToFrom = len.dot(worldNormal);\n to.vsub(position, len);\n var planeToTo = len.dot(worldNormal);\n\n if(planeToFrom * planeToTo > 0){\n // \"from\" and \"to\" are on the same side of the plane... bail out\n return;\n }\n\n if(from.distanceTo(to) < planeToFrom){\n return;\n }\n\n var n_dot_dir = worldNormal.dot(direction);\n\n if (Math.abs(n_dot_dir) < this.precision) {\n // No intersection\n return;\n }\n\n var planePointToFrom = new Vec3();\n var dir_scaled_with_t = new Vec3();\n var hitPointWorld = new Vec3();\n\n from.vsub(position, planePointToFrom);\n var t = -worldNormal.dot(planePointToFrom) / n_dot_dir;\n direction.scale(t, dir_scaled_with_t);\n from.vadd(dir_scaled_with_t, hitPointWorld);\n\n this.reportIntersection(worldNormal, hitPointWorld, shape, body, -1);\n};\nRay.prototype[Shape.types.PLANE] = Ray.prototype.intersectPlane;\n\n/**\n * Get the world AABB of the ray.\n * @method getAABB\n * @param {AABB} aabb\n */\nRay.prototype.getAABB = function(result){\n var to = this.to;\n var from = this.from;\n result.lowerBound.x = Math.min(to.x, from.x);\n result.lowerBound.y = Math.min(to.y, from.y);\n result.lowerBound.z = Math.min(to.z, from.z);\n result.upperBound.x = Math.max(to.x, from.x);\n result.upperBound.y = Math.max(to.y, from.y);\n result.upperBound.z = Math.max(to.z, from.z);\n};\n\nvar intersectConvexOptions = {\n faceList: [0]\n};\n\n/**\n * @method intersectHeightfield\n * @private\n * @param {Shape} shape\n * @param {Quaternion} quat\n * @param {Vec3} position\n * @param {Body} body\n */\nRay.prototype.intersectHeightfield = function(shape, quat, position, body){\n var data = shape.data,\n w = shape.elementSize,\n worldPillarOffset = new Vec3();\n\n // Convert the ray to local heightfield coordinates\n var localRay = new Ray(this.from, this.to);\n Transform.pointToLocalFrame(position, quat, localRay.from, localRay.from);\n Transform.pointToLocalFrame(position, quat, localRay.to, localRay.to);\n\n // Get the index of the data points to test against\n var index = [];\n var iMinX = null;\n var iMinY = null;\n var iMaxX = null;\n var iMaxY = null;\n\n var inside = shape.getIndexOfPosition(localRay.from.x, localRay.from.y, index, false);\n if(inside){\n iMinX = index[0];\n iMinY = index[1];\n iMaxX = index[0];\n iMaxY = index[1];\n }\n inside = shape.getIndexOfPosition(localRay.to.x, localRay.to.y, index, false);\n if(inside){\n if (iMinX === null || index[0] < iMinX) { iMinX = index[0]; }\n if (iMaxX === null || index[0] > iMaxX) { iMaxX = index[0]; }\n if (iMinY === null || index[1] < iMinY) { iMinY = index[1]; }\n if (iMaxY === null || index[1] > iMaxY) { iMaxY = index[1]; }\n }\n\n if(iMinX === null){\n return;\n }\n\n var minMax = [];\n shape.getRectMinMax(iMinX, iMinY, iMaxX, iMaxY, minMax);\n var min = minMax[0];\n var max = minMax[1];\n\n // // Bail out if the ray can't touch the bounding box\n // // TODO\n // var aabb = new AABB();\n // this.getAABB(aabb);\n // if(aabb.intersects()){\n // return;\n // }\n\n for(var i = iMinX; i <= iMaxX; i++){\n for(var j = iMinY; j <= iMaxY; j++){\n\n if(this.result._shouldStop){\n return;\n }\n\n // Lower triangle\n shape.getConvexTrianglePillar(i, j, false);\n Transform.pointToWorldFrame(position, quat, shape.pillarOffset, worldPillarOffset);\n this.intersectConvex(shape.pillarConvex, quat, worldPillarOffset, body, intersectConvexOptions);\n\n if(this.result._shouldStop){\n return;\n }\n\n // Upper triangle\n shape.getConvexTrianglePillar(i, j, true);\n Transform.pointToWorldFrame(position, quat, shape.pillarOffset, worldPillarOffset);\n this.intersectConvex(shape.pillarConvex, quat, worldPillarOffset, body, intersectConvexOptions);\n }\n }\n};\nRay.prototype[Shape.types.HEIGHTFIELD] = Ray.prototype.intersectHeightfield;\n\nvar Ray_intersectSphere_intersectionPoint = new Vec3();\nvar Ray_intersectSphere_normal = new Vec3();\n\n/**\n * @method intersectSphere\n * @private\n * @param {Shape} shape\n * @param {Quaternion} quat\n * @param {Vec3} position\n * @param {Body} body\n */\nRay.prototype.intersectSphere = function(shape, quat, position, body){\n var from = this.from,\n to = this.to,\n r = shape.radius;\n\n var a = Math.pow(to.x - from.x, 2) + Math.pow(to.y - from.y, 2) + Math.pow(to.z - from.z, 2);\n var b = 2 * ((to.x - from.x) * (from.x - position.x) + (to.y - from.y) * (from.y - position.y) + (to.z - from.z) * (from.z - position.z));\n var c = Math.pow(from.x - position.x, 2) + Math.pow(from.y - position.y, 2) + Math.pow(from.z - position.z, 2) - Math.pow(r, 2);\n\n var delta = Math.pow(b, 2) - 4 * a * c;\n\n var intersectionPoint = Ray_intersectSphere_intersectionPoint;\n var normal = Ray_intersectSphere_normal;\n\n if(delta < 0){\n // No intersection\n return;\n\n } else if(delta === 0){\n // single intersection point\n from.lerp(to, delta, intersectionPoint);\n\n intersectionPoint.vsub(position, normal);\n normal.normalize();\n\n this.reportIntersection(normal, intersectionPoint, shape, body, -1);\n\n } else {\n var d1 = (- b - Math.sqrt(delta)) / (2 * a);\n var d2 = (- b + Math.sqrt(delta)) / (2 * a);\n\n if(d1 >= 0 && d1 <= 1){\n from.lerp(to, d1, intersectionPoint);\n intersectionPoint.vsub(position, normal);\n normal.normalize();\n this.reportIntersection(normal, intersectionPoint, shape, body, -1);\n }\n\n if(this.result._shouldStop){\n return;\n }\n\n if(d2 >= 0 && d2 <= 1){\n from.lerp(to, d2, intersectionPoint);\n intersectionPoint.vsub(position, normal);\n normal.normalize();\n this.reportIntersection(normal, intersectionPoint, shape, body, -1);\n }\n }\n};\nRay.prototype[Shape.types.SPHERE] = Ray.prototype.intersectSphere;\n\n\nvar intersectConvex_normal = new Vec3();\nvar intersectConvex_minDistNormal = new Vec3();\nvar intersectConvex_minDistIntersect = new Vec3();\nvar intersectConvex_vector = new Vec3();\n\n/**\n * @method intersectConvex\n * @private\n * @param {Shape} shape\n * @param {Quaternion} quat\n * @param {Vec3} position\n * @param {Body} body\n * @param {object} [options]\n * @param {array} [options.faceList]\n */\nRay.prototype.intersectConvex = function intersectConvex(\n shape,\n quat,\n position,\n body,\n options\n){\n var minDistNormal = intersectConvex_minDistNormal;\n var normal = intersectConvex_normal;\n var vector = intersectConvex_vector;\n var minDistIntersect = intersectConvex_minDistIntersect;\n var faceList = (options && options.faceList) || null;\n\n // Checking faces\n var faces = shape.faces,\n vertices = shape.vertices,\n normals = shape.faceNormals;\n var direction = this._direction;\n\n var from = this.from;\n var to = this.to;\n var fromToDistance = from.distanceTo(to);\n\n var minDist = -1;\n var Nfaces = faceList ? faceList.length : faces.length;\n var result = this.result;\n\n for (var j = 0; !result._shouldStop && j < Nfaces; j++) {\n var fi = faceList ? faceList[j] : j;\n\n var face = faces[fi];\n var faceNormal = normals[fi];\n var q = quat;\n var x = position;\n\n // determine if ray intersects the plane of the face\n // note: this works regardless of the direction of the face normal\n\n // Get plane point in world coordinates...\n vector.copy(vertices[face[0]]);\n q.vmult(vector,vector);\n vector.vadd(x,vector);\n\n // ...but make it relative to the ray from. We'll fix this later.\n vector.vsub(from,vector);\n\n // Get plane normal\n q.vmult(faceNormal,normal);\n\n // If this dot product is negative, we have something interesting\n var dot = direction.dot(normal);\n\n // Bail out if ray and plane are parallel\n if ( Math.abs( dot ) < this.precision ){\n continue;\n }\n\n // calc distance to plane\n var scalar = normal.dot(vector) / dot;\n\n // if negative distance, then plane is behind ray\n if (scalar < 0){\n continue;\n }\n\n // if (dot < 0) {\n\n // Intersection point is from + direction * scalar\n direction.mult(scalar,intersectPoint);\n intersectPoint.vadd(from,intersectPoint);\n\n // a is the point we compare points b and c with.\n a.copy(vertices[face[0]]);\n q.vmult(a,a);\n x.vadd(a,a);\n\n for(var i = 1; !result._shouldStop && i < face.length - 1; i++){\n // Transform 3 vertices to world coords\n b.copy(vertices[face[i]]);\n c.copy(vertices[face[i+1]]);\n q.vmult(b,b);\n q.vmult(c,c);\n x.vadd(b,b);\n x.vadd(c,c);\n\n var distance = intersectPoint.distanceTo(from);\n\n if(!(pointInTriangle(intersectPoint, a, b, c) || pointInTriangle(intersectPoint, b, a, c)) || distance > fromToDistance){\n continue;\n }\n\n this.reportIntersection(normal, intersectPoint, shape, body, fi);\n }\n // }\n }\n};\nRay.prototype[Shape.types.CONVEXPOLYHEDRON] = Ray.prototype.intersectConvex;\n\nvar intersectTrimesh_normal = new Vec3();\nvar intersectTrimesh_localDirection = new Vec3();\nvar intersectTrimesh_localFrom = new Vec3();\nvar intersectTrimesh_localTo = new Vec3();\nvar intersectTrimesh_worldNormal = new Vec3();\nvar intersectTrimesh_worldIntersectPoint = new Vec3();\nvar intersectTrimesh_localAABB = new AABB();\nvar intersectTrimesh_triangles = [];\nvar intersectTrimesh_treeTransform = new Transform();\n\n/**\n * @method intersectTrimesh\n * @private\n * @param {Shape} shape\n * @param {Quaternion} quat\n * @param {Vec3} position\n * @param {Body} body\n * @param {object} [options]\n * @todo Optimize by transforming the world to local space first.\n * @todo Use Octree lookup\n */\nRay.prototype.intersectTrimesh = function intersectTrimesh(\n mesh,\n quat,\n position,\n body,\n options\n){\n var normal = intersectTrimesh_normal;\n var triangles = intersectTrimesh_triangles;\n var treeTransform = intersectTrimesh_treeTransform;\n var minDistNormal = intersectConvex_minDistNormal;\n var vector = intersectConvex_vector;\n var minDistIntersect = intersectConvex_minDistIntersect;\n var localAABB = intersectTrimesh_localAABB;\n var localDirection = intersectTrimesh_localDirection;\n var localFrom = intersectTrimesh_localFrom;\n var localTo = intersectTrimesh_localTo;\n var worldIntersectPoint = intersectTrimesh_worldIntersectPoint;\n var worldNormal = intersectTrimesh_worldNormal;\n var faceList = (options && options.faceList) || null;\n\n // Checking faces\n var indices = mesh.indices,\n vertices = mesh.vertices,\n normals = mesh.faceNormals;\n\n var from = this.from;\n var to = this.to;\n var direction = this._direction;\n\n var minDist = -1;\n treeTransform.position.copy(position);\n treeTransform.quaternion.copy(quat);\n\n // Transform ray to local space!\n Transform.vectorToLocalFrame(position, quat, direction, localDirection);\n //body.vectorToLocalFrame(direction, localDirection);\n Transform.pointToLocalFrame(position, quat, from, localFrom);\n //body.pointToLocalFrame(from, localFrom);\n Transform.pointToLocalFrame(position, quat, to, localTo);\n //body.pointToLocalFrame(to, localTo);\n var fromToDistanceSquared = localFrom.distanceSquared(localTo);\n\n mesh.tree.rayQuery(this, treeTransform, triangles);\n\n for (var i = 0, N = triangles.length; !this.result._shouldStop && i !== N; i++) {\n var trianglesIndex = triangles[i];\n\n mesh.getNormal(trianglesIndex, normal);\n\n // determine if ray intersects the plane of the face\n // note: this works regardless of the direction of the face normal\n\n // Get plane point in world coordinates...\n mesh.getVertex(indices[trianglesIndex * 3], a);\n\n // ...but make it relative to the ray from. We'll fix this later.\n a.vsub(localFrom,vector);\n\n // Get plane normal\n // quat.vmult(normal, normal);\n\n // If this dot product is negative, we have something interesting\n var dot = localDirection.dot(normal);\n\n // Bail out if ray and plane are parallel\n // if (Math.abs( dot ) < this.precision){\n // continue;\n // }\n\n // calc distance to plane\n var scalar = normal.dot(vector) / dot;\n\n // if negative distance, then plane is behind ray\n if (scalar < 0){\n continue;\n }\n\n // Intersection point is from + direction * scalar\n localDirection.scale(scalar,intersectPoint);\n intersectPoint.vadd(localFrom,intersectPoint);\n\n // Get triangle vertices\n mesh.getVertex(indices[trianglesIndex * 3 + 1], b);\n mesh.getVertex(indices[trianglesIndex * 3 + 2], c);\n\n var squaredDistance = intersectPoint.distanceSquared(localFrom);\n\n if(!(pointInTriangle(intersectPoint, b, a, c) || pointInTriangle(intersectPoint, a, b, c)) || squaredDistance > fromToDistanceSquared){\n continue;\n }\n\n // transform intersectpoint and normal to world\n Transform.vectorToWorldFrame(quat, normal, worldNormal);\n //body.vectorToWorldFrame(normal, worldNormal);\n Transform.pointToWorldFrame(position, quat, intersectPoint, worldIntersectPoint);\n //body.pointToWorldFrame(intersectPoint, worldIntersectPoint);\n this.reportIntersection(worldNormal, worldIntersectPoint, mesh, body, trianglesIndex);\n }\n triangles.length = 0;\n};\nRay.prototype[Shape.types.TRIMESH] = Ray.prototype.intersectTrimesh;\n\n\n/**\n * @method reportIntersection\n * @private\n * @param {Vec3} normal\n * @param {Vec3} hitPointWorld\n * @param {Shape} shape\n * @param {Body} body\n * @return {boolean} True if the intersections should continue\n */\nRay.prototype.reportIntersection = function(normal, hitPointWorld, shape, body, hitFaceIndex){\n var from = this.from;\n var to = this.to;\n var distance = from.distanceTo(hitPointWorld);\n var result = this.result;\n\n // Skip back faces?\n if(this.skipBackfaces && normal.dot(this._direction) > 0){\n return;\n }\n\n result.hitFaceIndex = typeof(hitFaceIndex) !== 'undefined' ? hitFaceIndex : -1;\n\n switch(this.mode){\n case Ray.ALL:\n this.hasHit = true;\n result.set(\n from,\n to,\n normal,\n hitPointWorld,\n shape,\n body,\n distance\n );\n result.hasHit = true;\n this.callback(result);\n break;\n\n case Ray.CLOSEST:\n\n // Store if closer than current closest\n if(distance < result.distance || !result.hasHit){\n this.hasHit = true;\n result.hasHit = true;\n result.set(\n from,\n to,\n normal,\n hitPointWorld,\n shape,\n body,\n distance\n );\n }\n break;\n\n case Ray.ANY:\n\n // Report and stop.\n this.hasHit = true;\n result.hasHit = true;\n result.set(\n from,\n to,\n normal,\n hitPointWorld,\n shape,\n body,\n distance\n );\n result._shouldStop = true;\n break;\n }\n};\n\nvar v0 = new Vec3(),\n intersect = new Vec3();\nfunction distanceFromIntersection(from, direction, position) {\n\n // v0 is vector from from to position\n position.vsub(from,v0);\n var dot = v0.dot(direction);\n\n // intersect = direction*dot + from\n direction.mult(dot,intersect);\n intersect.vadd(from,intersect);\n\n var distance = position.distanceTo(intersect);\n\n return distance;\n}\n\n\n},{\"../collision/AABB\":3,\"../collision/RaycastResult\":10,\"../math/Quaternion\":28,\"../math/Transform\":29,\"../math/Vec3\":30,\"../shapes/Box\":37,\"../shapes/ConvexPolyhedron\":38,\"../shapes/Shape\":43}],10:[function(_dereq_,module,exports){\nvar Vec3 = _dereq_('../math/Vec3');\n\nmodule.exports = RaycastResult;\n\n/**\n * Storage for Ray casting data.\n * @class RaycastResult\n * @constructor\n */\nfunction RaycastResult(){\n\n\t/**\n\t * @property {Vec3} rayFromWorld\n\t */\n\tthis.rayFromWorld = new Vec3();\n\n\t/**\n\t * @property {Vec3} rayToWorld\n\t */\n\tthis.rayToWorld = new Vec3();\n\n\t/**\n\t * @property {Vec3} hitNormalWorld\n\t */\n\tthis.hitNormalWorld = new Vec3();\n\n\t/**\n\t * @property {Vec3} hitPointWorld\n\t */\n\tthis.hitPointWorld = new Vec3();\n\n\t/**\n\t * @property {boolean} hasHit\n\t */\n\tthis.hasHit = false;\n\n\t/**\n\t * The hit shape, or null.\n\t * @property {Shape} shape\n\t */\n\tthis.shape = null;\n\n\t/**\n\t * The hit body, or null.\n\t * @property {Body} body\n\t */\n\tthis.body = null;\n\n\t/**\n\t * The index of the hit triangle, if the hit shape was a trimesh.\n\t * @property {number} hitFaceIndex\n\t * @default -1\n\t */\n\tthis.hitFaceIndex = -1;\n\n\t/**\n\t * Distance to the hit. Will be set to -1 if there was no hit.\n\t * @property {number} distance\n\t * @default -1\n\t */\n\tthis.distance = -1;\n\n\t/**\n\t * If the ray should stop traversing the bodies.\n\t * @private\n\t * @property {Boolean} _shouldStop\n\t * @default false\n\t */\n\tthis._shouldStop = false;\n}\n\n/**\n * Reset all result data.\n * @method reset\n */\nRaycastResult.prototype.reset = function () {\n\tthis.rayFromWorld.setZero();\n\tthis.rayToWorld.setZero();\n\tthis.hitNormalWorld.setZero();\n\tthis.hitPointWorld.setZero();\n\tthis.hasHit = false;\n\tthis.shape = null;\n\tthis.body = null;\n\tthis.hitFaceIndex = -1;\n\tthis.distance = -1;\n\tthis._shouldStop = false;\n};\n\n/**\n * @method abort\n */\nRaycastResult.prototype.abort = function(){\n\tthis._shouldStop = true;\n};\n\n/**\n * @method set\n * @param {Vec3} rayFromWorld\n * @param {Vec3} rayToWorld\n * @param {Vec3} hitNormalWorld\n * @param {Vec3} hitPointWorld\n * @param {Shape} shape\n * @param {Body} body\n * @param {number} distance\n */\nRaycastResult.prototype.set = function(\n\trayFromWorld,\n\trayToWorld,\n\thitNormalWorld,\n\thitPointWorld,\n\tshape,\n\tbody,\n\tdistance\n){\n\tthis.rayFromWorld.copy(rayFromWorld);\n\tthis.rayToWorld.copy(rayToWorld);\n\tthis.hitNormalWorld.copy(hitNormalWorld);\n\tthis.hitPointWorld.copy(hitPointWorld);\n\tthis.shape = shape;\n\tthis.body = body;\n\tthis.distance = distance;\n};\n},{\"../math/Vec3\":30}],11:[function(_dereq_,module,exports){\nvar Shape = _dereq_('../shapes/Shape');\nvar Broadphase = _dereq_('../collision/Broadphase');\n\nmodule.exports = SAPBroadphase;\n\n/**\n * Sweep and prune broadphase along one axis.\n *\n * @class SAPBroadphase\n * @constructor\n * @param {World} [world]\n * @extends Broadphase\n */\nfunction SAPBroadphase(world){\n Broadphase.apply(this);\n\n /**\n * List of bodies currently in the broadphase.\n * @property axisList\n * @type {Array}\n */\n this.axisList = [];\n\n /**\n * The world to search in.\n * @property world\n * @type {World}\n */\n this.world = null;\n\n /**\n * Axis to sort the bodies along. Set to 0 for x axis, and 1 for y axis. For best performance, choose an axis that the bodies are spread out more on.\n * @property axisIndex\n * @type {Number}\n */\n this.axisIndex = 0;\n\n var axisList = this.axisList;\n\n this._addBodyHandler = function(e){\n axisList.push(e.body);\n };\n\n this._removeBodyHandler = function(e){\n var idx = axisList.indexOf(e.body);\n if(idx !== -1){\n axisList.splice(idx,1);\n }\n };\n\n if(world){\n this.setWorld(world);\n }\n}\nSAPBroadphase.prototype = new Broadphase();\n\n/**\n * Change the world\n * @method setWorld\n * @param {World} world\n */\nSAPBroadphase.prototype.setWorld = function(world){\n // Clear the old axis array\n this.axisList.length = 0;\n\n // Add all bodies from the new world\n for(var i=0; i=0;j--) {\n if(a[j].aabb.lowerBound.x <= v.aabb.lowerBound.x){\n break;\n }\n a[j+1] = a[j];\n }\n a[j+1] = v;\n }\n return a;\n};\n\n/**\n * @static\n * @method insertionSortY\n * @param {Array} a\n * @return {Array}\n */\nSAPBroadphase.insertionSortY = function(a) {\n for(var i=1,l=a.length;i=0;j--) {\n if(a[j].aabb.lowerBound.y <= v.aabb.lowerBound.y){\n break;\n }\n a[j+1] = a[j];\n }\n a[j+1] = v;\n }\n return a;\n};\n\n/**\n * @static\n * @method insertionSortZ\n * @param {Array} a\n * @return {Array}\n */\nSAPBroadphase.insertionSortZ = function(a) {\n for(var i=1,l=a.length;i=0;j--) {\n if(a[j].aabb.lowerBound.z <= v.aabb.lowerBound.z){\n break;\n }\n a[j+1] = a[j];\n }\n a[j+1] = v;\n }\n return a;\n};\n\n/**\n * Collect all collision pairs\n * @method collisionPairs\n * @param {World} world\n * @param {Array} p1\n * @param {Array} p2\n */\nSAPBroadphase.prototype.collisionPairs = function(world,p1,p2){\n var bodies = this.axisList,\n N = bodies.length,\n axisIndex = this.axisIndex,\n i, j;\n\n if(this.dirty){\n this.sortList();\n this.dirty = false;\n }\n\n // Look through the list\n for(i=0; i !== N; i++){\n var bi = bodies[i];\n\n for(j=i+1; j < N; j++){\n var bj = bodies[j];\n\n if(!this.needBroadphaseCollision(bi,bj)){\n continue;\n }\n\n if(!SAPBroadphase.checkBounds(bi,bj,axisIndex)){\n break;\n }\n\n this.intersectionTest(bi,bj,p1,p2);\n }\n }\n};\n\nSAPBroadphase.prototype.sortList = function(){\n var axisList = this.axisList;\n var axisIndex = this.axisIndex;\n var N = axisList.length;\n\n // Update AABBs\n for(var i = 0; i!==N; i++){\n var bi = axisList[i];\n if(bi.aabbNeedsUpdate){\n bi.computeAABB();\n }\n }\n\n // Sort the list\n if(axisIndex === 0){\n SAPBroadphase.insertionSortX(axisList);\n } else if(axisIndex === 1){\n SAPBroadphase.insertionSortY(axisList);\n } else if(axisIndex === 2){\n SAPBroadphase.insertionSortZ(axisList);\n }\n};\n\n/**\n * Check if the bounds of two bodies overlap, along the given SAP axis.\n * @static\n * @method checkBounds\n * @param {Body} bi\n * @param {Body} bj\n * @param {Number} axisIndex\n * @return {Boolean}\n */\nSAPBroadphase.checkBounds = function(bi, bj, axisIndex){\n var biPos;\n var bjPos;\n\n if(axisIndex === 0){\n biPos = bi.position.x;\n bjPos = bj.position.x;\n } else if(axisIndex === 1){\n biPos = bi.position.y;\n bjPos = bj.position.y;\n } else if(axisIndex === 2){\n biPos = bi.position.z;\n bjPos = bj.position.z;\n }\n\n var ri = bi.boundingRadius,\n rj = bj.boundingRadius,\n boundA1 = biPos - ri,\n boundA2 = biPos + ri,\n boundB1 = bjPos - rj,\n boundB2 = bjPos + rj;\n\n return boundB1 < boundA2;\n};\n\n/**\n * Computes the variance of the body positions and estimates the best\n * axis to use. Will automatically set property .axisIndex.\n * @method autoDetectAxis\n */\nSAPBroadphase.prototype.autoDetectAxis = function(){\n var sumX=0,\n sumX2=0,\n sumY=0,\n sumY2=0,\n sumZ=0,\n sumZ2=0,\n bodies = this.axisList,\n N = bodies.length,\n invN=1/N;\n\n for(var i=0; i!==N; i++){\n var b = bodies[i];\n\n var centerX = b.position.x;\n sumX += centerX;\n sumX2 += centerX*centerX;\n\n var centerY = b.position.y;\n sumY += centerY;\n sumY2 += centerY*centerY;\n\n var centerZ = b.position.z;\n sumZ += centerZ;\n sumZ2 += centerZ*centerZ;\n }\n\n var varianceX = sumX2 - sumX*sumX*invN,\n varianceY = sumY2 - sumY*sumY*invN,\n varianceZ = sumZ2 - sumZ*sumZ*invN;\n\n if(varianceX > varianceY){\n if(varianceX > varianceZ){\n this.axisIndex = 0;\n } else{\n this.axisIndex = 2;\n }\n } else if(varianceY > varianceZ){\n this.axisIndex = 1;\n } else{\n this.axisIndex = 2;\n }\n};\n\n/**\n * Returns all the bodies within an AABB.\n * @method aabbQuery\n * @param {World} world\n * @param {AABB} aabb\n * @param {array} result An array to store resulting bodies in.\n * @return {array}\n */\nSAPBroadphase.prototype.aabbQuery = function(world, aabb, result){\n result = result || [];\n\n if(this.dirty){\n this.sortList();\n this.dirty = false;\n }\n\n var axisIndex = this.axisIndex, axis = 'x';\n if(axisIndex === 1){ axis = 'y'; }\n if(axisIndex === 2){ axis = 'z'; }\n\n var axisList = this.axisList;\n var lower = aabb.lowerBound[axis];\n var upper = aabb.upperBound[axis];\n for(var i = 0; i < axisList.length; i++){\n var b = axisList[i];\n\n if(b.aabbNeedsUpdate){\n b.computeAABB();\n }\n\n if(b.aabb.overlaps(aabb)){\n result.push(b);\n }\n }\n\n return result;\n};\n},{\"../collision/Broadphase\":5,\"../shapes/Shape\":43}],12:[function(_dereq_,module,exports){\nmodule.exports = ConeTwistConstraint;\n\nvar Constraint = _dereq_('./Constraint');\nvar PointToPointConstraint = _dereq_('./PointToPointConstraint');\nvar ConeEquation = _dereq_('../equations/ConeEquation');\nvar RotationalEquation = _dereq_('../equations/RotationalEquation');\nvar ContactEquation = _dereq_('../equations/ContactEquation');\nvar Vec3 = _dereq_('../math/Vec3');\n\n/**\n * @class ConeTwistConstraint\n * @constructor\n * @author schteppe\n * @param {Body} bodyA\n * @param {Body} bodyB\n * @param {object} [options]\n * @param {Vec3} [options.pivotA]\n * @param {Vec3} [options.pivotB]\n * @param {Vec3} [options.axisA]\n * @param {Vec3} [options.axisB]\n * @param {Number} [options.maxForce=1e6]\n * @extends PointToPointConstraint\n */\nfunction ConeTwistConstraint(bodyA, bodyB, options){\n options = options || {};\n var maxForce = typeof(options.maxForce) !== 'undefined' ? options.maxForce : 1e6;\n\n // Set pivot point in between\n var pivotA = options.pivotA ? options.pivotA.clone() : new Vec3();\n var pivotB = options.pivotB ? options.pivotB.clone() : new Vec3();\n this.axisA = options.axisA ? options.axisA.clone() : new Vec3();\n this.axisB = options.axisB ? options.axisB.clone() : new Vec3();\n\n PointToPointConstraint.call(this, bodyA, pivotA, bodyB, pivotB, maxForce);\n\n this.collideConnected = !!options.collideConnected;\n\n this.angle = typeof(options.angle) !== 'undefined' ? options.angle : 0;\n\n /**\n * @property {ConeEquation} coneEquation\n */\n var c = this.coneEquation = new ConeEquation(bodyA,bodyB,options);\n\n /**\n * @property {RotationalEquation} twistEquation\n */\n var t = this.twistEquation = new RotationalEquation(bodyA,bodyB,options);\n this.twistAngle = typeof(options.twistAngle) !== 'undefined' ? options.twistAngle : 0;\n\n // Make the cone equation push the bodies toward the cone axis, not outward\n c.maxForce = 0;\n c.minForce = -maxForce;\n\n // Make the twist equation add torque toward the initial position\n t.maxForce = 0;\n t.minForce = -maxForce;\n\n this.equations.push(c, t);\n}\nConeTwistConstraint.prototype = new PointToPointConstraint();\nConeTwistConstraint.constructor = ConeTwistConstraint;\n\nvar ConeTwistConstraint_update_tmpVec1 = new Vec3();\nvar ConeTwistConstraint_update_tmpVec2 = new Vec3();\n\nConeTwistConstraint.prototype.update = function(){\n var bodyA = this.bodyA,\n bodyB = this.bodyB,\n cone = this.coneEquation,\n twist = this.twistEquation;\n\n PointToPointConstraint.prototype.update.call(this);\n\n // Update the axes to the cone constraint\n bodyA.vectorToWorldFrame(this.axisA, cone.axisA);\n bodyB.vectorToWorldFrame(this.axisB, cone.axisB);\n\n // Update the world axes in the twist constraint\n this.axisA.tangents(twist.axisA, twist.axisA);\n bodyA.vectorToWorldFrame(twist.axisA, twist.axisA);\n\n this.axisB.tangents(twist.axisB, twist.axisB);\n bodyB.vectorToWorldFrame(twist.axisB, twist.axisB);\n\n cone.angle = this.angle;\n twist.maxAngle = this.twistAngle;\n};\n\n\n},{\"../equations/ConeEquation\":18,\"../equations/ContactEquation\":19,\"../equations/RotationalEquation\":22,\"../math/Vec3\":30,\"./Constraint\":13,\"./PointToPointConstraint\":17}],13:[function(_dereq_,module,exports){\nmodule.exports = Constraint;\n\nvar Utils = _dereq_('../utils/Utils');\n\n/**\n * Constraint base class\n * @class Constraint\n * @author schteppe\n * @constructor\n * @param {Body} bodyA\n * @param {Body} bodyB\n * @param {object} [options]\n * @param {boolean} [options.collideConnected=true]\n * @param {boolean} [options.wakeUpBodies=true]\n */\nfunction Constraint(bodyA, bodyB, options){\n options = Utils.defaults(options,{\n collideConnected : true,\n wakeUpBodies : true,\n });\n\n /**\n * Equations to be solved in this constraint\n * @property equations\n * @type {Array}\n */\n this.equations = [];\n\n /**\n * @property {Body} bodyA\n */\n this.bodyA = bodyA;\n\n /**\n * @property {Body} bodyB\n */\n this.bodyB = bodyB;\n\n /**\n * @property {Number} id\n */\n this.id = Constraint.idCounter++;\n\n /**\n * Set to true if you want the bodies to collide when they are connected.\n * @property collideConnected\n * @type {boolean}\n */\n this.collideConnected = options.collideConnected;\n\n if(options.wakeUpBodies){\n if(bodyA){\n bodyA.wakeUp();\n }\n if(bodyB){\n bodyB.wakeUp();\n }\n }\n}\n\n/**\n * Update all the equations with data.\n * @method update\n */\nConstraint.prototype.update = function(){\n throw new Error(\"method update() not implmemented in this Constraint subclass!\");\n};\n\n/**\n * Enables all equations in the constraint.\n * @method enable\n */\nConstraint.prototype.enable = function(){\n var eqs = this.equations;\n for(var i=0; i\n // G = [0 axisA 0 -axisB]\n\n GA.rotational.copy(axisA);\n axisB.negate(GB.rotational);\n\n var GW = this.computeGW() - this.targetVelocity,\n GiMf = this.computeGiMf();\n\n var B = - GW * b - h * GiMf;\n\n return B;\n};\n\n},{\"../math/Mat3\":27,\"../math/Vec3\":30,\"./Equation\":20}],24:[function(_dereq_,module,exports){\nvar Utils = _dereq_('../utils/Utils');\n\nmodule.exports = ContactMaterial;\n\n/**\n * Defines what happens when two materials meet.\n * @class ContactMaterial\n * @constructor\n * @param {Material} m1\n * @param {Material} m2\n * @param {object} [options]\n * @param {Number} [options.friction=0.3]\n * @param {Number} [options.restitution=0.3]\n * @param {number} [options.contactEquationStiffness=1e7]\n * @param {number} [options.contactEquationRelaxation=3]\n * @param {number} [options.frictionEquationStiffness=1e7]\n * @param {Number} [options.frictionEquationRelaxation=3]\n */\nfunction ContactMaterial(m1, m2, options){\n options = Utils.defaults(options, {\n friction: 0.3,\n restitution: 0.3,\n contactEquationStiffness: 1e7,\n contactEquationRelaxation: 3,\n frictionEquationStiffness: 1e7,\n frictionEquationRelaxation: 3\n });\n\n /**\n * Identifier of this material\n * @property {Number} id\n */\n this.id = ContactMaterial.idCounter++;\n\n /**\n * Participating materials\n * @property {Array} materials\n * @todo Should be .materialA and .materialB instead\n */\n this.materials = [m1, m2];\n\n /**\n * Friction coefficient\n * @property {Number} friction\n */\n this.friction = options.friction;\n\n /**\n * Restitution coefficient\n * @property {Number} restitution\n */\n this.restitution = options.restitution;\n\n /**\n * Stiffness of the produced contact equations\n * @property {Number} contactEquationStiffness\n */\n this.contactEquationStiffness = options.contactEquationStiffness;\n\n /**\n * Relaxation time of the produced contact equations\n * @property {Number} contactEquationRelaxation\n */\n this.contactEquationRelaxation = options.contactEquationRelaxation;\n\n /**\n * Stiffness of the produced friction equations\n * @property {Number} frictionEquationStiffness\n */\n this.frictionEquationStiffness = options.frictionEquationStiffness;\n\n /**\n * Relaxation time of the produced friction equations\n * @property {Number} frictionEquationRelaxation\n */\n this.frictionEquationRelaxation = options.frictionEquationRelaxation;\n}\n\nContactMaterial.idCounter = 0;\n\n},{\"../utils/Utils\":53}],25:[function(_dereq_,module,exports){\nmodule.exports = Material;\n\n/**\n * Defines a physics material.\n * @class Material\n * @constructor\n * @param {object} [options]\n * @author schteppe\n */\nfunction Material(options){\n var name = '';\n options = options || {};\n\n // Backwards compatibility fix\n if(typeof(options) === 'string'){\n name = options;\n options = {};\n } else if(typeof(options) === 'object') {\n name = '';\n }\n\n /**\n * @property name\n * @type {String}\n */\n this.name = name;\n\n /**\n * material id.\n * @property id\n * @type {number}\n */\n this.id = Material.idCounter++;\n\n /**\n * Friction for this material. If non-negative, it will be used instead of the friction given by ContactMaterials. If there's no matching ContactMaterial, the value from .defaultContactMaterial in the World will be used.\n * @property {number} friction\n */\n this.friction = typeof(options.friction) !== 'undefined' ? options.friction : -1;\n\n /**\n * Restitution for this material. If non-negative, it will be used instead of the restitution given by ContactMaterials. If there's no matching ContactMaterial, the value from .defaultContactMaterial in the World will be used.\n * @property {number} restitution\n */\n this.restitution = typeof(options.restitution) !== 'undefined' ? options.restitution : -1;\n}\n\nMaterial.idCounter = 0;\n\n},{}],26:[function(_dereq_,module,exports){\nmodule.exports = JacobianElement;\n\nvar Vec3 = _dereq_('./Vec3');\n\n/**\n * An element containing 6 entries, 3 spatial and 3 rotational degrees of freedom.\n * @class JacobianElement\n * @constructor\n */\nfunction JacobianElement(){\n\n /**\n * @property {Vec3} spatial\n */\n this.spatial = new Vec3();\n\n /**\n * @property {Vec3} rotational\n */\n this.rotational = new Vec3();\n}\n\n/**\n * Multiply with other JacobianElement\n * @method multiplyElement\n * @param {JacobianElement} element\n * @return {Number}\n */\nJacobianElement.prototype.multiplyElement = function(element){\n return element.spatial.dot(this.spatial) + element.rotational.dot(this.rotational);\n};\n\n/**\n * Multiply with two vectors\n * @method multiplyVectors\n * @param {Vec3} spatial\n * @param {Vec3} rotational\n * @return {Number}\n */\nJacobianElement.prototype.multiplyVectors = function(spatial,rotational){\n return spatial.dot(this.spatial) + rotational.dot(this.rotational);\n};\n\n},{\"./Vec3\":30}],27:[function(_dereq_,module,exports){\nmodule.exports = Mat3;\n\nvar Vec3 = _dereq_('./Vec3');\n\n/**\n * A 3x3 matrix.\n * @class Mat3\n * @constructor\n * @param array elements Array of nine elements. Optional.\n * @author schteppe / http://github.com/schteppe\n */\nfunction Mat3(elements){\n /**\n * A vector of length 9, containing all matrix elements\n * @property {Array} elements\n */\n if(elements){\n this.elements = elements;\n } else {\n this.elements = [0,0,0,0,0,0,0,0,0];\n }\n}\n\n/**\n * Sets the matrix to identity\n * @method identity\n * @todo Should perhaps be renamed to setIdentity() to be more clear.\n * @todo Create another function that immediately creates an identity matrix eg. eye()\n */\nMat3.prototype.identity = function(){\n var e = this.elements;\n e[0] = 1;\n e[1] = 0;\n e[2] = 0;\n\n e[3] = 0;\n e[4] = 1;\n e[5] = 0;\n\n e[6] = 0;\n e[7] = 0;\n e[8] = 1;\n};\n\n/**\n * Set all elements to zero\n * @method setZero\n */\nMat3.prototype.setZero = function(){\n var e = this.elements;\n e[0] = 0;\n e[1] = 0;\n e[2] = 0;\n e[3] = 0;\n e[4] = 0;\n e[5] = 0;\n e[6] = 0;\n e[7] = 0;\n e[8] = 0;\n};\n\n/**\n * Sets the matrix diagonal elements from a Vec3\n * @method setTrace\n * @param {Vec3} vec3\n */\nMat3.prototype.setTrace = function(vec3){\n var e = this.elements;\n e[0] = vec3.x;\n e[4] = vec3.y;\n e[8] = vec3.z;\n};\n\n/**\n * Gets the matrix diagonal elements\n * @method getTrace\n * @return {Vec3}\n */\nMat3.prototype.getTrace = function(target){\n var target = target || new Vec3();\n var e = this.elements;\n target.x = e[0];\n target.y = e[4];\n target.z = e[8];\n};\n\n/**\n * Matrix-Vector multiplication\n * @method vmult\n * @param {Vec3} v The vector to multiply with\n * @param {Vec3} target Optional, target to save the result in.\n */\nMat3.prototype.vmult = function(v,target){\n target = target || new Vec3();\n\n var e = this.elements,\n x = v.x,\n y = v.y,\n z = v.z;\n target.x = e[0]*x + e[1]*y + e[2]*z;\n target.y = e[3]*x + e[4]*y + e[5]*z;\n target.z = e[6]*x + e[7]*y + e[8]*z;\n\n return target;\n};\n\n/**\n * Matrix-scalar multiplication\n * @method smult\n * @param {Number} s\n */\nMat3.prototype.smult = function(s){\n for(var i=0; i1 acos and sqrt will produce errors, this cant happen if quaternion is normalised\n var angle = 2 * Math.acos(this.w);\n var s = Math.sqrt(1-this.w*this.w); // assuming quaternion normalised then w is less than 1, so term always positive.\n if (s < 0.001) { // test to avoid divide by zero, s is always positive due to sqrt\n // if s close to zero then direction of axis not important\n targetAxis.x = this.x; // if it is important that axis is normalised then replace with x=1; y=z=0;\n targetAxis.y = this.y;\n targetAxis.z = this.z;\n } else {\n targetAxis.x = this.x / s; // normalise axis\n targetAxis.y = this.y / s;\n targetAxis.z = this.z / s;\n }\n return [targetAxis,angle];\n};\n\nvar sfv_t1 = new Vec3(),\n sfv_t2 = new Vec3();\n\n/**\n * Set the quaternion value given two vectors. The resulting rotation will be the needed rotation to rotate u to v.\n * @method setFromVectors\n * @param {Vec3} u\n * @param {Vec3} v\n */\nQuaternion.prototype.setFromVectors = function(u,v){\n if(u.isAntiparallelTo(v)){\n var t1 = sfv_t1;\n var t2 = sfv_t2;\n\n u.tangents(t1,t2);\n this.setFromAxisAngle(t1,Math.PI);\n } else {\n var a = u.cross(v);\n this.x = a.x;\n this.y = a.y;\n this.z = a.z;\n this.w = Math.sqrt(Math.pow(u.norm(),2) * Math.pow(v.norm(),2)) + u.dot(v);\n this.normalize();\n }\n};\n\n/**\n * Quaternion multiplication\n * @method mult\n * @param {Quaternion} q\n * @param {Quaternion} target Optional.\n * @return {Quaternion}\n */\nvar Quaternion_mult_va = new Vec3();\nvar Quaternion_mult_vb = new Vec3();\nvar Quaternion_mult_vaxvb = new Vec3();\nQuaternion.prototype.mult = function(q,target){\n target = target || new Quaternion();\n var w = this.w,\n va = Quaternion_mult_va,\n vb = Quaternion_mult_vb,\n vaxvb = Quaternion_mult_vaxvb;\n\n va.set(this.x,this.y,this.z);\n vb.set(q.x,q.y,q.z);\n target.w = w*q.w - va.dot(vb);\n va.cross(vb,vaxvb);\n\n target.x = w * vb.x + q.w*va.x + vaxvb.x;\n target.y = w * vb.y + q.w*va.y + vaxvb.y;\n target.z = w * vb.z + q.w*va.z + vaxvb.z;\n\n return target;\n};\n\n/**\n * Get the inverse quaternion rotation.\n * @method inverse\n * @param {Quaternion} target\n * @return {Quaternion}\n */\nQuaternion.prototype.inverse = function(target){\n var x = this.x, y = this.y, z = this.z, w = this.w;\n target = target || new Quaternion();\n\n this.conjugate(target);\n var inorm2 = 1/(x*x + y*y + z*z + w*w);\n target.x *= inorm2;\n target.y *= inorm2;\n target.z *= inorm2;\n target.w *= inorm2;\n\n return target;\n};\n\n/**\n * Get the quaternion conjugate\n * @method conjugate\n * @param {Quaternion} target\n * @return {Quaternion}\n */\nQuaternion.prototype.conjugate = function(target){\n target = target || new Quaternion();\n\n target.x = -this.x;\n target.y = -this.y;\n target.z = -this.z;\n target.w = this.w;\n\n return target;\n};\n\n/**\n * Normalize the quaternion. Note that this changes the values of the quaternion.\n * @method normalize\n */\nQuaternion.prototype.normalize = function(){\n var l = Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);\n if ( l === 0 ) {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n this.w = 0;\n } else {\n l = 1 / l;\n this.x *= l;\n this.y *= l;\n this.z *= l;\n this.w *= l;\n }\n};\n\n/**\n * Approximation of quaternion normalization. Works best when quat is already almost-normalized.\n * @method normalizeFast\n * @see http://jsperf.com/fast-quaternion-normalization\n * @author unphased, https://github.com/unphased\n */\nQuaternion.prototype.normalizeFast = function () {\n var f = (3.0-(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w))/2.0;\n if ( f === 0 ) {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n this.w = 0;\n } else {\n this.x *= f;\n this.y *= f;\n this.z *= f;\n this.w *= f;\n }\n};\n\n/**\n * Multiply the quaternion by a vector\n * @method vmult\n * @param {Vec3} v\n * @param {Vec3} target Optional\n * @return {Vec3}\n */\nQuaternion.prototype.vmult = function(v,target){\n target = target || new Vec3();\n\n var x = v.x,\n y = v.y,\n z = v.z;\n\n var qx = this.x,\n qy = this.y,\n qz = this.z,\n qw = this.w;\n\n // q*v\n var ix = qw * x + qy * z - qz * y,\n iy = qw * y + qz * x - qx * z,\n iz = qw * z + qx * y - qy * x,\n iw = -qx * x - qy * y - qz * z;\n\n target.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n target.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n target.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n\n return target;\n};\n\n/**\n * Copies value of source to this quaternion.\n * @method copy\n * @param {Quaternion} source\n * @return {Quaternion} this\n */\nQuaternion.prototype.copy = function(source){\n this.x = source.x;\n this.y = source.y;\n this.z = source.z;\n this.w = source.w;\n return this;\n};\n\n/**\n * Convert the quaternion to euler angle representation. Order: YZX, as this page describes: http://www.euclideanspace.com/maths/standards/index.htm\n * @method toEuler\n * @param {Vec3} target\n * @param string order Three-character string e.g. \"YZX\", which also is default.\n */\nQuaternion.prototype.toEuler = function(target,order){\n order = order || \"YZX\";\n\n var heading, attitude, bank;\n var x = this.x, y = this.y, z = this.z, w = this.w;\n\n switch(order){\n case \"YZX\":\n var test = x*y + z*w;\n if (test > 0.499) { // singularity at north pole\n heading = 2 * Math.atan2(x,w);\n attitude = Math.PI/2;\n bank = 0;\n }\n if (test < -0.499) { // singularity at south pole\n heading = -2 * Math.atan2(x,w);\n attitude = - Math.PI/2;\n bank = 0;\n }\n if(isNaN(heading)){\n var sqx = x*x;\n var sqy = y*y;\n var sqz = z*z;\n heading = Math.atan2(2*y*w - 2*x*z , 1 - 2*sqy - 2*sqz); // Heading\n attitude = Math.asin(2*test); // attitude\n bank = Math.atan2(2*x*w - 2*y*z , 1 - 2*sqx - 2*sqz); // bank\n }\n break;\n default:\n throw new Error(\"Euler order \"+order+\" not supported yet.\");\n }\n\n target.y = heading;\n target.z = attitude;\n target.x = bank;\n};\n\n/**\n * See http://www.mathworks.com/matlabcentral/fileexchange/20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/content/SpinCalc.m\n * @method setFromEuler\n * @param {Number} x\n * @param {Number} y\n * @param {Number} z\n * @param {String} order The order to apply angles: 'XYZ' or 'YXZ' or any other combination\n */\nQuaternion.prototype.setFromEuler = function ( x, y, z, order ) {\n order = order || \"XYZ\";\n\n var c1 = Math.cos( x / 2 );\n var c2 = Math.cos( y / 2 );\n var c3 = Math.cos( z / 2 );\n var s1 = Math.sin( x / 2 );\n var s2 = Math.sin( y / 2 );\n var s3 = Math.sin( z / 2 );\n\n if ( order === 'XYZ' ) {\n\n this.x = s1 * c2 * c3 + c1 * s2 * s3;\n this.y = c1 * s2 * c3 - s1 * c2 * s3;\n this.z = c1 * c2 * s3 + s1 * s2 * c3;\n this.w = c1 * c2 * c3 - s1 * s2 * s3;\n\n } else if ( order === 'YXZ' ) {\n\n this.x = s1 * c2 * c3 + c1 * s2 * s3;\n this.y = c1 * s2 * c3 - s1 * c2 * s3;\n this.z = c1 * c2 * s3 - s1 * s2 * c3;\n this.w = c1 * c2 * c3 + s1 * s2 * s3;\n\n } else if ( order === 'ZXY' ) {\n\n this.x = s1 * c2 * c3 - c1 * s2 * s3;\n this.y = c1 * s2 * c3 + s1 * c2 * s3;\n this.z = c1 * c2 * s3 + s1 * s2 * c3;\n this.w = c1 * c2 * c3 - s1 * s2 * s3;\n\n } else if ( order === 'ZYX' ) {\n\n this.x = s1 * c2 * c3 - c1 * s2 * s3;\n this.y = c1 * s2 * c3 + s1 * c2 * s3;\n this.z = c1 * c2 * s3 - s1 * s2 * c3;\n this.w = c1 * c2 * c3 + s1 * s2 * s3;\n\n } else if ( order === 'YZX' ) {\n\n this.x = s1 * c2 * c3 + c1 * s2 * s3;\n this.y = c1 * s2 * c3 + s1 * c2 * s3;\n this.z = c1 * c2 * s3 - s1 * s2 * c3;\n this.w = c1 * c2 * c3 - s1 * s2 * s3;\n\n } else if ( order === 'XZY' ) {\n\n this.x = s1 * c2 * c3 - c1 * s2 * s3;\n this.y = c1 * s2 * c3 - s1 * c2 * s3;\n this.z = c1 * c2 * s3 + s1 * s2 * c3;\n this.w = c1 * c2 * c3 + s1 * s2 * s3;\n\n }\n\n return this;\n\n};\n\nQuaternion.prototype.clone = function(){\n return new Quaternion(this.x, this.y, this.z, this.w);\n};\n},{\"./Vec3\":30}],29:[function(_dereq_,module,exports){\nvar Vec3 = _dereq_('./Vec3');\nvar Quaternion = _dereq_('./Quaternion');\n\nmodule.exports = Transform;\n\n/**\n * @class Transform\n * @constructor\n */\nfunction Transform(options) {\n options = options || {};\n\n\t/**\n\t * @property {Vec3} position\n\t */\n\tthis.position = new Vec3();\n if(options.position){\n this.position.copy(options.position);\n }\n\n\t/**\n\t * @property {Quaternion} quaternion\n\t */\n\tthis.quaternion = new Quaternion();\n if(options.quaternion){\n this.quaternion.copy(options.quaternion);\n }\n}\n\nvar tmpQuat = new Quaternion();\n\n/**\n * @static\n * @method pointToLocaFrame\n * @param {Vec3} position\n * @param {Quaternion} quaternion\n * @param {Vec3} worldPoint\n * @param {Vec3} result\n */\nTransform.pointToLocalFrame = function(position, quaternion, worldPoint, result){\n var result = result || new Vec3();\n worldPoint.vsub(position, result);\n quaternion.conjugate(tmpQuat);\n tmpQuat.vmult(result, result);\n return result;\n};\n\n/**\n * Get a global point in local transform coordinates.\n * @method pointToLocal\n * @param {Vec3} point\n * @param {Vec3} result\n * @return {Vec3} The \"result\" vector object\n */\nTransform.prototype.pointToLocal = function(worldPoint, result){\n return Transform.pointToLocalFrame(this.position, this.quaternion, worldPoint, result);\n};\n\n/**\n * @static\n * @method pointToWorldFrame\n * @param {Vec3} position\n * @param {Vec3} quaternion\n * @param {Vec3} localPoint\n * @param {Vec3} result\n */\nTransform.pointToWorldFrame = function(position, quaternion, localPoint, result){\n var result = result || new Vec3();\n quaternion.vmult(localPoint, result);\n result.vadd(position, result);\n return result;\n};\n\n/**\n * Get a local point in global transform coordinates.\n * @method pointToWorld\n * @param {Vec3} point\n * @param {Vec3} result\n * @return {Vec3} The \"result\" vector object\n */\nTransform.prototype.pointToWorld = function(localPoint, result){\n return Transform.pointToWorldFrame(this.position, this.quaternion, localPoint, result);\n};\n\n\nTransform.prototype.vectorToWorldFrame = function(localVector, result){\n var result = result || new Vec3();\n this.quaternion.vmult(localVector, result);\n return result;\n};\n\nTransform.vectorToWorldFrame = function(quaternion, localVector, result){\n quaternion.vmult(localVector, result);\n return result;\n};\n\nTransform.vectorToLocalFrame = function(position, quaternion, worldVector, result){\n var result = result || new Vec3();\n quaternion.w *= -1;\n quaternion.vmult(worldVector, result);\n quaternion.w *= -1;\n return result;\n};\n\n},{\"./Quaternion\":28,\"./Vec3\":30}],30:[function(_dereq_,module,exports){\nmodule.exports = Vec3;\n\nvar Mat3 = _dereq_('./Mat3');\n\n/**\n * 3-dimensional vector\n * @class Vec3\n * @constructor\n * @param {Number} x\n * @param {Number} y\n * @param {Number} z\n * @author schteppe\n * @example\n * var v = new Vec3(1, 2, 3);\n * console.log('x=' + v.x); // x=1\n */\nfunction Vec3(x,y,z){\n /**\n * @property x\n * @type {Number}\n */\n this.x = x||0.0;\n\n /**\n * @property y\n * @type {Number}\n */\n this.y = y||0.0;\n\n /**\n * @property z\n * @type {Number}\n */\n this.z = z||0.0;\n}\n\n/**\n * @static\n * @property {Vec3} ZERO\n */\nVec3.ZERO = new Vec3(0, 0, 0);\n\n/**\n * @static\n * @property {Vec3} UNIT_X\n */\nVec3.UNIT_X = new Vec3(1, 0, 0);\n\n/**\n * @static\n * @property {Vec3} UNIT_Y\n */\nVec3.UNIT_Y = new Vec3(0, 1, 0);\n\n/**\n * @static\n * @property {Vec3} UNIT_Z\n */\nVec3.UNIT_Z = new Vec3(0, 0, 1);\n\n/**\n * Vector cross product\n * @method cross\n * @param {Vec3} v\n * @param {Vec3} target Optional. Target to save in.\n * @return {Vec3}\n */\nVec3.prototype.cross = function(v,target){\n var vx=v.x, vy=v.y, vz=v.z, x=this.x, y=this.y, z=this.z;\n target = target || new Vec3();\n\n target.x = (y * vz) - (z * vy);\n target.y = (z * vx) - (x * vz);\n target.z = (x * vy) - (y * vx);\n\n return target;\n};\n\n/**\n * Set the vectors' 3 elements\n * @method set\n * @param {Number} x\n * @param {Number} y\n * @param {Number} z\n * @return Vec3\n */\nVec3.prototype.set = function(x,y,z){\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n};\n\n/**\n * Set all components of the vector to zero.\n * @method setZero\n */\nVec3.prototype.setZero = function(){\n this.x = this.y = this.z = 0;\n};\n\n/**\n * Vector addition\n * @method vadd\n * @param {Vec3} v\n * @param {Vec3} target Optional.\n * @return {Vec3}\n */\nVec3.prototype.vadd = function(v,target){\n if(target){\n target.x = v.x + this.x;\n target.y = v.y + this.y;\n target.z = v.z + this.z;\n } else {\n return new Vec3(this.x + v.x,\n this.y + v.y,\n this.z + v.z);\n }\n};\n\n/**\n * Vector subtraction\n * @method vsub\n * @param {Vec3} v\n * @param {Vec3} target Optional. Target to save in.\n * @return {Vec3}\n */\nVec3.prototype.vsub = function(v,target){\n if(target){\n target.x = this.x - v.x;\n target.y = this.y - v.y;\n target.z = this.z - v.z;\n } else {\n return new Vec3(this.x-v.x,\n this.y-v.y,\n this.z-v.z);\n }\n};\n\n/**\n * Get the cross product matrix a_cross from a vector, such that a x b = a_cross * b = c\n * @method crossmat\n * @see http://www8.cs.umu.se/kurser/TDBD24/VT06/lectures/Lecture6.pdf\n * @return {Mat3}\n */\nVec3.prototype.crossmat = function(){\n return new Mat3([ 0, -this.z, this.y,\n this.z, 0, -this.x,\n -this.y, this.x, 0]);\n};\n\n/**\n * Normalize the vector. Note that this changes the values in the vector.\n * @method normalize\n * @return {Number} Returns the norm of the vector\n */\nVec3.prototype.normalize = function(){\n var x=this.x, y=this.y, z=this.z;\n var n = Math.sqrt(x*x + y*y + z*z);\n if(n>0.0){\n var invN = 1/n;\n this.x *= invN;\n this.y *= invN;\n this.z *= invN;\n } else {\n // Make something up\n this.x = 0;\n this.y = 0;\n this.z = 0;\n }\n return n;\n};\n\n/**\n * Get the version of this vector that is of length 1.\n * @method unit\n * @param {Vec3} target Optional target to save in\n * @return {Vec3} Returns the unit vector\n */\nVec3.prototype.unit = function(target){\n target = target || new Vec3();\n var x=this.x, y=this.y, z=this.z;\n var ninv = Math.sqrt(x*x + y*y + z*z);\n if(ninv>0.0){\n ninv = 1.0/ninv;\n target.x = x * ninv;\n target.y = y * ninv;\n target.z = z * ninv;\n } else {\n target.x = 1;\n target.y = 0;\n target.z = 0;\n }\n return target;\n};\n\n/**\n * Get the length of the vector\n * @method norm\n * @return {Number}\n * @deprecated Use .length() instead\n */\nVec3.prototype.norm = function(){\n var x=this.x, y=this.y, z=this.z;\n return Math.sqrt(x*x + y*y + z*z);\n};\n\n/**\n * Get the length of the vector\n * @method length\n * @return {Number}\n */\nVec3.prototype.length = Vec3.prototype.norm;\n\n/**\n * Get the squared length of the vector\n * @method norm2\n * @return {Number}\n * @deprecated Use .lengthSquared() instead.\n */\nVec3.prototype.norm2 = function(){\n return this.dot(this);\n};\n\n/**\n * Get the squared length of the vector.\n * @method lengthSquared\n * @return {Number}\n */\nVec3.prototype.lengthSquared = Vec3.prototype.norm2;\n\n/**\n * Get distance from this point to another point\n * @method distanceTo\n * @param {Vec3} p\n * @return {Number}\n */\nVec3.prototype.distanceTo = function(p){\n var x=this.x, y=this.y, z=this.z;\n var px=p.x, py=p.y, pz=p.z;\n return Math.sqrt((px-x)*(px-x)+\n (py-y)*(py-y)+\n (pz-z)*(pz-z));\n};\n\n/**\n * Get squared distance from this point to another point\n * @method distanceSquared\n * @param {Vec3} p\n * @return {Number}\n */\nVec3.prototype.distanceSquared = function(p){\n var x=this.x, y=this.y, z=this.z;\n var px=p.x, py=p.y, pz=p.z;\n return (px-x)*(px-x) + (py-y)*(py-y) + (pz-z)*(pz-z);\n};\n\n/**\n * Multiply all the components of the vector with a scalar.\n * @deprecated Use .scale instead\n * @method mult\n * @param {Number} scalar\n * @param {Vec3} target The vector to save the result in.\n * @return {Vec3}\n * @deprecated Use .scale() instead\n */\nVec3.prototype.mult = function(scalar,target){\n target = target || new Vec3();\n var x = this.x,\n y = this.y,\n z = this.z;\n target.x = scalar * x;\n target.y = scalar * y;\n target.z = scalar * z;\n return target;\n};\n\n/**\n * Multiply the vector with a scalar.\n * @method scale\n * @param {Number} scalar\n * @param {Vec3} target\n * @return {Vec3}\n */\nVec3.prototype.scale = Vec3.prototype.mult;\n\n/**\n * Calculate dot product\n * @method dot\n * @param {Vec3} v\n * @return {Number}\n */\nVec3.prototype.dot = function(v){\n return this.x * v.x + this.y * v.y + this.z * v.z;\n};\n\n/**\n * @method isZero\n * @return bool\n */\nVec3.prototype.isZero = function(){\n return this.x===0 && this.y===0 && this.z===0;\n};\n\n/**\n * Make the vector point in the opposite direction.\n * @method negate\n * @param {Vec3} target Optional target to save in\n * @return {Vec3}\n */\nVec3.prototype.negate = function(target){\n target = target || new Vec3();\n target.x = -this.x;\n target.y = -this.y;\n target.z = -this.z;\n return target;\n};\n\n/**\n * Compute two artificial tangents to the vector\n * @method tangents\n * @param {Vec3} t1 Vector object to save the first tangent in\n * @param {Vec3} t2 Vector object to save the second tangent in\n */\nvar Vec3_tangents_n = new Vec3();\nvar Vec3_tangents_randVec = new Vec3();\nVec3.prototype.tangents = function(t1,t2){\n var norm = this.norm();\n if(norm>0.0){\n var n = Vec3_tangents_n;\n var inorm = 1/norm;\n n.set(this.x*inorm,this.y*inorm,this.z*inorm);\n var randVec = Vec3_tangents_randVec;\n if(Math.abs(n.x) < 0.9){\n randVec.set(1,0,0);\n n.cross(randVec,t1);\n } else {\n randVec.set(0,1,0);\n n.cross(randVec,t1);\n }\n n.cross(t1,t2);\n } else {\n // The normal length is zero, make something up\n t1.set(1, 0, 0);\n t2.set(0, 1, 0);\n }\n};\n\n/**\n * Converts to a more readable format\n * @method toString\n * @return string\n */\nVec3.prototype.toString = function(){\n return this.x+\",\"+this.y+\",\"+this.z;\n};\n\n/**\n * Converts to an array\n * @method toArray\n * @return Array\n */\nVec3.prototype.toArray = function(){\n return [this.x, this.y, this.z];\n};\n\n/**\n * Copies value of source to this vector.\n * @method copy\n * @param {Vec3} source\n * @return {Vec3} this\n */\nVec3.prototype.copy = function(source){\n this.x = source.x;\n this.y = source.y;\n this.z = source.z;\n return this;\n};\n\n\n/**\n * Do a linear interpolation between two vectors\n * @method lerp\n * @param {Vec3} v\n * @param {Number} t A number between 0 and 1. 0 will make this function return u, and 1 will make it return v. Numbers in between will generate a vector in between them.\n * @param {Vec3} target\n */\nVec3.prototype.lerp = function(v,t,target){\n var x=this.x, y=this.y, z=this.z;\n target.x = x + (v.x-x)*t;\n target.y = y + (v.y-y)*t;\n target.z = z + (v.z-z)*t;\n};\n\n/**\n * Check if a vector equals is almost equal to another one.\n * @method almostEquals\n * @param {Vec3} v\n * @param {Number} precision\n * @return bool\n */\nVec3.prototype.almostEquals = function(v,precision){\n if(precision===undefined){\n precision = 1e-6;\n }\n if( Math.abs(this.x-v.x)>precision ||\n Math.abs(this.y-v.y)>precision ||\n Math.abs(this.z-v.z)>precision){\n return false;\n }\n return true;\n};\n\n/**\n * Check if a vector is almost zero\n * @method almostZero\n * @param {Number} precision\n */\nVec3.prototype.almostZero = function(precision){\n if(precision===undefined){\n precision = 1e-6;\n }\n if( Math.abs(this.x)>precision ||\n Math.abs(this.y)>precision ||\n Math.abs(this.z)>precision){\n return false;\n }\n return true;\n};\n\nvar antip_neg = new Vec3();\n\n/**\n * Check if the vector is anti-parallel to another vector.\n * @method isAntiparallelTo\n * @param {Vec3} v\n * @param {Number} precision Set to zero for exact comparisons\n * @return {Boolean}\n */\nVec3.prototype.isAntiparallelTo = function(v,precision){\n this.negate(antip_neg);\n return antip_neg.almostEquals(v,precision);\n};\n\n/**\n * Clone the vector\n * @method clone\n * @return {Vec3}\n */\nVec3.prototype.clone = function(){\n return new Vec3(this.x, this.y, this.z);\n};\n},{\"./Mat3\":27}],31:[function(_dereq_,module,exports){\nmodule.exports = Body;\n\nvar EventTarget = _dereq_('../utils/EventTarget');\nvar Shape = _dereq_('../shapes/Shape');\nvar Vec3 = _dereq_('../math/Vec3');\nvar Mat3 = _dereq_('../math/Mat3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar Material = _dereq_('../material/Material');\nvar AABB = _dereq_('../collision/AABB');\nvar Box = _dereq_('../shapes/Box');\n\n/**\n * Base class for all body types.\n * @class Body\n * @constructor\n * @extends EventTarget\n * @param {object} [options]\n * @param {Vec3} [options.position]\n * @param {Vec3} [options.velocity]\n * @param {Vec3} [options.angularVelocity]\n * @param {Quaternion} [options.quaternion]\n * @param {number} [options.mass]\n * @param {Material} [options.material]\n * @param {number} [options.type]\n * @param {number} [options.linearDamping=0.01]\n * @param {number} [options.angularDamping=0.01]\n * @param {boolean} [options.allowSleep=true]\n * @param {number} [options.sleepSpeedLimit=0.1]\n * @param {number} [options.sleepTimeLimit=1]\n * @param {number} [options.collisionFilterGroup=1]\n * @param {number} [options.collisionFilterMask=1]\n * @param {boolean} [options.fixedRotation=false]\n * @param {Body} [options.shape]\n * @example\n * var body = new Body({\n * mass: 1\n * });\n * var shape = new Sphere(1);\n * body.addShape(shape);\n * world.add(body);\n */\nfunction Body(options){\n options = options || {};\n\n EventTarget.apply(this);\n\n this.id = Body.idCounter++;\n\n /**\n * Reference to the world the body is living in\n * @property world\n * @type {World}\n */\n this.world = null;\n\n /**\n * Callback function that is used BEFORE stepping the system. Use it to apply forces, for example. Inside the function, \"this\" will refer to this Body object.\n * @property preStep\n * @type {Function}\n * @deprecated Use World events instead\n */\n this.preStep = null;\n\n /**\n * Callback function that is used AFTER stepping the system. Inside the function, \"this\" will refer to this Body object.\n * @property postStep\n * @type {Function}\n * @deprecated Use World events instead\n */\n this.postStep = null;\n\n this.vlambda = new Vec3();\n\n /**\n * @property {Number} collisionFilterGroup\n */\n this.collisionFilterGroup = typeof(options.collisionFilterGroup) === 'number' ? options.collisionFilterGroup : 1;\n\n /**\n * @property {Number} collisionFilterMask\n */\n this.collisionFilterMask = typeof(options.collisionFilterMask) === 'number' ? options.collisionFilterMask : 1;\n\n /**\n * Whether to produce contact forces when in contact with other bodies. Note that contacts will be generated, but they will be disabled.\n * @property {Number} collisionResponse\n */\n\tthis.collisionResponse = true;\n\n /**\n * @property position\n * @type {Vec3}\n */\n this.position = new Vec3();\n\n if(options.position){\n this.position.copy(options.position);\n }\n\n /**\n * @property {Vec3} previousPosition\n */\n this.previousPosition = new Vec3();\n\n /**\n * Initial position of the body\n * @property initPosition\n * @type {Vec3}\n */\n this.initPosition = new Vec3();\n\n /**\n * @property velocity\n * @type {Vec3}\n */\n this.velocity = new Vec3();\n\n if(options.velocity){\n this.velocity.copy(options.velocity);\n }\n\n /**\n * @property initVelocity\n * @type {Vec3}\n */\n this.initVelocity = new Vec3();\n\n /**\n * Linear force on the body\n * @property force\n * @type {Vec3}\n */\n this.force = new Vec3();\n\n var mass = typeof(options.mass) === 'number' ? options.mass : 0;\n\n /**\n * @property mass\n * @type {Number}\n * @default 0\n */\n this.mass = mass;\n\n /**\n * @property invMass\n * @type {Number}\n */\n this.invMass = mass > 0 ? 1.0 / mass : 0;\n\n /**\n * @property material\n * @type {Material}\n */\n this.material = options.material || null;\n\n /**\n * @property linearDamping\n * @type {Number}\n */\n this.linearDamping = typeof(options.linearDamping) === 'number' ? options.linearDamping : 0.01;\n\n /**\n * One of: Body.DYNAMIC, Body.STATIC and Body.KINEMATIC.\n * @property type\n * @type {Number}\n */\n this.type = (mass <= 0.0 ? Body.STATIC : Body.DYNAMIC);\n if(typeof(options.type) === typeof(Body.STATIC)){\n this.type = options.type;\n }\n\n /**\n * If true, the body will automatically fall to sleep.\n * @property allowSleep\n * @type {Boolean}\n * @default true\n */\n this.allowSleep = typeof(options.allowSleep) !== 'undefined' ? options.allowSleep : true;\n\n /**\n * Current sleep state.\n * @property sleepState\n * @type {Number}\n */\n this.sleepState = 0;\n\n /**\n * If the speed (the norm of the velocity) is smaller than this value, the body is considered sleepy.\n * @property sleepSpeedLimit\n * @type {Number}\n * @default 0.1\n */\n this.sleepSpeedLimit = typeof(options.sleepSpeedLimit) !== 'undefined' ? options.sleepSpeedLimit : 0.1;\n\n /**\n * If the body has been sleepy for this sleepTimeLimit seconds, it is considered sleeping.\n * @property sleepTimeLimit\n * @type {Number}\n * @default 1\n */\n this.sleepTimeLimit = typeof(options.sleepTimeLimit) !== 'undefined' ? options.sleepTimeLimit : 1;\n\n this.timeLastSleepy = 0;\n\n this._wakeUpAfterNarrowphase = false;\n\n\n /**\n * Rotational force on the body, around center of mass\n * @property {Vec3} torque\n */\n this.torque = new Vec3();\n\n /**\n * Orientation of the body\n * @property quaternion\n * @type {Quaternion}\n */\n this.quaternion = new Quaternion();\n\n if(options.quaternion){\n this.quaternion.copy(options.quaternion);\n }\n\n /**\n * @property initQuaternion\n * @type {Quaternion}\n */\n this.initQuaternion = new Quaternion();\n\n /**\n * @property angularVelocity\n * @type {Vec3}\n */\n this.angularVelocity = new Vec3();\n\n if(options.angularVelocity){\n this.angularVelocity.copy(options.angularVelocity);\n }\n\n /**\n * @property initAngularVelocity\n * @type {Vec3}\n */\n this.initAngularVelocity = new Vec3();\n\n this.interpolatedPosition = new Vec3();\n this.interpolatedQuaternion = new Quaternion();\n\n /**\n * @property shapes\n * @type {array}\n */\n this.shapes = [];\n\n /**\n * @property shapeOffsets\n * @type {array}\n */\n this.shapeOffsets = [];\n\n /**\n * @property shapeOrientations\n * @type {array}\n */\n this.shapeOrientations = [];\n\n /**\n * @property inertia\n * @type {Vec3}\n */\n this.inertia = new Vec3();\n\n /**\n * @property {Vec3} invInertia\n */\n this.invInertia = new Vec3();\n\n /**\n * @property {Mat3} invInertiaWorld\n */\n this.invInertiaWorld = new Mat3();\n\n this.invMassSolve = 0;\n\n /**\n * @property {Vec3} invInertiaSolve\n */\n this.invInertiaSolve = new Vec3();\n\n /**\n * @property {Mat3} invInertiaWorldSolve\n */\n this.invInertiaWorldSolve = new Mat3();\n\n /**\n * Set to true if you don't want the body to rotate. Make sure to run .updateMassProperties() after changing this.\n * @property {Boolean} fixedRotation\n * @default false\n */\n this.fixedRotation = typeof(options.fixedRotation) !== \"undefined\" ? options.fixedRotation : false;\n\n /**\n * @property {Number} angularDamping\n */\n this.angularDamping = typeof(options.angularDamping) !== 'undefined' ? options.angularDamping : 0.01;\n\n /**\n * @property aabb\n * @type {AABB}\n */\n this.aabb = new AABB();\n\n /**\n * Indicates if the AABB needs to be updated before use.\n * @property aabbNeedsUpdate\n * @type {Boolean}\n */\n this.aabbNeedsUpdate = true;\n\n this.wlambda = new Vec3();\n\n if(options.shape){\n this.addShape(options.shape);\n }\n\n this.updateMassProperties();\n}\nBody.prototype = new EventTarget();\nBody.prototype.constructor = Body;\n\n/**\n * A dynamic body is fully simulated. 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.\n * @static\n * @property DYNAMIC\n * @type {Number}\n */\nBody.DYNAMIC = 1;\n\n/**\n * A static body does not move during simulation and behaves as if it has infinite mass. Static bodies can be moved manually by setting the position of the body. The velocity of a static body is always zero. Static bodies do not collide with other static or kinematic bodies.\n * @static\n * @property STATIC\n * @type {Number}\n */\nBody.STATIC = 2;\n\n/**\n * A kinematic body moves under simulation according to its velocity. They do not respond to forces. They can be moved manually, but normally a kinematic body is moved by setting its velocity. A kinematic body behaves as if it has infinite mass. Kinematic bodies do not collide with other static or kinematic bodies.\n * @static\n * @property KINEMATIC\n * @type {Number}\n */\nBody.KINEMATIC = 4;\n\n\n\n/**\n * @static\n * @property AWAKE\n * @type {number}\n */\nBody.AWAKE = 0;\n\n/**\n * @static\n * @property SLEEPY\n * @type {number}\n */\nBody.SLEEPY = 1;\n\n/**\n * @static\n * @property SLEEPING\n * @type {number}\n */\nBody.SLEEPING = 2;\n\nBody.idCounter = 0;\n\n/**\n * Wake the body up.\n * @method wakeUp\n */\nBody.prototype.wakeUp = function(){\n var s = this.sleepState;\n this.sleepState = 0;\n if(s === Body.SLEEPING){\n this.dispatchEvent({type:\"wakeup\"});\n }\n};\n\n/**\n * Force body sleep\n * @method sleep\n */\nBody.prototype.sleep = function(){\n this.sleepState = Body.SLEEPING;\n this.velocity.set(0,0,0);\n this.angularVelocity.set(0,0,0);\n};\n\nBody.sleepyEvent = {\n type: \"sleepy\"\n};\n\nBody.sleepEvent = {\n type: \"sleep\"\n};\n\n/**\n * Called every timestep to update internal sleep timer and change sleep state if needed.\n * @method sleepTick\n * @param {Number} time The world time in seconds\n */\nBody.prototype.sleepTick = function(time){\n if(this.allowSleep){\n var sleepState = this.sleepState;\n var speedSquared = this.velocity.norm2() + this.angularVelocity.norm2();\n var speedLimitSquared = Math.pow(this.sleepSpeedLimit,2);\n if(sleepState===Body.AWAKE && speedSquared < speedLimitSquared){\n this.sleepState = Body.SLEEPY; // Sleepy\n this.timeLastSleepy = time;\n this.dispatchEvent(Body.sleepyEvent);\n } else if(sleepState===Body.SLEEPY && speedSquared > speedLimitSquared){\n this.wakeUp(); // Wake up\n } else if(sleepState===Body.SLEEPY && (time - this.timeLastSleepy ) > this.sleepTimeLimit){\n this.sleep(); // Sleeping\n this.dispatchEvent(Body.sleepEvent);\n }\n }\n};\n\n/**\n * If the body is sleeping, it should be immovable / have infinite mass during solve. We solve it by having a separate \"solve mass\".\n * @method updateSolveMassProperties\n */\nBody.prototype.updateSolveMassProperties = function(){\n if(this.sleepState === Body.SLEEPING || this.type === Body.KINEMATIC){\n this.invMassSolve = 0;\n this.invInertiaSolve.setZero();\n this.invInertiaWorldSolve.setZero();\n } else {\n this.invMassSolve = this.invMass;\n this.invInertiaSolve.copy(this.invInertia);\n this.invInertiaWorldSolve.copy(this.invInertiaWorld);\n }\n};\n\n/**\n * Convert a world point to local body frame.\n * @method pointToLocalFrame\n * @param {Vec3} worldPoint\n * @param {Vec3} result\n * @return {Vec3}\n */\nBody.prototype.pointToLocalFrame = function(worldPoint,result){\n var result = result || new Vec3();\n worldPoint.vsub(this.position,result);\n this.quaternion.conjugate().vmult(result,result);\n return result;\n};\n\n/**\n * Convert a world vector to local body frame.\n * @method vectorToLocalFrame\n * @param {Vec3} worldPoint\n * @param {Vec3} result\n * @return {Vec3}\n */\nBody.prototype.vectorToLocalFrame = function(worldVector, result){\n var result = result || new Vec3();\n this.quaternion.conjugate().vmult(worldVector,result);\n return result;\n};\n\n/**\n * Convert a local body point to world frame.\n * @method pointToWorldFrame\n * @param {Vec3} localPoint\n * @param {Vec3} result\n * @return {Vec3}\n */\nBody.prototype.pointToWorldFrame = function(localPoint,result){\n var result = result || new Vec3();\n this.quaternion.vmult(localPoint,result);\n result.vadd(this.position,result);\n return result;\n};\n\n/**\n * Convert a local body point to world frame.\n * @method vectorToWorldFrame\n * @param {Vec3} localVector\n * @param {Vec3} result\n * @return {Vec3}\n */\nBody.prototype.vectorToWorldFrame = function(localVector, result){\n var result = result || new Vec3();\n this.quaternion.vmult(localVector, result);\n return result;\n};\n\nvar tmpVec = new Vec3();\nvar tmpQuat = new Quaternion();\n\n/**\n * Add a shape to the body with a local offset and orientation.\n * @method addShape\n * @param {Shape} shape\n * @param {Vec3} offset\n * @param {Quaternion} quaternion\n * @return {Body} The body object, for chainability.\n */\nBody.prototype.addShape = function(shape, _offset, _orientation){\n var offset = new Vec3();\n var orientation = new Quaternion();\n\n if(_offset){\n offset.copy(_offset);\n }\n if(_orientation){\n orientation.copy(_orientation);\n }\n\n this.shapes.push(shape);\n this.shapeOffsets.push(offset);\n this.shapeOrientations.push(orientation);\n this.updateMassProperties();\n this.updateBoundingRadius();\n\n this.aabbNeedsUpdate = true;\n\n return this;\n};\n\n/**\n * Update the bounding radius of the body. Should be done if any of the shapes are changed.\n * @method updateBoundingRadius\n */\nBody.prototype.updateBoundingRadius = function(){\n var shapes = this.shapes,\n shapeOffsets = this.shapeOffsets,\n N = shapes.length,\n radius = 0;\n\n for(var i=0; i!==N; i++){\n var shape = shapes[i];\n shape.updateBoundingSphereRadius();\n var offset = shapeOffsets[i].norm(),\n r = shape.boundingSphereRadius;\n if(offset + r > radius){\n radius = offset + r;\n }\n }\n\n this.boundingRadius = radius;\n};\n\nvar computeAABB_shapeAABB = new AABB();\n\n/**\n * Updates the .aabb\n * @method computeAABB\n * @todo rename to updateAABB()\n */\nBody.prototype.computeAABB = function(){\n var shapes = this.shapes,\n shapeOffsets = this.shapeOffsets,\n shapeOrientations = this.shapeOrientations,\n N = shapes.length,\n offset = tmpVec,\n orientation = tmpQuat,\n bodyQuat = this.quaternion,\n aabb = this.aabb,\n shapeAABB = computeAABB_shapeAABB;\n\n for(var i=0; i!==N; i++){\n var shape = shapes[i];\n\n // Get shape world quaternion\n shapeOrientations[i].mult(bodyQuat, orientation);\n\n // Get shape world position\n orientation.vmult(shapeOffsets[i], offset);\n offset.vadd(this.position, offset);\n\n // vec2.rotate(offset, shapeOffsets[i], bodyAngle);\n // vec2.add(offset, offset, this.position);\n\n // Get shape AABB\n shape.calculateWorldAABB(offset, orientation, shapeAABB.lowerBound, shapeAABB.upperBound);\n\n if(i === 0){\n aabb.copy(shapeAABB);\n } else {\n aabb.extend(shapeAABB);\n }\n }\n\n this.aabbNeedsUpdate = false;\n};\n\nvar uiw_m1 = new Mat3(),\n uiw_m2 = new Mat3(),\n uiw_m3 = new Mat3();\n\n/**\n * Update .inertiaWorld and .invInertiaWorld\n * @method updateInertiaWorld\n */\nBody.prototype.updateInertiaWorld = function(force){\n var I = this.invInertia;\n if (I.x === I.y && I.y === I.z && !force) {\n // If inertia M = s*I, where I is identity and s a scalar, then\n // R*M*R' = R*(s*I)*R' = s*R*I*R' = s*R*R' = s*I = M\n // where R is the rotation matrix.\n // In other words, we don't have to transform the inertia if all\n // inertia diagonal entries are equal.\n } else {\n var m1 = uiw_m1,\n m2 = uiw_m2,\n m3 = uiw_m3;\n m1.setRotationFromQuaternion(this.quaternion);\n m1.transpose(m2);\n m1.scale(I,m1);\n m1.mmult(m2,this.invInertiaWorld);\n //m3.getTrace(this.invInertiaWorld);\n }\n\n /*\n this.quaternion.vmult(this.inertia,this.inertiaWorld);\n this.quaternion.vmult(this.invInertia,this.invInertiaWorld);\n */\n};\n\n/**\n * Apply force to a world point. This could for example be a point on the Body surface. Applying force this way will add to Body.force and Body.torque.\n * @method applyForce\n * @param {Vec3} force The amount of force to add.\n * @param {Vec3} worldPoint A world point to apply the force on.\n */\nvar Body_applyForce_r = new Vec3();\nvar Body_applyForce_rotForce = new Vec3();\nBody.prototype.applyForce = function(force,worldPoint){\n if(this.type !== Body.DYNAMIC){\n return;\n }\n\n // Compute point position relative to the body center\n var r = Body_applyForce_r;\n worldPoint.vsub(this.position,r);\n\n // Compute produced rotational force\n var rotForce = Body_applyForce_rotForce;\n r.cross(force,rotForce);\n\n // Add linear force\n this.force.vadd(force,this.force);\n\n // Add rotational force\n this.torque.vadd(rotForce,this.torque);\n};\n\n/**\n * Apply force to a local point in the body.\n * @method applyLocalForce\n * @param {Vec3} force The force vector to apply, defined locally in the body frame.\n * @param {Vec3} localPoint A local point in the body to apply the force on.\n */\nvar Body_applyLocalForce_worldForce = new Vec3();\nvar Body_applyLocalForce_worldPoint = new Vec3();\nBody.prototype.applyLocalForce = function(localForce, localPoint){\n if(this.type !== Body.DYNAMIC){\n return;\n }\n\n var worldForce = Body_applyLocalForce_worldForce;\n var worldPoint = Body_applyLocalForce_worldPoint;\n\n // Transform the force vector to world space\n this.vectorToWorldFrame(localForce, worldForce);\n this.pointToWorldFrame(localPoint, worldPoint);\n\n this.applyForce(worldForce, worldPoint);\n};\n\n/**\n * Apply impulse to a world point. This could for example be a point on the Body surface. An impulse is a force added to a body during a short period of time (impulse = force * time). Impulses will be added to Body.velocity and Body.angularVelocity.\n * @method applyImpulse\n * @param {Vec3} impulse The amount of impulse to add.\n * @param {Vec3} worldPoint A world point to apply the force on.\n */\nvar Body_applyImpulse_r = new Vec3();\nvar Body_applyImpulse_velo = new Vec3();\nvar Body_applyImpulse_rotVelo = new Vec3();\nBody.prototype.applyImpulse = function(impulse, worldPoint){\n if(this.type !== Body.DYNAMIC){\n return;\n }\n\n // Compute point position relative to the body center\n var r = Body_applyImpulse_r;\n worldPoint.vsub(this.position,r);\n\n // Compute produced central impulse velocity\n var velo = Body_applyImpulse_velo;\n velo.copy(impulse);\n velo.mult(this.invMass,velo);\n\n // Add linear impulse\n this.velocity.vadd(velo, this.velocity);\n\n // Compute produced rotational impulse velocity\n var rotVelo = Body_applyImpulse_rotVelo;\n r.cross(impulse,rotVelo);\n\n /*\n rotVelo.x *= this.invInertia.x;\n rotVelo.y *= this.invInertia.y;\n rotVelo.z *= this.invInertia.z;\n */\n this.invInertiaWorld.vmult(rotVelo,rotVelo);\n\n // Add rotational Impulse\n this.angularVelocity.vadd(rotVelo, this.angularVelocity);\n};\n\n/**\n * Apply locally-defined impulse to a local point in the body.\n * @method applyLocalImpulse\n * @param {Vec3} force The force vector to apply, defined locally in the body frame.\n * @param {Vec3} localPoint A local point in the body to apply the force on.\n */\nvar Body_applyLocalImpulse_worldImpulse = new Vec3();\nvar Body_applyLocalImpulse_worldPoint = new Vec3();\nBody.prototype.applyLocalImpulse = function(localImpulse, localPoint){\n if(this.type !== Body.DYNAMIC){\n return;\n }\n\n var worldImpulse = Body_applyLocalImpulse_worldImpulse;\n var worldPoint = Body_applyLocalImpulse_worldPoint;\n\n // Transform the force vector to world space\n this.vectorToWorldFrame(localImpulse, worldImpulse);\n this.pointToWorldFrame(localPoint, worldPoint);\n\n this.applyImpulse(worldImpulse, worldPoint);\n};\n\nvar Body_updateMassProperties_halfExtents = new Vec3();\n\n/**\n * Should be called whenever you change the body shape or mass.\n * @method updateMassProperties\n */\nBody.prototype.updateMassProperties = function(){\n var halfExtents = Body_updateMassProperties_halfExtents;\n\n this.invMass = this.mass > 0 ? 1.0 / this.mass : 0;\n var I = this.inertia;\n var fixed = this.fixedRotation;\n\n // Approximate with AABB box\n this.computeAABB();\n halfExtents.set(\n (this.aabb.upperBound.x-this.aabb.lowerBound.x) / 2,\n (this.aabb.upperBound.y-this.aabb.lowerBound.y) / 2,\n (this.aabb.upperBound.z-this.aabb.lowerBound.z) / 2\n );\n Box.calculateInertia(halfExtents, this.mass, I);\n\n this.invInertia.set(\n I.x > 0 && !fixed ? 1.0 / I.x : 0,\n I.y > 0 && !fixed ? 1.0 / I.y : 0,\n I.z > 0 && !fixed ? 1.0 / I.z : 0\n );\n this.updateInertiaWorld(true);\n};\n\n/**\n * Get world velocity of a point in the body.\n * @method getVelocityAtWorldPoint\n * @param {Vec3} worldPoint\n * @param {Vec3} result\n * @return {Vec3} The result vector.\n */\nBody.prototype.getVelocityAtWorldPoint = function(worldPoint, result){\n var r = new Vec3();\n worldPoint.vsub(this.position, r);\n this.angularVelocity.cross(r, result);\n this.velocity.vadd(result, result);\n return result;\n};\n\n},{\"../collision/AABB\":3,\"../material/Material\":25,\"../math/Mat3\":27,\"../math/Quaternion\":28,\"../math/Vec3\":30,\"../shapes/Box\":37,\"../shapes/Shape\":43,\"../utils/EventTarget\":49}],32:[function(_dereq_,module,exports){\nvar Body = _dereq_('./Body');\nvar Vec3 = _dereq_('../math/Vec3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar RaycastResult = _dereq_('../collision/RaycastResult');\nvar Ray = _dereq_('../collision/Ray');\nvar WheelInfo = _dereq_('../objects/WheelInfo');\n\nmodule.exports = RaycastVehicle;\n\n/**\n * Vehicle helper class that casts rays from the wheel positions towards the ground and applies forces.\n * @class RaycastVehicle\n * @constructor\n * @param {object} [options]\n * @param {Body} [options.chassisBody] The car chassis body.\n * @param {integer} [options.indexRightAxis] Axis to use for right. x=0, y=1, z=2\n * @param {integer} [options.indexLeftAxis]\n * @param {integer} [options.indexUpAxis]\n */\nfunction RaycastVehicle(options){\n\n /**\n * @property {Body} chassisBody\n */\n this.chassisBody = options.chassisBody;\n\n /**\n * An array of WheelInfo objects.\n * @property {array} wheelInfos\n */\n this.wheelInfos = [];\n\n /**\n * Will be set to true if the car is sliding.\n * @property {boolean} sliding\n */\n this.sliding = false;\n\n /**\n * @property {World} world\n */\n this.world = null;\n\n /**\n * Index of the right axis, 0=x, 1=y, 2=z\n * @property {integer} indexRightAxis\n * @default 1\n */\n this.indexRightAxis = typeof(options.indexRightAxis) !== 'undefined' ? options.indexRightAxis : 1;\n\n /**\n * Index of the forward axis, 0=x, 1=y, 2=z\n * @property {integer} indexForwardAxis\n * @default 0\n */\n this.indexForwardAxis = typeof(options.indexForwardAxis) !== 'undefined' ? options.indexForwardAxis : 0;\n\n /**\n * Index of the up axis, 0=x, 1=y, 2=z\n * @property {integer} indexUpAxis\n * @default 2\n */\n this.indexUpAxis = typeof(options.indexUpAxis) !== 'undefined' ? options.indexUpAxis : 2;\n}\n\nvar tmpVec1 = new Vec3();\nvar tmpVec2 = new Vec3();\nvar tmpVec3 = new Vec3();\nvar tmpVec4 = new Vec3();\nvar tmpVec5 = new Vec3();\nvar tmpVec6 = new Vec3();\nvar tmpRay = new Ray();\n\n/**\n * Add a wheel. For information about the options, see WheelInfo.\n * @method addWheel\n * @param {object} [options]\n */\nRaycastVehicle.prototype.addWheel = function(options){\n options = options || {};\n\n var info = new WheelInfo(options);\n var index = this.wheelInfos.length;\n this.wheelInfos.push(info);\n\n return index;\n};\n\n/**\n * Set the steering value of a wheel.\n * @method setSteeringValue\n * @param {number} value\n * @param {integer} wheelIndex\n */\nRaycastVehicle.prototype.setSteeringValue = function(value, wheelIndex){\n var wheel = this.wheelInfos[wheelIndex];\n wheel.steering = value;\n};\n\nvar torque = new Vec3();\n\n/**\n * Set the wheel force to apply on one of the wheels each time step\n * @method applyEngineForce\n * @param {number} value\n * @param {integer} wheelIndex\n */\nRaycastVehicle.prototype.applyEngineForce = function(value, wheelIndex){\n this.wheelInfos[wheelIndex].engineForce = value;\n};\n\n/**\n * Set the braking force of a wheel\n * @method setBrake\n * @param {number} brake\n * @param {integer} wheelIndex\n */\nRaycastVehicle.prototype.setBrake = function(brake, wheelIndex){\n this.wheelInfos[wheelIndex].brake = brake;\n};\n\n/**\n * Add the vehicle including its constraints to the world.\n * @method addToWorld\n * @param {World} world\n */\nRaycastVehicle.prototype.addToWorld = function(world){\n var constraints = this.constraints;\n world.add(this.chassisBody);\n var that = this;\n this.preStepCallback = function(){\n that.updateVehicle(world.dt);\n };\n world.addEventListener('preStep', this.preStepCallback);\n this.world = world;\n};\n\n/**\n * Get one of the wheel axles, world-oriented.\n * @private\n * @method getVehicleAxisWorld\n * @param {integer} axisIndex\n * @param {Vec3} result\n */\nRaycastVehicle.prototype.getVehicleAxisWorld = function(axisIndex, result){\n result.set(\n axisIndex === 0 ? 1 : 0,\n axisIndex === 1 ? 1 : 0,\n axisIndex === 2 ? 1 : 0\n );\n this.chassisBody.vectorToWorldFrame(result, result);\n};\n\nRaycastVehicle.prototype.updateVehicle = function(timeStep){\n var wheelInfos = this.wheelInfos;\n var numWheels = wheelInfos.length;\n var chassisBody = this.chassisBody;\n\n for (var i = 0; i < numWheels; i++) {\n this.updateWheelTransform(i);\n }\n\n this.currentVehicleSpeedKmHour = 3.6 * chassisBody.velocity.norm();\n\n var forwardWorld = new Vec3();\n this.getVehicleAxisWorld(this.indexForwardAxis, forwardWorld);\n\n if (forwardWorld.dot(chassisBody.velocity) < 0){\n this.currentVehicleSpeedKmHour *= -1;\n }\n\n // simulate suspension\n for (var i = 0; i < numWheels; i++) {\n this.castRay(wheelInfos[i]);\n }\n\n this.updateSuspension(timeStep);\n\n var impulse = new Vec3();\n var relpos = new Vec3();\n for (var i = 0; i < numWheels; i++) {\n //apply suspension force\n var wheel = wheelInfos[i];\n var suspensionForce = wheel.suspensionForce;\n if (suspensionForce > wheel.maxSuspensionForce) {\n suspensionForce = wheel.maxSuspensionForce;\n }\n wheel.raycastResult.hitNormalWorld.scale(suspensionForce * timeStep, impulse);\n\n wheel.raycastResult.hitPointWorld.vsub(chassisBody.position, relpos);\n chassisBody.applyImpulse(impulse, wheel.raycastResult.hitPointWorld/*relpos*/);\n }\n\n this.updateFriction(timeStep);\n\n var hitNormalWorldScaledWithProj = new Vec3();\n var fwd = new Vec3();\n var vel = new Vec3();\n for (i = 0; i < numWheels; i++) {\n var wheel = wheelInfos[i];\n //var relpos = new Vec3();\n //wheel.chassisConnectionPointWorld.vsub(chassisBody.position, relpos);\n chassisBody.getVelocityAtWorldPoint(wheel.chassisConnectionPointWorld, vel);\n\n // Hack to get the rotation in the correct direction\n var m = 1;\n switch(this.indexUpAxis){\n case 1:\n m = -1;\n break;\n }\n\n if (wheel.isInContact) {\n\n this.getVehicleAxisWorld(this.indexForwardAxis, fwd);\n var proj = fwd.dot(wheel.raycastResult.hitNormalWorld);\n wheel.raycastResult.hitNormalWorld.scale(proj, hitNormalWorldScaledWithProj);\n\n fwd.vsub(hitNormalWorldScaledWithProj, fwd);\n\n var proj2 = fwd.dot(vel);\n wheel.deltaRotation = m * proj2 * timeStep / wheel.radius;\n }\n\n if((wheel.sliding || !wheel.isInContact) && wheel.engineForce !== 0 && wheel.useCustomSlidingRotationalSpeed){\n // Apply custom rotation when accelerating and sliding\n wheel.deltaRotation = (wheel.engineForce > 0 ? 1 : -1) * wheel.customSlidingRotationalSpeed * timeStep;\n }\n\n // Lock wheels\n if(Math.abs(wheel.brake) > Math.abs(wheel.engineForce)){\n wheel.deltaRotation = 0;\n }\n\n wheel.rotation += wheel.deltaRotation; // Use the old value\n wheel.deltaRotation *= 0.99; // damping of rotation when not in contact\n }\n};\n\nRaycastVehicle.prototype.updateSuspension = function(deltaTime) {\n var chassisBody = this.chassisBody;\n var chassisMass = chassisBody.mass;\n var wheelInfos = this.wheelInfos;\n var numWheels = wheelInfos.length;\n\n for (var w_it = 0; w_it < numWheels; w_it++){\n var wheel = wheelInfos[w_it];\n\n if (wheel.isInContact){\n var force;\n\n // Spring\n var susp_length = wheel.suspensionRestLength;\n var current_length = wheel.suspensionLength;\n var length_diff = (susp_length - current_length);\n\n force = wheel.suspensionStiffness * length_diff * wheel.clippedInvContactDotSuspension;\n\n // Damper\n var projected_rel_vel = wheel.suspensionRelativeVelocity;\n var susp_damping;\n if (projected_rel_vel < 0) {\n susp_damping = wheel.dampingCompression;\n } else {\n susp_damping = wheel.dampingRelaxation;\n }\n force -= susp_damping * projected_rel_vel;\n\n wheel.suspensionForce = force * chassisMass;\n if (wheel.suspensionForce < 0) {\n wheel.suspensionForce = 0;\n }\n } else {\n wheel.suspensionForce = 0;\n }\n }\n};\n\n/**\n * Remove the vehicle including its constraints from the world.\n * @method removeFromWorld\n * @param {World} world\n */\nRaycastVehicle.prototype.removeFromWorld = function(world){\n var constraints = this.constraints;\n world.remove(this.chassisBody);\n world.removeEventListener('preStep', this.preStepCallback);\n this.world = null;\n};\n\nvar castRay_rayvector = new Vec3();\nvar castRay_target = new Vec3();\nRaycastVehicle.prototype.castRay = function(wheel) {\n var rayvector = castRay_rayvector;\n var target = castRay_target;\n\n this.updateWheelTransformWorld(wheel);\n var chassisBody = this.chassisBody;\n\n var depth = -1;\n\n var raylen = wheel.suspensionRestLength + wheel.radius;\n\n wheel.directionWorld.scale(raylen, rayvector);\n var source = wheel.chassisConnectionPointWorld;\n source.vadd(rayvector, target);\n var raycastResult = wheel.raycastResult;\n\n var param = 0;\n\n raycastResult.reset();\n // Turn off ray collision with the chassis temporarily\n var oldState = chassisBody.collisionResponse;\n chassisBody.collisionResponse = false;\n\n // Cast ray against world\n this.world.rayTest(source, target, raycastResult);\n chassisBody.collisionResponse = oldState;\n\n var object = raycastResult.body;\n\n wheel.raycastResult.groundObject = 0;\n\n if (object) {\n depth = raycastResult.distance;\n wheel.raycastResult.hitNormalWorld = raycastResult.hitNormalWorld;\n wheel.isInContact = true;\n\n var hitDistance = raycastResult.distance;\n wheel.suspensionLength = hitDistance - wheel.radius;\n\n // clamp on max suspension travel\n var minSuspensionLength = wheel.suspensionRestLength - wheel.maxSuspensionTravel;\n var maxSuspensionLength = wheel.suspensionRestLength + wheel.maxSuspensionTravel;\n if (wheel.suspensionLength < minSuspensionLength) {\n wheel.suspensionLength = minSuspensionLength;\n }\n if (wheel.suspensionLength > maxSuspensionLength) {\n wheel.suspensionLength = maxSuspensionLength;\n wheel.raycastResult.reset();\n }\n\n var denominator = wheel.raycastResult.hitNormalWorld.dot(wheel.directionWorld);\n\n var chassis_velocity_at_contactPoint = new Vec3();\n chassisBody.getVelocityAtWorldPoint(wheel.raycastResult.hitPointWorld, chassis_velocity_at_contactPoint);\n\n var projVel = wheel.raycastResult.hitNormalWorld.dot( chassis_velocity_at_contactPoint );\n\n if (denominator >= -0.1) {\n wheel.suspensionRelativeVelocity = 0;\n wheel.clippedInvContactDotSuspension = 1 / 0.1;\n } else {\n var inv = -1 / denominator;\n wheel.suspensionRelativeVelocity = projVel * inv;\n wheel.clippedInvContactDotSuspension = inv;\n }\n\n } else {\n\n //put wheel info as in rest position\n wheel.suspensionLength = wheel.suspensionRestLength + 0 * wheel.maxSuspensionTravel;\n wheel.suspensionRelativeVelocity = 0.0;\n wheel.directionWorld.scale(-1, wheel.raycastResult.hitNormalWorld);\n wheel.clippedInvContactDotSuspension = 1.0;\n }\n\n return depth;\n};\n\nRaycastVehicle.prototype.updateWheelTransformWorld = function(wheel){\n wheel.isInContact = false;\n var chassisBody = this.chassisBody;\n chassisBody.pointToWorldFrame(wheel.chassisConnectionPointLocal, wheel.chassisConnectionPointWorld);\n chassisBody.vectorToWorldFrame(wheel.directionLocal, wheel.directionWorld);\n chassisBody.vectorToWorldFrame(wheel.axleLocal, wheel.axleWorld);\n};\n\n\n/**\n * Update one of the wheel transform.\n * Note when rendering wheels: during each step, wheel transforms are updated BEFORE the chassis; ie. their position becomes invalid after the step. Thus when you render wheels, you must update wheel transforms before rendering them. See raycastVehicle demo for an example.\n * @method updateWheelTransform\n * @param {integer} wheelIndex The wheel index to update.\n */\nRaycastVehicle.prototype.updateWheelTransform = function(wheelIndex){\n var up = tmpVec4;\n var right = tmpVec5;\n var fwd = tmpVec6;\n\n var wheel = this.wheelInfos[wheelIndex];\n this.updateWheelTransformWorld(wheel);\n\n wheel.directionLocal.scale(-1, up);\n right.copy(wheel.axleLocal);\n up.cross(right, fwd);\n fwd.normalize();\n right.normalize();\n\n // Rotate around steering over the wheelAxle\n var steering = wheel.steering;\n var steeringOrn = new Quaternion();\n steeringOrn.setFromAxisAngle(up, steering);\n\n var rotatingOrn = new Quaternion();\n rotatingOrn.setFromAxisAngle(right, wheel.rotation);\n\n // World rotation of the wheel\n var q = wheel.worldTransform.quaternion;\n this.chassisBody.quaternion.mult(steeringOrn, q);\n q.mult(rotatingOrn, q);\n\n q.normalize();\n\n // world position of the wheel\n var p = wheel.worldTransform.position;\n p.copy(wheel.directionWorld);\n p.scale(wheel.suspensionLength, p);\n p.vadd(wheel.chassisConnectionPointWorld, p);\n};\n\nvar directions = [\n new Vec3(1, 0, 0),\n new Vec3(0, 1, 0),\n new Vec3(0, 0, 1)\n];\n\n/**\n * Get the world transform of one of the wheels\n * @method getWheelTransformWorld\n * @param {integer} wheelIndex\n * @return {Transform}\n */\nRaycastVehicle.prototype.getWheelTransformWorld = function(wheelIndex) {\n return this.wheelInfos[wheelIndex].worldTransform;\n};\n\n\nvar updateFriction_surfNormalWS_scaled_proj = new Vec3();\nvar updateFriction_axle = [];\nvar updateFriction_forwardWS = [];\nvar sideFrictionStiffness2 = 1;\nRaycastVehicle.prototype.updateFriction = function(timeStep) {\n var surfNormalWS_scaled_proj = updateFriction_surfNormalWS_scaled_proj;\n\n //calculate the impulse, so that the wheels don't move sidewards\n var wheelInfos = this.wheelInfos;\n var numWheels = wheelInfos.length;\n var chassisBody = this.chassisBody;\n var forwardWS = updateFriction_forwardWS;\n var axle = updateFriction_axle;\n\n var numWheelsOnGround = 0;\n\n for (var i = 0; i < numWheels; i++) {\n var wheel = wheelInfos[i];\n\n var groundObject = wheel.raycastResult.body;\n if (groundObject){\n numWheelsOnGround++;\n }\n\n wheel.sideImpulse = 0;\n wheel.forwardImpulse = 0;\n if(!forwardWS[i]){\n forwardWS[i] = new Vec3();\n }\n if(!axle[i]){\n axle[i] = new Vec3();\n }\n }\n\n for (var i = 0; i < numWheels; i++){\n var wheel = wheelInfos[i];\n\n var groundObject = wheel.raycastResult.body;\n\n if (groundObject) {\n var axlei = axle[i];\n var wheelTrans = this.getWheelTransformWorld(i);\n\n // Get world axle\n wheelTrans.vectorToWorldFrame(directions[this.indexRightAxis], axlei);\n\n var surfNormalWS = wheel.raycastResult.hitNormalWorld;\n var proj = axlei.dot(surfNormalWS);\n surfNormalWS.scale(proj, surfNormalWS_scaled_proj);\n axlei.vsub(surfNormalWS_scaled_proj, axlei);\n axlei.normalize();\n\n surfNormalWS.cross(axlei, forwardWS[i]);\n forwardWS[i].normalize();\n\n wheel.sideImpulse = resolveSingleBilateral(\n chassisBody,\n wheel.raycastResult.hitPointWorld,\n groundObject,\n wheel.raycastResult.hitPointWorld,\n axlei\n );\n\n wheel.sideImpulse *= sideFrictionStiffness2;\n }\n }\n\n var sideFactor = 1;\n var fwdFactor = 0.5;\n\n this.sliding = false;\n for (var i = 0; i < numWheels; i++) {\n var wheel = wheelInfos[i];\n var groundObject = wheel.raycastResult.body;\n\n var rollingFriction = 0;\n\n wheel.slipInfo = 1;\n if (groundObject) {\n var defaultRollingFrictionImpulse = 0;\n var maxImpulse = wheel.brake ? wheel.brake : defaultRollingFrictionImpulse;\n\n // btWheelContactPoint contactPt(chassisBody,groundObject,wheelInfraycastInfo.hitPointWorld,forwardWS[wheel],maxImpulse);\n // rollingFriction = calcRollingFriction(contactPt);\n rollingFriction = calcRollingFriction(chassisBody, groundObject, wheel.raycastResult.hitPointWorld, forwardWS[i], maxImpulse);\n\n rollingFriction += wheel.engineForce * timeStep;\n\n // rollingFriction = 0;\n var factor = maxImpulse / rollingFriction;\n wheel.slipInfo *= factor;\n }\n\n //switch between active rolling (throttle), braking and non-active rolling friction (nthrottle/break)\n\n wheel.forwardImpulse = 0;\n wheel.skidInfo = 1;\n\n if (groundObject) {\n wheel.skidInfo = 1;\n\n var maximp = wheel.suspensionForce * timeStep * wheel.frictionSlip;\n var maximpSide = maximp;\n\n var maximpSquared = maximp * maximpSide;\n\n wheel.forwardImpulse = rollingFriction;//wheelInfo.engineForce* timeStep;\n\n var x = wheel.forwardImpulse * fwdFactor;\n var y = wheel.sideImpulse * sideFactor;\n\n var impulseSquared = x * x + y * y;\n\n wheel.sliding = false;\n if (impulseSquared > maximpSquared) {\n this.sliding = true;\n wheel.sliding = true;\n\n var factor = maximp / Math.sqrt(impulseSquared);\n\n wheel.skidInfo *= factor;\n }\n }\n }\n\n if (this.sliding) {\n for (var i = 0; i < numWheels; i++) {\n var wheel = wheelInfos[i];\n if (wheel.sideImpulse !== 0) {\n if (wheel.skidInfo < 1){\n wheel.forwardImpulse *= wheel.skidInfo;\n wheel.sideImpulse *= wheel.skidInfo;\n }\n }\n }\n }\n\n // apply the impulses\n for (var i = 0; i < numWheels; i++) {\n var wheel = wheelInfos[i];\n\n var rel_pos = new Vec3();\n //wheel.raycastResult.hitPointWorld.vsub(chassisBody.position, rel_pos);\n // cannons applyimpulse is using world coord for the position\n rel_pos.copy(wheel.raycastResult.hitPointWorld);\n\n if (wheel.forwardImpulse !== 0) {\n var impulse = new Vec3();\n forwardWS[i].scale(wheel.forwardImpulse, impulse);\n chassisBody.applyImpulse(impulse, rel_pos);\n }\n\n if (wheel.sideImpulse !== 0){\n var groundObject = wheel.raycastResult.body;\n\n var rel_pos2 = new Vec3();\n //wheel.raycastResult.hitPointWorld.vsub(groundObject.position, rel_pos2);\n rel_pos2.copy(wheel.raycastResult.hitPointWorld);\n var sideImp = new Vec3();\n axle[i].scale(wheel.sideImpulse, sideImp);\n\n // Scale the relative position in the up direction with rollInfluence.\n // If rollInfluence is 1, the impulse will be applied on the hitPoint (easy to roll over), if it is zero it will be applied in the same plane as the center of mass (not easy to roll over).\n chassisBody.pointToLocalFrame(rel_pos, rel_pos);\n rel_pos['xyz'[this.indexUpAxis]] *= wheel.rollInfluence;\n chassisBody.pointToWorldFrame(rel_pos, rel_pos);\n chassisBody.applyImpulse(sideImp, rel_pos);\n\n //apply friction impulse on the ground\n sideImp.scale(-1, sideImp);\n groundObject.applyImpulse(sideImp, rel_pos2);\n }\n }\n};\n\nvar calcRollingFriction_vel1 = new Vec3();\nvar calcRollingFriction_vel2 = new Vec3();\nvar calcRollingFriction_vel = new Vec3();\n\nfunction calcRollingFriction(body0, body1, frictionPosWorld, frictionDirectionWorld, maxImpulse) {\n var j1 = 0;\n var contactPosWorld = frictionPosWorld;\n\n // var rel_pos1 = new Vec3();\n // var rel_pos2 = new Vec3();\n var vel1 = calcRollingFriction_vel1;\n var vel2 = calcRollingFriction_vel2;\n var vel = calcRollingFriction_vel;\n // contactPosWorld.vsub(body0.position, rel_pos1);\n // contactPosWorld.vsub(body1.position, rel_pos2);\n\n body0.getVelocityAtWorldPoint(contactPosWorld, vel1);\n body1.getVelocityAtWorldPoint(contactPosWorld, vel2);\n vel1.vsub(vel2, vel);\n\n var vrel = frictionDirectionWorld.dot(vel);\n\n var denom0 = computeImpulseDenominator(body0, frictionPosWorld, frictionDirectionWorld);\n var denom1 = computeImpulseDenominator(body1, frictionPosWorld, frictionDirectionWorld);\n var relaxation = 1;\n var jacDiagABInv = relaxation / (denom0 + denom1);\n\n // calculate j that moves us to zero relative velocity\n j1 = -vrel * jacDiagABInv;\n\n if (maxImpulse < j1) {\n j1 = maxImpulse;\n }\n if (j1 < -maxImpulse) {\n j1 = -maxImpulse;\n }\n\n return j1;\n}\n\nvar computeImpulseDenominator_r0 = new Vec3();\nvar computeImpulseDenominator_c0 = new Vec3();\nvar computeImpulseDenominator_vec = new Vec3();\nvar computeImpulseDenominator_m = new Vec3();\nfunction computeImpulseDenominator(body, pos, normal) {\n var r0 = computeImpulseDenominator_r0;\n var c0 = computeImpulseDenominator_c0;\n var vec = computeImpulseDenominator_vec;\n var m = computeImpulseDenominator_m;\n\n pos.vsub(body.position, r0);\n r0.cross(normal, c0);\n body.invInertiaWorld.vmult(c0, m);\n m.cross(r0, vec);\n\n return body.invMass + normal.dot(vec);\n}\n\n\nvar resolveSingleBilateral_vel1 = new Vec3();\nvar resolveSingleBilateral_vel2 = new Vec3();\nvar resolveSingleBilateral_vel = new Vec3();\n\n//bilateral constraint between two dynamic objects\nfunction resolveSingleBilateral(body1, pos1, body2, pos2, normal, impulse){\n var normalLenSqr = normal.norm2();\n if (normalLenSqr > 1.1){\n return 0; // no impulse\n }\n // var rel_pos1 = new Vec3();\n // var rel_pos2 = new Vec3();\n // pos1.vsub(body1.position, rel_pos1);\n // pos2.vsub(body2.position, rel_pos2);\n\n var vel1 = resolveSingleBilateral_vel1;\n var vel2 = resolveSingleBilateral_vel2;\n var vel = resolveSingleBilateral_vel;\n body1.getVelocityAtWorldPoint(pos1, vel1);\n body2.getVelocityAtWorldPoint(pos2, vel2);\n\n vel1.vsub(vel2, vel);\n\n var rel_vel = normal.dot(vel);\n\n var contactDamping = 0.2;\n var massTerm = 1 / (body1.invMass + body2.invMass);\n var impulse = - contactDamping * rel_vel * massTerm;\n\n return impulse;\n}\n},{\"../collision/Ray\":9,\"../collision/RaycastResult\":10,\"../math/Quaternion\":28,\"../math/Vec3\":30,\"../objects/WheelInfo\":36,\"./Body\":31}],33:[function(_dereq_,module,exports){\nvar Body = _dereq_('./Body');\nvar Sphere = _dereq_('../shapes/Sphere');\nvar Box = _dereq_('../shapes/Box');\nvar Vec3 = _dereq_('../math/Vec3');\nvar HingeConstraint = _dereq_('../constraints/HingeConstraint');\n\nmodule.exports = RigidVehicle;\n\n/**\n * Simple vehicle helper class with spherical rigid body wheels.\n * @class RigidVehicle\n * @constructor\n * @param {Body} [options.chassisBody]\n */\nfunction RigidVehicle(options){\n this.wheelBodies = [];\n\n /**\n * @property coordinateSystem\n * @type {Vec3}\n */\n this.coordinateSystem = typeof(options.coordinateSystem)==='undefined' ? new Vec3(1, 2, 3) : options.coordinateSystem.clone();\n\n /**\n * @property {Body} chassisBody\n */\n this.chassisBody = options.chassisBody;\n\n if(!this.chassisBody){\n // No chassis body given. Create it!\n var chassisShape = new Box(new Vec3(5, 2, 0.5));\n this.chassisBody = new Body(1, chassisShape);\n }\n\n /**\n * @property constraints\n * @type {Array}\n */\n this.constraints = [];\n\n this.wheelAxes = [];\n this.wheelForces = [];\n}\n\n/**\n * Add a wheel\n * @method addWheel\n * @param {object} options\n * @param {boolean} [options.isFrontWheel]\n * @param {Vec3} [options.position] Position of the wheel, locally in the chassis body.\n * @param {Vec3} [options.direction] Slide direction of the wheel along the suspension.\n * @param {Vec3} [options.axis] Axis of rotation of the wheel, locally defined in the chassis.\n * @param {Body} [options.body] The wheel body.\n */\nRigidVehicle.prototype.addWheel = function(options){\n options = options || {};\n var wheelBody = options.body;\n if(!wheelBody){\n wheelBody = new Body(1, new Sphere(1.2));\n }\n this.wheelBodies.push(wheelBody);\n this.wheelForces.push(0);\n\n // Position constrain wheels\n var zero = new Vec3();\n var position = typeof(options.position) !== 'undefined' ? options.position.clone() : new Vec3();\n\n // Set position locally to the chassis\n var worldPosition = new Vec3();\n this.chassisBody.pointToWorldFrame(position, worldPosition);\n wheelBody.position.set(worldPosition.x, worldPosition.y, worldPosition.z);\n\n // Constrain wheel\n var axis = typeof(options.axis) !== 'undefined' ? options.axis.clone() : new Vec3(0, 1, 0);\n this.wheelAxes.push(axis);\n\n var hingeConstraint = new HingeConstraint(this.chassisBody, wheelBody, {\n pivotA: position,\n axisA: axis,\n pivotB: Vec3.ZERO,\n axisB: axis,\n collideConnected: false\n });\n this.constraints.push(hingeConstraint);\n\n return this.wheelBodies.length - 1;\n};\n\n/**\n * Set the steering value of a wheel.\n * @method setSteeringValue\n * @param {number} value\n * @param {integer} wheelIndex\n * @todo check coordinateSystem\n */\nRigidVehicle.prototype.setSteeringValue = function(value, wheelIndex){\n // Set angle of the hinge axis\n var axis = this.wheelAxes[wheelIndex];\n\n var c = Math.cos(value),\n s = Math.sin(value),\n x = axis.x,\n y = axis.y;\n this.constraints[wheelIndex].axisA.set(\n c*x -s*y,\n s*x +c*y,\n 0\n );\n};\n\n/**\n * Set the target rotational speed of the hinge constraint.\n * @method setMotorSpeed\n * @param {number} value\n * @param {integer} wheelIndex\n */\nRigidVehicle.prototype.setMotorSpeed = function(value, wheelIndex){\n var hingeConstraint = this.constraints[wheelIndex];\n hingeConstraint.enableMotor();\n hingeConstraint.motorTargetVelocity = value;\n};\n\n/**\n * Set the target rotational speed of the hinge constraint.\n * @method disableMotor\n * @param {number} value\n * @param {integer} wheelIndex\n */\nRigidVehicle.prototype.disableMotor = function(wheelIndex){\n var hingeConstraint = this.constraints[wheelIndex];\n hingeConstraint.disableMotor();\n};\n\nvar torque = new Vec3();\n\n/**\n * Set the wheel force to apply on one of the wheels each time step\n * @method setWheelForce\n * @param {number} value\n * @param {integer} wheelIndex\n */\nRigidVehicle.prototype.setWheelForce = function(value, wheelIndex){\n this.wheelForces[wheelIndex] = value;\n};\n\n/**\n * Apply a torque on one of the wheels.\n * @method applyWheelForce\n * @param {number} value\n * @param {integer} wheelIndex\n */\nRigidVehicle.prototype.applyWheelForce = function(value, wheelIndex){\n var axis = this.wheelAxes[wheelIndex];\n var wheelBody = this.wheelBodies[wheelIndex];\n var bodyTorque = wheelBody.torque;\n\n axis.scale(value, torque);\n wheelBody.vectorToWorldFrame(torque, torque);\n bodyTorque.vadd(torque, bodyTorque);\n};\n\n/**\n * Add the vehicle including its constraints to the world.\n * @method addToWorld\n * @param {World} world\n */\nRigidVehicle.prototype.addToWorld = function(world){\n var constraints = this.constraints;\n var bodies = this.wheelBodies.concat([this.chassisBody]);\n\n for (var i = 0; i < bodies.length; i++) {\n world.add(bodies[i]);\n }\n\n for (var i = 0; i < constraints.length; i++) {\n world.addConstraint(constraints[i]);\n }\n\n world.addEventListener('preStep', this._update.bind(this));\n};\n\nRigidVehicle.prototype._update = function(){\n var wheelForces = this.wheelForces;\n for (var i = 0; i < wheelForces.length; i++) {\n this.applyWheelForce(wheelForces[i], i);\n }\n};\n\n/**\n * Remove the vehicle including its constraints from the world.\n * @method removeFromWorld\n * @param {World} world\n */\nRigidVehicle.prototype.removeFromWorld = function(world){\n var constraints = this.constraints;\n var bodies = this.wheelBodies.concat([this.chassisBody]);\n\n for (var i = 0; i < bodies.length; i++) {\n world.remove(bodies[i]);\n }\n\n for (var i = 0; i < constraints.length; i++) {\n world.removeConstraint(constraints[i]);\n }\n};\n\nvar worldAxis = new Vec3();\n\n/**\n * Get current rotational velocity of a wheel\n * @method getWheelSpeed\n * @param {integer} wheelIndex\n */\nRigidVehicle.prototype.getWheelSpeed = function(wheelIndex){\n var axis = this.wheelAxes[wheelIndex];\n var wheelBody = this.wheelBodies[wheelIndex];\n var w = wheelBody.angularVelocity;\n this.chassisBody.vectorToWorldFrame(axis, worldAxis);\n return w.dot(worldAxis);\n};\n\n},{\"../constraints/HingeConstraint\":15,\"../math/Vec3\":30,\"../shapes/Box\":37,\"../shapes/Sphere\":44,\"./Body\":31}],34:[function(_dereq_,module,exports){\nmodule.exports = SPHSystem;\n\nvar Shape = _dereq_('../shapes/Shape');\nvar Vec3 = _dereq_('../math/Vec3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar Particle = _dereq_('../shapes/Particle');\nvar Body = _dereq_('../objects/Body');\nvar Material = _dereq_('../material/Material');\n\n/**\n * Smoothed-particle hydrodynamics system\n * @class SPHSystem\n * @constructor\n */\nfunction SPHSystem(){\n this.particles = [];\n\t\n /**\n * Density of the system (kg/m3).\n * @property {number} density\n */\n this.density = 1;\n\t\n /**\n * Distance below which two particles are considered to be neighbors.\n * It should be adjusted so there are about 15-20 neighbor particles within this radius.\n * @property {number} smoothingRadius\n */\n this.smoothingRadius = 1;\n this.speedOfSound = 1;\n\t\n /**\n * Viscosity of the system.\n * @property {number} viscosity\n */\n this.viscosity = 0.01;\n this.eps = 0.000001;\n\n // Stuff Computed per particle\n this.pressures = [];\n this.densities = [];\n this.neighbors = [];\n}\n\n/**\n * Add a particle to the system.\n * @method add\n * @param {Body} particle\n */\nSPHSystem.prototype.add = function(particle){\n this.particles.push(particle);\n if(this.neighbors.length < this.particles.length){\n this.neighbors.push([]);\n }\n};\n\n/**\n * Remove a particle from the system.\n * @method remove\n * @param {Body} particle\n */\nSPHSystem.prototype.remove = function(particle){\n var idx = this.particles.indexOf(particle);\n if(idx !== -1){\n this.particles.splice(idx,1);\n if(this.neighbors.length > this.particles.length){\n this.neighbors.pop();\n }\n }\n};\n\n/**\n * Get neighbors within smoothing volume, save in the array neighbors\n * @method getNeighbors\n * @param {Body} particle\n * @param {Array} neighbors\n */\nvar SPHSystem_getNeighbors_dist = new Vec3();\nSPHSystem.prototype.getNeighbors = function(particle,neighbors){\n var N = this.particles.length,\n id = particle.id,\n R2 = this.smoothingRadius * this.smoothingRadius,\n dist = SPHSystem_getNeighbors_dist;\n for(var i=0; i!==N; i++){\n var p = this.particles[i];\n p.position.vsub(particle.position,dist);\n if(id!==p.id && dist.norm2() < R2){\n neighbors.push(p);\n }\n }\n};\n\n// Temp vectors for calculation\nvar SPHSystem_update_dist = new Vec3(),\n SPHSystem_update_a_pressure = new Vec3(),\n SPHSystem_update_a_visc = new Vec3(),\n SPHSystem_update_gradW = new Vec3(),\n SPHSystem_update_r_vec = new Vec3(),\n SPHSystem_update_u = new Vec3(); // Relative velocity\nSPHSystem.prototype.update = function(){\n var N = this.particles.length,\n dist = SPHSystem_update_dist,\n cs = this.speedOfSound,\n eps = this.eps;\n\n for(var i=0; i!==N; i++){\n var p = this.particles[i]; // Current particle\n var neighbors = this.neighbors[i];\n\n // Get neighbors\n neighbors.length = 0;\n this.getNeighbors(p,neighbors);\n neighbors.push(this.particles[i]); // Add current too\n var numNeighbors = neighbors.length;\n\n // Accumulate density for the particle\n var sum = 0.0;\n for(var j=0; j!==numNeighbors; j++){\n\n //printf(\"Current particle has position %f %f %f\\n\",objects[id].pos.x(),objects[id].pos.y(),objects[id].pos.z());\n p.position.vsub(neighbors[j].position, dist);\n var len = dist.norm();\n\n var weight = this.w(len);\n sum += neighbors[j].mass * weight;\n }\n\n // Save\n this.densities[i] = sum;\n this.pressures[i] = cs * cs * (this.densities[i] - this.density);\n }\n\n // Add forces\n\n // Sum to these accelerations\n var a_pressure= SPHSystem_update_a_pressure;\n var a_visc = SPHSystem_update_a_visc;\n var gradW = SPHSystem_update_gradW;\n var r_vec = SPHSystem_update_r_vec;\n var u = SPHSystem_update_u;\n\n for(var i=0; i!==N; i++){\n\n var particle = this.particles[i];\n\n a_pressure.set(0,0,0);\n a_visc.set(0,0,0);\n\n // Init vars\n var Pij;\n var nabla;\n var Vij;\n\n // Sum up for all other neighbors\n var neighbors = this.neighbors[i];\n var numNeighbors = neighbors.length;\n\n //printf(\"Neighbors: \");\n for(var j=0; j!==numNeighbors; j++){\n\n var neighbor = neighbors[j];\n //printf(\"%d \",nj);\n\n // Get r once for all..\n particle.position.vsub(neighbor.position,r_vec);\n var r = r_vec.norm();\n\n // Pressure contribution\n Pij = -neighbor.mass * (this.pressures[i] / (this.densities[i]*this.densities[i] + eps) + this.pressures[j] / (this.densities[j]*this.densities[j] + eps));\n this.gradw(r_vec, gradW);\n // Add to pressure acceleration\n gradW.mult(Pij , gradW);\n a_pressure.vadd(gradW, a_pressure);\n\n // Viscosity contribution\n neighbor.velocity.vsub(particle.velocity, u);\n u.mult( 1.0 / (0.0001+this.densities[i] * this.densities[j]) * this.viscosity * neighbor.mass , u );\n nabla = this.nablaw(r);\n u.mult(nabla,u);\n // Add to viscosity acceleration\n a_visc.vadd( u, a_visc );\n }\n\n // Calculate force\n a_visc.mult(particle.mass, a_visc);\n a_pressure.mult(particle.mass, a_pressure);\n\n // Add force to particles\n particle.force.vadd(a_visc, particle.force);\n particle.force.vadd(a_pressure, particle.force);\n }\n};\n\n// Calculate the weight using the W(r) weightfunction\nSPHSystem.prototype.w = function(r){\n // 315\n var h = this.smoothingRadius;\n return 315.0/(64.0*Math.PI*Math.pow(h,9)) * Math.pow(h*h-r*r,3);\n};\n\n// calculate gradient of the weight function\nSPHSystem.prototype.gradw = function(rVec,resultVec){\n var r = rVec.norm(),\n h = this.smoothingRadius;\n rVec.mult(945.0/(32.0*Math.PI*Math.pow(h,9)) * Math.pow((h*h-r*r),2) , resultVec);\n};\n\n// Calculate nabla(W)\nSPHSystem.prototype.nablaw = function(r){\n var h = this.smoothingRadius;\n var nabla = 945.0/(32.0*Math.PI*Math.pow(h,9)) * (h*h-r*r)*(7*r*r - 3*h*h);\n return nabla;\n};\n\n},{\"../material/Material\":25,\"../math/Quaternion\":28,\"../math/Vec3\":30,\"../objects/Body\":31,\"../shapes/Particle\":41,\"../shapes/Shape\":43}],35:[function(_dereq_,module,exports){\nvar Vec3 = _dereq_('../math/Vec3');\n\nmodule.exports = Spring;\n\n/**\n * A spring, connecting two bodies.\n *\n * @class Spring\n * @constructor\n * @param {Body} bodyA\n * @param {Body} bodyB\n * @param {Object} [options]\n * @param {number} [options.restLength] A number > 0. Default: 1\n * @param {number} [options.stiffness] A number >= 0. Default: 100\n * @param {number} [options.damping] A number >= 0. Default: 1\n * @param {Vec3} [options.worldAnchorA] Where to hook the spring to body A, in world coordinates.\n * @param {Vec3} [options.worldAnchorB]\n * @param {Vec3} [options.localAnchorA] Where to hook the spring to body A, in local body coordinates.\n * @param {Vec3} [options.localAnchorB]\n */\nfunction Spring(bodyA,bodyB,options){\n options = options || {};\n\n /**\n * Rest length of the spring.\n * @property restLength\n * @type {number}\n */\n this.restLength = typeof(options.restLength) === \"number\" ? options.restLength : 1;\n\n /**\n * Stiffness of the spring.\n * @property stiffness\n * @type {number}\n */\n this.stiffness = options.stiffness || 100;\n\n /**\n * Damping of the spring.\n * @property damping\n * @type {number}\n */\n this.damping = options.damping || 1;\n\n /**\n * First connected body.\n * @property bodyA\n * @type {Body}\n */\n this.bodyA = bodyA;\n\n /**\n * Second connected body.\n * @property bodyB\n * @type {Body}\n */\n this.bodyB = bodyB;\n\n /**\n * Anchor for bodyA in local bodyA coordinates.\n * @property localAnchorA\n * @type {Vec3}\n */\n this.localAnchorA = new Vec3();\n\n /**\n * Anchor for bodyB in local bodyB coordinates.\n * @property localAnchorB\n * @type {Vec3}\n */\n this.localAnchorB = new Vec3();\n\n if(options.localAnchorA){\n this.localAnchorA.copy(options.localAnchorA);\n }\n if(options.localAnchorB){\n this.localAnchorB.copy(options.localAnchorB);\n }\n if(options.worldAnchorA){\n this.setWorldAnchorA(options.worldAnchorA);\n }\n if(options.worldAnchorB){\n this.setWorldAnchorB(options.worldAnchorB);\n }\n}\n\n/**\n * Set the anchor point on body A, using world coordinates.\n * @method setWorldAnchorA\n * @param {Vec3} worldAnchorA\n */\nSpring.prototype.setWorldAnchorA = function(worldAnchorA){\n this.bodyA.pointToLocalFrame(worldAnchorA,this.localAnchorA);\n};\n\n/**\n * Set the anchor point on body B, using world coordinates.\n * @method setWorldAnchorB\n * @param {Vec3} worldAnchorB\n */\nSpring.prototype.setWorldAnchorB = function(worldAnchorB){\n this.bodyB.pointToLocalFrame(worldAnchorB,this.localAnchorB);\n};\n\n/**\n * Get the anchor point on body A, in world coordinates.\n * @method getWorldAnchorA\n * @param {Vec3} result The vector to store the result in.\n */\nSpring.prototype.getWorldAnchorA = function(result){\n this.bodyA.pointToWorldFrame(this.localAnchorA,result);\n};\n\n/**\n * Get the anchor point on body B, in world coordinates.\n * @method getWorldAnchorB\n * @param {Vec3} result The vector to store the result in.\n */\nSpring.prototype.getWorldAnchorB = function(result){\n this.bodyB.pointToWorldFrame(this.localAnchorB,result);\n};\n\nvar applyForce_r = new Vec3(),\n applyForce_r_unit = new Vec3(),\n applyForce_u = new Vec3(),\n applyForce_f = new Vec3(),\n applyForce_worldAnchorA = new Vec3(),\n applyForce_worldAnchorB = new Vec3(),\n applyForce_ri = new Vec3(),\n applyForce_rj = new Vec3(),\n applyForce_ri_x_f = new Vec3(),\n applyForce_rj_x_f = new Vec3(),\n applyForce_tmp = new Vec3();\n\n/**\n * Apply the spring force to the connected bodies.\n * @method applyForce\n */\nSpring.prototype.applyForce = function(){\n var k = this.stiffness,\n d = this.damping,\n l = this.restLength,\n bodyA = this.bodyA,\n bodyB = this.bodyB,\n r = applyForce_r,\n r_unit = applyForce_r_unit,\n u = applyForce_u,\n f = applyForce_f,\n tmp = applyForce_tmp;\n\n var worldAnchorA = applyForce_worldAnchorA,\n worldAnchorB = applyForce_worldAnchorB,\n ri = applyForce_ri,\n rj = applyForce_rj,\n ri_x_f = applyForce_ri_x_f,\n rj_x_f = applyForce_rj_x_f;\n\n // Get world anchors\n this.getWorldAnchorA(worldAnchorA);\n this.getWorldAnchorB(worldAnchorB);\n\n // Get offset points\n worldAnchorA.vsub(bodyA.position,ri);\n worldAnchorB.vsub(bodyB.position,rj);\n\n // Compute distance vector between world anchor points\n worldAnchorB.vsub(worldAnchorA,r);\n var rlen = r.norm();\n r_unit.copy(r);\n r_unit.normalize();\n\n // Compute relative velocity of the anchor points, u\n bodyB.velocity.vsub(bodyA.velocity,u);\n // Add rotational velocity\n\n bodyB.angularVelocity.cross(rj,tmp);\n u.vadd(tmp,u);\n bodyA.angularVelocity.cross(ri,tmp);\n u.vsub(tmp,u);\n\n // F = - k * ( x - L ) - D * ( u )\n r_unit.mult(-k*(rlen-l) - d*u.dot(r_unit), f);\n\n // Add forces to bodies\n bodyA.force.vsub(f,bodyA.force);\n bodyB.force.vadd(f,bodyB.force);\n\n // Angular force\n ri.cross(f,ri_x_f);\n rj.cross(f,rj_x_f);\n bodyA.torque.vsub(ri_x_f,bodyA.torque);\n bodyB.torque.vadd(rj_x_f,bodyB.torque);\n};\n\n},{\"../math/Vec3\":30}],36:[function(_dereq_,module,exports){\nvar Vec3 = _dereq_('../math/Vec3');\nvar Transform = _dereq_('../math/Transform');\nvar RaycastResult = _dereq_('../collision/RaycastResult');\nvar Utils = _dereq_('../utils/Utils');\n\nmodule.exports = WheelInfo;\n\n/**\n * @class WheelInfo\n * @constructor\n * @param {Object} [options]\n *\n * @param {Vec3} [options.chassisConnectionPointLocal]\n * @param {Vec3} [options.chassisConnectionPointWorld]\n * @param {Vec3} [options.directionLocal]\n * @param {Vec3} [options.directionWorld]\n * @param {Vec3} [options.axleLocal]\n * @param {Vec3} [options.axleWorld]\n * @param {number} [options.suspensionRestLength=1]\n * @param {number} [options.suspensionMaxLength=2]\n * @param {number} [options.radius=1]\n * @param {number} [options.suspensionStiffness=100]\n * @param {number} [options.dampingCompression=10]\n * @param {number} [options.dampingRelaxation=10]\n * @param {number} [options.frictionSlip=10000]\n * @param {number} [options.steering=0]\n * @param {number} [options.rotation=0]\n * @param {number} [options.deltaRotation=0]\n * @param {number} [options.rollInfluence=0.01]\n * @param {number} [options.maxSuspensionForce]\n * @param {boolean} [options.isFrontWheel=true]\n * @param {number} [options.clippedInvContactDotSuspension=1]\n * @param {number} [options.suspensionRelativeVelocity=0]\n * @param {number} [options.suspensionForce=0]\n * @param {number} [options.skidInfo=0]\n * @param {number} [options.suspensionLength=0]\n * @param {number} [options.maxSuspensionTravel=1]\n * @param {boolean} [options.useCustomSlidingRotationalSpeed=false]\n * @param {number} [options.customSlidingRotationalSpeed=-0.1]\n */\nfunction WheelInfo(options){\n options = Utils.defaults(options, {\n chassisConnectionPointLocal: new Vec3(),\n chassisConnectionPointWorld: new Vec3(),\n directionLocal: new Vec3(),\n directionWorld: new Vec3(),\n axleLocal: new Vec3(),\n axleWorld: new Vec3(),\n suspensionRestLength: 1,\n suspensionMaxLength: 2,\n radius: 1,\n suspensionStiffness: 100,\n dampingCompression: 10,\n dampingRelaxation: 10,\n frictionSlip: 10000,\n steering: 0,\n rotation: 0,\n deltaRotation: 0,\n rollInfluence: 0.01,\n maxSuspensionForce: Number.MAX_VALUE,\n isFrontWheel: true,\n clippedInvContactDotSuspension: 1,\n suspensionRelativeVelocity: 0,\n suspensionForce: 0,\n skidInfo: 0,\n suspensionLength: 0,\n maxSuspensionTravel: 1,\n useCustomSlidingRotationalSpeed: false,\n customSlidingRotationalSpeed: -0.1\n });\n\n /**\n * Max travel distance of the suspension, in meters.\n * @property {number} maxSuspensionTravel\n */\n this.maxSuspensionTravel = options.maxSuspensionTravel;\n\n /**\n * Speed to apply to the wheel rotation when the wheel is sliding.\n * @property {number} customSlidingRotationalSpeed\n */\n this.customSlidingRotationalSpeed = options.customSlidingRotationalSpeed;\n\n /**\n * If the customSlidingRotationalSpeed should be used.\n * @property {Boolean} useCustomSlidingRotationalSpeed\n */\n this.useCustomSlidingRotationalSpeed = options.useCustomSlidingRotationalSpeed;\n\n /**\n * @property {Boolean} sliding\n */\n this.sliding = false;\n\n /**\n * Connection point, defined locally in the chassis body frame.\n * @property {Vec3} chassisConnectionPointLocal\n */\n this.chassisConnectionPointLocal = options.chassisConnectionPointLocal.clone();\n\n /**\n * @property {Vec3} chassisConnectionPointWorld\n */\n this.chassisConnectionPointWorld = options.chassisConnectionPointWorld.clone();\n\n /**\n * @property {Vec3} directionLocal\n */\n this.directionLocal = options.directionLocal.clone();\n\n /**\n * @property {Vec3} directionWorld\n */\n this.directionWorld = options.directionWorld.clone();\n\n /**\n * @property {Vec3} axleLocal\n */\n this.axleLocal = options.axleLocal.clone();\n\n /**\n * @property {Vec3} axleWorld\n */\n this.axleWorld = options.axleWorld.clone();\n\n /**\n * @property {number} suspensionRestLength\n */\n this.suspensionRestLength = options.suspensionRestLength;\n\n /**\n * @property {number} suspensionMaxLength\n */\n this.suspensionMaxLength = options.suspensionMaxLength;\n\n /**\n * @property {number} radius\n */\n this.radius = options.radius;\n\n /**\n * @property {number} suspensionStiffness\n */\n this.suspensionStiffness = options.suspensionStiffness;\n\n /**\n * @property {number} dampingCompression\n */\n this.dampingCompression = options.dampingCompression;\n\n /**\n * @property {number} dampingRelaxation\n */\n this.dampingRelaxation = options.dampingRelaxation;\n\n /**\n * @property {number} frictionSlip\n */\n this.frictionSlip = options.frictionSlip;\n\n /**\n * @property {number} steering\n */\n this.steering = 0;\n\n /**\n * Rotation value, in radians.\n * @property {number} rotation\n */\n this.rotation = 0;\n\n /**\n * @property {number} deltaRotation\n */\n this.deltaRotation = 0;\n\n /**\n * @property {number} rollInfluence\n */\n this.rollInfluence = options.rollInfluence;\n\n /**\n * @property {number} maxSuspensionForce\n */\n this.maxSuspensionForce = options.maxSuspensionForce;\n\n /**\n * @property {number} engineForce\n */\n this.engineForce = 0;\n\n /**\n * @property {number} brake\n */\n this.brake = 0;\n\n /**\n * @property {number} isFrontWheel\n */\n this.isFrontWheel = options.isFrontWheel;\n\n /**\n * @property {number} clippedInvContactDotSuspension\n */\n this.clippedInvContactDotSuspension = 1;\n\n /**\n * @property {number} suspensionRelativeVelocity\n */\n this.suspensionRelativeVelocity = 0;\n\n /**\n * @property {number} suspensionForce\n */\n this.suspensionForce = 0;\n\n /**\n * @property {number} skidInfo\n */\n this.skidInfo = 0;\n\n /**\n * @property {number} suspensionLength\n */\n this.suspensionLength = 0;\n\n /**\n * @property {number} sideImpulse\n */\n this.sideImpulse = 0;\n\n /**\n * @property {number} forwardImpulse\n */\n this.forwardImpulse = 0;\n\n /**\n * The result from raycasting\n * @property {RaycastResult} raycastResult\n */\n this.raycastResult = new RaycastResult();\n\n /**\n * Wheel world transform\n * @property {Transform} worldTransform\n */\n this.worldTransform = new Transform();\n\n /**\n * @property {boolean} isInContact\n */\n this.isInContact = false;\n}\n\nvar chassis_velocity_at_contactPoint = new Vec3();\nvar relpos = new Vec3();\nvar chassis_velocity_at_contactPoint = new Vec3();\nWheelInfo.prototype.updateWheel = function(chassis){\n var raycastResult = this.raycastResult;\n\n if (this.isInContact){\n var project= raycastResult.hitNormalWorld.dot(raycastResult.directionWorld);\n raycastResult.hitPointWorld.vsub(chassis.position, relpos);\n chassis.getVelocityAtWorldPoint(relpos, chassis_velocity_at_contactPoint);\n var projVel = raycastResult.hitNormalWorld.dot( chassis_velocity_at_contactPoint );\n if (project >= -0.1) {\n this.suspensionRelativeVelocity = 0.0;\n this.clippedInvContactDotSuspension = 1.0 / 0.1;\n } else {\n var inv = -1 / project;\n this.suspensionRelativeVelocity = projVel * inv;\n this.clippedInvContactDotSuspension = inv;\n }\n\n } else {\n // Not in contact : position wheel in a nice (rest length) position\n raycastResult.suspensionLength = this.suspensionRestLength;\n this.suspensionRelativeVelocity = 0.0;\n raycastResult.directionWorld.scale(-1, raycastResult.hitNormalWorld);\n this.clippedInvContactDotSuspension = 1.0;\n }\n};\n},{\"../collision/RaycastResult\":10,\"../math/Transform\":29,\"../math/Vec3\":30,\"../utils/Utils\":53}],37:[function(_dereq_,module,exports){\nmodule.exports = Box;\n\nvar Shape = _dereq_('./Shape');\nvar Vec3 = _dereq_('../math/Vec3');\nvar ConvexPolyhedron = _dereq_('./ConvexPolyhedron');\n\n/**\n * A 3d box shape.\n * @class Box\n * @constructor\n * @param {Vec3} halfExtents\n * @author schteppe\n * @extends Shape\n */\nfunction Box(halfExtents){\n Shape.call(this);\n\n this.type = Shape.types.BOX;\n\n /**\n * @property halfExtents\n * @type {Vec3}\n */\n this.halfExtents = halfExtents;\n\n /**\n * Used by the contact generator to make contacts with other convex polyhedra for example\n * @property convexPolyhedronRepresentation\n * @type {ConvexPolyhedron}\n */\n this.convexPolyhedronRepresentation = null;\n\n this.updateConvexPolyhedronRepresentation();\n this.updateBoundingSphereRadius();\n}\nBox.prototype = new Shape();\nBox.prototype.constructor = Box;\n\n/**\n * Updates the local convex polyhedron representation used for some collisions.\n * @method updateConvexPolyhedronRepresentation\n */\nBox.prototype.updateConvexPolyhedronRepresentation = function(){\n var sx = this.halfExtents.x;\n var sy = this.halfExtents.y;\n var sz = this.halfExtents.z;\n var V = Vec3;\n\n var vertices = [\n new V(-sx,-sy,-sz),\n new V( sx,-sy,-sz),\n new V( sx, sy,-sz),\n new V(-sx, sy,-sz),\n new V(-sx,-sy, sz),\n new V( sx,-sy, sz),\n new V( sx, sy, sz),\n new V(-sx, sy, sz)\n ];\n\n var indices = [\n [3,2,1,0], // -z\n [4,5,6,7], // +z\n [5,4,0,1], // -y\n [2,3,7,6], // +y\n [0,4,7,3], // -x\n [1,2,6,5], // +x\n ];\n\n var axes = [\n new V(0, 0, 1),\n new V(0, 1, 0),\n new V(1, 0, 0)\n ];\n\n var h = new ConvexPolyhedron(vertices, indices);\n this.convexPolyhedronRepresentation = h;\n h.material = this.material;\n};\n\n/**\n * @method calculateLocalInertia\n * @param {Number} mass\n * @param {Vec3} target\n * @return {Vec3}\n */\nBox.prototype.calculateLocalInertia = function(mass,target){\n target = target || new Vec3();\n Box.calculateInertia(this.halfExtents, mass, target);\n return target;\n};\n\nBox.calculateInertia = function(halfExtents,mass,target){\n var e = halfExtents;\n target.x = 1.0 / 12.0 * mass * ( 2*e.y*2*e.y + 2*e.z*2*e.z );\n target.y = 1.0 / 12.0 * mass * ( 2*e.x*2*e.x + 2*e.z*2*e.z );\n target.z = 1.0 / 12.0 * mass * ( 2*e.y*2*e.y + 2*e.x*2*e.x );\n};\n\n/**\n * Get the box 6 side normals\n * @method getSideNormals\n * @param {array} sixTargetVectors An array of 6 vectors, to store the resulting side normals in.\n * @param {Quaternion} quat Orientation to apply to the normal vectors. If not provided, the vectors will be in respect to the local frame.\n * @return {array}\n */\nBox.prototype.getSideNormals = function(sixTargetVectors,quat){\n var sides = sixTargetVectors;\n var ex = this.halfExtents;\n sides[0].set( ex.x, 0, 0);\n sides[1].set( 0, ex.y, 0);\n sides[2].set( 0, 0, ex.z);\n sides[3].set( -ex.x, 0, 0);\n sides[4].set( 0, -ex.y, 0);\n sides[5].set( 0, 0, -ex.z);\n\n if(quat!==undefined){\n for(var i=0; i!==sides.length; i++){\n quat.vmult(sides[i],sides[i]);\n }\n }\n\n return sides;\n};\n\nBox.prototype.volume = function(){\n return 8.0 * this.halfExtents.x * this.halfExtents.y * this.halfExtents.z;\n};\n\nBox.prototype.updateBoundingSphereRadius = function(){\n this.boundingSphereRadius = this.halfExtents.norm();\n};\n\nvar worldCornerTempPos = new Vec3();\nvar worldCornerTempNeg = new Vec3();\nBox.prototype.forEachWorldCorner = function(pos,quat,callback){\n\n var e = this.halfExtents;\n var corners = [[ e.x, e.y, e.z],\n [ -e.x, e.y, e.z],\n [ -e.x, -e.y, e.z],\n [ -e.x, -e.y, -e.z],\n [ e.x, -e.y, -e.z],\n [ e.x, e.y, -e.z],\n [ -e.x, e.y, -e.z],\n [ e.x, -e.y, e.z]];\n for(var i=0; i max.x){\n max.x = x;\n }\n if(y > max.y){\n max.y = y;\n }\n if(z > max.z){\n max.z = z;\n }\n\n if(x < min.x){\n min.x = x;\n }\n if(y < min.y){\n min.y = y;\n }\n if(z < min.z){\n min.z = z;\n }\n }\n\n // Get each axis max\n // min.set(Infinity,Infinity,Infinity);\n // max.set(-Infinity,-Infinity,-Infinity);\n // this.forEachWorldCorner(pos,quat,function(x,y,z){\n // if(x > max.x){\n // max.x = x;\n // }\n // if(y > max.y){\n // max.y = y;\n // }\n // if(z > max.z){\n // max.z = z;\n // }\n\n // if(x < min.x){\n // min.x = x;\n // }\n // if(y < min.y){\n // min.y = y;\n // }\n // if(z < min.z){\n // min.z = z;\n // }\n // });\n};\n\n},{\"../math/Vec3\":30,\"./ConvexPolyhedron\":38,\"./Shape\":43}],38:[function(_dereq_,module,exports){\nmodule.exports = ConvexPolyhedron;\n\nvar Shape = _dereq_('./Shape');\nvar Vec3 = _dereq_('../math/Vec3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar Transform = _dereq_('../math/Transform');\n\n/**\n * A set of polygons describing a convex shape.\n * @class ConvexPolyhedron\n * @constructor\n * @extends Shape\n * @description The shape MUST be convex for the code to work properly. No polygons may be coplanar (contained\n * in the same 3D plane), instead these should be merged into one polygon.\n *\n * @param {array} points An array of Vec3's\n * @param {array} faces Array of integer arrays, describing which vertices that is included in each face.\n *\n * @author qiao / https://github.com/qiao (original author, see https://github.com/qiao/three.js/commit/85026f0c769e4000148a67d45a9e9b9c5108836f)\n * @author schteppe / https://github.com/schteppe\n * @see http://www.altdevblogaday.com/2011/05/13/contact-generation-between-3d-convex-meshes/\n * @see http://bullet.googlecode.com/svn/trunk/src/BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.cpp\n *\n * @todo Move the clipping functions to ContactGenerator?\n * @todo Automatically merge coplanar polygons in constructor.\n */\nfunction ConvexPolyhedron(points, faces, uniqueAxes) {\n var that = this;\n Shape.call(this);\n this.type = Shape.types.CONVEXPOLYHEDRON;\n\n /**\n * Array of Vec3\n * @property vertices\n * @type {Array}\n */\n this.vertices = points||[];\n\n this.worldVertices = []; // World transformed version of .vertices\n this.worldVerticesNeedsUpdate = true;\n\n /**\n * Array of integer arrays, indicating which vertices each face consists of\n * @property faces\n * @type {Array}\n */\n this.faces = faces||[];\n\n /**\n * Array of Vec3\n * @property faceNormals\n * @type {Array}\n */\n this.faceNormals = [];\n this.computeNormals();\n\n this.worldFaceNormalsNeedsUpdate = true;\n this.worldFaceNormals = []; // World transformed version of .faceNormals\n\n /**\n * Array of Vec3\n * @property uniqueEdges\n * @type {Array}\n */\n this.uniqueEdges = [];\n\n /**\n * If given, these locally defined, normalized axes are the only ones being checked when doing separating axis check.\n * @property {Array} uniqueAxes\n */\n this.uniqueAxes = uniqueAxes ? uniqueAxes.slice() : null;\n\n this.computeEdges();\n this.updateBoundingSphereRadius();\n}\nConvexPolyhedron.prototype = new Shape();\nConvexPolyhedron.prototype.constructor = ConvexPolyhedron;\n\nvar computeEdges_tmpEdge = new Vec3();\n/**\n * Computes uniqueEdges\n * @method computeEdges\n */\nConvexPolyhedron.prototype.computeEdges = function(){\n var faces = this.faces;\n var vertices = this.vertices;\n var nv = vertices.length;\n var edges = this.uniqueEdges;\n\n edges.length = 0;\n\n var edge = computeEdges_tmpEdge;\n\n for(var i=0; i !== faces.length; i++){\n var face = faces[i];\n var numVertices = face.length;\n for(var j = 0; j !== numVertices; j++){\n var k = ( j+1 ) % numVertices;\n vertices[face[j]].vsub(vertices[face[k]], edge);\n edge.normalize();\n var found = false;\n for(var p=0; p !== edges.length; p++){\n if (edges[p].almostEquals(edge) || edges[p].almostEquals(edge)){\n found = true;\n break;\n }\n }\n\n if (!found){\n edges.push(edge.clone());\n }\n }\n }\n};\n\n/**\n * Compute the normals of the faces. Will reuse existing Vec3 objects in the .faceNormals array if they exist.\n * @method computeNormals\n */\nConvexPolyhedron.prototype.computeNormals = function(){\n this.faceNormals.length = this.faces.length;\n\n // Generate normals\n for(var i=0; i dmax){\n dmax = d;\n closestFaceB = face;\n }\n }\n var worldVertsB1 = [];\n var polyB = hullB.faces[closestFaceB];\n var numVertices = polyB.length;\n for(var e0=0; e0=0){\n this.clipFaceAgainstHull(separatingNormal,\n posA,\n quatA,\n worldVertsB1,\n minDist,\n maxDist,\n result);\n }\n};\n\n/**\n * Find the separating axis between this hull and another\n * @method findSeparatingAxis\n * @param {ConvexPolyhedron} hullB\n * @param {Vec3} posA\n * @param {Quaternion} quatA\n * @param {Vec3} posB\n * @param {Quaternion} quatB\n * @param {Vec3} target The target vector to save the axis in\n * @return {bool} Returns false if a separation is found, else true\n */\nvar fsa_faceANormalWS3 = new Vec3(),\n fsa_Worldnormal1 = new Vec3(),\n fsa_deltaC = new Vec3(),\n fsa_worldEdge0 = new Vec3(),\n fsa_worldEdge1 = new Vec3(),\n fsa_Cross = new Vec3();\nConvexPolyhedron.prototype.findSeparatingAxis = function(hullB,posA,quatA,posB,quatB,target, faceListA, faceListB){\n var faceANormalWS3 = fsa_faceANormalWS3,\n Worldnormal1 = fsa_Worldnormal1,\n deltaC = fsa_deltaC,\n worldEdge0 = fsa_worldEdge0,\n worldEdge1 = fsa_worldEdge1,\n Cross = fsa_Cross;\n\n var dmin = Number.MAX_VALUE;\n var hullA = this;\n var curPlaneTests=0;\n\n if(!hullA.uniqueAxes){\n\n var numFacesA = faceListA ? faceListA.length : hullA.faces.length;\n\n // Test face normals from hullA\n for(var i=0; i0.0){\n target.negate(target);\n }\n\n return true;\n};\n\nvar maxminA=[], maxminB=[];\n\n/**\n * Test separating axis against two hulls. Both hulls are projected onto the axis and the overlap size is returned if there is one.\n * @method testSepAxis\n * @param {Vec3} axis\n * @param {ConvexPolyhedron} hullB\n * @param {Vec3} posA\n * @param {Quaternion} quatA\n * @param {Vec3} posB\n * @param {Quaternion} quatB\n * @return {number} The overlap depth, or FALSE if no penetration.\n */\nConvexPolyhedron.prototype.testSepAxis = function(axis, hullB, posA, quatA, posB, quatB){\n var hullA=this;\n ConvexPolyhedron.project(hullA, axis, posA, quatA, maxminA);\n ConvexPolyhedron.project(hullB, axis, posB, quatB, maxminB);\n var maxA = maxminA[0];\n var minA = maxminA[1];\n var maxB = maxminB[0];\n var minB = maxminB[1];\n if(maxA= 0, so output intersection\n var newv = new Vec3();\n firstVertex.lerp(lastVertex,\n n_dot_first / (n_dot_first - n_dot_last),\n newv);\n outVertices.push(newv);\n }\n } else {\n if(n_dot_last<0){\n // Start >= 0, end < 0 so output intersection and end\n var newv = new Vec3();\n firstVertex.lerp(lastVertex,\n n_dot_first / (n_dot_first - n_dot_last),\n newv);\n outVertices.push(newv);\n outVertices.push(lastVertex);\n }\n }\n firstVertex = lastVertex;\n n_dot_first = n_dot_last;\n }\n return outVertices;\n};\n\n// Updates .worldVertices and sets .worldVerticesNeedsUpdate to false.\nConvexPolyhedron.prototype.computeWorldVertices = function(position,quat){\n var N = this.vertices.length;\n while(this.worldVertices.length < N){\n this.worldVertices.push( new Vec3() );\n }\n\n var verts = this.vertices,\n worldVerts = this.worldVertices;\n for(var i=0; i!==N; i++){\n quat.vmult( verts[i] , worldVerts[i] );\n position.vadd( worldVerts[i] , worldVerts[i] );\n }\n\n this.worldVerticesNeedsUpdate = false;\n};\n\nvar computeLocalAABB_worldVert = new Vec3();\nConvexPolyhedron.prototype.computeLocalAABB = function(aabbmin,aabbmax){\n var n = this.vertices.length,\n vertices = this.vertices,\n worldVert = computeLocalAABB_worldVert;\n\n aabbmin.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\n aabbmax.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\n\n for(var i=0; i aabbmax.x){\n aabbmax.x = v.x;\n }\n if (v.y < aabbmin.y){\n aabbmin.y = v.y;\n } else if(v.y > aabbmax.y){\n aabbmax.y = v.y;\n }\n if (v.z < aabbmin.z){\n aabbmin.z = v.z;\n } else if(v.z > aabbmax.z){\n aabbmax.z = v.z;\n }\n }\n};\n\n/**\n * Updates .worldVertices and sets .worldVerticesNeedsUpdate to false.\n * @method computeWorldFaceNormals\n * @param {Quaternion} quat\n */\nConvexPolyhedron.prototype.computeWorldFaceNormals = function(quat){\n var N = this.faceNormals.length;\n while(this.worldFaceNormals.length < N){\n this.worldFaceNormals.push( new Vec3() );\n }\n\n var normals = this.faceNormals,\n worldNormals = this.worldFaceNormals;\n for(var i=0; i!==N; i++){\n quat.vmult( normals[i] , worldNormals[i] );\n }\n\n this.worldFaceNormalsNeedsUpdate = false;\n};\n\n/**\n * @method updateBoundingSphereRadius\n */\nConvexPolyhedron.prototype.updateBoundingSphereRadius = function(){\n // Assume points are distributed with local (0,0,0) as center\n var max2 = 0;\n var verts = this.vertices;\n for(var i=0, N=verts.length; i!==N; i++) {\n var norm2 = verts[i].norm2();\n if(norm2 > max2){\n max2 = norm2;\n }\n }\n this.boundingSphereRadius = Math.sqrt(max2);\n};\n\nvar tempWorldVertex = new Vec3();\n\n/**\n * @method calculateWorldAABB\n * @param {Vec3} pos\n * @param {Quaternion} quat\n * @param {Vec3} min\n * @param {Vec3} max\n */\nConvexPolyhedron.prototype.calculateWorldAABB = function(pos,quat,min,max){\n var n = this.vertices.length, verts = this.vertices;\n var minx,miny,minz,maxx,maxy,maxz;\n for(var i=0; i maxx || maxx===undefined){\n maxx = v.x;\n }\n\n if (v.y < miny || miny===undefined){\n miny = v.y;\n } else if(v.y > maxy || maxy===undefined){\n maxy = v.y;\n }\n\n if (v.z < minz || minz===undefined){\n minz = v.z;\n } else if(v.z > maxz || maxz===undefined){\n maxz = v.z;\n }\n }\n min.set(minx,miny,minz);\n max.set(maxx,maxy,maxz);\n};\n\n/**\n * Get approximate convex volume\n * @method volume\n * @return {Number}\n */\nConvexPolyhedron.prototype.volume = function(){\n return 4.0 * Math.PI * this.boundingSphereRadius / 3.0;\n};\n\n/**\n * Get an average of all the vertices positions\n * @method getAveragePointLocal\n * @param {Vec3} target\n * @return {Vec3}\n */\nConvexPolyhedron.prototype.getAveragePointLocal = function(target){\n target = target || new Vec3();\n var n = this.vertices.length,\n verts = this.vertices;\n for(var i=0; i0) || (r1>0 && r2<0)){\n return false; // Encountered some other sign. Exit.\n } else {\n }\n }\n\n // If we got here, all dot products were of the same sign.\n return positiveResult ? 1 : -1;\n};\n\n/**\n * Get max and min dot product of a convex hull at position (pos,quat) projected onto an axis. Results are saved in the array maxmin.\n * @static\n * @method project\n * @param {ConvexPolyhedron} hull\n * @param {Vec3} axis\n * @param {Vec3} pos\n * @param {Quaternion} quat\n * @param {array} result result[0] and result[1] will be set to maximum and minimum, respectively.\n */\nvar project_worldVertex = new Vec3();\nvar project_localAxis = new Vec3();\nvar project_localOrigin = new Vec3();\nConvexPolyhedron.project = function(hull, axis, pos, quat, result){\n var n = hull.vertices.length,\n worldVertex = project_worldVertex,\n localAxis = project_localAxis,\n max = 0,\n min = 0,\n localOrigin = project_localOrigin,\n vs = hull.vertices;\n\n localOrigin.setZero();\n\n // Transform the axis to local\n Transform.vectorToLocalFrame(pos, quat, axis, localAxis);\n Transform.pointToLocalFrame(pos, quat, localOrigin, localOrigin);\n var add = localOrigin.dot(localAxis);\n\n min = max = vs[0].dot(localAxis);\n\n for(var i = 1; i < n; i++){\n var val = vs[i].dot(localAxis);\n\n if(val > max){\n max = val;\n }\n\n if(val < min){\n min = val;\n }\n }\n\n min -= add;\n max -= add;\n\n if(min > max){\n // Inconsistent - swap\n var temp = min;\n min = max;\n max = temp;\n }\n // Output\n result[0] = max;\n result[1] = min;\n};\n\n},{\"../math/Quaternion\":28,\"../math/Transform\":29,\"../math/Vec3\":30,\"./Shape\":43}],39:[function(_dereq_,module,exports){\nmodule.exports = Cylinder;\n\nvar Shape = _dereq_('./Shape');\nvar Vec3 = _dereq_('../math/Vec3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar ConvexPolyhedron = _dereq_('./ConvexPolyhedron');\n\n/**\n * @class Cylinder\n * @constructor\n * @extends ConvexPolyhedron\n * @author schteppe / https://github.com/schteppe\n * @param {Number} radiusTop\n * @param {Number} radiusBottom\n * @param {Number} height\n * @param {Number} numSegments The number of segments to build the cylinder out of\n */\nfunction Cylinder( radiusTop, radiusBottom, height , numSegments ) {\n var N = numSegments,\n verts = [],\n axes = [],\n faces = [],\n bottomface = [],\n topface = [],\n cos = Math.cos,\n sin = Math.sin;\n\n // First bottom point\n verts.push(new Vec3(radiusBottom*cos(0),\n radiusBottom*sin(0),\n -height*0.5));\n bottomface.push(0);\n\n // First top point\n verts.push(new Vec3(radiusTop*cos(0),\n radiusTop*sin(0),\n height*0.5));\n topface.push(1);\n\n for(var i=0; i { convex: ..., offset: ... }\n // for example:\n // _cachedPillars[\"0_2_1\"]\n this._cachedPillars = {};\n}\nHeightfield.prototype = new Shape();\n\n/**\n * Call whenever you change the data array.\n * @method update\n */\nHeightfield.prototype.update = function(){\n this._cachedPillars = {};\n};\n\n/**\n * Update the .minValue property\n * @method updateMinValue\n */\nHeightfield.prototype.updateMinValue = function(){\n var data = this.data;\n var minValue = data[0][0];\n for(var i=0; i !== data.length; i++){\n for(var j=0; j !== data[i].length; j++){\n var v = data[i][j];\n if(v < minValue){\n minValue = v;\n }\n }\n }\n this.minValue = minValue;\n};\n\n/**\n * Update the .maxValue property\n * @method updateMaxValue\n */\nHeightfield.prototype.updateMaxValue = function(){\n var data = this.data;\n var maxValue = data[0][0];\n for(var i=0; i !== data.length; i++){\n for(var j=0; j !== data[i].length; j++){\n var v = data[i][j];\n if(v > maxValue){\n maxValue = v;\n }\n }\n }\n this.maxValue = maxValue;\n};\n\n/**\n * Set the height value at an index. Don't forget to update maxValue and minValue after you're done.\n * @method setHeightValueAtIndex\n * @param {integer} xi\n * @param {integer} yi\n * @param {number} value\n */\nHeightfield.prototype.setHeightValueAtIndex = function(xi, yi, value){\n var data = this.data;\n data[xi][yi] = value;\n\n // Invalidate cache\n this.clearCachedConvexTrianglePillar(xi, yi, false);\n if(xi > 0){\n this.clearCachedConvexTrianglePillar(xi - 1, yi, true);\n this.clearCachedConvexTrianglePillar(xi - 1, yi, false);\n }\n if(yi > 0){\n this.clearCachedConvexTrianglePillar(xi, yi - 1, true);\n this.clearCachedConvexTrianglePillar(xi, yi - 1, false);\n }\n if(yi > 0 && xi > 0){\n this.clearCachedConvexTrianglePillar(xi - 1, yi - 1, true);\n }\n};\n\n/**\n * Get max/min in a rectangle in the matrix data\n * @method getRectMinMax\n * @param {integer} iMinX\n * @param {integer} iMinY\n * @param {integer} iMaxX\n * @param {integer} iMaxY\n * @param {array} [result] An array to store the results in.\n * @return {array} The result array, if it was passed in. Minimum will be at position 0 and max at 1.\n */\nHeightfield.prototype.getRectMinMax = function (iMinX, iMinY, iMaxX, iMaxY, result) {\n result = result || [];\n\n // Get max and min of the data\n var data = this.data,\n max = this.minValue; // Set first value\n for(var i = iMinX; i <= iMaxX; i++){\n for(var j = iMinY; j <= iMaxY; j++){\n var height = data[i][j];\n if(height > max){\n max = height;\n }\n }\n }\n\n result[0] = this.minValue;\n result[1] = max;\n};\n\n/**\n * Get the index of a local position on the heightfield. The indexes indicate the rectangles, so if your terrain is made of N x N height data points, you will have rectangle indexes ranging from 0 to N-1.\n * @method getIndexOfPosition\n * @param {number} x\n * @param {number} y\n * @param {array} result Two-element array\n * @param {boolean} clamp If the position should be clamped to the heightfield edge.\n * @return {boolean}\n */\nHeightfield.prototype.getIndexOfPosition = function (x, y, result, clamp) {\n\n // Get the index of the data points to test against\n var w = this.elementSize;\n var data = this.data;\n var xi = Math.floor(x / w);\n var yi = Math.floor(y / w);\n\n result[0] = xi;\n result[1] = yi;\n\n if(clamp){\n // Clamp index to edges\n if(xi < 0){ xi = 0; }\n if(yi < 0){ yi = 0; }\n if(xi >= data.length - 1){ xi = data.length - 1; }\n if(yi >= data[0].length - 1){ yi = data[0].length - 1; }\n }\n\n // Bail out if we are out of the terrain\n if(xi < 0 || yi < 0 || xi >= data.length-1 || yi >= data[0].length-1){\n return false;\n }\n\n return true;\n};\n\nHeightfield.prototype.getHeightAt = function(x, y, edgeClamp){\n var idx = [];\n this.getIndexOfPosition(x, y, idx, edgeClamp);\n\n // TODO: get upper or lower triangle, then use barycentric interpolation to get the height in the triangle.\n var minmax = [];\n this.getRectMinMax(idx[0], idx[1] + 1, idx[0], idx[1] + 1, minmax);\n\n return (minmax[0] + minmax[1]) / 2; // average\n};\n\nHeightfield.prototype.getCacheConvexTrianglePillarKey = function(xi, yi, getUpperTriangle){\n return xi + '_' + yi + '_' + (getUpperTriangle ? 1 : 0);\n};\n\nHeightfield.prototype.getCachedConvexTrianglePillar = function(xi, yi, getUpperTriangle){\n return this._cachedPillars[this.getCacheConvexTrianglePillarKey(xi, yi, getUpperTriangle)];\n};\n\nHeightfield.prototype.setCachedConvexTrianglePillar = function(xi, yi, getUpperTriangle, convex, offset){\n this._cachedPillars[this.getCacheConvexTrianglePillarKey(xi, yi, getUpperTriangle)] = {\n convex: convex,\n offset: offset\n };\n};\n\nHeightfield.prototype.clearCachedConvexTrianglePillar = function(xi, yi, getUpperTriangle){\n delete this._cachedPillars[this.getCacheConvexTrianglePillarKey(xi, yi, getUpperTriangle)];\n};\n\n/**\n * Get a triangle in the terrain in the form of a triangular convex shape.\n * @method getConvexTrianglePillar\n * @param {integer} i\n * @param {integer} j\n * @param {boolean} getUpperTriangle\n */\nHeightfield.prototype.getConvexTrianglePillar = function(xi, yi, getUpperTriangle){\n var result = this.pillarConvex;\n var offsetResult = this.pillarOffset;\n\n if(this.cacheEnabled){\n var data = this.getCachedConvexTrianglePillar(xi, yi, getUpperTriangle);\n if(data){\n this.pillarConvex = data.convex;\n this.pillarOffset = data.offset;\n return;\n }\n\n result = new ConvexPolyhedron();\n offsetResult = new Vec3();\n\n this.pillarConvex = result;\n this.pillarOffset = offsetResult;\n }\n\n var data = this.data;\n var elementSize = this.elementSize;\n var faces = result.faces;\n\n // Reuse verts if possible\n result.vertices.length = 6;\n for (var i = 0; i < 6; i++) {\n if(!result.vertices[i]){\n result.vertices[i] = new Vec3();\n }\n }\n\n // Reuse faces if possible\n faces.length = 5;\n for (var i = 0; i < 5; i++) {\n if(!faces[i]){\n faces[i] = [];\n }\n }\n\n var verts = result.vertices;\n\n var h = (Math.min(\n data[xi][yi],\n data[xi+1][yi],\n data[xi][yi+1],\n data[xi+1][yi+1]\n ) - this.minValue ) / 2 + this.minValue;\n\n if (!getUpperTriangle) {\n\n // Center of the triangle pillar - all polygons are given relative to this one\n offsetResult.set(\n (xi + 0.25) * elementSize, // sort of center of a triangle\n (yi + 0.25) * elementSize,\n h // vertical center\n );\n\n // Top triangle verts\n verts[0].set(\n -0.25 * elementSize,\n -0.25 * elementSize,\n data[xi][yi] - h\n );\n verts[1].set(\n 0.75 * elementSize,\n -0.25 * elementSize,\n data[xi + 1][yi] - h\n );\n verts[2].set(\n -0.25 * elementSize,\n 0.75 * elementSize,\n data[xi][yi + 1] - h\n );\n\n // bottom triangle verts\n verts[3].set(\n -0.25 * elementSize,\n -0.25 * elementSize,\n -h-1\n );\n verts[4].set(\n 0.75 * elementSize,\n -0.25 * elementSize,\n -h-1\n );\n verts[5].set(\n -0.25 * elementSize,\n 0.75 * elementSize,\n -h-1\n );\n\n // top triangle\n faces[0][0] = 0;\n faces[0][1] = 1;\n faces[0][2] = 2;\n\n // bottom triangle\n faces[1][0] = 5;\n faces[1][1] = 4;\n faces[1][2] = 3;\n\n // -x facing quad\n faces[2][0] = 0;\n faces[2][1] = 2;\n faces[2][2] = 5;\n faces[2][3] = 3;\n\n // -y facing quad\n faces[3][0] = 1;\n faces[3][1] = 0;\n faces[3][2] = 3;\n faces[3][3] = 4;\n\n // +xy facing quad\n faces[4][0] = 4;\n faces[4][1] = 5;\n faces[4][2] = 2;\n faces[4][3] = 1;\n\n\n } else {\n\n // Center of the triangle pillar - all polygons are given relative to this one\n offsetResult.set(\n (xi + 0.75) * elementSize, // sort of center of a triangle\n (yi + 0.75) * elementSize,\n h // vertical center\n );\n\n // Top triangle verts\n verts[0].set(\n 0.25 * elementSize,\n 0.25 * elementSize,\n data[xi + 1][yi + 1] - h\n );\n verts[1].set(\n -0.75 * elementSize,\n 0.25 * elementSize,\n data[xi][yi + 1] - h\n );\n verts[2].set(\n 0.25 * elementSize,\n -0.75 * elementSize,\n data[xi + 1][yi] - h\n );\n\n // bottom triangle verts\n verts[3].set(\n 0.25 * elementSize,\n 0.25 * elementSize,\n - h-1\n );\n verts[4].set(\n -0.75 * elementSize,\n 0.25 * elementSize,\n - h-1\n );\n verts[5].set(\n 0.25 * elementSize,\n -0.75 * elementSize,\n - h-1\n );\n\n // Top triangle\n faces[0][0] = 0;\n faces[0][1] = 1;\n faces[0][2] = 2;\n\n // bottom triangle\n faces[1][0] = 5;\n faces[1][1] = 4;\n faces[1][2] = 3;\n\n // +x facing quad\n faces[2][0] = 2;\n faces[2][1] = 5;\n faces[2][2] = 3;\n faces[2][3] = 0;\n\n // +y facing quad\n faces[3][0] = 3;\n faces[3][1] = 4;\n faces[3][2] = 1;\n faces[3][3] = 0;\n\n // -xy facing quad\n faces[4][0] = 1;\n faces[4][1] = 4;\n faces[4][2] = 5;\n faces[4][3] = 2;\n }\n\n result.computeNormals();\n result.computeEdges();\n result.updateBoundingSphereRadius();\n\n this.setCachedConvexTrianglePillar(xi, yi, getUpperTriangle, result, offsetResult);\n};\n\nHeightfield.prototype.calculateLocalInertia = function(mass, target){\n target = target || new Vec3();\n target.set(0, 0, 0);\n return target;\n};\n\nHeightfield.prototype.volume = function(){\n return Number.MAX_VALUE; // The terrain is infinite\n};\n\nHeightfield.prototype.calculateWorldAABB = function(pos, quat, min, max){\n // TODO: do it properly\n min.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\n max.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\n};\n\nHeightfield.prototype.updateBoundingSphereRadius = function(){\n // Use the bounding box of the min/max values\n var data = this.data,\n s = this.elementSize;\n this.boundingSphereRadius = new Vec3(data.length * s, data[0].length * s, Math.max(Math.abs(this.maxValue), Math.abs(this.minValue))).norm();\n};\n\n},{\"../math/Vec3\":30,\"../utils/Utils\":53,\"./ConvexPolyhedron\":38,\"./Shape\":43}],41:[function(_dereq_,module,exports){\nmodule.exports = Particle;\n\nvar Shape = _dereq_('./Shape');\nvar Vec3 = _dereq_('../math/Vec3');\n\n/**\n * Particle shape.\n * @class Particle\n * @constructor\n * @author schteppe\n * @extends Shape\n */\nfunction Particle(){\n Shape.call(this);\n\n this.type = Shape.types.PARTICLE;\n}\nParticle.prototype = new Shape();\nParticle.prototype.constructor = Particle;\n\n/**\n * @method calculateLocalInertia\n * @param {Number} mass\n * @param {Vec3} target\n * @return {Vec3}\n */\nParticle.prototype.calculateLocalInertia = function(mass,target){\n target = target || new Vec3();\n target.set(0, 0, 0);\n return target;\n};\n\nParticle.prototype.volume = function(){\n return 0;\n};\n\nParticle.prototype.updateBoundingSphereRadius = function(){\n this.boundingSphereRadius = 0;\n};\n\nParticle.prototype.calculateWorldAABB = function(pos,quat,min,max){\n // Get each axis max\n min.copy(pos);\n max.copy(pos);\n};\n\n},{\"../math/Vec3\":30,\"./Shape\":43}],42:[function(_dereq_,module,exports){\nmodule.exports = Plane;\n\nvar Shape = _dereq_('./Shape');\nvar Vec3 = _dereq_('../math/Vec3');\n\n/**\n * A plane, facing in the Z direction. The plane has its surface at z=0 and everything below z=0 is assumed to be solid plane. To make the plane face in some other direction than z, you must put it inside a RigidBody and rotate that body. See the demos.\n * @class Plane\n * @constructor\n * @extends Shape\n * @author schteppe\n */\nfunction Plane(){\n Shape.call(this);\n this.type = Shape.types.PLANE;\n\n // World oriented normal\n this.worldNormal = new Vec3();\n this.worldNormalNeedsUpdate = true;\n\n this.boundingSphereRadius = Number.MAX_VALUE;\n}\nPlane.prototype = new Shape();\nPlane.prototype.constructor = Plane;\n\nPlane.prototype.computeWorldNormal = function(quat){\n var n = this.worldNormal;\n n.set(0,0,1);\n quat.vmult(n,n);\n this.worldNormalNeedsUpdate = false;\n};\n\nPlane.prototype.calculateLocalInertia = function(mass,target){\n target = target || new Vec3();\n return target;\n};\n\nPlane.prototype.volume = function(){\n return Number.MAX_VALUE; // The plane is infinite...\n};\n\nvar tempNormal = new Vec3();\nPlane.prototype.calculateWorldAABB = function(pos, quat, min, max){\n // The plane AABB is infinite, except if the normal is pointing along any axis\n tempNormal.set(0,0,1); // Default plane normal is z\n quat.vmult(tempNormal,tempNormal);\n var maxVal = Number.MAX_VALUE;\n min.set(-maxVal, -maxVal, -maxVal);\n max.set(maxVal, maxVal, maxVal);\n\n if(tempNormal.x === 1){ max.x = pos.x; }\n if(tempNormal.y === 1){ max.y = pos.y; }\n if(tempNormal.z === 1){ max.z = pos.z; }\n\n if(tempNormal.x === -1){ min.x = pos.x; }\n if(tempNormal.y === -1){ min.y = pos.y; }\n if(tempNormal.z === -1){ min.z = pos.z; }\n};\n\nPlane.prototype.updateBoundingSphereRadius = function(){\n this.boundingSphereRadius = Number.MAX_VALUE;\n};\n},{\"../math/Vec3\":30,\"./Shape\":43}],43:[function(_dereq_,module,exports){\nmodule.exports = Shape;\n\nvar Shape = _dereq_('./Shape');\nvar Vec3 = _dereq_('../math/Vec3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar Material = _dereq_('../material/Material');\n\n/**\n * Base class for shapes\n * @class Shape\n * @constructor\n * @author schteppe\n * @todo Should have a mechanism for caching bounding sphere radius instead of calculating it each time\n */\nfunction Shape(){\n\n /**\n * Identifyer of the Shape.\n * @property {number} id\n */\n this.id = Shape.idCounter++;\n\n /**\n * The type of this shape. Must be set to an int > 0 by subclasses.\n * @property type\n * @type {Number}\n * @see Shape.types\n */\n this.type = 0;\n\n /**\n * The local bounding sphere radius of this shape.\n * @property {Number} boundingSphereRadius\n */\n this.boundingSphereRadius = 0;\n\n /**\n * Whether to produce contact forces when in contact with other bodies. Note that contacts will be generated, but they will be disabled.\n * @property {boolean} collisionResponse\n */\n this.collisionResponse = true;\n\n /**\n * @property {Material} material\n */\n this.material = null;\n}\nShape.prototype.constructor = Shape;\n\n/**\n * Computes the bounding sphere radius. The result is stored in the property .boundingSphereRadius\n * @method updateBoundingSphereRadius\n * @return {Number}\n */\nShape.prototype.updateBoundingSphereRadius = function(){\n throw \"computeBoundingSphereRadius() not implemented for shape type \"+this.type;\n};\n\n/**\n * Get the volume of this shape\n * @method volume\n * @return {Number}\n */\nShape.prototype.volume = function(){\n throw \"volume() not implemented for shape type \"+this.type;\n};\n\n/**\n * Calculates the inertia in the local frame for this shape.\n * @method calculateLocalInertia\n * @return {Vec3}\n * @see http://en.wikipedia.org/wiki/List_of_moments_of_inertia\n */\nShape.prototype.calculateLocalInertia = function(mass,target){\n throw \"calculateLocalInertia() not implemented for shape type \"+this.type;\n};\n\nShape.idCounter = 0;\n\n/**\n * The available shape types.\n * @static\n * @property types\n * @type {Object}\n */\nShape.types = {\n SPHERE:1,\n PLANE:2,\n BOX:4,\n COMPOUND:8,\n CONVEXPOLYHEDRON:16,\n HEIGHTFIELD:32,\n PARTICLE:64,\n CYLINDER:128,\n TRIMESH:256\n};\n\n\n},{\"../material/Material\":25,\"../math/Quaternion\":28,\"../math/Vec3\":30,\"./Shape\":43}],44:[function(_dereq_,module,exports){\nmodule.exports = Sphere;\n\nvar Shape = _dereq_('./Shape');\nvar Vec3 = _dereq_('../math/Vec3');\n\n/**\n * Spherical shape\n * @class Sphere\n * @constructor\n * @extends Shape\n * @param {Number} radius The radius of the sphere, a non-negative number.\n * @author schteppe / http://github.com/schteppe\n */\nfunction Sphere(radius){\n Shape.call(this);\n\n /**\n * @property {Number} radius\n */\n this.radius = radius!==undefined ? Number(radius) : 1.0;\n this.type = Shape.types.SPHERE;\n\n if(this.radius < 0){\n throw new Error('The sphere radius cannot be negative.');\n }\n\n this.updateBoundingSphereRadius();\n}\nSphere.prototype = new Shape();\nSphere.prototype.constructor = Sphere;\n\nSphere.prototype.calculateLocalInertia = function(mass,target){\n target = target || new Vec3();\n var I = 2.0*mass*this.radius*this.radius/5.0;\n target.x = I;\n target.y = I;\n target.z = I;\n return target;\n};\n\nSphere.prototype.volume = function(){\n return 4.0 * Math.PI * this.radius / 3.0;\n};\n\nSphere.prototype.updateBoundingSphereRadius = function(){\n this.boundingSphereRadius = this.radius;\n};\n\nSphere.prototype.calculateWorldAABB = function(pos,quat,min,max){\n var r = this.radius;\n var axes = ['x','y','z'];\n for(var i=0; i u.x){\n u.x = v.x;\n }\n\n if(v.y < l.y){\n l.y = v.y;\n } else if(v.y > u.y){\n u.y = v.y;\n }\n\n if(v.z < l.z){\n l.z = v.z;\n } else if(v.z > u.z){\n u.z = v.z;\n }\n }\n};\n\n\n/**\n * Update the .aabb property\n * @method updateAABB\n */\nTrimesh.prototype.updateAABB = function(){\n this.computeLocalAABB(this.aabb);\n};\n\n/**\n * Will update the .boundingSphereRadius property\n * @method updateBoundingSphereRadius\n */\nTrimesh.prototype.updateBoundingSphereRadius = function(){\n // Assume points are distributed with local (0,0,0) as center\n var max2 = 0;\n var vertices = this.vertices;\n var v = new Vec3();\n for(var i=0, N=vertices.length / 3; i !== N; i++) {\n this.getVertex(i, v);\n var norm2 = v.norm2();\n if(norm2 > max2){\n max2 = norm2;\n }\n }\n this.boundingSphereRadius = Math.sqrt(max2);\n};\n\nvar tempWorldVertex = new Vec3();\nvar calculateWorldAABB_frame = new Transform();\nvar calculateWorldAABB_aabb = new AABB();\n\n/**\n * @method calculateWorldAABB\n * @param {Vec3} pos\n * @param {Quaternion} quat\n * @param {Vec3} min\n * @param {Vec3} max\n */\nTrimesh.prototype.calculateWorldAABB = function(pos,quat,min,max){\n /*\n var n = this.vertices.length / 3,\n verts = this.vertices;\n var minx,miny,minz,maxx,maxy,maxz;\n\n var v = tempWorldVertex;\n for(var i=0; i maxx || maxx===undefined){\n maxx = v.x;\n }\n\n if (v.y < miny || miny===undefined){\n miny = v.y;\n } else if(v.y > maxy || maxy===undefined){\n maxy = v.y;\n }\n\n if (v.z < minz || minz===undefined){\n minz = v.z;\n } else if(v.z > maxz || maxz===undefined){\n maxz = v.z;\n }\n }\n min.set(minx,miny,minz);\n max.set(maxx,maxy,maxz);\n */\n\n // Faster approximation using local AABB\n var frame = calculateWorldAABB_frame;\n var result = calculateWorldAABB_aabb;\n frame.position = pos;\n frame.quaternion = quat;\n this.aabb.toWorldFrame(frame, result);\n min.copy(result.lowerBound);\n max.copy(result.upperBound);\n};\n\n/**\n * Get approximate volume\n * @method volume\n * @return {Number}\n */\nTrimesh.prototype.volume = function(){\n return 4.0 * Math.PI * this.boundingSphereRadius / 3.0;\n};\n\n/**\n * Create a Trimesh instance, shaped as a torus.\n * @static\n * @method createTorus\n * @param {number} [radius=1]\n * @param {number} [tube=0.5]\n * @param {number} [radialSegments=8]\n * @param {number} [tubularSegments=6]\n * @param {number} [arc=6.283185307179586]\n * @return {Trimesh} A torus\n */\nTrimesh.createTorus = function (radius, tube, radialSegments, tubularSegments, arc) {\n radius = radius || 1;\n tube = tube || 0.5;\n radialSegments = radialSegments || 8;\n tubularSegments = tubularSegments || 6;\n arc = arc || Math.PI * 2;\n\n var vertices = [];\n var indices = [];\n\n for ( var j = 0; j <= radialSegments; j ++ ) {\n for ( var i = 0; i <= tubularSegments; i ++ ) {\n var u = i / tubularSegments * arc;\n var v = j / radialSegments * Math.PI * 2;\n\n var x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n var y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n var z = tube * Math.sin( v );\n\n vertices.push( x, y, z );\n }\n }\n\n for ( var j = 1; j <= radialSegments; j ++ ) {\n for ( var i = 1; i <= tubularSegments; i ++ ) {\n var a = ( tubularSegments + 1 ) * j + i - 1;\n var b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n var c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n var d = ( tubularSegments + 1 ) * j + i;\n\n indices.push(a, b, d);\n indices.push(b, c, d);\n }\n }\n\n return new Trimesh(vertices, indices);\n};\n\n},{\"../collision/AABB\":3,\"../math/Quaternion\":28,\"../math/Transform\":29,\"../math/Vec3\":30,\"../utils/Octree\":50,\"./Shape\":43}],46:[function(_dereq_,module,exports){\nmodule.exports = GSSolver;\n\nvar Vec3 = _dereq_('../math/Vec3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar Solver = _dereq_('./Solver');\n\n/**\n * Constraint equation Gauss-Seidel solver.\n * @class GSSolver\n * @constructor\n * @todo The spook parameters should be specified for each constraint, not globally.\n * @author schteppe / https://github.com/schteppe\n * @see https://www8.cs.umu.se/kurser/5DV058/VT09/lectures/spooknotes.pdf\n * @extends Solver\n */\nfunction GSSolver(){\n Solver.call(this);\n\n /**\n * The number of solver iterations determines quality of the constraints in the world. The more iterations, the more correct simulation. More iterations need more computations though. If you have a large gravity force in your world, you will need more iterations.\n * @property iterations\n * @type {Number}\n * @todo write more about solver and iterations in the wiki\n */\n this.iterations = 10;\n\n /**\n * When tolerance is reached, the system is assumed to be converged.\n * @property tolerance\n * @type {Number}\n */\n this.tolerance = 1e-7;\n}\nGSSolver.prototype = new Solver();\n\nvar GSSolver_solve_lambda = []; // Just temporary number holders that we want to reuse each solve.\nvar GSSolver_solve_invCs = [];\nvar GSSolver_solve_Bs = [];\nGSSolver.prototype.solve = function(dt,world){\n var iter = 0,\n maxIter = this.iterations,\n tolSquared = this.tolerance*this.tolerance,\n equations = this.equations,\n Neq = equations.length,\n bodies = world.bodies,\n Nbodies = bodies.length,\n h = dt,\n q, B, invC, deltalambda, deltalambdaTot, GWlambda, lambdaj;\n\n // Update solve mass\n if(Neq !== 0){\n for(var i=0; i!==Nbodies; i++){\n bodies[i].updateSolveMassProperties();\n }\n }\n\n // Things that does not change during iteration can be computed once\n var invCs = GSSolver_solve_invCs,\n Bs = GSSolver_solve_Bs,\n lambda = GSSolver_solve_lambda;\n invCs.length = Neq;\n Bs.length = Neq;\n lambda.length = Neq;\n for(var i=0; i!==Neq; i++){\n var c = equations[i];\n lambda[i] = 0.0;\n Bs[i] = c.computeB(h);\n invCs[i] = 1.0 / c.computeC();\n }\n\n if(Neq !== 0){\n\n // Reset vlambda\n for(var i=0; i!==Nbodies; i++){\n var b=bodies[i],\n vlambda=b.vlambda,\n wlambda=b.wlambda;\n vlambda.set(0,0,0);\n if(wlambda){\n wlambda.set(0,0,0);\n }\n }\n\n // Iterate over equations\n for(iter=0; iter!==maxIter; iter++){\n\n // Accumulate the total error for each iteration.\n deltalambdaTot = 0.0;\n\n for(var j=0; j!==Neq; j++){\n\n var c = equations[j];\n\n // Compute iteration\n B = Bs[j];\n invC = invCs[j];\n lambdaj = lambda[j];\n GWlambda = c.computeGWlambda();\n deltalambda = invC * ( B - GWlambda - c.eps * lambdaj );\n\n // Clamp if we are not within the min/max interval\n if(lambdaj + deltalambda < c.minForce){\n deltalambda = c.minForce - lambdaj;\n } else if(lambdaj + deltalambda > c.maxForce){\n deltalambda = c.maxForce - lambdaj;\n }\n lambda[j] += deltalambda;\n\n deltalambdaTot += deltalambda > 0.0 ? deltalambda : -deltalambda; // abs(deltalambda)\n\n c.addToWlambda(deltalambda);\n }\n\n // If the total error is small enough - stop iterate\n if(deltalambdaTot*deltalambdaTot < tolSquared){\n break;\n }\n }\n\n // Add result to velocity\n for(var i=0; i!==Nbodies; i++){\n var b=bodies[i],\n v=b.velocity,\n w=b.angularVelocity;\n v.vadd(b.vlambda, v);\n if(w){\n w.vadd(b.wlambda, w);\n }\n }\n }\n\n return iter;\n};\n\n},{\"../math/Quaternion\":28,\"../math/Vec3\":30,\"./Solver\":47}],47:[function(_dereq_,module,exports){\nmodule.exports = Solver;\n\n/**\n * Constraint equation solver base class.\n * @class Solver\n * @constructor\n * @author schteppe / https://github.com/schteppe\n */\nfunction Solver(){\n /**\n * All equations to be solved\n * @property {Array} equations\n */\n this.equations = [];\n}\n\n/**\n * Should be implemented in subclasses!\n * @method solve\n * @param {Number} dt\n * @param {World} world\n */\nSolver.prototype.solve = function(dt,world){\n // Should return the number of iterations done!\n return 0;\n};\n\n/**\n * Add an equation\n * @method addEquation\n * @param {Equation} eq\n */\nSolver.prototype.addEquation = function(eq){\n if (eq.enabled) {\n this.equations.push(eq);\n }\n};\n\n/**\n * Remove an equation\n * @method removeEquation\n * @param {Equation} eq\n */\nSolver.prototype.removeEquation = function(eq){\n var eqs = this.equations;\n var i = eqs.indexOf(eq);\n if(i !== -1){\n eqs.splice(i,1);\n }\n};\n\n/**\n * Add all equations\n * @method removeAllEquations\n */\nSolver.prototype.removeAllEquations = function(){\n this.equations.length = 0;\n};\n\n\n},{}],48:[function(_dereq_,module,exports){\nmodule.exports = SplitSolver;\n\nvar Vec3 = _dereq_('../math/Vec3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar Solver = _dereq_('./Solver');\nvar Body = _dereq_('../objects/Body');\n\n/**\n * Splits the equations into islands and solves them independently. Can improve performance.\n * @class SplitSolver\n * @constructor\n * @extends Solver\n * @param {Solver} subsolver\n */\nfunction SplitSolver(subsolver){\n Solver.call(this);\n this.iterations = 10;\n this.tolerance = 1e-7;\n this.subsolver = subsolver;\n this.nodes = [];\n this.nodePool = [];\n\n // Create needed nodes, reuse if possible\n while(this.nodePool.length < 128){\n this.nodePool.push(this.createNode());\n }\n}\nSplitSolver.prototype = new Solver();\n\n// Returns the number of subsystems\nvar SplitSolver_solve_nodes = []; // All allocated node objects\nvar SplitSolver_solve_nodePool = []; // All allocated node objects\nvar SplitSolver_solve_eqs = []; // Temp array\nvar SplitSolver_solve_bds = []; // Temp array\nvar SplitSolver_solve_dummyWorld = {bodies:[]}; // Temp object\n\nvar STATIC = Body.STATIC;\nfunction getUnvisitedNode(nodes){\n var Nnodes = nodes.length;\n for(var i=0; i!==Nnodes; i++){\n var node = nodes[i];\n if(!node.visited && !(node.body.type & STATIC)){\n return node;\n }\n }\n return false;\n}\n\nvar queue = [];\nfunction bfs(root,visitFunc,bds,eqs){\n queue.push(root);\n root.visited = true;\n visitFunc(root,bds,eqs);\n while(queue.length) {\n var node = queue.pop();\n // Loop over unvisited child nodes\n var child;\n while((child = getUnvisitedNode(node.children))) {\n child.visited = true;\n visitFunc(child,bds,eqs);\n queue.push(child);\n }\n }\n}\n\nfunction visitFunc(node,bds,eqs){\n bds.push(node.body);\n var Neqs = node.eqs.length;\n for(var i=0; i!==Neqs; i++){\n var eq = node.eqs[i];\n if(eqs.indexOf(eq) === -1){\n eqs.push(eq);\n }\n }\n}\n\nSplitSolver.prototype.createNode = function(){\n return { body:null, children:[], eqs:[], visited:false };\n};\n\n/**\n * Solve the subsystems\n * @method solve\n * @param {Number} dt\n * @param {World} world\n */\nSplitSolver.prototype.solve = function(dt,world){\n var nodes=SplitSolver_solve_nodes,\n nodePool=this.nodePool,\n bodies=world.bodies,\n equations=this.equations,\n Neq=equations.length,\n Nbodies=bodies.length,\n subsolver=this.subsolver;\n\n // Create needed nodes, reuse if possible\n while(nodePool.length < Nbodies){\n nodePool.push(this.createNode());\n }\n nodes.length = Nbodies;\n for (var i = 0; i < Nbodies; i++) {\n nodes[i] = nodePool[i];\n }\n\n // Reset node values\n for(var i=0; i!==Nbodies; i++){\n var node = nodes[i];\n node.body = bodies[i];\n node.children.length = 0;\n node.eqs.length = 0;\n node.visited = false;\n }\n for(var k=0; k!==Neq; k++){\n var eq=equations[k],\n i=bodies.indexOf(eq.bi),\n j=bodies.indexOf(eq.bj),\n ni=nodes[i],\n nj=nodes[j];\n ni.children.push(nj);\n ni.eqs.push(eq);\n nj.children.push(ni);\n nj.eqs.push(eq);\n }\n\n var child, n=0, eqs=SplitSolver_solve_eqs;\n\n subsolver.tolerance = this.tolerance;\n subsolver.iterations = this.iterations;\n\n var dummyWorld = SplitSolver_solve_dummyWorld;\n while((child = getUnvisitedNode(nodes))){\n eqs.length = 0;\n dummyWorld.bodies.length = 0;\n bfs(child, visitFunc, dummyWorld.bodies, eqs);\n\n var Neqs = eqs.length;\n\n eqs = eqs.sort(sortById);\n\n for(var i=0; i!==Neqs; i++){\n subsolver.addEquation(eqs[i]);\n }\n\n var iter = subsolver.solve(dt,dummyWorld);\n subsolver.removeAllEquations();\n n++;\n }\n\n return n;\n};\n\nfunction sortById(a, b){\n return b.id - a.id;\n}\n},{\"../math/Quaternion\":28,\"../math/Vec3\":30,\"../objects/Body\":31,\"./Solver\":47}],49:[function(_dereq_,module,exports){\n/**\n * Base class for objects that dispatches events.\n * @class EventTarget\n * @constructor\n */\nvar EventTarget = function () {\n\n};\n\nmodule.exports = EventTarget;\n\nEventTarget.prototype = {\n constructor: EventTarget,\n\n /**\n * Add an event listener\n * @method addEventListener\n * @param {String} type\n * @param {Function} listener\n * @return {EventTarget} The self object, for chainability.\n */\n addEventListener: function ( type, listener ) {\n if ( this._listeners === undefined ){ this._listeners = {}; }\n var listeners = this._listeners;\n if ( listeners[ type ] === undefined ) {\n listeners[ type ] = [];\n }\n if ( listeners[ type ].indexOf( listener ) === - 1 ) {\n listeners[ type ].push( listener );\n }\n return this;\n },\n\n /**\n * Check if an event listener is added\n * @method hasEventListener\n * @param {String} type\n * @param {Function} listener\n * @return {Boolean}\n */\n hasEventListener: function ( type, listener ) {\n if ( this._listeners === undefined ){ return false; }\n var listeners = this._listeners;\n if ( listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1 ) {\n return true;\n }\n return false;\n },\n\n /**\n * Remove an event listener\n * @method removeEventListener\n * @param {String} type\n * @param {Function} listener\n * @return {EventTarget} The self object, for chainability.\n */\n removeEventListener: function ( type, listener ) {\n if ( this._listeners === undefined ){ return this; }\n var listeners = this._listeners;\n if ( listeners[type] === undefined ){ return this; }\n var index = listeners[ type ].indexOf( listener );\n if ( index !== - 1 ) {\n listeners[ type ].splice( index, 1 );\n }\n return this;\n },\n\n /**\n * Emit an event.\n * @method dispatchEvent\n * @param {Object} event\n * @param {String} event.type\n * @return {EventTarget} The self object, for chainability.\n */\n dispatchEvent: function ( event ) {\n if ( this._listeners === undefined ){ return this; }\n var listeners = this._listeners;\n var listenerArray = listeners[ event.type ];\n if ( listenerArray !== undefined ) {\n event.target = this;\n for ( var i = 0, l = listenerArray.length; i < l; i ++ ) {\n listenerArray[ i ].call( this, event );\n }\n }\n return this;\n }\n};\n\n},{}],50:[function(_dereq_,module,exports){\nvar AABB = _dereq_('../collision/AABB');\nvar Vec3 = _dereq_('../math/Vec3');\n\nmodule.exports = Octree;\n\n/**\n * @class OctreeNode\n * @param {object} [options]\n * @param {Octree} [options.root]\n * @param {AABB} [options.aabb]\n */\nfunction OctreeNode(options){\n options = options || {};\n\n /**\n * The root node\n * @property {OctreeNode} root\n */\n this.root = options.root || null;\n\n /**\n * Boundary of this node\n * @property {AABB} aabb\n */\n this.aabb = options.aabb ? options.aabb.clone() : new AABB();\n\n /**\n * Contained data at the current node level.\n * @property {Array} data\n */\n this.data = [];\n\n /**\n * Children to this node\n * @property {Array} children\n */\n this.children = [];\n}\n\n/**\n * @class Octree\n * @param {AABB} aabb The total AABB of the tree\n * @param {object} [options]\n * @param {number} [options.maxDepth=8]\n * @extends OctreeNode\n */\nfunction Octree(aabb, options){\n options = options || {};\n options.root = null;\n options.aabb = aabb;\n OctreeNode.call(this, options);\n\n /**\n * Maximum subdivision depth\n * @property {number} maxDepth\n */\n this.maxDepth = typeof(options.maxDepth) !== 'undefined' ? options.maxDepth : 8;\n}\nOctree.prototype = new OctreeNode();\n\nOctreeNode.prototype.reset = function(aabb, options){\n this.children.length = this.data.length = 0;\n};\n\n/**\n * Insert data into this node\n * @method insert\n * @param {AABB} aabb\n * @param {object} elementData\n * @return {boolean} True if successful, otherwise false\n */\nOctreeNode.prototype.insert = function(aabb, elementData, level){\n var nodeData = this.data;\n level = level || 0;\n\n // Ignore objects that do not belong in this node\n if (!this.aabb.contains(aabb)){\n return false; // object cannot be added\n }\n\n var children = this.children;\n\n if(level < (this.maxDepth || this.root.maxDepth)){\n // Subdivide if there are no children yet\n var subdivided = false;\n if (!children.length){\n this.subdivide();\n subdivided = true;\n }\n\n // add to whichever node will accept it\n for (var i = 0; i !== 8; i++) {\n if (children[i].insert(aabb, elementData, level + 1)){\n return true;\n }\n }\n\n if(subdivided){\n // No children accepted! Might as well just remove em since they contain none\n children.length = 0;\n }\n }\n\n // Too deep, or children didnt want it. add it in current node\n nodeData.push(elementData);\n\n return true;\n};\n\nvar halfDiagonal = new Vec3();\n\n/**\n * Create 8 equally sized children nodes and put them in the .children array.\n * @method subdivide\n */\nOctreeNode.prototype.subdivide = function() {\n var aabb = this.aabb;\n var l = aabb.lowerBound;\n var u = aabb.upperBound;\n\n var children = this.children;\n\n children.push(\n new OctreeNode({ aabb: new AABB({ lowerBound: new Vec3(0,0,0) }) }),\n new OctreeNode({ aabb: new AABB({ lowerBound: new Vec3(1,0,0) }) }),\n new OctreeNode({ aabb: new AABB({ lowerBound: new Vec3(1,1,0) }) }),\n new OctreeNode({ aabb: new AABB({ lowerBound: new Vec3(1,1,1) }) }),\n new OctreeNode({ aabb: new AABB({ lowerBound: new Vec3(0,1,1) }) }),\n new OctreeNode({ aabb: new AABB({ lowerBound: new Vec3(0,0,1) }) }),\n new OctreeNode({ aabb: new AABB({ lowerBound: new Vec3(1,0,1) }) }),\n new OctreeNode({ aabb: new AABB({ lowerBound: new Vec3(0,1,0) }) })\n );\n\n u.vsub(l, halfDiagonal);\n halfDiagonal.scale(0.5, halfDiagonal);\n\n var root = this.root || this;\n\n for (var i = 0; i !== 8; i++) {\n var child = children[i];\n\n // Set current node as root\n child.root = root;\n\n // Compute bounds\n var lowerBound = child.aabb.lowerBound;\n lowerBound.x *= halfDiagonal.x;\n lowerBound.y *= halfDiagonal.y;\n lowerBound.z *= halfDiagonal.z;\n\n lowerBound.vadd(l, lowerBound);\n\n // Upper bound is always lower bound + halfDiagonal\n lowerBound.vadd(halfDiagonal, child.aabb.upperBound);\n }\n};\n\n/**\n * Get all data, potentially within an AABB\n * @method aabbQuery\n * @param {AABB} aabb\n * @param {array} result\n * @return {array} The \"result\" object\n */\nOctreeNode.prototype.aabbQuery = function(aabb, result) {\n\n var nodeData = this.data;\n\n // abort if the range does not intersect this node\n // if (!this.aabb.overlaps(aabb)){\n // return result;\n // }\n\n // Add objects at this level\n // Array.prototype.push.apply(result, nodeData);\n\n // Add child data\n // @todo unwrap recursion into a queue / loop, that's faster in JS\n var children = this.children;\n\n\n // for (var i = 0, N = this.children.length; i !== N; i++) {\n // children[i].aabbQuery(aabb, result);\n // }\n\n var queue = [this];\n while (queue.length) {\n var node = queue.pop();\n if (node.aabb.overlaps(aabb)){\n Array.prototype.push.apply(result, node.data);\n }\n Array.prototype.push.apply(queue, node.children);\n }\n\n return result;\n};\n\nvar tmpAABB = new AABB();\n\n/**\n * Get all data, potentially intersected by a ray.\n * @method rayQuery\n * @param {Ray} ray\n * @param {Transform} treeTransform\n * @param {array} result\n * @return {array} The \"result\" object\n */\nOctreeNode.prototype.rayQuery = function(ray, treeTransform, result) {\n\n // Use aabb query for now.\n // @todo implement real ray query which needs less lookups\n ray.getAABB(tmpAABB);\n tmpAABB.toLocalFrame(treeTransform, tmpAABB);\n this.aabbQuery(tmpAABB, result);\n\n return result;\n};\n\n/**\n * @method removeEmptyNodes\n */\nOctreeNode.prototype.removeEmptyNodes = function() {\n var queue = [this];\n while (queue.length) {\n var node = queue.pop();\n for (var i = node.children.length - 1; i >= 0; i--) {\n if(!node.children[i].data.length){\n node.children.splice(i, 1);\n }\n }\n Array.prototype.push.apply(queue, node.children);\n }\n};\n\n},{\"../collision/AABB\":3,\"../math/Vec3\":30}],51:[function(_dereq_,module,exports){\nmodule.exports = Pool;\n\n/**\n * For pooling objects that can be reused.\n * @class Pool\n * @constructor\n */\nfunction Pool(){\n /**\n * The pooled objects\n * @property {Array} objects\n */\n this.objects = [];\n\n /**\n * Constructor of the objects\n * @property {mixed} type\n */\n this.type = Object;\n}\n\n/**\n * Release an object after use\n * @method release\n * @param {Object} obj\n */\nPool.prototype.release = function(){\n var Nargs = arguments.length;\n for(var i=0; i!==Nargs; i++){\n this.objects.push(arguments[i]);\n }\n};\n\n/**\n * Get an object\n * @method get\n * @return {mixed}\n */\nPool.prototype.get = function(){\n if(this.objects.length===0){\n return this.constructObject();\n } else {\n return this.objects.pop();\n }\n};\n\n/**\n * Construct an object. Should be implmented in each subclass.\n * @method constructObject\n * @return {mixed}\n */\nPool.prototype.constructObject = function(){\n throw new Error(\"constructObject() not implemented in this Pool subclass yet!\");\n};\n\n},{}],52:[function(_dereq_,module,exports){\nmodule.exports = TupleDictionary;\n\n/**\n * @class TupleDictionary\n * @constructor\n */\nfunction TupleDictionary() {\n\n /**\n * The data storage\n * @property data\n * @type {Object}\n */\n this.data = { keys:[] };\n}\n\n/**\n * @method get\n * @param {Number} i\n * @param {Number} j\n * @return {Number}\n */\nTupleDictionary.prototype.get = function(i, j) {\n if (i > j) {\n // swap\n var temp = j;\n j = i;\n i = temp;\n }\n return this.data[i+'-'+j];\n};\n\n/**\n * @method set\n * @param {Number} i\n * @param {Number} j\n * @param {Number} value\n */\nTupleDictionary.prototype.set = function(i, j, value) {\n if (i > j) {\n var temp = j;\n j = i;\n i = temp;\n }\n var key = i+'-'+j;\n\n // Check if key already exists\n if(!this.get(i,j)){\n this.data.keys.push(key);\n }\n\n this.data[key] = value;\n};\n\n/**\n * @method reset\n */\nTupleDictionary.prototype.reset = function() {\n var data = this.data,\n keys = data.keys;\n while(keys.length > 0){\n var key = keys.pop();\n delete data[key];\n }\n};\n\n},{}],53:[function(_dereq_,module,exports){\nfunction Utils(){}\n\nmodule.exports = Utils;\n\n/**\n * Extend an options object with default values.\n * @static\n * @method defaults\n * @param {object} options The options object. May be falsy: in this case, a new object is created and returned.\n * @param {object} defaults An object containing default values.\n * @return {object} The modified options object.\n */\nUtils.defaults = function(options, defaults){\n options = options || {};\n\n for(var key in defaults){\n if(!(key in options)){\n options[key] = defaults[key];\n }\n }\n\n return options;\n};\n\n},{}],54:[function(_dereq_,module,exports){\nmodule.exports = Vec3Pool;\n\nvar Vec3 = _dereq_('../math/Vec3');\nvar Pool = _dereq_('./Pool');\n\n/**\n * @class Vec3Pool\n * @constructor\n * @extends Pool\n */\nfunction Vec3Pool(){\n Pool.call(this);\n this.type = Vec3;\n}\nVec3Pool.prototype = new Pool();\n\n/**\n * Construct a vector\n * @method constructObject\n * @return {Vec3}\n */\nVec3Pool.prototype.constructObject = function(){\n return new Vec3();\n};\n\n},{\"../math/Vec3\":30,\"./Pool\":51}],55:[function(_dereq_,module,exports){\nmodule.exports = Narrowphase;\n\nvar AABB = _dereq_('../collision/AABB');\nvar Shape = _dereq_('../shapes/Shape');\nvar Ray = _dereq_('../collision/Ray');\nvar Vec3 = _dereq_('../math/Vec3');\nvar Transform = _dereq_('../math/Transform');\nvar ConvexPolyhedron = _dereq_('../shapes/ConvexPolyhedron');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar Solver = _dereq_('../solver/Solver');\nvar Vec3Pool = _dereq_('../utils/Vec3Pool');\nvar ContactEquation = _dereq_('../equations/ContactEquation');\nvar FrictionEquation = _dereq_('../equations/FrictionEquation');\n\n/**\n * Helper class for the World. Generates ContactEquations.\n * @class Narrowphase\n * @constructor\n * @todo Sphere-ConvexPolyhedron contacts\n * @todo Contact reduction\n * @todo should move methods to prototype\n */\nfunction Narrowphase(world){\n\n /**\n * Internal storage of pooled contact points.\n * @property {Array} contactPointPool\n */\n this.contactPointPool = [];\n\n this.frictionEquationPool = [];\n\n this.result = [];\n this.frictionResult = [];\n\n /**\n * Pooled vectors.\n * @property {Vec3Pool} v3pool\n */\n this.v3pool = new Vec3Pool();\n\n this.world = world;\n this.currentContactMaterial = null;\n\n /**\n * @property {Boolean} enableFrictionReduction\n */\n this.enableFrictionReduction = false;\n}\n\n/**\n * Make a contact object, by using the internal pool or creating a new one.\n * @method createContactEquation\n * @return {ContactEquation}\n */\nNarrowphase.prototype.createContactEquation = function(bi, bj, si, sj, rsi, rsj){\n var c;\n if(this.contactPointPool.length){\n c = this.contactPointPool.pop();\n c.bi = bi;\n c.bj = bj;\n } else {\n c = new ContactEquation(bi, bj);\n }\n\n c.enabled = bi.collisionResponse && bj.collisionResponse && si.collisionResponse && sj.collisionResponse;\n\n var cm = this.currentContactMaterial;\n\n c.restitution = cm.restitution;\n\n c.setSpookParams(\n cm.contactEquationStiffness,\n cm.contactEquationRelaxation,\n this.world.dt\n );\n\n var matA = si.material || bi.material;\n var matB = sj.material || bj.material;\n if(matA && matB && matA.restitution >= 0 && matB.restitution >= 0){\n c.restitution = matA.restitution * matB.restitution;\n }\n\n c.si = rsi || si;\n c.sj = rsj || sj;\n\n return c;\n};\n\nNarrowphase.prototype.createFrictionEquationsFromContact = function(contactEquation, outArray){\n var bodyA = contactEquation.bi;\n var bodyB = contactEquation.bj;\n var shapeA = contactEquation.si;\n var shapeB = contactEquation.sj;\n\n var world = this.world;\n var cm = this.currentContactMaterial;\n\n // If friction or restitution were specified in the material, use them\n var friction = cm.friction;\n var matA = shapeA.material || bodyA.material;\n var matB = shapeB.material || bodyB.material;\n if(matA && matB && matA.friction >= 0 && matB.friction >= 0){\n friction = matA.friction * matB.friction;\n }\n\n if(friction > 0){\n\n // Create 2 tangent equations\n var mug = friction * world.gravity.length();\n var reducedMass = (bodyA.invMass + bodyB.invMass);\n if(reducedMass > 0){\n reducedMass = 1/reducedMass;\n }\n var pool = this.frictionEquationPool;\n var c1 = pool.length ? pool.pop() : new FrictionEquation(bodyA,bodyB,mug*reducedMass);\n var c2 = pool.length ? pool.pop() : new FrictionEquation(bodyA,bodyB,mug*reducedMass);\n\n c1.bi = c2.bi = bodyA;\n c1.bj = c2.bj = bodyB;\n c1.minForce = c2.minForce = -mug*reducedMass;\n c1.maxForce = c2.maxForce = mug*reducedMass;\n\n // Copy over the relative vectors\n c1.ri.copy(contactEquation.ri);\n c1.rj.copy(contactEquation.rj);\n c2.ri.copy(contactEquation.ri);\n c2.rj.copy(contactEquation.rj);\n\n // Construct tangents\n contactEquation.ni.tangents(c1.t, c2.t);\n\n // Set spook params\n c1.setSpookParams(cm.frictionEquationStiffness, cm.frictionEquationRelaxation, world.dt);\n c2.setSpookParams(cm.frictionEquationStiffness, cm.frictionEquationRelaxation, world.dt);\n\n c1.enabled = c2.enabled = contactEquation.enabled;\n\n outArray.push(c1, c2);\n\n return true;\n }\n\n return false;\n};\n\nvar averageNormal = new Vec3();\nvar averageContactPointA = new Vec3();\nvar averageContactPointB = new Vec3();\n\n// Take the average N latest contact point on the plane.\nNarrowphase.prototype.createFrictionFromAverage = function(numContacts){\n // The last contactEquation\n var c = this.result[this.result.length - 1];\n\n // Create the result: two \"average\" friction equations\n if (!this.createFrictionEquationsFromContact(c, this.frictionResult) || numContacts === 1) {\n return;\n }\n\n var f1 = this.frictionResult[this.frictionResult.length - 2];\n var f2 = this.frictionResult[this.frictionResult.length - 1];\n\n averageNormal.setZero();\n averageContactPointA.setZero();\n averageContactPointB.setZero();\n\n var bodyA = c.bi;\n var bodyB = c.bj;\n for(var i=0; i!==numContacts; i++){\n c = this.result[this.result.length - 1 - i];\n if(c.bodyA !== bodyA){\n averageNormal.vadd(c.ni, averageNormal); // vec2.add(eq.t, eq.t, c.normalA);\n averageContactPointA.vadd(c.ri, averageContactPointA); // vec2.add(eq.contactPointA, eq.contactPointA, c.contactPointA);\n averageContactPointB.vadd(c.rj, averageContactPointB);\n } else {\n averageNormal.vsub(c.ni, averageNormal); // vec2.sub(eq.t, eq.t, c.normalA);\n averageContactPointA.vadd(c.rj, averageContactPointA); // vec2.add(eq.contactPointA, eq.contactPointA, c.contactPointA);\n averageContactPointB.vadd(c.ri, averageContactPointB);\n }\n }\n\n var invNumContacts = 1 / numContacts;\n averageContactPointA.scale(invNumContacts, f1.ri); // vec2.scale(eq.contactPointA, eq.contactPointA, invNumContacts);\n averageContactPointB.scale(invNumContacts, f1.rj); // vec2.scale(eq.contactPointB, eq.contactPointB, invNumContacts);\n f2.ri.copy(f1.ri); // Should be the same\n f2.rj.copy(f1.rj);\n averageNormal.normalize();\n averageNormal.tangents(f1.t, f2.t);\n // return eq;\n};\n\n\nvar tmpVec1 = new Vec3();\nvar tmpVec2 = new Vec3();\nvar tmpQuat1 = new Quaternion();\nvar tmpQuat2 = new Quaternion();\n\n/**\n * Generate all contacts between a list of body pairs\n * @method getContacts\n * @param {array} p1 Array of body indices\n * @param {array} p2 Array of body indices\n * @param {World} world\n * @param {array} result Array to store generated contacts\n * @param {array} oldcontacts Optional. Array of reusable contact objects\n */\nNarrowphase.prototype.getContacts = function(p1, p2, world, result, oldcontacts, frictionResult, frictionPool){\n // Save old contact objects\n this.contactPointPool = oldcontacts;\n this.frictionEquationPool = frictionPool;\n this.result = result;\n this.frictionResult = frictionResult;\n\n var qi = tmpQuat1;\n var qj = tmpQuat2;\n var xi = tmpVec1;\n var xj = tmpVec2;\n\n for(var k=0, N=p1.length; k!==N; k++){\n\n // Get current collision bodies\n var bi = p1[k],\n bj = p2[k];\n\n // Get contact material\n var bodyContactMaterial = null;\n if(bi.material && bj.material){\n bodyContactMaterial = world.getContactMaterial(bi.material,bj.material) || null;\n }\n\n for (var i = 0; i < bi.shapes.length; i++) {\n bi.quaternion.mult(bi.shapeOrientations[i], qi);\n bi.quaternion.vmult(bi.shapeOffsets[i], xi);\n xi.vadd(bi.position, xi);\n var si = bi.shapes[i];\n\n for (var j = 0; j < bj.shapes.length; j++) {\n\n // Compute world transform of shapes\n bj.quaternion.mult(bj.shapeOrientations[j], qj);\n bj.quaternion.vmult(bj.shapeOffsets[j], xj);\n xj.vadd(bj.position, xj);\n var sj = bj.shapes[j];\n\n if(xi.distanceTo(xj) > si.boundingSphereRadius + sj.boundingSphereRadius){\n continue;\n }\n\n // Get collision material\n var shapeContactMaterial = null;\n if(si.material && sj.material){\n shapeContactMaterial = world.getContactMaterial(si.material,sj.material) || null;\n }\n\n this.currentContactMaterial = shapeContactMaterial || bodyContactMaterial || world.defaultContactMaterial;\n\n // Get contacts\n var resolver = this[si.type | sj.type];\n if(resolver){\n if (si.type < sj.type) {\n resolver.call(this, si, sj, xi, xj, qi, qj, bi, bj, si, sj);\n } else {\n resolver.call(this, sj, si, xj, xi, qj, qi, bj, bi, si, sj);\n }\n }\n }\n }\n }\n};\n\nvar numWarnings = 0;\nvar maxWarnings = 10;\n\nfunction warn(msg){\n if(numWarnings > maxWarnings){\n return;\n }\n\n numWarnings++;\n\n console.warn(msg);\n}\n\nNarrowphase.prototype[Shape.types.BOX | Shape.types.BOX] =\nNarrowphase.prototype.boxBox = function(si,sj,xi,xj,qi,qj,bi,bj){\n si.convexPolyhedronRepresentation.material = si.material;\n sj.convexPolyhedronRepresentation.material = sj.material;\n si.convexPolyhedronRepresentation.collisionResponse = si.collisionResponse;\n sj.convexPolyhedronRepresentation.collisionResponse = sj.collisionResponse;\n this.convexConvex(si.convexPolyhedronRepresentation,sj.convexPolyhedronRepresentation,xi,xj,qi,qj,bi,bj,si,sj);\n};\n\nNarrowphase.prototype[Shape.types.BOX | Shape.types.CONVEXPOLYHEDRON] =\nNarrowphase.prototype.boxConvex = function(si,sj,xi,xj,qi,qj,bi,bj){\n si.convexPolyhedronRepresentation.material = si.material;\n si.convexPolyhedronRepresentation.collisionResponse = si.collisionResponse;\n this.convexConvex(si.convexPolyhedronRepresentation,sj,xi,xj,qi,qj,bi,bj,si,sj);\n};\n\nNarrowphase.prototype[Shape.types.BOX | Shape.types.PARTICLE] =\nNarrowphase.prototype.boxParticle = function(si,sj,xi,xj,qi,qj,bi,bj){\n si.convexPolyhedronRepresentation.material = si.material;\n si.convexPolyhedronRepresentation.collisionResponse = si.collisionResponse;\n this.convexParticle(si.convexPolyhedronRepresentation,sj,xi,xj,qi,qj,bi,bj,si,sj);\n};\n\n/**\n * @method sphereSphere\n * @param {Shape} si\n * @param {Shape} sj\n * @param {Vec3} xi\n * @param {Vec3} xj\n * @param {Quaternion} qi\n * @param {Quaternion} qj\n * @param {Body} bi\n * @param {Body} bj\n */\nNarrowphase.prototype[Shape.types.SPHERE] =\nNarrowphase.prototype.sphereSphere = function(si,sj,xi,xj,qi,qj,bi,bj){\n // We will have only one contact in this case\n var r = this.createContactEquation(bi,bj,si,sj);\n\n // Contact normal\n xj.vsub(xi, r.ni);\n r.ni.normalize();\n\n // Contact point locations\n r.ri.copy(r.ni);\n r.rj.copy(r.ni);\n r.ri.mult(si.radius, r.ri);\n r.rj.mult(-sj.radius, r.rj);\n\n r.ri.vadd(xi, r.ri);\n r.ri.vsub(bi.position, r.ri);\n\n r.rj.vadd(xj, r.rj);\n r.rj.vsub(bj.position, r.rj);\n\n this.result.push(r);\n\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n};\n\n/**\n * @method planeTrimesh\n * @param {Shape} si\n * @param {Shape} sj\n * @param {Vec3} xi\n * @param {Vec3} xj\n * @param {Quaternion} qi\n * @param {Quaternion} qj\n * @param {Body} bi\n * @param {Body} bj\n */\nvar planeTrimesh_normal = new Vec3();\nvar planeTrimesh_relpos = new Vec3();\nvar planeTrimesh_projected = new Vec3();\nNarrowphase.prototype[Shape.types.PLANE | Shape.types.TRIMESH] =\nNarrowphase.prototype.planeTrimesh = function(\n planeShape,\n trimeshShape,\n planePos,\n trimeshPos,\n planeQuat,\n trimeshQuat,\n planeBody,\n trimeshBody\n){\n // Make contacts!\n var v = new Vec3();\n\n var normal = planeTrimesh_normal;\n normal.set(0,0,1);\n planeQuat.vmult(normal,normal); // Turn normal according to plane\n\n for(var i=0; i 0 && positionAlongEdgeB < 0){\n\n // Now check the orthogonal distance from edge to sphere center\n localSpherePos.vsub(edgeVertexA, tmp);\n\n edgeVectorUnit.copy(edgeVector);\n edgeVectorUnit.normalize();\n positionAlongEdgeA = tmp.dot(edgeVectorUnit);\n\n edgeVectorUnit.scale(positionAlongEdgeA, tmp);\n tmp.vadd(edgeVertexA, tmp);\n\n // tmp is now the sphere center position projected to the edge, defined locally in the trimesh frame\n var dist = tmp.distanceTo(localSpherePos);\n if(dist < sphereShape.radius){\n var r = this.createContactEquation(sphereBody, trimeshBody, sphereShape, trimeshShape);\n\n tmp.vsub(localSpherePos, r.ni);\n r.ni.normalize();\n r.ni.scale(sphereShape.radius, r.ri);\n\n Transform.pointToWorldFrame(trimeshPos, trimeshQuat, tmp, tmp);\n tmp.vsub(trimeshBody.position, r.rj);\n\n Transform.vectorToWorldFrame(trimeshQuat, r.ni, r.ni);\n Transform.vectorToWorldFrame(trimeshQuat, r.ri, r.ri);\n\n this.result.push(r);\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n }\n }\n }\n }\n\n // Triangle faces\n var va = sphereTrimesh_va;\n var vb = sphereTrimesh_vb;\n var vc = sphereTrimesh_vc;\n var normal = sphereTrimesh_normal;\n for(var i=0, N = triangles.length; i !== N; i++){\n trimeshShape.getTriangleVertices(triangles[i], va, vb, vc);\n trimeshShape.getNormal(triangles[i], normal);\n localSpherePos.vsub(va, tmp);\n var dist = tmp.dot(normal);\n normal.scale(dist, tmp);\n localSpherePos.vsub(tmp, tmp);\n\n // tmp is now the sphere position projected to the triangle plane\n dist = tmp.distanceTo(localSpherePos);\n if(Ray.pointInTriangle(tmp, va, vb, vc) && dist < sphereShape.radius){\n var r = this.createContactEquation(sphereBody, trimeshBody, sphereShape, trimeshShape);\n\n tmp.vsub(localSpherePos, r.ni);\n r.ni.normalize();\n r.ni.scale(sphereShape.radius, r.ri);\n\n Transform.pointToWorldFrame(trimeshPos, trimeshQuat, tmp, tmp);\n tmp.vsub(trimeshBody.position, r.rj);\n\n Transform.vectorToWorldFrame(trimeshQuat, r.ni, r.ni);\n Transform.vectorToWorldFrame(trimeshQuat, r.ri, r.ri);\n\n this.result.push(r);\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n }\n }\n\n triangles.length = 0;\n};\n\nvar point_on_plane_to_sphere = new Vec3();\nvar plane_to_sphere_ortho = new Vec3();\n\n/**\n * @method spherePlane\n * @param {Shape} si\n * @param {Shape} sj\n * @param {Vec3} xi\n * @param {Vec3} xj\n * @param {Quaternion} qi\n * @param {Quaternion} qj\n * @param {Body} bi\n * @param {Body} bj\n */\nNarrowphase.prototype[Shape.types.SPHERE | Shape.types.PLANE] =\nNarrowphase.prototype.spherePlane = function(si,sj,xi,xj,qi,qj,bi,bj){\n // We will have one contact in this case\n var r = this.createContactEquation(bi,bj,si,sj);\n\n // Contact normal\n r.ni.set(0,0,1);\n qj.vmult(r.ni, r.ni);\n r.ni.negate(r.ni); // body i is the sphere, flip normal\n r.ni.normalize(); // Needed?\n\n // Vector from sphere center to contact point\n r.ni.mult(si.radius, r.ri);\n\n // Project down sphere on plane\n xi.vsub(xj, point_on_plane_to_sphere);\n r.ni.mult(r.ni.dot(point_on_plane_to_sphere), plane_to_sphere_ortho);\n point_on_plane_to_sphere.vsub(plane_to_sphere_ortho,r.rj); // The sphere position projected to plane\n\n if(-point_on_plane_to_sphere.dot(r.ni) <= si.radius){\n\n // Make it relative to the body\n var ri = r.ri;\n var rj = r.rj;\n ri.vadd(xi, ri);\n ri.vsub(bi.position, ri);\n rj.vadd(xj, rj);\n rj.vsub(bj.position, rj);\n\n this.result.push(r);\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n }\n};\n\n// See http://bulletphysics.com/Bullet/BulletFull/SphereTriangleDetector_8cpp_source.html\nvar pointInPolygon_edge = new Vec3();\nvar pointInPolygon_edge_x_normal = new Vec3();\nvar pointInPolygon_vtp = new Vec3();\nfunction pointInPolygon(verts, normal, p){\n var positiveResult = null;\n var N = verts.length;\n for(var i=0; i!==N; i++){\n var v = verts[i];\n\n // Get edge to the next vertex\n var edge = pointInPolygon_edge;\n verts[(i+1) % (N)].vsub(v,edge);\n\n // Get cross product between polygon normal and the edge\n var edge_x_normal = pointInPolygon_edge_x_normal;\n //var edge_x_normal = new Vec3();\n edge.cross(normal,edge_x_normal);\n\n // Get vector between point and current vertex\n var vertex_to_p = pointInPolygon_vtp;\n p.vsub(v,vertex_to_p);\n\n // This dot product determines which side of the edge the point is\n var r = edge_x_normal.dot(vertex_to_p);\n\n // If all such dot products have same sign, we are inside the polygon.\n if(positiveResult===null || (r>0 && positiveResult===true) || (r<=0 && positiveResult===false)){\n if(positiveResult===null){\n positiveResult = r>0;\n }\n continue;\n } else {\n return false; // Encountered some other sign. Exit.\n }\n }\n\n // If we got here, all dot products were of the same sign.\n return true;\n}\n\nvar box_to_sphere = new Vec3();\nvar sphereBox_ns = new Vec3();\nvar sphereBox_ns1 = new Vec3();\nvar sphereBox_ns2 = new Vec3();\nvar sphereBox_sides = [new Vec3(),new Vec3(),new Vec3(),new Vec3(),new Vec3(),new Vec3()];\nvar sphereBox_sphere_to_corner = new Vec3();\nvar sphereBox_side_ns = new Vec3();\nvar sphereBox_side_ns1 = new Vec3();\nvar sphereBox_side_ns2 = new Vec3();\n\n/**\n * @method sphereBox\n * @param {Shape} si\n * @param {Shape} sj\n * @param {Vec3} xi\n * @param {Vec3} xj\n * @param {Quaternion} qi\n * @param {Quaternion} qj\n * @param {Body} bi\n * @param {Body} bj\n */\nNarrowphase.prototype[Shape.types.SPHERE | Shape.types.BOX] =\nNarrowphase.prototype.sphereBox = function(si,sj,xi,xj,qi,qj,bi,bj){\n var v3pool = this.v3pool;\n\n // we refer to the box as body j\n var sides = sphereBox_sides;\n xi.vsub(xj,box_to_sphere);\n sj.getSideNormals(sides,qj);\n var R = si.radius;\n var penetrating_sides = [];\n\n // Check side (plane) intersections\n var found = false;\n\n // Store the resulting side penetration info\n var side_ns = sphereBox_side_ns;\n var side_ns1 = sphereBox_side_ns1;\n var side_ns2 = sphereBox_side_ns2;\n var side_h = null;\n var side_penetrations = 0;\n var side_dot1 = 0;\n var side_dot2 = 0;\n var side_distance = null;\n for(var idx=0,nsides=sides.length; idx!==nsides && found===false; idx++){\n // Get the plane side normal (ns)\n var ns = sphereBox_ns;\n ns.copy(sides[idx]);\n\n var h = ns.norm();\n ns.normalize();\n\n // The normal/distance dot product tells which side of the plane we are\n var dot = box_to_sphere.dot(ns);\n\n if(dot0){\n // Intersects plane. Now check the other two dimensions\n var ns1 = sphereBox_ns1;\n var ns2 = sphereBox_ns2;\n ns1.copy(sides[(idx+1)%3]);\n ns2.copy(sides[(idx+2)%3]);\n var h1 = ns1.norm();\n var h2 = ns2.norm();\n ns1.normalize();\n ns2.normalize();\n var dot1 = box_to_sphere.dot(ns1);\n var dot2 = box_to_sphere.dot(ns2);\n if(dot1

-h1 && dot2

-h2){\n var dist = Math.abs(dot-h-R);\n if(side_distance===null || dist < side_distance){\n side_distance = dist;\n side_dot1 = dot1;\n side_dot2 = dot2;\n side_h = h;\n side_ns.copy(ns);\n side_ns1.copy(ns1);\n side_ns2.copy(ns2);\n side_penetrations++;\n }\n }\n }\n }\n if(side_penetrations){\n found = true;\n var r = this.createContactEquation(bi,bj,si,sj);\n side_ns.mult(-R,r.ri); // Sphere r\n r.ni.copy(side_ns);\n r.ni.negate(r.ni); // Normal should be out of sphere\n side_ns.mult(side_h,side_ns);\n side_ns1.mult(side_dot1,side_ns1);\n side_ns.vadd(side_ns1,side_ns);\n side_ns2.mult(side_dot2,side_ns2);\n side_ns.vadd(side_ns2,r.rj);\n\n // Make relative to bodies\n r.ri.vadd(xi, r.ri);\n r.ri.vsub(bi.position, r.ri);\n r.rj.vadd(xj, r.rj);\n r.rj.vsub(bj.position, r.rj);\n\n this.result.push(r);\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n }\n\n // Check corners\n var rj = v3pool.get();\n var sphere_to_corner = sphereBox_sphere_to_corner;\n for(var j=0; j!==2 && !found; j++){\n for(var k=0; k!==2 && !found; k++){\n for(var l=0; l!==2 && !found; l++){\n rj.set(0,0,0);\n if(j){\n rj.vadd(sides[0],rj);\n } else {\n rj.vsub(sides[0],rj);\n }\n if(k){\n rj.vadd(sides[1],rj);\n } else {\n rj.vsub(sides[1],rj);\n }\n if(l){\n rj.vadd(sides[2],rj);\n } else {\n rj.vsub(sides[2],rj);\n }\n\n // World position of corner\n xj.vadd(rj,sphere_to_corner);\n sphere_to_corner.vsub(xi,sphere_to_corner);\n\n if(sphere_to_corner.norm2() < R*R){\n found = true;\n var r = this.createContactEquation(bi,bj,si,sj);\n r.ri.copy(sphere_to_corner);\n r.ri.normalize();\n r.ni.copy(r.ri);\n r.ri.mult(R,r.ri);\n r.rj.copy(rj);\n\n // Make relative to bodies\n r.ri.vadd(xi, r.ri);\n r.ri.vsub(bi.position, r.ri);\n r.rj.vadd(xj, r.rj);\n r.rj.vsub(bj.position, r.rj);\n\n this.result.push(r);\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n }\n }\n }\n }\n v3pool.release(rj);\n rj = null;\n\n // Check edges\n var edgeTangent = v3pool.get();\n var edgeCenter = v3pool.get();\n var r = v3pool.get(); // r = edge center to sphere center\n var orthogonal = v3pool.get();\n var dist = v3pool.get();\n var Nsides = sides.length;\n for(var j=0; j!==Nsides && !found; j++){\n for(var k=0; k!==Nsides && !found; k++){\n if(j%3 !== k%3){\n // Get edge tangent\n sides[k].cross(sides[j],edgeTangent);\n edgeTangent.normalize();\n sides[j].vadd(sides[k], edgeCenter);\n r.copy(xi);\n r.vsub(edgeCenter,r);\n r.vsub(xj,r);\n var orthonorm = r.dot(edgeTangent); // distance from edge center to sphere center in the tangent direction\n edgeTangent.mult(orthonorm,orthogonal); // Vector from edge center to sphere center in the tangent direction\n\n // Find the third side orthogonal to this one\n var l = 0;\n while(l===j%3 || l===k%3){\n l++;\n }\n\n // vec from edge center to sphere projected to the plane orthogonal to the edge tangent\n dist.copy(xi);\n dist.vsub(orthogonal,dist);\n dist.vsub(edgeCenter,dist);\n dist.vsub(xj,dist);\n\n // Distances in tangent direction and distance in the plane orthogonal to it\n var tdist = Math.abs(orthonorm);\n var ndist = dist.norm();\n\n if(tdist < sides[l].norm() && ndist si.boundingSphereRadius + sj.boundingSphereRadius){\n // return;\n // }\n\n // Check corners\n for(var i=0; i!==verts.length; i++){\n var v = verts[i];\n\n // World position of corner\n var worldCorner = sphereConvex_worldCorner;\n qj.vmult(v,worldCorner);\n xj.vadd(worldCorner,worldCorner);\n var sphere_to_corner = sphereConvex_sphereToCorner;\n worldCorner.vsub(xi, sphere_to_corner);\n if(sphere_to_corner.norm2() < R * R){\n found = true;\n var r = this.createContactEquation(bi,bj,si,sj);\n r.ri.copy(sphere_to_corner);\n r.ri.normalize();\n r.ni.copy(r.ri);\n r.ri.mult(R,r.ri);\n worldCorner.vsub(xj,r.rj);\n\n // Should be relative to the body.\n r.ri.vadd(xi, r.ri);\n r.ri.vsub(bi.position, r.ri);\n\n // Should be relative to the body.\n r.rj.vadd(xj, r.rj);\n r.rj.vsub(bj.position, r.rj);\n\n this.result.push(r);\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n return;\n }\n }\n\n // Check side (plane) intersections\n var found = false;\n for(var i=0, nfaces=faces.length; i!==nfaces && found===false; i++){\n var normal = normals[i];\n var face = faces[i];\n\n // Get world-transformed normal of the face\n var worldNormal = sphereConvex_worldNormal;\n qj.vmult(normal,worldNormal);\n\n // Get a world vertex from the face\n var worldPoint = sphereConvex_worldPoint;\n qj.vmult(verts[face[0]],worldPoint);\n worldPoint.vadd(xj,worldPoint);\n\n // Get a point on the sphere, closest to the face normal\n var worldSpherePointClosestToPlane = sphereConvex_worldSpherePointClosestToPlane;\n worldNormal.mult(-R, worldSpherePointClosestToPlane);\n xi.vadd(worldSpherePointClosestToPlane, worldSpherePointClosestToPlane);\n\n // Vector from a face point to the closest point on the sphere\n var penetrationVec = sphereConvex_penetrationVec;\n worldSpherePointClosestToPlane.vsub(worldPoint,penetrationVec);\n\n // The penetration. Negative value means overlap.\n var penetration = penetrationVec.dot(worldNormal);\n\n var worldPointToSphere = sphereConvex_sphereToWorldPoint;\n xi.vsub(worldPoint, worldPointToSphere);\n\n if(penetration < 0 && worldPointToSphere.dot(worldNormal)>0){\n // Intersects plane. Now check if the sphere is inside the face polygon\n var faceVerts = []; // Face vertices, in world coords\n for(var j=0, Nverts=face.length; j!==Nverts; j++){\n var worldVertex = v3pool.get();\n qj.vmult(verts[face[j]], worldVertex);\n xj.vadd(worldVertex,worldVertex);\n faceVerts.push(worldVertex);\n }\n\n if(pointInPolygon(faceVerts,worldNormal,xi)){ // Is the sphere center in the face polygon?\n found = true;\n var r = this.createContactEquation(bi,bj,si,sj);\n\n worldNormal.mult(-R, r.ri); // Contact offset, from sphere center to contact\n worldNormal.negate(r.ni); // Normal pointing out of sphere\n\n var penetrationVec2 = v3pool.get();\n worldNormal.mult(-penetration, penetrationVec2);\n var penetrationSpherePoint = v3pool.get();\n worldNormal.mult(-R, penetrationSpherePoint);\n\n //xi.vsub(xj).vadd(penetrationSpherePoint).vadd(penetrationVec2 , r.rj);\n xi.vsub(xj,r.rj);\n r.rj.vadd(penetrationSpherePoint,r.rj);\n r.rj.vadd(penetrationVec2 , r.rj);\n\n // Should be relative to the body.\n r.rj.vadd(xj, r.rj);\n r.rj.vsub(bj.position, r.rj);\n\n // Should be relative to the body.\n r.ri.vadd(xi, r.ri);\n r.ri.vsub(bi.position, r.ri);\n\n v3pool.release(penetrationVec2);\n v3pool.release(penetrationSpherePoint);\n\n this.result.push(r);\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n\n // Release world vertices\n for(var j=0, Nfaceverts=faceVerts.length; j!==Nfaceverts; j++){\n v3pool.release(faceVerts[j]);\n }\n\n return; // We only expect *one* face contact\n } else {\n // Edge?\n for(var j=0; j!==face.length; j++){\n\n // Get two world transformed vertices\n var v1 = v3pool.get();\n var v2 = v3pool.get();\n qj.vmult(verts[face[(j+1)%face.length]], v1);\n qj.vmult(verts[face[(j+2)%face.length]], v2);\n xj.vadd(v1, v1);\n xj.vadd(v2, v2);\n\n // Construct edge vector\n var edge = sphereConvex_edge;\n v2.vsub(v1,edge);\n\n // Construct the same vector, but normalized\n var edgeUnit = sphereConvex_edgeUnit;\n edge.unit(edgeUnit);\n\n // p is xi projected onto the edge\n var p = v3pool.get();\n var v1_to_xi = v3pool.get();\n xi.vsub(v1, v1_to_xi);\n var dot = v1_to_xi.dot(edgeUnit);\n edgeUnit.mult(dot, p);\n p.vadd(v1, p);\n\n // Compute a vector from p to the center of the sphere\n var xi_to_p = v3pool.get();\n p.vsub(xi, xi_to_p);\n\n // Collision if the edge-sphere distance is less than the radius\n // AND if p is in between v1 and v2\n if(dot > 0 && dot*dot si.boundingSphereRadius + sj.boundingSphereRadius){\n return;\n }\n\n if(si.findSeparatingAxis(sj,xi,qi,xj,qj,sepAxis,faceListA,faceListB)){\n var res = [];\n var q = convexConvex_q;\n si.clipAgainstHull(xi,qi,sj,xj,qj,sepAxis,-100,100,res);\n var numContacts = 0;\n for(var j = 0; j !== res.length; j++){\n var r = this.createContactEquation(bi,bj,si,sj,rsi,rsj),\n ri = r.ri,\n rj = r.rj;\n sepAxis.negate(r.ni);\n res[j].normal.negate(q);\n q.mult(res[j].depth, q);\n res[j].point.vadd(q, ri);\n rj.copy(res[j].point);\n\n // Contact points are in world coordinates. Transform back to relative\n ri.vsub(xi,ri);\n rj.vsub(xj,rj);\n\n // Make relative to bodies\n ri.vadd(xi, ri);\n ri.vsub(bi.position, ri);\n rj.vadd(xj, rj);\n rj.vsub(bj.position, rj);\n\n this.result.push(r);\n numContacts++;\n if(!this.enableFrictionReduction){\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n }\n }\n if(this.enableFrictionReduction && numContacts){\n this.createFrictionFromAverage(numContacts);\n }\n }\n};\n\n\n/**\n * @method convexTrimesh\n * @param {Array} result\n * @param {Shape} si\n * @param {Shape} sj\n * @param {Vec3} xi\n * @param {Vec3} xj\n * @param {Quaternion} qi\n * @param {Quaternion} qj\n * @param {Body} bi\n * @param {Body} bj\n */\n// Narrowphase.prototype[Shape.types.CONVEXPOLYHEDRON | Shape.types.TRIMESH] =\n// Narrowphase.prototype.convexTrimesh = function(si,sj,xi,xj,qi,qj,bi,bj,rsi,rsj,faceListA,faceListB){\n// var sepAxis = convexConvex_sepAxis;\n\n// if(xi.distanceTo(xj) > si.boundingSphereRadius + sj.boundingSphereRadius){\n// return;\n// }\n\n// // Construct a temp hull for each triangle\n// var hullB = new ConvexPolyhedron();\n\n// hullB.faces = [[0,1,2]];\n// var va = new Vec3();\n// var vb = new Vec3();\n// var vc = new Vec3();\n// hullB.vertices = [\n// va,\n// vb,\n// vc\n// ];\n\n// for (var i = 0; i < sj.indices.length / 3; i++) {\n\n// var triangleNormal = new Vec3();\n// sj.getNormal(i, triangleNormal);\n// hullB.faceNormals = [triangleNormal];\n\n// sj.getTriangleVertices(i, va, vb, vc);\n\n// var d = si.testSepAxis(triangleNormal, hullB, xi, qi, xj, qj);\n// if(!d){\n// triangleNormal.scale(-1, triangleNormal);\n// d = si.testSepAxis(triangleNormal, hullB, xi, qi, xj, qj);\n\n// if(!d){\n// continue;\n// }\n// }\n\n// var res = [];\n// var q = convexConvex_q;\n// si.clipAgainstHull(xi,qi,hullB,xj,qj,triangleNormal,-100,100,res);\n// for(var j = 0; j !== res.length; j++){\n// var r = this.createContactEquation(bi,bj,si,sj,rsi,rsj),\n// ri = r.ri,\n// rj = r.rj;\n// r.ni.copy(triangleNormal);\n// r.ni.negate(r.ni);\n// res[j].normal.negate(q);\n// q.mult(res[j].depth, q);\n// res[j].point.vadd(q, ri);\n// rj.copy(res[j].point);\n\n// // Contact points are in world coordinates. Transform back to relative\n// ri.vsub(xi,ri);\n// rj.vsub(xj,rj);\n\n// // Make relative to bodies\n// ri.vadd(xi, ri);\n// ri.vsub(bi.position, ri);\n// rj.vadd(xj, rj);\n// rj.vsub(bj.position, rj);\n\n// result.push(r);\n// }\n// }\n// };\n\nvar particlePlane_normal = new Vec3();\nvar particlePlane_relpos = new Vec3();\nvar particlePlane_projected = new Vec3();\n\n/**\n * @method particlePlane\n * @param {Array} result\n * @param {Shape} si\n * @param {Shape} sj\n * @param {Vec3} xi\n * @param {Vec3} xj\n * @param {Quaternion} qi\n * @param {Quaternion} qj\n * @param {Body} bi\n * @param {Body} bj\n */\nNarrowphase.prototype[Shape.types.PLANE | Shape.types.PARTICLE] =\nNarrowphase.prototype.planeParticle = function(sj,si,xj,xi,qj,qi,bj,bi){\n var normal = particlePlane_normal;\n normal.set(0,0,1);\n bj.quaternion.vmult(normal,normal); // Turn normal according to plane orientation\n var relpos = particlePlane_relpos;\n xi.vsub(bj.position,relpos);\n var dot = normal.dot(relpos);\n if(dot <= 0.0){\n var r = this.createContactEquation(bi,bj,si,sj);\n r.ni.copy(normal); // Contact normal is the plane normal\n r.ni.negate(r.ni);\n r.ri.set(0,0,0); // Center of particle\n\n // Get particle position projected on plane\n var projected = particlePlane_projected;\n normal.mult(normal.dot(xi),projected);\n xi.vsub(projected,projected);\n //projected.vadd(bj.position,projected);\n\n // rj is now the projected world position minus plane position\n r.rj.copy(projected);\n this.result.push(r);\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n }\n};\n\nvar particleSphere_normal = new Vec3();\n\n/**\n * @method particleSphere\n * @param {Array} result\n * @param {Shape} si\n * @param {Shape} sj\n * @param {Vec3} xi\n * @param {Vec3} xj\n * @param {Quaternion} qi\n * @param {Quaternion} qj\n * @param {Body} bi\n * @param {Body} bj\n */\nNarrowphase.prototype[Shape.types.PARTICLE | Shape.types.SPHERE] =\nNarrowphase.prototype.sphereParticle = function(sj,si,xj,xi,qj,qi,bj,bi){\n // The normal is the unit vector from sphere center to particle center\n var normal = particleSphere_normal;\n normal.set(0,0,1);\n xi.vsub(xj,normal);\n var lengthSquared = normal.norm2();\n\n if(lengthSquared <= sj.radius * sj.radius){\n var r = this.createContactEquation(bi,bj,si,sj);\n normal.normalize();\n r.rj.copy(normal);\n r.rj.mult(sj.radius,r.rj);\n r.ni.copy(normal); // Contact normal\n r.ni.negate(r.ni);\n r.ri.set(0,0,0); // Center of particle\n this.result.push(r);\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n }\n};\n\n// WIP\nvar cqj = new Quaternion();\nvar convexParticle_local = new Vec3();\nvar convexParticle_normal = new Vec3();\nvar convexParticle_penetratedFaceNormal = new Vec3();\nvar convexParticle_vertexToParticle = new Vec3();\nvar convexParticle_worldPenetrationVec = new Vec3();\n\n/**\n * @method convexParticle\n * @param {Array} result\n * @param {Shape} si\n * @param {Shape} sj\n * @param {Vec3} xi\n * @param {Vec3} xj\n * @param {Quaternion} qi\n * @param {Quaternion} qj\n * @param {Body} bi\n * @param {Body} bj\n */\nNarrowphase.prototype[Shape.types.PARTICLE | Shape.types.CONVEXPOLYHEDRON] =\nNarrowphase.prototype.convexParticle = function(sj,si,xj,xi,qj,qi,bj,bi){\n var penetratedFaceIndex = -1;\n var penetratedFaceNormal = convexParticle_penetratedFaceNormal;\n var worldPenetrationVec = convexParticle_worldPenetrationVec;\n var minPenetration = null;\n var numDetectedFaces = 0;\n\n // Convert particle position xi to local coords in the convex\n var local = convexParticle_local;\n local.copy(xi);\n local.vsub(xj,local); // Convert position to relative the convex origin\n qj.conjugate(cqj);\n cqj.vmult(local,local);\n\n if(sj.pointIsInside(local)){\n\n if(sj.worldVerticesNeedsUpdate){\n sj.computeWorldVertices(xj,qj);\n }\n if(sj.worldFaceNormalsNeedsUpdate){\n sj.computeWorldFaceNormals(qj);\n }\n\n // For each world polygon in the polyhedra\n for(var i=0,nfaces=sj.faces.length; i!==nfaces; i++){\n\n // Construct world face vertices\n var verts = [ sj.worldVertices[ sj.faces[i][0] ] ];\n var normal = sj.worldFaceNormals[i];\n\n // Check how much the particle penetrates the polygon plane.\n xi.vsub(verts[0],convexParticle_vertexToParticle);\n var penetration = -normal.dot(convexParticle_vertexToParticle);\n if(minPenetration===null || Math.abs(penetration) data.length || iMinY > data[0].length){\n return;\n }\n\n // Clamp index to edges\n if(iMinX < 0){ iMinX = 0; }\n if(iMaxX < 0){ iMaxX = 0; }\n if(iMinY < 0){ iMinY = 0; }\n if(iMaxY < 0){ iMaxY = 0; }\n if(iMinX >= data.length){ iMinX = data.length - 1; }\n if(iMaxX >= data.length){ iMaxX = data.length - 1; }\n if(iMaxY >= data[0].length){ iMaxY = data[0].length - 1; }\n if(iMinY >= data[0].length){ iMinY = data[0].length - 1; }\n\n var minMax = [];\n hfShape.getRectMinMax(iMinX, iMinY, iMaxX, iMaxY, minMax);\n var min = minMax[0];\n var max = minMax[1];\n\n // Bail out if we're cant touch the bounding height box\n if(localConvexPos.z - radius > max || localConvexPos.z + radius < min){\n return;\n }\n\n for(var i = iMinX; i < iMaxX; i++){\n for(var j = iMinY; j < iMaxY; j++){\n\n // Lower triangle\n hfShape.getConvexTrianglePillar(i, j, false);\n Transform.pointToWorldFrame(hfPos, hfQuat, hfShape.pillarOffset, worldPillarOffset);\n if (convexPos.distanceTo(worldPillarOffset) < hfShape.pillarConvex.boundingSphereRadius + convexShape.boundingSphereRadius) {\n this.convexConvex(convexShape, hfShape.pillarConvex, convexPos, worldPillarOffset, convexQuat, hfQuat, convexBody, hfBody, null, null, faceList, null);\n }\n\n // Upper triangle\n hfShape.getConvexTrianglePillar(i, j, true);\n Transform.pointToWorldFrame(hfPos, hfQuat, hfShape.pillarOffset, worldPillarOffset);\n if (convexPos.distanceTo(worldPillarOffset) < hfShape.pillarConvex.boundingSphereRadius + convexShape.boundingSphereRadius) {\n this.convexConvex(convexShape, hfShape.pillarConvex, convexPos, worldPillarOffset, convexQuat, hfQuat, convexBody, hfBody, null, null, faceList, null);\n }\n }\n }\n};\n\nvar sphereHeightfield_tmp1 = new Vec3();\nvar sphereHeightfield_tmp2 = new Vec3();\n\n/**\n * @method sphereHeightfield\n */\nNarrowphase.prototype[Shape.types.SPHERE | Shape.types.HEIGHTFIELD] =\nNarrowphase.prototype.sphereHeightfield = function (\n sphereShape,\n hfShape,\n spherePos,\n hfPos,\n sphereQuat,\n hfQuat,\n sphereBody,\n hfBody\n){\n var data = hfShape.data,\n radius = sphereShape.radius,\n w = hfShape.elementSize,\n worldPillarOffset = sphereHeightfield_tmp2;\n\n // Get sphere position to heightfield local!\n var localSpherePos = sphereHeightfield_tmp1;\n Transform.pointToLocalFrame(hfPos, hfQuat, spherePos, localSpherePos);\n\n // Get the index of the data points to test against\n var iMinX = Math.floor((localSpherePos.x - radius) / w) - 1,\n iMaxX = Math.ceil((localSpherePos.x + radius) / w) + 1,\n iMinY = Math.floor((localSpherePos.y - radius) / w) - 1,\n iMaxY = Math.ceil((localSpherePos.y + radius) / w) + 1;\n\n // Bail out if we are out of the terrain\n if(iMaxX < 0 || iMaxY < 0 || iMinX > data.length || iMaxY > data[0].length){\n return;\n }\n\n // Clamp index to edges\n if(iMinX < 0){ iMinX = 0; }\n if(iMaxX < 0){ iMaxX = 0; }\n if(iMinY < 0){ iMinY = 0; }\n if(iMaxY < 0){ iMaxY = 0; }\n if(iMinX >= data.length){ iMinX = data.length - 1; }\n if(iMaxX >= data.length){ iMaxX = data.length - 1; }\n if(iMaxY >= data[0].length){ iMaxY = data[0].length - 1; }\n if(iMinY >= data[0].length){ iMinY = data[0].length - 1; }\n\n var minMax = [];\n hfShape.getRectMinMax(iMinX, iMinY, iMaxX, iMaxY, minMax);\n var min = minMax[0];\n var max = minMax[1];\n\n // Bail out if we're cant touch the bounding height box\n if(localSpherePos.z - radius > max || localSpherePos.z + radius < min){\n return;\n }\n\n var result = this.result;\n for(var i = iMinX; i < iMaxX; i++){\n for(var j = iMinY; j < iMaxY; j++){\n\n var numContactsBefore = result.length;\n\n // Lower triangle\n hfShape.getConvexTrianglePillar(i, j, false);\n Transform.pointToWorldFrame(hfPos, hfQuat, hfShape.pillarOffset, worldPillarOffset);\n if (spherePos.distanceTo(worldPillarOffset) < hfShape.pillarConvex.boundingSphereRadius + sphereShape.boundingSphereRadius) {\n this.sphereConvex(sphereShape, hfShape.pillarConvex, spherePos, worldPillarOffset, sphereQuat, hfQuat, sphereBody, hfBody);\n }\n\n // Upper triangle\n hfShape.getConvexTrianglePillar(i, j, true);\n Transform.pointToWorldFrame(hfPos, hfQuat, hfShape.pillarOffset, worldPillarOffset);\n if (spherePos.distanceTo(worldPillarOffset) < hfShape.pillarConvex.boundingSphereRadius + sphereShape.boundingSphereRadius) {\n this.sphereConvex(sphereShape, hfShape.pillarConvex, spherePos, worldPillarOffset, sphereQuat, hfQuat, sphereBody, hfBody);\n }\n\n var numContacts = result.length - numContactsBefore;\n\n if(numContacts > 2){\n return;\n }\n /*\n // Skip all but 1\n for (var k = 0; k < numContacts - 1; k++) {\n result.pop();\n }\n */\n }\n }\n};\n\n},{\"../collision/AABB\":3,\"../collision/Ray\":9,\"../equations/ContactEquation\":19,\"../equations/FrictionEquation\":21,\"../math/Quaternion\":28,\"../math/Transform\":29,\"../math/Vec3\":30,\"../shapes/ConvexPolyhedron\":38,\"../shapes/Shape\":43,\"../solver/Solver\":47,\"../utils/Vec3Pool\":54}],56:[function(_dereq_,module,exports){\n/* global performance */\n\nmodule.exports = World;\n\nvar Shape = _dereq_('../shapes/Shape');\nvar Vec3 = _dereq_('../math/Vec3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar GSSolver = _dereq_('../solver/GSSolver');\nvar Vec3Pool = _dereq_('../utils/Vec3Pool');\nvar ContactEquation = _dereq_('../equations/ContactEquation');\nvar FrictionEquation = _dereq_('../equations/FrictionEquation');\nvar Narrowphase = _dereq_('./Narrowphase');\nvar EventTarget = _dereq_('../utils/EventTarget');\nvar ArrayCollisionMatrix = _dereq_('../collision/ArrayCollisionMatrix');\nvar Material = _dereq_('../material/Material');\nvar ContactMaterial = _dereq_('../material/ContactMaterial');\nvar Body = _dereq_('../objects/Body');\nvar TupleDictionary = _dereq_('../utils/TupleDictionary');\nvar RaycastResult = _dereq_('../collision/RaycastResult');\nvar AABB = _dereq_('../collision/AABB');\nvar Ray = _dereq_('../collision/Ray');\nvar NaiveBroadphase = _dereq_('../collision/NaiveBroadphase');\n\n/**\n * The physics world\n * @class World\n * @constructor\n * @extends EventTarget\n */\nfunction World(){\n EventTarget.apply(this);\n\n /**\n * Currently / last used timestep. Is set to -1 if not available. This value is updated before each internal step, which means that it is \"fresh\" inside event callbacks.\n * @property {Number} dt\n */\n this.dt = -1;\n\n /**\n * Makes bodies go to sleep when they've been inactive\n * @property allowSleep\n * @type {Boolean}\n */\n this.allowSleep = false;\n\n /**\n * All the current contacts (instances of ContactEquation) in the world.\n * @property contacts\n * @type {Array}\n */\n this.contacts = [];\n this.frictionEquations = [];\n\n /**\n * How often to normalize quaternions. Set to 0 for every step, 1 for every second etc.. A larger value increases performance. If bodies tend to explode, set to a smaller value (zero to be sure nothing can go wrong).\n * @property quatNormalizeSkip\n * @type {Number}\n */\n this.quatNormalizeSkip = 0;\n\n /**\n * Set to true to use fast quaternion normalization. It is often enough accurate to use. If bodies tend to explode, set to false.\n * @property quatNormalizeFast\n * @type {Boolean}\n * @see Quaternion.normalizeFast\n * @see Quaternion.normalize\n */\n this.quatNormalizeFast = false;\n\n /**\n * The wall-clock time since simulation start\n * @property time\n * @type {Number}\n */\n this.time = 0.0;\n\n /**\n * Number of timesteps taken since start\n * @property stepnumber\n * @type {Number}\n */\n this.stepnumber = 0;\n\n /// Default and last timestep sizes\n this.default_dt = 1/60;\n\n this.nextId = 0;\n /**\n * @property gravity\n * @type {Vec3}\n */\n this.gravity = new Vec3();\n\n /**\n * @property broadphase\n * @type {Broadphase}\n */\n this.broadphase = new NaiveBroadphase();\n\n /**\n * @property bodies\n * @type {Array}\n */\n this.bodies = [];\n\n /**\n * @property solver\n * @type {Solver}\n */\n this.solver = new GSSolver();\n\n /**\n * @property constraints\n * @type {Array}\n */\n this.constraints = [];\n\n /**\n * @property narrowphase\n * @type {Narrowphase}\n */\n this.narrowphase = new Narrowphase(this);\n\n /**\n * @property {ArrayCollisionMatrix} collisionMatrix\n\t * @type {ArrayCollisionMatrix}\n\t */\n\tthis.collisionMatrix = new ArrayCollisionMatrix();\n\n /**\n * CollisionMatrix from the previous step.\n * @property {ArrayCollisionMatrix} collisionMatrixPrevious\n\t * @type {ArrayCollisionMatrix}\n\t */\n\tthis.collisionMatrixPrevious = new ArrayCollisionMatrix();\n\n /**\n * All added materials\n * @property materials\n * @type {Array}\n */\n this.materials = [];\n\n /**\n * @property contactmaterials\n * @type {Array}\n */\n this.contactmaterials = [];\n\n /**\n * Used to look up a ContactMaterial given two instances of Material.\n * @property {TupleDictionary} contactMaterialTable\n */\n this.contactMaterialTable = new TupleDictionary();\n\n this.defaultMaterial = new Material(\"default\");\n\n /**\n * This contact material is used if no suitable contactmaterial is found for a contact.\n * @property defaultContactMaterial\n * @type {ContactMaterial}\n */\n this.defaultContactMaterial = new ContactMaterial(this.defaultMaterial, this.defaultMaterial, { friction: 0.3, restitution: 0.0 });\n\n /**\n * @property doProfiling\n * @type {Boolean}\n */\n this.doProfiling = false;\n\n /**\n * @property profile\n * @type {Object}\n */\n this.profile = {\n solve:0,\n makeContactConstraints:0,\n broadphase:0,\n integrate:0,\n narrowphase:0,\n };\n\n /**\n * @property subsystems\n * @type {Array}\n */\n this.subsystems = [];\n\n this.addBodyEvent = {\n type:\"addBody\",\n body : null,\n };\n\n this.removeBodyEvent = {\n type:\"removeBody\",\n body : null,\n };\n}\nWorld.prototype = new EventTarget();\n\n// Temp stuff\nvar tmpAABB1 = new AABB();\nvar tmpArray1 = [];\nvar tmpRay = new Ray();\n\n/**\n * Get the contact material between materials m1 and m2\n * @method getContactMaterial\n * @param {Material} m1\n * @param {Material} m2\n * @return {ContactMaterial} The contact material if it was found.\n */\nWorld.prototype.getContactMaterial = function(m1,m2){\n return this.contactMaterialTable.get(m1.id,m2.id); //this.contactmaterials[this.mats2cmat[i+j*this.materials.length]];\n};\n\n/**\n * Get number of objects in the world.\n * @method numObjects\n * @return {Number}\n * @deprecated\n */\nWorld.prototype.numObjects = function(){\n return this.bodies.length;\n};\n\n/**\n * Store old collision state info\n * @method collisionMatrixTick\n */\nWorld.prototype.collisionMatrixTick = function(){\n\tvar temp = this.collisionMatrixPrevious;\n\tthis.collisionMatrixPrevious = this.collisionMatrix;\n\tthis.collisionMatrix = temp;\n\tthis.collisionMatrix.reset();\n};\n\n/**\n * Add a rigid body to the simulation.\n * @method add\n * @param {Body} body\n * @todo If the simulation has not yet started, why recrete and copy arrays for each body? Accumulate in dynamic arrays in this case.\n * @todo Adding an array of bodies should be possible. This would save some loops too\n * @deprecated Use .addBody instead\n */\nWorld.prototype.add = World.prototype.addBody = function(body){\n if(this.bodies.indexOf(body) !== -1){\n return;\n }\n body.index = this.bodies.length;\n this.bodies.push(body);\n body.world = this;\n body.initPosition.copy(body.position);\n body.initVelocity.copy(body.velocity);\n body.timeLastSleepy = this.time;\n if(body instanceof Body){\n body.initAngularVelocity.copy(body.angularVelocity);\n body.initQuaternion.copy(body.quaternion);\n }\n\tthis.collisionMatrix.setNumObjects(this.bodies.length);\n this.addBodyEvent.body = body;\n this.dispatchEvent(this.addBodyEvent);\n};\n\n/**\n * Add a constraint to the simulation.\n * @method addConstraint\n * @param {Constraint} c\n */\nWorld.prototype.addConstraint = function(c){\n this.constraints.push(c);\n};\n\n/**\n * Removes a constraint\n * @method removeConstraint\n * @param {Constraint} c\n */\nWorld.prototype.removeConstraint = function(c){\n var idx = this.constraints.indexOf(c);\n if(idx!==-1){\n this.constraints.splice(idx,1);\n }\n};\n\n/**\n * Raycast test\n * @method rayTest\n * @param {Vec3} from\n * @param {Vec3} to\n * @param {Function|RaycastResult} result\n * @deprecated Use .raycastAll, .raycastClosest or .raycastAny instead.\n */\nWorld.prototype.rayTest = function(from, to, result){\n if(result instanceof RaycastResult){\n // Do raycastclosest\n this.raycastClosest(from, to, {\n skipBackfaces: true\n }, result);\n } else {\n // Do raycastAll\n this.raycastAll(from, to, {\n skipBackfaces: true\n }, result);\n }\n};\n\n/**\n * Ray cast against all bodies. The provided callback will be executed for each hit with a RaycastResult as single argument.\n * @method raycastAll\n * @param {Vec3} from\n * @param {Vec3} to\n * @param {Object} options\n * @param {number} [options.collisionFilterMask=-1]\n * @param {number} [options.collisionFilterGroup=-1]\n * @param {boolean} [options.skipBackfaces=false]\n * @param {boolean} [options.checkCollisionResponse=true]\n * @param {Function} callback\n * @return {boolean} True if any body was hit.\n */\nWorld.prototype.raycastAll = function(from, to, options, callback){\n options.mode = Ray.ALL;\n options.from = from;\n options.to = to;\n options.callback = callback;\n return tmpRay.intersectWorld(this, options);\n};\n\n/**\n * Ray cast, and stop at the first result. Note that the order is random - but the method is fast.\n * @method raycastAny\n * @param {Vec3} from\n * @param {Vec3} to\n * @param {Object} options\n * @param {number} [options.collisionFilterMask=-1]\n * @param {number} [options.collisionFilterGroup=-1]\n * @param {boolean} [options.skipBackfaces=false]\n * @param {boolean} [options.checkCollisionResponse=true]\n * @param {RaycastResult} result\n * @return {boolean} True if any body was hit.\n */\nWorld.prototype.raycastAny = function(from, to, options, result){\n options.mode = Ray.ANY;\n options.from = from;\n options.to = to;\n options.result = result;\n return tmpRay.intersectWorld(this, options);\n};\n\n/**\n * Ray cast, and return information of the closest hit.\n * @method raycastClosest\n * @param {Vec3} from\n * @param {Vec3} to\n * @param {Object} options\n * @param {number} [options.collisionFilterMask=-1]\n * @param {number} [options.collisionFilterGroup=-1]\n * @param {boolean} [options.skipBackfaces=false]\n * @param {boolean} [options.checkCollisionResponse=true]\n * @param {RaycastResult} result\n * @return {boolean} True if any body was hit.\n */\nWorld.prototype.raycastClosest = function(from, to, options, result){\n options.mode = Ray.CLOSEST;\n options.from = from;\n options.to = to;\n options.result = result;\n return tmpRay.intersectWorld(this, options);\n};\n\n/**\n * Remove a rigid body from the simulation.\n * @method remove\n * @param {Body} body\n * @deprecated Use .removeBody instead\n */\nWorld.prototype.remove = function(body){\n body.world = null;\n var n = this.bodies.length-1,\n bodies = this.bodies,\n idx = bodies.indexOf(body);\n if(idx !== -1){\n bodies.splice(idx, 1); // Todo: should use a garbage free method\n\n // Recompute index\n for(var i=0; i!==bodies.length; i++){\n bodies[i].index = i;\n }\n\n this.collisionMatrix.setNumObjects(n);\n this.removeBodyEvent.body = body;\n this.dispatchEvent(this.removeBodyEvent);\n }\n};\n\n/**\n * Remove a rigid body from the simulation.\n * @method removeBody\n * @param {Body} body\n */\nWorld.prototype.removeBody = World.prototype.remove;\n\n/**\n * Adds a material to the World.\n * @method addMaterial\n * @param {Material} m\n * @todo Necessary?\n */\nWorld.prototype.addMaterial = function(m){\n this.materials.push(m);\n};\n\n/**\n * Adds a contact material to the World\n * @method addContactMaterial\n * @param {ContactMaterial} cmat\n */\nWorld.prototype.addContactMaterial = function(cmat) {\n\n // Add contact material\n this.contactmaterials.push(cmat);\n\n // Add current contact material to the material table\n this.contactMaterialTable.set(cmat.materials[0].id,cmat.materials[1].id,cmat);\n};\n\n// performance.now()\nif(typeof performance === 'undefined'){\n performance = {};\n}\nif(!performance.now){\n var nowOffset = Date.now();\n if (performance.timing && performance.timing.navigationStart){\n nowOffset = performance.timing.navigationStart;\n }\n performance.now = function(){\n return Date.now() - nowOffset;\n };\n}\n\nvar step_tmp1 = new Vec3();\n\n/**\n * Step the physics world forward in time.\n *\n * There are two modes. The simple mode is fixed timestepping without interpolation. In this case you only use the first argument. The second case uses interpolation. In that you also provide the time since the function was last used, as well as the maximum fixed timesteps to take.\n *\n * @method step\n * @param {Number} dt The fixed time step size to use.\n * @param {Number} [timeSinceLastCalled] The time elapsed since the function was last called.\n * @param {Number} [maxSubSteps=10] Maximum number of fixed steps to take per function call.\n *\n * @example\n * // fixed timestepping without interpolation\n * world.step(1/60);\n *\n * @see http://bulletphysics.org/mediawiki-1.5.8/index.php/Stepping_The_World\n */\nWorld.prototype.step = function(dt, timeSinceLastCalled, maxSubSteps){\n maxSubSteps = maxSubSteps || 10;\n timeSinceLastCalled = timeSinceLastCalled || 0;\n\n if(timeSinceLastCalled === 0){ // Fixed, simple stepping\n\n this.internalStep(dt);\n\n // Increment time\n this.time += dt;\n\n } else {\n\n // Compute the number of fixed steps we should have taken since the last step\n var internalSteps = Math.floor((this.time + timeSinceLastCalled) / dt) - Math.floor(this.time / dt);\n internalSteps = Math.min(internalSteps,maxSubSteps);\n\n // Do some fixed steps to catch up\n var t0 = performance.now();\n for(var i=0; i!==internalSteps; i++){\n this.internalStep(dt);\n if(performance.now() - t0 > dt * 1000){\n // We are slower than real-time. Better bail out.\n break;\n }\n }\n\n // Increment internal clock\n this.time += timeSinceLastCalled;\n\n // Compute \"Left over\" time step\n var h = this.time % dt;\n var h_div_dt = h / dt;\n var interpvelo = step_tmp1;\n var bodies = this.bodies;\n\n for(var j=0; j !== bodies.length; j++){\n var b = bodies[j];\n if(b.type !== Body.STATIC && b.sleepState !== Body.SLEEPING){\n\n // Interpolate\n b.position.vsub(b.previousPosition, interpvelo);\n interpvelo.scale(h_div_dt, interpvelo);\n b.position.vadd(interpvelo, b.interpolatedPosition);\n\n // TODO: interpolate quaternion\n // b.interpolatedAngle = b.angle + (b.angle - b.previousAngle) * h_div_dt;\n\n } else {\n\n // For static bodies, just copy. Who else will do it?\n b.interpolatedPosition.copy(b.position);\n b.interpolatedQuaternion.copy(b.quaternion);\n }\n }\n }\n};\n\n/**\n * Step the simulation\n * @method step\n * @param {Number} dt\n */\nvar World_step_postStepEvent = {type:\"postStep\"}, // Reusable event objects to save memory\n World_step_preStepEvent = {type:\"preStep\"},\n World_step_collideEvent = {type:\"collide\", body:null, contact:null },\n World_step_oldContacts = [], // Pools for unused objects\n World_step_frictionEquationPool = [],\n World_step_p1 = [], // Reusable arrays for collision pairs\n World_step_p2 = [],\n World_step_gvec = new Vec3(), // Temporary vectors and quats\n World_step_vi = new Vec3(),\n World_step_vj = new Vec3(),\n World_step_wi = new Vec3(),\n World_step_wj = new Vec3(),\n World_step_t1 = new Vec3(),\n World_step_t2 = new Vec3(),\n World_step_rixn = new Vec3(),\n World_step_rjxn = new Vec3(),\n World_step_step_q = new Quaternion(),\n World_step_step_w = new Quaternion(),\n World_step_step_wq = new Quaternion(),\n invI_tau_dt = new Vec3();\nWorld.prototype.internalStep = function(dt){\n this.dt = dt;\n\n var world = this,\n that = this,\n contacts = this.contacts,\n p1 = World_step_p1,\n p2 = World_step_p2,\n N = this.numObjects(),\n bodies = this.bodies,\n solver = this.solver,\n gravity = this.gravity,\n doProfiling = this.doProfiling,\n profile = this.profile,\n DYNAMIC = Body.DYNAMIC,\n profilingStart,\n constraints = this.constraints,\n frictionEquationPool = World_step_frictionEquationPool,\n gnorm = gravity.norm(),\n gx = gravity.x,\n gy = gravity.y,\n gz = gravity.z,\n i=0;\n\n if(doProfiling){\n profilingStart = performance.now();\n }\n\n // Add gravity to all objects\n for(i=0; i!==N; i++){\n var bi = bodies[i];\n if(bi.type & DYNAMIC){ // Only for dynamic bodies\n var f = bi.force, m = bi.mass;\n f.x += m*gx;\n f.y += m*gy;\n f.z += m*gz;\n }\n }\n\n // Update subsystems\n for(var i=0, Nsubsystems=this.subsystems.length; i!==Nsubsystems; i++){\n this.subsystems[i].update();\n }\n\n // Collision detection\n if(doProfiling){ profilingStart = performance.now(); }\n p1.length = 0; // Clean up pair arrays from last step\n p2.length = 0;\n this.broadphase.collisionPairs(this,p1,p2);\n if(doProfiling){ profile.broadphase = performance.now() - profilingStart; }\n\n // Remove constrained pairs with collideConnected == false\n var Nconstraints = constraints.length;\n for(i=0; i!==Nconstraints; i++){\n var c = constraints[i];\n if(!c.collideConnected){\n for(var j = p1.length-1; j>=0; j-=1){\n if( (c.bodyA === p1[j] && c.bodyB === p2[j]) ||\n (c.bodyB === p1[j] && c.bodyA === p2[j])){\n p1.splice(j, 1);\n p2.splice(j, 1);\n }\n }\n }\n }\n\n this.collisionMatrixTick();\n\n // Generate contacts\n if(doProfiling){ profilingStart = performance.now(); }\n var oldcontacts = World_step_oldContacts;\n var NoldContacts = contacts.length;\n\n for(i=0; i!==NoldContacts; i++){\n oldcontacts.push(contacts[i]);\n }\n contacts.length = 0;\n\n // Transfer FrictionEquation from current list to the pool for reuse\n var NoldFrictionEquations = this.frictionEquations.length;\n for(i=0; i!==NoldFrictionEquations; i++){\n frictionEquationPool.push(this.frictionEquations[i]);\n }\n this.frictionEquations.length = 0;\n\n this.narrowphase.getContacts(\n p1,\n p2,\n this,\n contacts,\n oldcontacts, // To be reused\n this.frictionEquations,\n frictionEquationPool\n );\n\n if(doProfiling){\n profile.narrowphase = performance.now() - profilingStart;\n }\n\n // Loop over all collisions\n if(doProfiling){\n profilingStart = performance.now();\n }\n\n // Add all friction eqs\n for (var i = 0; i < this.frictionEquations.length; i++) {\n solver.addEquation(this.frictionEquations[i]);\n }\n\n var ncontacts = contacts.length;\n for(var k=0; k!==ncontacts; k++){\n\n // Current contact\n var c = contacts[k];\n\n // Get current collision indeces\n var bi = c.bi,\n bj = c.bj,\n si = c.si,\n sj = c.sj;\n\n // Get collision properties\n var cm;\n if(bi.material && bj.material){\n cm = this.getContactMaterial(bi.material,bj.material) || this.defaultContactMaterial;\n } else {\n cm = this.defaultContactMaterial;\n }\n\n // c.enabled = bi.collisionResponse && bj.collisionResponse && si.collisionResponse && sj.collisionResponse;\n\n var mu = cm.friction;\n // c.restitution = cm.restitution;\n\n // If friction or restitution were specified in the material, use them\n if(bi.material && bj.material){\n if(bi.material.friction >= 0 && bj.material.friction >= 0){\n mu = bi.material.friction * bj.material.friction;\n }\n\n if(bi.material.restitution >= 0 && bj.material.restitution >= 0){\n c.restitution = bi.material.restitution * bj.material.restitution;\n }\n }\n\n\t\t// c.setSpookParams(\n // cm.contactEquationStiffness,\n // cm.contactEquationRelaxation,\n // dt\n // );\n\n\t\tsolver.addEquation(c);\n\n\t\t// // Add friction constraint equation\n\t\t// if(mu > 0){\n\n\t\t// \t// Create 2 tangent equations\n\t\t// \tvar mug = mu * gnorm;\n\t\t// \tvar reducedMass = (bi.invMass + bj.invMass);\n\t\t// \tif(reducedMass > 0){\n\t\t// \t\treducedMass = 1/reducedMass;\n\t\t// \t}\n\t\t// \tvar pool = frictionEquationPool;\n\t\t// \tvar c1 = pool.length ? pool.pop() : new FrictionEquation(bi,bj,mug*reducedMass);\n\t\t// \tvar c2 = pool.length ? pool.pop() : new FrictionEquation(bi,bj,mug*reducedMass);\n\t\t// \tthis.frictionEquations.push(c1, c2);\n\n\t\t// \tc1.bi = c2.bi = bi;\n\t\t// \tc1.bj = c2.bj = bj;\n\t\t// \tc1.minForce = c2.minForce = -mug*reducedMass;\n\t\t// \tc1.maxForce = c2.maxForce = mug*reducedMass;\n\n\t\t// \t// Copy over the relative vectors\n\t\t// \tc1.ri.copy(c.ri);\n\t\t// \tc1.rj.copy(c.rj);\n\t\t// \tc2.ri.copy(c.ri);\n\t\t// \tc2.rj.copy(c.rj);\n\n\t\t// \t// Construct tangents\n\t\t// \tc.ni.tangents(c1.t, c2.t);\n\n // // Set spook params\n // c1.setSpookParams(cm.frictionEquationStiffness, cm.frictionEquationRelaxation, dt);\n // c2.setSpookParams(cm.frictionEquationStiffness, cm.frictionEquationRelaxation, dt);\n\n // c1.enabled = c2.enabled = c.enabled;\n\n\t\t// \t// Add equations to solver\n\t\t// \tsolver.addEquation(c1);\n\t\t// \tsolver.addEquation(c2);\n\t\t// }\n\n if( bi.allowSleep &&\n bi.type === Body.DYNAMIC &&\n bi.sleepState === Body.SLEEPING &&\n bj.sleepState === Body.AWAKE &&\n bj.type !== Body.STATIC\n ){\n var speedSquaredB = bj.velocity.norm2() + bj.angularVelocity.norm2();\n var speedLimitSquaredB = Math.pow(bj.sleepSpeedLimit,2);\n if(speedSquaredB >= speedLimitSquaredB*2){\n bi._wakeUpAfterNarrowphase = true;\n }\n }\n\n if( bj.allowSleep &&\n bj.type === Body.DYNAMIC &&\n bj.sleepState === Body.SLEEPING &&\n bi.sleepState === Body.AWAKE &&\n bi.type !== Body.STATIC\n ){\n var speedSquaredA = bi.velocity.norm2() + bi.angularVelocity.norm2();\n var speedLimitSquaredA = Math.pow(bi.sleepSpeedLimit,2);\n if(speedSquaredA >= speedLimitSquaredA*2){\n bj._wakeUpAfterNarrowphase = true;\n }\n }\n\n // Now we know that i and j are in contact. Set collision matrix state\n\t\tthis.collisionMatrix.set(bi, bj, true);\n\n if (!this.collisionMatrixPrevious.get(bi, bj)) {\n // First contact!\n // We reuse the collideEvent object, otherwise we will end up creating new objects for each new contact, even if there's no event listener attached.\n World_step_collideEvent.body = bj;\n World_step_collideEvent.contact = c;\n bi.dispatchEvent(World_step_collideEvent);\n\n World_step_collideEvent.body = bi;\n bj.dispatchEvent(World_step_collideEvent);\n }\n }\n if(doProfiling){\n profile.makeContactConstraints = performance.now() - profilingStart;\n profilingStart = performance.now();\n }\n\n // Wake up bodies\n for(i=0; i!==N; i++){\n var bi = bodies[i];\n if(bi._wakeUpAfterNarrowphase){\n bi.wakeUp();\n bi._wakeUpAfterNarrowphase = false;\n }\n }\n\n // Add user-added constraints\n var Nconstraints = constraints.length;\n for(i=0; i!==Nconstraints; i++){\n var c = constraints[i];\n c.update();\n for(var j=0, Neq=c.equations.length; j!==Neq; j++){\n var eq = c.equations[j];\n solver.addEquation(eq);\n }\n }\n\n // Solve the constrained system\n solver.solve(dt,this);\n\n if(doProfiling){\n profile.solve = performance.now() - profilingStart;\n }\n\n // Remove all contacts from solver\n solver.removeAllEquations();\n\n // Apply damping, see http://code.google.com/p/bullet/issues/detail?id=74 for details\n var pow = Math.pow;\n for(i=0; i!==N; i++){\n var bi = bodies[i];\n if(bi.type & DYNAMIC){ // Only for dynamic bodies\n var ld = pow(1.0 - bi.linearDamping,dt);\n var v = bi.velocity;\n v.mult(ld,v);\n var av = bi.angularVelocity;\n if(av){\n var ad = pow(1.0 - bi.angularDamping,dt);\n av.mult(ad,av);\n }\n }\n }\n\n this.dispatchEvent(World_step_preStepEvent);\n\n // Invoke pre-step callbacks\n for(i=0; i!==N; i++){\n var bi = bodies[i];\n if(bi.preStep){\n bi.preStep.call(bi);\n }\n }\n\n // Leap frog\n // vnew = v + h*f/m\n // xnew = x + h*vnew\n if(doProfiling){\n profilingStart = performance.now();\n }\n var q = World_step_step_q;\n var w = World_step_step_w;\n var wq = World_step_step_wq;\n var stepnumber = this.stepnumber;\n var DYNAMIC_OR_KINEMATIC = Body.DYNAMIC | Body.KINEMATIC;\n var quatNormalize = stepnumber % (this.quatNormalizeSkip+1) === 0;\n var quatNormalizeFast = this.quatNormalizeFast;\n var half_dt = dt * 0.5;\n var PLANE = Shape.types.PLANE,\n CONVEX = Shape.types.CONVEXPOLYHEDRON;\n\n for(i=0; i!==N; i++){\n var b = bodies[i],\n force = b.force,\n tau = b.torque;\n if((b.type & DYNAMIC_OR_KINEMATIC) && b.sleepState !== Body.SLEEPING){ // Only for dynamic\n var velo = b.velocity,\n angularVelo = b.angularVelocity,\n pos = b.position,\n quat = b.quaternion,\n invMass = b.invMass,\n invInertia = b.invInertiaWorld;\n\n velo.x += force.x * invMass * dt;\n velo.y += force.y * invMass * dt;\n velo.z += force.z * invMass * dt;\n\n if(b.angularVelocity){\n invInertia.vmult(tau,invI_tau_dt);\n invI_tau_dt.mult(dt,invI_tau_dt);\n invI_tau_dt.vadd(angularVelo,angularVelo);\n }\n\n // Use new velocity - leap frog\n pos.x += velo.x * dt;\n pos.y += velo.y * dt;\n pos.z += velo.z * dt;\n\n if(b.angularVelocity){\n w.set(angularVelo.x, angularVelo.y, angularVelo.z, 0);\n w.mult(quat,wq);\n quat.x += half_dt * wq.x;\n quat.y += half_dt * wq.y;\n quat.z += half_dt * wq.z;\n quat.w += half_dt * wq.w;\n if(quatNormalize){\n if(quatNormalizeFast){\n quat.normalizeFast();\n } else {\n quat.normalize();\n }\n }\n }\n\n if(b.aabb){\n b.aabbNeedsUpdate = true;\n }\n\n // Update world inertia\n if(b.updateInertiaWorld){\n b.updateInertiaWorld();\n }\n }\n }\n this.clearForces();\n\n this.broadphase.dirty = true;\n\n if(doProfiling){\n profile.integrate = performance.now() - profilingStart;\n }\n\n // Update world time\n this.time += dt;\n this.stepnumber += 1;\n\n this.dispatchEvent(World_step_postStepEvent);\n\n // Invoke post-step callbacks\n for(i=0; i!==N; i++){\n var bi = bodies[i];\n var postStep = bi.postStep;\n if(postStep){\n postStep.call(bi);\n }\n }\n\n // Sleeping update\n if(this.allowSleep){\n for(i=0; i!==N; i++){\n bodies[i].sleepTick(this.time);\n }\n }\n};\n\n/**\n * Sets all body forces in the world to zero.\n * @method clearForces\n */\nWorld.prototype.clearForces = function(){\n var bodies = this.bodies;\n var N = bodies.length;\n for(var i=0; i !== N; i++){\n var b = bodies[i],\n force = b.force,\n tau = b.torque;\n\n b.force.set(0,0,0);\n b.torque.set(0,0,0);\n }\n};\n\n},{\"../collision/AABB\":3,\"../collision/ArrayCollisionMatrix\":4,\"../collision/NaiveBroadphase\":7,\"../collision/Ray\":9,\"../collision/RaycastResult\":10,\"../equations/ContactEquation\":19,\"../equations/FrictionEquation\":21,\"../material/ContactMaterial\":24,\"../material/Material\":25,\"../math/Quaternion\":28,\"../math/Vec3\":30,\"../objects/Body\":31,\"../shapes/Shape\":43,\"../solver/GSSolver\":46,\"../utils/EventTarget\":49,\"../utils/TupleDictionary\":52,\"../utils/Vec3Pool\":54,\"./Narrowphase\":55}]},{},[2])\n(2)\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/cannon/build/cannon.js\n// module id = 8\n// module chunks = 0","import { ClientEngine } from \"@rtsdk/lance-topia\";\nimport WiggleRenderer from \"../client/WiggleRenderer\";\n\nexport default class WiggleClientEngine extends ClientEngine {\n constructor(gameEngine, options) {\n super(gameEngine, options, WiggleRenderer);\n\n const params = new Proxy(new URLSearchParams(window.location.search), {\n get: (searchParams, prop) => searchParams.get(prop),\n });\n this.roomName = params[\"assetId\"];\n\n // show try-again button\n gameEngine.on(\"objectDestroyed\", (obj) => {\n if (obj.playerId === gameEngine.playerId) {\n document.body.classList.add(\"lostGame\");\n document.querySelector(\"#tryAgain\").disabled = false;\n document.querySelector(\"#tryAgain\").className = \"show\";\n }\n });\n\n // restart game\n document.querySelector(\"#tryAgain\").addEventListener(\"click\", (clickEvent) => {\n this.socket.emit(\"requestRestart\");\n clickEvent.currentTarget.disabled = true;\n document.querySelector(\"#tryAgain\").className = \"hidden\";\n document.body.classList.remove(\"lostGame\");\n });\n\n this.mouseX = null;\n this.mouseY = null;\n\n document.addEventListener(\"mousemove\", this.updateMouseXY.bind(this), false);\n document.addEventListener(\"mouseenter\", this.updateMouseXY.bind(this), false);\n document.addEventListener(\"touchmove\", this.updateMouseXY.bind(this), false);\n document.addEventListener(\"touchenter\", this.updateMouseXY.bind(this), false);\n this.gameEngine.on(\"client__preStep\", this.sendMouseAngle.bind(this));\n }\n\n updateMouseXY(e) {\n e.preventDefault();\n if (e.touches) e = e.touches.item(0);\n this.mouseX = e.pageX;\n this.mouseY = e.pageY;\n }\n\n sendMouseAngle() {\n let player = this.gameEngine.world.queryObject({ playerId: this.gameEngine.playerId });\n if (this.mouseY === null || player === null) return;\n\n let mouseX = (this.mouseX - document.body.clientWidth / 2) / this.zoom;\n let mouseY = (this.mouseY - document.body.clientHeight / 2) / this.zoom;\n let dx = mouseY - player.position.y;\n let dy = mouseX - player.position.x;\n if (Math.sqrt(dx * dx + dy * dy) < 0.5) {\n this.sendInput(this.gameEngine.directionStop, { movement: true });\n return;\n }\n\n let angle = Math.atan2(dx, dy);\n this.sendInput(angle, { movement: true });\n }\n\n connect() {\n return super.connect().then(() => {\n this.socket.on(\"spectating\", () => {\n console.log(\"spectating\");\n document.querySelector(\"#spectating\").className = \"show\";\n });\n\n this.socket.on(\"inzone\", () => {\n document.querySelector(\"#spectating\").className = \"hidden\";\n document.querySelector(\"#joinGame\").className = \"show\";\n document.querySelector(\"#joinGame\").addEventListener(\"click\", (clickEvent) => {\n this.socket.emit(\"requestRestart\");\n document.querySelector(\"#joinGame\").className = \"hidden\";\n document.querySelector(\"#instructions\").className = \"hidden\";\n clickEvent.currentTarget.disabled = true;\n });\n });\n\n this.socket.on(\"error\", (e) => {\n console.error(\"error\", e);\n if (e?.message) document.querySelector(\"#error\").innerHTML = e.message;\n });\n\n this.socket.on(\"connection_error\", (e) => {\n console.error(\"Socket connection error\", e);\n });\n\n this.socket.on(\"disconnect\", (e) => {\n console.log(\"disconnected\");\n document.body.classList.add(\"disconnected\");\n document.body.classList.remove(\"gameActive\");\n });\n });\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/client/WiggleClientEngine.js","import { Renderer, TwoVector } from \"@rtsdk/lance-topia\";\nimport Wiggle from \"../common/Wiggle\";\nimport Food from \"../common/Food\";\n\nlet ctx = null;\nlet canvas = null;\nlet game = null;\n\nexport default class WiggleRenderer extends Renderer {\n constructor(gameEngine, clientEngine) {\n super(gameEngine, clientEngine);\n game = gameEngine;\n canvas = document.createElement(\"canvas\");\n canvas.width = window.innerWidth;\n canvas.height = window.innerHeight;\n document.body.insertBefore(canvas, document.getElementById(\"logo\"));\n game.w = canvas.width;\n game.h = canvas.height;\n clientEngine.zoom = game.h / game.spaceHeight;\n if (game.w / game.spaceWidth < clientEngine.zoom) clientEngine.zoom = game.w / game.spaceWidth;\n ctx = canvas.getContext(\"2d\");\n ctx.lineWidth = 2 / clientEngine.zoom;\n ctx.strokeStyle = ctx.fillStyle = \"white\";\n }\n\n draw(t, dt) {\n super.draw(t, dt);\n\n // Clear the canvas\n ctx.clearRect(0, 0, game.w, game.h);\n\n // Transform the canvas\n // Note that we need to flip the y axis since Canvas pixel coordinates\n // goes from top to bottom, while physics does the opposite.\n ctx.save();\n ctx.translate(game.w / 2, game.h / 2); // Translate to the center\n ctx.scale(this.clientEngine.zoom, this.clientEngine.zoom); // Zoom in and flip y axis\n\n // Draw all things\n game.world.forEachObject((id, obj) => {\n if (obj instanceof Wiggle) this.drawWiggle(obj, t);\n else if (obj instanceof Food) this.drawFood(obj);\n });\n\n ctx.restore();\n }\n\n drawWiggle(w, time) {\n const playerColor = \"#39FF14\";\n const nonPlayerColor = \"#2121DE\";\n\n // draw head and body\n let isPlayer = w.playerId === this.gameEngine.playerId;\n let x = w.position.x;\n let y = w.position.y;\n if (isPlayer) ctx.fillStyle = playerColor;\n else ctx.fillStyle = nonPlayerColor;\n this.drawCircle(x, y, game.headRadius, true);\n for (let i = 0; i < w.bodyParts.length; i++) {\n let nextPos = w.bodyParts[i];\n if (isPlayer) ctx.fillStyle = playerColor;\n else ctx.fillStyle = nonPlayerColor;\n this.drawCircle(nextPos.x, nextPos.y, game.bodyRadius, true);\n }\n\n // draw eyes\n let angle = +w.direction;\n if (w.direction === game.directionStop) {\n angle = -Math.PI / 2;\n }\n let eye1 = new TwoVector(Math.cos(angle + game.eyeAngle), Math.sin(angle + game.eyeAngle));\n let eye2 = new TwoVector(Math.cos(angle - game.eyeAngle), Math.sin(angle - game.eyeAngle));\n eye1.multiplyScalar(game.eyeDist).add(w.position);\n eye2.multiplyScalar(game.eyeDist).add(w.position);\n ctx.fillStyle = \"black\";\n this.drawCircle(eye1.x, eye1.y, game.eyeRadius, true);\n this.drawCircle(eye2.x, eye2.y, game.eyeRadius, true);\n\n ctx.fillStyle = \"white\";\n const fontSize = 0.4;\n ctx.font = `${fontSize}px Arial`;\n var textToFill = w.name;\n ctx.fillText(textToFill, x - textToFill.length / (4 / fontSize), y - 0.2);\n ctx.fillStyle = \"white\";\n\n // update status\n const timeInt = parseInt(time);\n // Only update DOM on every 18th or so draw\n if (isPlayer && timeInt % 18 === 0) {\n document.getElementById(\"wiggle-length\").innerHTML = \"Your Length: \" + w.bodyParts.length;\n document.getElementById(\"score\").innerHTML = \"Your Score: \" + w.score;\n }\n }\n\n drawFood(f) {\n ctx.strokeStyle = ctx.fillStyle = \"#FD0000\";\n\n this.drawCircle(f.position.x, f.position.y, game.foodRadius, true);\n ctx.strokeStyle = ctx.fillStyle = \"White\";\n }\n\n drawCircle(x, y, radius, fill) {\n ctx.beginPath();\n ctx.arc(x, y, radius, 0, 2 * Math.PI);\n fill ? ctx.fill() : ctx.stroke();\n ctx.closePath();\n }\n\n drawBounds() {\n ctx.beginPath();\n ctx.moveTo(-game.spaceWidth / 2, -game.spaceHeight / 2);\n ctx.lineTo(-game.spaceWidth / 2, game.spaceHeight / 2);\n ctx.lineTo(game.spaceWidth / 2, game.spaceHeight / 2);\n ctx.lineTo(game.spaceWidth / 2, -game.spaceHeight / 2);\n ctx.lineTo(-game.spaceWidth / 2, -game.spaceHeight / 2);\n ctx.closePath();\n ctx.stroke();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/client/WiggleRenderer.js","\"use strict\";\n\nimport { GameEngine, SimplePhysicsEngine, TwoVector } from \"@rtsdk/lance-topia\";\nimport Wiggle from \"./Wiggle\";\nimport Food from \"./Food\";\n\nexport default class WiggleGameEngine extends GameEngine {\n constructor(options) {\n super(options);\n this.physicsEngine = new SimplePhysicsEngine({\n gameEngine: this,\n collisions: { autoResolve: false },\n });\n this.on(\"preStep\", this.moveAll.bind(this));\n\n // game variables\n Object.assign(this, {\n foodRadius: 0.13,\n headRadius: 0.1,\n bodyRadius: 0.2,\n eyeDist: 0.12,\n eyeRadius: 0.05,\n eyeAngle: 0.8,\n spaceWidth: 8,\n spaceHeight: 20,\n moveDist: 0.035,\n foodCount: 25,\n eatDistance: 0.3,\n collideDistance: 0.2,\n startBodyLength: 15,\n aiCount: 1,\n directionStop: 100,\n hungerTick: 0.01,\n xpPerBlock: 100,\n xpPerFood: 1,\n xpLevelConstant: 0.04,\n error: \"\",\n });\n }\n\n registerClasses(serializer) {\n serializer.registerClass(Wiggle);\n serializer.registerClass(Food);\n }\n\n start() {\n super.start();\n }\n\n randPos() {\n let x = (Math.random() - 0.5) * this.spaceWidth;\n let y = (Math.random() - 0.5) * this.spaceHeight;\n return new TwoVector(x, y);\n }\n\n moveAll(stepInfo) {\n if (stepInfo.isReenact) return;\n\n this.world.forEachObject((id, obj) => {\n if (obj instanceof Wiggle) {\n // if the position changed, add a body part and trim the length\n let pos = obj.position.clone();\n if (obj.bodyParts.length === 0 || pos.subtract(obj.bodyParts[obj.bodyParts.length - 1]).length() > 0.05) {\n obj.bodyParts.push(obj.position.clone());\n while (obj.bodyLength < obj.bodyParts.length) obj.bodyParts.shift();\n }\n\n // if not stopped, move along\n if (obj.direction === this.directionStop) return;\n let move = new TwoVector(Math.cos(obj.direction), Math.sin(obj.direction));\n move.multiplyScalar(this.moveDist);\n obj.position.add(move);\n obj.position.y = Math.min(obj.position.y, this.spaceHeight / 2);\n obj.position.y = Math.max(obj.position.y, -this.spaceHeight / 2);\n obj.position.x = Math.min(obj.position.x, this.spaceWidth / 2);\n obj.position.x = Math.max(obj.position.x, -this.spaceWidth / 2);\n }\n });\n }\n\n processInput(inputData, playerId) {\n super.processInput(inputData, playerId);\n\n // get the player's primary object\n let player = this.world.queryObject({ playerId });\n if (player) {\n player.direction = inputData.input;\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/common/WiggleGameEngine.js"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap 8aa295a9d13b8efe8776","webpack:///../../src/GameWorld.js","webpack:///../../node_modules/type/value/is.js","webpack:///../../node_modules/type/object/is.js","webpack:///../../node_modules/type/prototype/is.js","webpack:///../../node_modules/type/function/is.js","webpack:///../../node_modules/type/plain-function/is.js","webpack:///../../node_modules/es5-ext/object/assign/is-implemented.js","webpack:///../../node_modules/es5-ext/object/keys/is-implemented.js","webpack:///../../node_modules/es5-ext/function/noop.js","webpack:///../../node_modules/es5-ext/object/is-value.js","webpack:///../../node_modules/es5-ext/object/keys/shim.js","webpack:///../../node_modules/es5-ext/object/keys/index.js","webpack:///../../node_modules/es5-ext/object/valid-value.js","webpack:///../../node_modules/es5-ext/object/assign/shim.js","webpack:///../../node_modules/es5-ext/object/assign/index.js","webpack:///../../node_modules/es5-ext/object/normalize-options.js","webpack:///../../node_modules/es5-ext/string/#/contains/is-implemented.js","webpack:///../../node_modules/es5-ext/string/#/contains/shim.js","webpack:///../../node_modules/es5-ext/string/#/contains/index.js","webpack:///../../node_modules/d/index.js","webpack:///../../node_modules/es5-ext/object/valid-callable.js","webpack:///../../node_modules/event-emitter/index.js","webpack:///../../src/game/Timer.js","webpack:///../../src/lib/Trace.js","webpack:///../../src/GameEngine.js","webpack:///../../src/physics/PhysicsEngine.js","webpack:///../../src/lib/Utils.js","webpack:///../../src/serialize/BaseTypes.js","webpack:///../../src/serialize/Serializable.js","webpack:///../../src/serialize/TwoVector.js","webpack:///../../src/physics/SimplePhysics/HSHG.js","webpack:///../../src/physics/SimplePhysics/HSHGCollisionDetection.js","webpack:///../../src/physics/SimplePhysics/BruteForceCollisionDetection.js","webpack:///../../src/physics/SimplePhysicsEngine.js","webpack:///../../src/physics/CannonPhysicsEngine.js","webpack:///../../src/serialize/ThreeVector.js","webpack:///../../src/serialize/Quaternion.js","webpack:///../../src/serialize/GameObject.js","webpack:///../../src/lib/MathUtils.js","webpack:///../../src/serialize/DynamicObject.js","webpack:///../../src/serialize/PhysicalObject2D.js","webpack:///../../src/serialize/PhysicalObject3D.js","webpack:///../../src/lib/lib.js","webpack:///../../node_modules/engine.io-parser/build/esm/commons.js","webpack:///../../node_modules/engine.io-parser/build/esm/encodePacket.browser.js","webpack:///../../node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js","webpack:///../../node_modules/engine.io-parser/build/esm/decodePacket.browser.js","webpack:///../../node_modules/engine.io-parser/build/esm/index.js","webpack:///../../node_modules/@socket.io/component-emitter/index.mjs","webpack:///../../node_modules/engine.io-client/build/esm/globalThis.browser.js","webpack:///../../node_modules/engine.io-client/build/esm/util.js","webpack:///../../node_modules/engine.io-client/build/esm/contrib/parseqs.js","webpack:///../../node_modules/engine.io-client/build/esm/transport.js","webpack:///../../node_modules/engine.io-client/build/esm/contrib/yeast.js","webpack:///../../node_modules/engine.io-client/build/esm/contrib/has-cors.js","webpack:///../../node_modules/engine.io-client/build/esm/transports/xmlhttprequest.browser.js","webpack:///../../node_modules/engine.io-client/build/esm/transports/polling.js","webpack:///../../node_modules/engine.io-client/build/esm/transports/websocket-constructor.browser.js","webpack:///../../node_modules/engine.io-client/build/esm/transports/websocket.js","webpack:///../../node_modules/engine.io-client/build/esm/transports/webtransport.js","webpack:///../../node_modules/engine.io-client/build/esm/transports/index.js","webpack:///../../node_modules/engine.io-client/build/esm/contrib/parseuri.js","webpack:///../../node_modules/engine.io-client/build/esm/socket.js","webpack:///../../node_modules/socket.io-client/build/esm/url.js","webpack:///../../node_modules/socket.io-parser/build/esm/is-binary.js","webpack:///../../node_modules/socket.io-parser/build/esm/binary.js","webpack:///../../node_modules/socket.io-parser/build/esm/index.js","webpack:///../../node_modules/socket.io-client/build/esm/on.js","webpack:///../../node_modules/socket.io-client/build/esm/socket.js","webpack:///../../node_modules/socket.io-client/build/esm/contrib/backo2.js","webpack:///../../node_modules/socket.io-client/build/esm/manager.js","webpack:///../../node_modules/socket.io-client/build/esm/index.js","webpack:///../../src/lib/Scheduler.js","webpack:///../../src/syncStrategies/SyncStrategy.js","webpack:///../../src/syncStrategies/InterpolateStrategy.js","webpack:///../../src/syncStrategies/ExtrapolateStrategy.js","webpack:///../../src/syncStrategies/FrameSyncStrategy.js","webpack:///../../src/Synchronizer.js","webpack:///../../src/serialize/Serializer.js","webpack:///../../src/network/NetworkMonitor.js","webpack:///../../src/network/NetworkedEventFactory.js","webpack:///../../src/network/NetworkedEventCollection.js","webpack:///../../src/network/NetworkTransmitter.js","webpack:///../../src/ClientEngine.js","webpack:///../../src/controls/KeyboardControls.js","webpack:///../../src/render/Renderer.js","webpack:///../../src/render/aframe/system.js","webpack:///../../src/render/AFrameRenderer.js","webpack:///./src/common/Wiggle.js","webpack:///./src/common/Food.js","webpack:///./src/client/clientEntryPoint.js","webpack:///./node_modules/query-string/index.js","webpack:///./node_modules/strict-uri-encode/index.js","webpack:///./node_modules/object-assign/index.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/cannon/build/cannon.js","webpack:///./src/client/WiggleClientEngine.js","webpack:///./src/client/WiggleRenderer.js","webpack:///./src/common/WiggleGameEngine.js"],"names":["GameWorld","_classCallCheck","stepCount","objects","playerCount","idCount","_createClass","key","value","getNewId","possibleId","queryObjects","query","queriedObjects","forEachObject","id","object","conditions","push","playerId","roomName","AI","instanceType","components","forEach","componentClass","hasComponent","every","returnSingle","length","queryObject","Object","assign","addObject","removeObject","callback","_i","_Object$keys","keys","returnValue","_undefined$1","is$4","is","possibleTypes","is$3","hasOwnProperty","call","_typeof2","is$2","constructor","prototype","error","is$1","apply","classRe","functionToString","Function","toString","test","isImplemented$2","isImplemented","obj","foo","bar","trzy","isImplemented$1","e","noop","_undefined","isValue","val","keys$1","shim$2","shim","validValue","TypeError","max","Math","shim$1","dest","src","i","arguments","undefined","Array","create","process","normalizeOptions","opts1","result","options","str","contains","indexOf","String","searchString","d","module","exports","dscr","c","w","desc","configurable","enumerable","writable","gs","get","set","validCallable","fn","defineProperty","defineProperties","descriptor","on","once","off","emit","methods","descriptors","base","type","listener","data","__ee__","self","__eeOnceListener__","listeners","candidate","splice","l","args","slice","d_1","o","Timer","currentTime","isActive","idCounter","events","play","tick","event","eventId","startOffset","time","thisContext","destroy","destroyEvent","loop","timerEvent","TimerEvent","TYPES","repeat","add","single","timer","Trace","traceLevel","TRACE_DEBUG","traceBuffer","step","trace","bind","TRACE_ERROR","warn","TRACE_WARN","info","TRACE_INFO","debug","TRACE_ALL","level","dataCB","Error","concat","_typeof","Date","rotate","buffer","setStep","s","GameEngine","isServerSide","window","glob","global","LANCE","gameEngine","defaultOpts","TRACE_NONE","clientIDSpace","NaN","eventEmitter$1","eventEmitter","removeListener","findLocalShadow","serverObj","world","localId","Number","localObj","inputId","initWorld","worldSettings","start","_this","isReenact","timestamp","getTime","t","dt","physicsOnly","_this2","physicsEngine","objectFilter","Boolean","ignorePhysics","refreshFromPhysics","addObjectToWorld","serverCopyArrived","onAddToWorld","processInput","inputDesc","isServer","messageIndex","input","removeObjectFromWorld","objectId","onRemoveFromWorld","isOwnedByPlayer","registerClasses","serializer","getPlayerGameOverResult","PhysicsEngine","console","Utils","hashStr","bits","hash","charCodeAt","pow","arrayBuffersEqual","buf1","buf2","byteLength","dv1","Int8Array","dv2","httpGetPromise","url","Promise","resolve","reject","req","XMLHttpRequest","open","onload","status","JSON","parse","responseText","onerror","send","BaseTypes","FLOAT32","INT32","INT16","INT8","UINT8","STRING","CLASSINSTANCE","LIST","Serializable","serialize","bufferOffset","netScheme","dataBuffer","dataView","classId","localBufferOffset","name","dry","bufferSize","ArrayBuffer","DataView","setUint8","Uint8Array","BYTES_PER_ELEMENT","_iterator","_createForOfIteratorHelper","sort","_step","n","done","property","writeDataView","Uint16Array","objectInstanceBufferOffset","_iterator2","_step2","item","itemType","listBufferOffset","getTypeByteSize","err","f","prunedStringsClone","prevObject","deserialize","isString","p","hasChanged","changedStrings","filter","prunedCopy","syncTo","other","_i2","_Object$keys2","TwoVector","_Serializable","_inherits","_super","_createSuper","x","y","_possibleConstructorReturn","_assertThisInitialized","round3","round","multiply","multiplyScalar","subtract","sqrt","normalize","copy","sourceObj","clone","lerp","target","getBendingDelta","increment","percent","min","increments","update_RECOMPUTE","grid","meta","objAABB","newObjHash","_globalObjects","HSHG","getAABB","toHash","update_REMOVEALL","testAABBOverlap","objA","objB","a","b","getLongestAABBEdge","abs","MAX_OBJECT_CELL_DENSITY","INITIAL_GRID_LENGTH","HIERARCHY_FACTOR","HIERARCHY_FACTOR_SQRT","SQRT2","UPDATE_METHOD","_grids","cellSize","objSize","oneGrid","newGrid","globalObjectsIndex","Grid","initCells","replacementObj","pop","update","queryForCollisionPairs","broadOverlapTestCallback","j","k","cell","offset","adjacentCell","biggerGrid","objAAABB","objAHashInBiggerGrid","possibleCollisions","broadOverlapTest","occupiedCells","objectContainer","neighborOffsetArray","allCells","allCellsIndex","allObjects","cellCount","parentHierarchy","inverseCellSize","rowColumnCount","xyHashMask","sharedInnerOffsets","_parentHierarchy","gridLength","wh","isOnRightEdge","isOnLeftEdge","isOnTopEdge","isOnBottomEdge","innerOffsets","leftOffset","rightOffset","topOffset","bottomOffset","uniqueOffsets","Cell","z","xHash","yHash","objHash","targetCell","occupiedCellsIndex","objectContainerIndex","allGridObjectsIndex","expandGrid","containerIndex","replacementCell","currentCellCount","newCellCount","newRowColumnCount","newXYHashMask","_private","HSHGCollisionDetection","COLLISION_DISTANCE","init","previousCollisionPairs","stepCollidingPairs","detect","reduce","accumulator","currentValue","pairId","getArrayPairId","o1","o2","pairObj","_pairId","_pairObj","areObjectsColliding","arrayPair","sortedArrayPair","differenceVector","BruteForceCollisionDetection","autoResolve","collisionPairs","findCollision","isStatic","collidesWith","collisionDistance","position","o1Box","getBox","o2Box","xMin","xMax","yMin","yMax","shiftY1","shiftY2","shiftX1","shiftX2","smallestYShift","smallestXShift","velocity","checkPair","id1","id2","join","split","_keys","k1","k2","width","height","dv","dx","SimplePhysicsEngine","_PhysicsEngine","collisions","collisionDetection","gravity","collisionOptions","objectStep","isRotatingRight","angle","rotationSpeed","isRotatingLeft","isAccelerating","rad","PI","cos","sin","acceleration","velMagnitude","maxSpeed","friction","worldWrap","objId","ob","CANNON","require","CannonPhysicsEngine","World","quatNormalizeSkip","quatNormalizeFast","broadphase","NaiveBroadphase","addSphere","radius","mass","shape","Sphere","body","Body","addBody","addBox","Box","Vec3","material","Material","addCylinder","radiusTop","radiusBottom","numSegments","Cylinder","removeBody","ThreeVector","MAX_DEL_THETA","Quaternion","axisAngle","toAxisAngle","axis","acos","divS","setFromAxisAngle","halfAngle","conjugate","aw","ax","ay","az","bw","bx","by","bz","slerp","bending","cosHalfTheta","sqrSinHalfTheta","EPSILON","sinHalfTheta","halfTheta","atan2","delTheta","sign","ratioA","ratioB","GameObject","props","bendingToString","saveState","savedCopy","angularVelocity","angleLocal","bendToCurrentState","isLocal","bendingIncrements","bendToCurrent","original","_get","_getPrototypeOf","refreshToPhysics","applyIncrementalBending","addComponent","componentInstance","parentObject","removeComponent","componentName","getComponent","MathUtils","interpolate","end","interpolateDelta","interpolateDeltaWithWrapping","wrapMin","wrapMax","wrapTest","log","interpolateWithWrapping","interpolatedVal","wrapLength","DynamicObject","_GameObject","deceleration","turnRight","deltaAngle","turnLeft","accelerate","bendingPositionDelta","bendingVelocityDelta","bendingAngleDelta","bendingAngle","positionBending","velocityBending","angleBending","positionLocal","velocityLocal","incrementScale","bendingTarget","bendingOptions","stepDesc","timeFactor","posDelta","velDelta","PhysicalObject2D","v","av","avBending","angularVelocityLocal","bendingAVDelta","keepVelocity","physicsObj","copyVector","source","sourceVec","Float32Array","nextObj","PhysicalObject3D","quaternion","q","bendingQuaternionDelta","avDelta","lib","PACKET_TYPES","PACKET_TYPES_REVERSE","ERROR_PACKET","withNativeBlob$1","Blob","withNativeArrayBuffer$2","isView$1","isView","encodePacket","_ref","supportsBinary","encodeBlobAsBase64","fileReader","FileReader","content","readAsDataURL","toArray","byteOffset","TEXT_ENCODER","encodePacketToBinary","packet","arrayBuffer","then","encoded","TextEncoder","encode","chars","lookup$1","decode$1","decode","base64","bufferLength","len","encoded1","encoded2","encoded3","encoded4","arraybuffer","bytes","withNativeArrayBuffer$1","decodePacket","encodedPacket","binaryType","mapBinary","charAt","decodeBase64Packet","substring","packetType","decoded","SEPARATOR","fromCharCode","encodePayload","packets","encodedPackets","count","decodePayload","encodedPayload","decodedPacket","createPacketEncoderStream","TransformStream","transform","controller","payloadLength","header","view","setUint16","setBigUint64","BigInt","enqueue","TEXT_DECODER","totalLength","chunks","acc","chunk","concatChunks","size","shift","createPacketDecoderStream","maxPayload","TextDecoder","state","expectedLength","isBinary","headerArray","getUint16","getUint32","protocol$1","Emitter","mixin","addEventListener","_callbacks","removeAllListeners","removeEventListener","callbacks","cb","emitReserved","hasListeners","globalThisShim","pick","_len","attr","_key","NATIVE_SET_TIMEOUT","setTimeout","NATIVE_CLEAR_TIMEOUT","clearTimeout","installTimerFunctions","opts","useNativeTimers","setTimeoutFn","clearTimeoutFn","BASE64_OVERHEAD","utf8Length","ceil","encode$1","encodeURIComponent","qs","qry","pairs","pair","decodeURIComponent","TransportError","_Error","_inherits2","_super2","_createSuper2","reason","description","context","_this5","_classCallCheck2","_createClass2","_wrapNativeSuper","Transport","_Emitter","_super3","_this6","_assertThisInitialized2","socket","onError","_get2","_getPrototypeOf2","readyState","doOpen","close","doClose","onClose","write","onOpen","onData","onPacket","details","pause","onPause","createUri","schema","_hostname","_port","path","_query","hostname","port","secure","encodedQuery","alphabet","map","seed","prev","num","floor","yeast","now","hasCORS","XHR","xdomain","createCookieJar","empty","hasXHR2","xhr","responseType","Polling","_Transport","_super4","_this7","polling","location","isSSL","protocol","xd","forceBase64","withCredentials","cookieJar","poll","_this8","total","doPoll","_this9","_this10","_this11","doWrite","uri","timestampRequests","timestampParam","sid","b64","request","Request","_this12","method","xhrStatus","_this13","pollXhr","_Emitter2","_super5","_this14","_this15","_a","extraHeaders","setDisableHeaderCheck","setRequestHeader","addCookies","requestTimeout","timeout","onreadystatechange","parseCookies","onLoad","document","index","requestsCount","requests","cleanup","fromError","abort","attachEvent","unloadHandler","terminationEvent","nextTick","isPromiseAvailable","WebSocket","MozWebSocket","usingBrowserWebSocket","defaultBinaryType","isReactNative","navigator","product","toLowerCase","WS","_Transport2","_super6","_this16","check","protocols","headers","ws","addEventListeners","_this17","onopen","autoUnref","_socket","unref","onclose","closeEvent","onmessage","ev","_this18","_loop5","lastPacket","WT","_Transport3","_super7","_this19","WebTransport","transport","transportOptions","closed","ready","createBidirectionalStream","stream","decoderStream","MAX_SAFE_INTEGER","reader","readable","pipeThrough","getReader","encoderStream","pipeTo","writer","getWriter","read","_ref2","_this20","_loop6","transports","websocket","webtransport","re","parts","replace","m","exec","host","authority","ipv6uri","pathNames","queryKey","regx","names","$0","$1","$2","Socket$1","_Emitter3","_super8","_this21","writeBuffer","prevBufferLen","agent","upgrade","rememberUpgrade","addTrailingSlash","rejectUnauthorized","perMessageDeflate","threshold","closeOnBeforeunload","upgrades","pingInterval","pingTimeout","pingTimeoutTimer","beforeunloadEventListener","offlineEventListener","createTransport","EIO","_this22","priorWebsocketSuccess","setTransport","_this23","onDrain","probe","_this24","failed","onTransportOpen","msg","upgrading","flush","freezeTransport","onTransportClose","onupgrade","to","resetPingTimeout","onHandshake","sendPacket","code","filterUpgrades","_this25","getWritablePackets","shouldCheckPayloadSize","payloadSize","compress","_this26","cleanupAndClose","waitForUpgrade","filteredUpgrades","loc","ipv6","href","withNativeArrayBuffer","withNativeBlob","withNativeFile","File","hasBinary","toJSON","isArray","deconstructPacket","buffers","packetData","pack","_deconstructPacket","attachments","placeholder","_placeholder","newData","reconstructPacket","_reconstructPacket","isIndexValid","RESERVED_EVENTS$1","PacketType","Encoder","replacer","EVENT","ACK","encodeAsBinary","BINARY_EVENT","BINARY_ACK","nsp","encodeAsString","stringify","deconstruction","unshift","isObject","Decoder","_Emitter4","_super9","reviver","_this27","reconstructor","decodeString","isBinaryEvent","BinaryReconstructor","takeBinaryData","buf","next","payload","tryParse","substr","isPayloadValid","finishedReconstruction","CONNECT","DISCONNECT","CONNECT_ERROR","reconPack","binData","subDestroy","RESERVED_EVENTS","freeze","connect","connect_error","disconnect","disconnecting","newListener","Socket","_Emitter5","_super10","io","_this28","connected","recovered","receiveBuffer","sendBuffer","_queue","_queueSeq","ids","acks","flags","auth","_opts","_autoConnect","subEvents","subs","onpacket","_readyState","_len2","_key2","_len3","_key3","retries","fromQueue","_addToQueue","ack","_registerAckCallback","isTransportWritable","engine","discardPacket","notifyOutgoingListeners","_this29","ackTimeout","_len4","_key4","emitWithAck","_this30","_len5","_key5","withErr","arg1","arg2","_this31","tryCount","pending","hasError","_len6","responseArgs","_key6","_drainQueue","force","_packet","_this32","_sendConnectPacket","_pid","pid","_lastOffset","sameNamespace","onconnect","onevent","onack","ondisconnect","message","emitEvent","_anyListeners","_iterator3","_createForOfIteratorHelper2","_step3","sent","_len7","_key7","emitBuffered","_this33","onAny","prependAny","offAny","listenersAny","onAnyOutgoing","_anyOutgoingListeners","prependAnyOutgoing","offAnyOutgoing","listenersAnyOutgoing","_iterator4","_step4","Backoff","ms","factor","jitter","attempts","duration","rand","random","deviation","reset","setMin","setMax","setJitter","Manager","_Emitter6","_super11","_this34","nsps","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","_parser","parser","encoder","decoder","autoConnect","_reconnection","_reconnectionAttempts","_reconnectionDelay","_randomizationFactor","_reconnectionDelayMax","_timeout","maybeReconnectOnOpen","_reconnecting","reconnect","_this35","skipReconnect","openSubDestroy","errorSub","onping","ondata","ondecoded","_this36","active","_destroy","_i24","_nsps","_close","_this37","delay","onreconnect","attempt","cache","lookup","parsed","newConnection","forceNew","multiplex","SIXTY_PER_SEC","LOOP_SLOW_THRESH","LOOP_SLOW_COUNT","Scheduler","period","nextExecTime","requestedDelay","delayCounter","nextTickChecker","callTick","stepPeriod","requestAnimationFrame","stepStartTime","delayTick","hurryTick","SyncStrategy","clientEngine","inputOptions","needFirstSync","syncStep","collectSync","requiredSyncs","SYNC_APPLIED","STEP_DRIFT_THRESHOLDS","onServerSync","MAX_LEAD","MAX_LAG","onEveryStep","clientReset","fullUpdate","lastSync","required","syncObjects","syncSteps","syncEvents","sEvent","objectInstance","eventName","eventCount","objCount","addNewObject","newObj","curObj","__proto__","verbose","_loop","requiredStep","applySync","_ret","rc","defaults$2","clientStepHold","localObjBending","remoteObjBending","reflect","InterpolateStrategy","_SyncStrategy","ignoreInputs","sync","_loop2","refreshRenderObject","_loop3","_Object$keys3","_i3","objEvents","defaults$1","syncsBufferLength","maxReEnactSteps","RTTEstimate","extrapolate","ExtrapolateStrategy","recentInputs","clientInputSave","inputEvent","cleanRecentInputs","lastServerStep","serverStep","localShadowObj","visible","clientStep","movement","_Object$keys4","_i4","_loop4","_Object$keys5","_i5","defaults","worldBufferLength","clientStepLag","FrameSyncStrategy","strategies","frameSync","Synchronizer","syncStrategy","MAX_UINT_16","Serializer","registeredClasses","customTypes","registerClass","addCustomType","customType","classObj","localByteOffset","objectClassId","getUint8","objectClass","readDataView","netSchemProp","setFloat32","setInt32","setInt16","setInt8","strLen","_localBufferOffset","serializedObj","_strLen","getFloat32","getInt32","getInt16","getInt8","deserializeData","_localBufferOffset2","items","itemCount","Int32Array","Int16Array","typeCanAssign","NetworkMonitor","server","gameName","getPrototypeOf","registerClient","queryIdCounter","RTTQueries","movingRTTAverage","movingRTTAverageFrame","movingFPSAverageSize","healthCheckRTTSample","onReceivedRTTQuery","setInterval","sendRTTQuery","healthCheckInterval","queryId","RTT","RTTAverage","registerPlayerOnServer","respondToRTTQuery","NetworkedEventFactory","seriazlier","networkedEvent","NetworkedEventCollection","NetworkTransmitter","registeredEvents","registerNetworkedEventFactory","networkedEventCollection","classHash","networkedEventPrototype","addNetworkedEvent","stagedNetworkedEvent","serializePayload","deserializePayload","clearPayload","GAME_UPS","STEP_DELAY_MSEC","STEP_HURRY_MSEC","ClientEngine","Renderer","scheduler","serverURL","networkTransmitter","networkMonitor","inboundMessages","outboundMessages","renderer","lastStepTime","correction","standaloneMode","configureSynchronization","delayInputCount","delayedInputs","syncOptions","synchronizer","connectSocket","matchMakerAnswer","playerData","worldData","roomData","matchmaker","stopped","resolved","alert","renderLoop","stop","lastTimestamp","draw","resolveGame","checkDrift","checkType","highestServerStep","thresholds","maxLead","maxLag","skipOneStep","handleInboundMessage","handleOutboundInput","applyDelayedInputs","doInputLocal","that","delayed","sendInput","_this3","command","syncData","_this4","syncHeader","find","oldStep","newStep","keyCodeTable","KeyboardControls","setupListeners","keyState","boundKeys","keyName","isDown","parameters","actionName","onKeyChange","bindKey","keyOptions","keyCode","lastKeyPressed","preventDefault","singleton","TIME_RESET_THRESHOLD","doReset","reportSlowFrameRate","runClientStep","getInstance","FRAME_HISTORY_SIZE","MAX_SLOW_FRAMES","networkedPhysics","CAMERA_OFFSET_VEC","THREE","Vector3","frameRateHistory","frameRateTest","chaseCameras","getElementsByClassName","cameraEl","frh","slowFrames","el","renderEl","setAttribute","object3D","camera","children","relativeCameraOffset","cameraOffset","applyMatrix4","matrixWorld","lookAt","setGlobals","AFrameRenderer","_Renderer","AFRAME","registerSystem","sceneElArray","getElementsByTagName","scene","renderObj","remove","Symbol","iterator","instance","Constructor","_defineProperties","_toPropertyKey","protoProps","staticProps","arg","_toPrimitive","hint","prim","toPrimitive","res","subClass","superClass","_setPrototypeOf","setPrototypeOf","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","NewTarget","Reflect","construct","ReferenceError","sham","Proxy","valueOf","receiver","_superPropBase","getOwnPropertyDescriptor","Wiggle","_DynamicObject","bodyParts","score","stat_foodPerGame","direction","bodyLength","Food","qsOptions","querystring","search","Lib","WiggleGameEngine","WiggleClientEngine","_ClientEngine","WiggleRenderer","params","URLSearchParams","searchParams","prop","assetId","urlSlug","classList","querySelector","disabled","className","clickEvent","currentTarget","mouseX","mouseY","updateMouseXY","sendMouseAngle","touches","pageX","pageY","player","clientWidth","zoom","clientHeight","dy","directionStop","innerHTML","ctx","canvas","game","createElement","innerWidth","innerHeight","insertBefore","getElementById","h","spaceHeight","spaceWidth","getContext","lineWidth","strokeStyle","fillStyle","clearRect","save","translate","scale","drawWiggle","drawFood","restore","playerColor","nonPlayerColor","isPlayer","drawCircle","headRadius","nextPos","bodyRadius","eye1","eyeAngle","eye2","eyeDist","eyeRadius","fontSize","font","textToFill","fillText","timeInt","parseInt","foodRadius","fill","beginPath","arc","stroke","closePath","drawBounds","moveTo","lineTo","_GameEngine","moveAll","moveDist","foodCount","eatDistance","collideDistance","startBodyLength","aiCount","hungerTick","xpPerBlock","xpPerFood","xpLevelConstant","randPos","stepInfo","pos","move","inputData"],"mappings":"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AAC16C,OAAO,CAAC;AAChD,IAAM4nC,YAAY,GAAG,IAAI+S,2EAAkB,CAAC10C,UAAU,EAAEjG,OAAO,CAAC;AAEhE4wB,QAAQ,CAACzI,gBAAgB,CAAC,kBAAkB,EAAE,UAAU3pB,CAAC,EAAE;EACzDopC,YAAY,CAAC1gC,KAAK,CAAC,CAAC;AACtB,CAAC,CAAC,C;;;;;;;AC/BW;AACb,sBAAsB,mBAAO,CAAC,CAAmB;AACjD,mBAAmB,mBAAO,CAAC,CAAe;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB,oBAAoB;;AAE1C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA,EAAE;AACF;AACA,EAAE;AACF;;;;;;;;AC5Ma;AACb;AACA;AACA;AACA,EAAE;AACF;;;;;;;;ACLA;AACA;AACA;AACA;AACA;;AAEa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH,kCAAkC;AAClC;AACA;AACA;;AAEA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,sBAAsB;AACtC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;ACzFA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,GAAG,IAAoD,oBAAoB,sDAAsD,KAAK,MAAM,yHAAyH,YAAY,0BAA0B,0BAA0B,gBAAgB,UAAU,UAAU,0CAA0C,gBAAgB,OAAC,OAAO,oBAAoB,8CAA8C,YAAY,YAAY,mCAAmC,iBAAiB,gBAAgB,sBAAsB,oBAAoB,0CAA0C,YAAY,WAAW,YAAY,SAAS,GAAG;AACztB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,CAAC,GAAG;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,kxCAAkxC;AACrxC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;;AAEA;AACA;AACA;AACA;;AAEA,sBAAsB,WAAW;AACjC,sBAAsB,WAAW;AACjC,sBAAsB,WAAW;AACjC,sBAAsB,WAAW;AACjC,sBAAsB,WAAW;AACjC,sBAAsB,WAAW;AACjC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,UAAU;AACtB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,UAAU;AACtB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;;AAEA,CAAC,EAAE,sCAAsC;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA,CAAC,GAAG;AACJ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA,uCAAuC,UAAU;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA;AACA;;AAEA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,MAAM;AAClB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,yGAAyG;AAC5G;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gBAAgB,WAAW;AAC3B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,WAAW,EAAE,wBAAwB,gBAAgB;AACvE,kBAAkB,WAAW,EAAE,wBAAwB,gBAAgB;AACvE,kBAAkB,WAAW,EAAE,wBAAwB,gBAAgB;AACvE,kBAAkB,WAAW,EAAE,wBAAwB,gBAAgB;AACvE,kBAAkB,WAAW,EAAE,wBAAwB,gBAAgB;AACvE,kBAAkB,WAAW,EAAE,wBAAwB,gBAAgB;;AAEvE;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,eAAe;AACvC,yBAAyB,eAAe;AACxC,0BAA0B,eAAe;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,6BAA6B,WAAW;AACxC,8BAA8B,WAAW;AACzC,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,gBAAgB;AAChC;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,SAAS;AACpC;AACA,4BAA4B,SAAS;AACrC;AACA,6BAA6B,SAAS;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,CAAC,EAAE,wDAAwD;AAC3D;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY,OAAO;AACnB,gBAAgB,OAAO;;AAEvB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,WAAW,MAAM;AACjB,YAAY;AACZ;AACA;AACA;;AAEA,kBAAkB,yBAAyB;AAC3C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC,EAAE,4BAA4B;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;;AAEA,CAAC,GAAG;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,cAAc;AAChC;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,2CAA2C,OAAO;AAClD;;AAEA;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,cAAc;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAuC,mCAAmC;AAC1E;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,kBAAkB;AACnE,iDAAiD,kBAAkB;AACnE,iDAAiD,kBAAkB;AACnE,iDAAiD,kBAAkB;AACnE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,YAAY;AAClC,0BAA0B,YAAY;;AAEtC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;;AAEA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB,mCAAmC;AACtD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,sBAAsB,4CAA4C;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,yCAAyC,qCAAqC;AAC9E;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA,CAAC,EAAE,+LAA+L;AAClM;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,KAAK;AACpB;AACA;;AAEA;AACA,eAAe,KAAK;AACpB;AACA;;AAEA;AACA,eAAe,KAAK;AACpB;AACA;;AAEA;AACA,eAAe,KAAK;AACpB;AACA;;AAEA;AACA,eAAe,QAAQ;AACvB;AACA;;AAEA;AACA;AACA,eAAe,MAAM;AACrB;AACA;;AAEA;AACA;AACA,eAAe,KAAK;AACpB;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,kBAAkB;AACrB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,uBAAuB;AACvC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY;AACZ;AACA;AACA,2BAA2B,IAAI;AAC/B;AACA,wBAAwB,KAAK;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY;AACZ;AACA;AACA,2BAA2B,IAAI;AAC/B;AACA,wBAAwB,KAAK;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY;AACZ;AACA;AACA,2BAA2B,IAAI;AAC/B;AACA,wBAAwB,KAAK;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,YAAY,SAAS;AACrB;;AAEA,kBAAkB,OAAO;AACzB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,OAAO;AACnB,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,WAAW,MAAM;AACjB,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,YAAY;AACpC,wBAAwB,YAAY;;AAEpC;AACA;AACA;AACA,kBAAkB,qBAAqB;AACvC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC,EAAE,iDAAiD;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA,kBAAkB,mBAAmB;AACrC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA,CAAC,EAAE,wKAAwK;AAC3K;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;;AAEA;;AAEA,CAAC,EAAE,oBAAoB;AACvB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,oDAAoD;AACvD;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;AACA;;AAEA;AACA,kBAAkB,mBAAmB;AACrC;AACA;;AAEA;AACA,kBAAkB,mBAAmB;AACrC;AACA;;AAEA;AACA,kBAAkB,wBAAwB;AAC1C;AACA;AACA,0BAA0B;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA,CAAC,EAAE,mLAAmL;AACtL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,mBAAmB;AACrC;AACA;;AAEA;AACA,kBAAkB,mBAAmB;AACrC;AACA;;AAEA;AACA,kBAAkB,mBAAmB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA,CAAC,EAAE,mLAAmL;AACtL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA,6BAA6B,UAAU;AACvC,6BAA6B,UAAU;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,gBAAgB;AAClC;AACA;;AAEA;AACA,kBAAkB,gBAAgB;AAClC;AACA;;AAEA;AACA,kBAAkB,gBAAgB;AAClC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,sEAAsE;AACzE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sDAAsD,sBAAsB;;AAE5E;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA,CAAC,EAAE,oDAAoD;AACvD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA,2BAA2B;;AAE3B;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;AACA;;AAEA;AACA;;AAEA,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;;AAGA,CAAC,EAAE,oDAAoD;AACvD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,gBAAgB;AAClC;AACA;;AAEA;AACA,kBAAkB,gBAAgB;AAClC;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAAgC,oDAAoD;AACpF,UAAU,6BAA6B;AACvC,gCAAgC,oDAAoD;AACpF,UAAU,6BAA6B;;AAEvC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY;AACZ;AACA;AACA;AACA;;AAEA,CAAC,EAAE,+CAA+C;AAClD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA,CAAC,EAAE,oDAAoD;AACvD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;;AAGA,CAAC,EAAE,oDAAoD;AACvD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA,4BAA4B;;AAE5B;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA,CAAC,EAAE,oDAAoD;AACvD;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;;AAEA,CAAC,EAAE,oBAAoB;AACvB;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;;AAEA,CAAC,GAAG;AACJ;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,gBAAgB;AAC5B,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;;AAEA,CAAC,EAAE,YAAY;AACf;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA,gBAAgB,wBAAwB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,YAAY,KAAK;AACjB;AACA;AACA;AACA,gBAAgB,KAAK;AACrB,oBAAoB,KAAK;AACzB;AACA,wBAAwB,KAAK;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,YAAY,KAAK;AACjB;AACA;AACA;AACA;;AAEA;AACA,eAAe;AACf,eAAe;AACf;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA,YAAY,KAAK;AACjB,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,2BAA2B,OAAO;AAClC;AACA;AACA,wBAAwB;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,2BAA2B,OAAO;AAClC;AACA;AACA,oBAAoB;AACpB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,YAAY,KAAK;AACjB;AACA;AACA,gBAAgB,4BAA4B;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,YAAY,KAAK;AACjB;AACA;;AAEA;;AAEA;AACA,eAAe;AACf,eAAe;AACf;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA,YAAY,KAAK;AACjB,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,2BAA2B,OAAO;AAClC;AACA;AACA,wBAAwB;AACxB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,2BAA2B,OAAO;AAClC;AACA;AACA,oBAAoB;AACpB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;;AAEA;AACA;;AAEA,gBAAgB,OAAO;AACvB,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA,CAAC,EAAE,YAAY;AACf;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,uCAAuC;AACvC,oBAAoB;AACpB;AACA,8BAA8B,qEAAqE;AACnG;AACA;AACA,KAAK;AACL,kCAAkC;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB,WAAW,WAAW;AACtB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE;AACpE,yCAAyC;AACzC,iEAAiE;AACjE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,CAAC,EAAE,YAAY;AACf;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,KAAK;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,WAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,8BAA8B;AACjC;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc,KAAK;AACnB;AACA;;AAEA;AACA;AACA,cAAc,KAAK;AACnB;AACA;;AAEA;AACA;AACA,cAAc,KAAK;AACnB;AACA;;AAEA;AACA;AACA,cAAc,KAAK;AACnB;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,OAAO;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA,CAAC,EAAE,YAAY;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,KAAK;AAChB;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;;AAEA;;;AAGA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;;;AAIA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,cAAc;AAC1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA,SAAS;AACT,0BAA0B;AAC1B,SAAS;AACT,yBAAyB;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,YAAY,KAAK;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,8KAA8K;AACjL;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA,kBAAkB,MAAM;AACxB;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mBAAmB,eAAe;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mBAAmB,eAAe;AAClC;AACA;;AAEA;;AAEA;AACA;AACA,mBAAmB,eAAe;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,eAAe,eAAe;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8CAA8C;AAC9C,oCAAoC;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,kBAAkB;AACxC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA,iGAAiG;AACjG;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY;AACZ;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,mBAAmB,eAAe;AAClC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,eAAe;AAClC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,mBAAmB,eAAe;AAClC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,mDAAmD;;AAEnD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,eAAe;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,eAAe;AAClC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,CAAC,EAAE,qIAAqI;AACxI;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA,mBAAmB,mBAAmB;AACtC;AACA;;AAEA,mBAAmB,wBAAwB;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA,mBAAmB,wBAAwB;AAC3C;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA,mBAAmB,mBAAmB;AACtC;AACA;;AAEA,mBAAmB,wBAAwB;AAC3C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,2GAA2G;AAC9G;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB,kCAAkC;AAClC;;AAEA;AACA;AACA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA,oBAAoB,kBAAkB;;AAEtC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;;AAEvB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,kBAAkB;;AAEtC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,sIAAsI;AACzI;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,kBAAkB;AACrB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,cAAc;AAChC;AACA;;AAEA;AACA;AACA,kBAAkB,UAAU;AAC5B;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,6FAA6F;AAChG;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,WAAW;AACtB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA,CAAC,EAAE,uDAAuD;AAC1D;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA,4BAA4B;AAC5B;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA,+BAA+B;;AAE/B;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,gBAAgB,oBAAoB;AACpC;AACA;AACA,sBAAsB,mBAAmB;AACzC;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,qBAAqB;;AAErC;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,iBAAiB;AAC5B,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,oBAAoB,aAAa;AACjC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAK;;AAEL;AACA,sBAAsB,+BAA+B;;AAErD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,oBAAoB,YAAY;;AAEhC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,sBAAsB,+BAA+B;AACrD;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,iCAAiC;;AAElD;AACA;;AAEA,qBAAqB,iCAAiC;;AAEtD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,iBAAiB;AAC5B,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,OAAO;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC,oBAAoB,yBAAyB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,iBAAiB;AAClC,6DAA6D;AAC7D,yJAAyJ;AACzJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,mBAAmB,eAAe;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,KAAK;AACzB;AACA;AACA;AACA;AACA,oBAAoB,2BAA2B;AAC/C;AACA;AACA;AACA;AACA;AACA,oBAAoB,2BAA2B;AAC/C;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA,oBAAoB,KAAK;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA,mCAAmC;;AAEnC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,kBAAkB,OAAO;AACzB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,8EAA8E;AACjF;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT,0CAA0C;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,qBAAqB;AACrC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,CAAC,EAAE,+EAA+E;AAClF;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA,qBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB;AACA;AACA;;AAEA;AACA;AACA,4BAA4B;AAC5B,sBAAsB,YAAY;AAClC,0BAA0B,YAAY;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,MAAM;AAClB,YAAY,QAAQ;AACpB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,mBAAmB,QAAQ;AAC3B,mBAAmB,QAAQ;AAC3B,kCAAkC,sBAAsB;AACxD,qCAAqC,yBAAyB;AAC9D;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,uCAAuC;AACvC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B;AAC5B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,2EAA2E;AAC9E;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,+BAA+B;AAClC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B;AAC5B;;AAEA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA,2BAA2B,eAAe;AAC1C,2BAA2B,eAAe;AAC1C,2BAA2B,eAAe;;AAE1C,4BAA4B,eAAe;AAC3C,4BAA4B,eAAe;AAC3C,4BAA4B,eAAe;AAC3C;;AAEA;AACA;AACA;AACA,CAAC,EAAE,+BAA+B;AAClC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,CAAC,EAAE,iFAAiF;AACpF;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,+BAA+B;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6BAA6B;AAChD;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,MAAM;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,6BAA6B;AAC7C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAA6B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,SAAS;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,WAAW;AACtB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,KAAK;AACrB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,qBAAqB;AACzC,wBAAwB,sBAAsB;AAC9C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,qBAAqB;AACzC,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,CAAC,EAAE,yHAAyH;AAC5H;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,gBAAgB;;AAEnC;AACA;;AAEA,wBAAwB,SAAS;;AAEjC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA,iFAAiF;;AAEjF;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,CAAC,EAAE,wDAAwD;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA,CAAC,GAAG;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC;AACjC,oCAAoC;AACpC,+BAA+B;AAC/B,+BAA+B;AAC/B,oCAAoC,WAAW;;AAE/C;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,MAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,aAAa;AAChC;AACA;;AAEA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,oBAAoB,UAAU;AAC9B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,CAAC,EAAE,6EAA6E;AAChF;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,gBAAgB,SAAS;AACzB,gBAAgB,YAAY;AAC5B;AACA;AACA,6CAA6C,sBAAsB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,gBAAgB,SAAS;AACzB,gBAAgB;AAChB;AACA;AACA,6CAA6C,cAAc;AAC3D;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,gBAAgB,SAAS;AACzB,gBAAgB,YAAY;AAC5B;AACA;AACA,6CAA6C,aAAa;AAC1D;AACA,6CAA6C,aAAa;AAC1D;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,gBAAgB,OAAO;AACvB,gBAAgB,YAAY;AAC5B;AACA;AACA,6CAA6C,aAAa;AAC1D;AACA;AACA;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,GAAG;AACJ;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,KAAK;AAChB;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,WAAW;AAC7B;AACA;;AAEA;AACA;AACA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;;AAEA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;AACA;;AAEA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,wBAAwB,iBAAiB,8BAA8B,GAAG;AAC1E,wBAAwB,iBAAiB,8BAA8B,GAAG;AAC1E,wBAAwB,iBAAiB,8BAA8B,GAAG;AAC1E,wBAAwB,iBAAiB,8BAA8B,GAAG;AAC1E,wBAAwB,iBAAiB,8BAA8B,GAAG;AAC1E,wBAAwB,iBAAiB,8BAA8B,GAAG;AAC1E,wBAAwB,iBAAiB,8BAA8B,GAAG;AAC1E,wBAAwB,iBAAiB,8BAA8B,GAAG;AAC1E;;AAEA;AACA;;AAEA;;AAEA,mBAAmB,SAAS;AAC5B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA,gDAAgD,SAAS;AACzD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,YAAY,IAAI;AAChB,YAAY,UAAU;AACtB,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,wCAAwC;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;;AAEA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA,gBAAgB,WAAW;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA,CAAC,GAAG;AACJ;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,GAAG;AACJ;;AAEA;;AAEA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,CAAC,GAAG;AACJ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA,CAAC,EAAE,8BAA8B;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA,oDAAoD;AACpD,kEAAkE;AAClE;AACA,SAAS;AACT,oDAAoD;AACpD,kEAAkE;AAClE;AACA;AACA;;AAEA;AACA,sDAAsD;AACtD,sDAAsD;AACtD,sBAAsB;AACtB;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA6B,OAAO;;AAEpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;;AAEA,2BAA2B,sBAAsB;;AAEjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAmC;;AAEnC,gBAAgB,oCAAoC;;AAEpD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,8BAA8B;;AAE9B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,qCAAqC,wBAAwB;;AAElF;AACA;AACA;AACA,gBAAgB,oBAAoB;AACpC,uBAAuB,OAAO;;AAE9B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,oBAAoB;AACpC,uBAAuB,OAAO;;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAsC,SAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB;AACtB,qBAAqB;;AAErB;AACA;;AAEA;AACA;AACA;AACA,8DAA8D;;AAE9D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,yBAAyB;AACzB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,+BAA+B;AACrE;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,oBAAoB,iBAAiB;AACrC,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,gBAAgB,sBAAsB;AACtC,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD,uDAAuD;;AAEvD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gBAAgB,kBAAkB;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC,6BAA6B;AAClE;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,+BAA+B;AAC/B,4CAA4C,YAAY;AACxD;AACA;AACA;AACA;AACA;;AAEA,yDAAyD;AACzD;AACA;;AAEA,2CAA2C;AAC3C,yCAAyC;;AAEzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,yDAAyD,gBAAgB;AACzE;AACA;;AAEA,uBAAuB;AACvB,aAAa;AACb;AACA,4BAA4B,iBAAiB;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iFAAiF;AACjF;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,iEAAiE,gBAAgB;AACjF;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qDAAqD,gBAAgB;AACrE;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;;AAE7C;AACA;AACA,kBAAkB,mCAAmC;;AAErD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD;;AAEhD,mCAAmC;;AAEnC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,2BAA2B;;AAEjD;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB,kBAAkB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,wBAAwB;;AAExB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,wBAAwB;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C,YAAY;;AAEvD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gDAAgD;AAChD,4BAA4B;;AAE5B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,WAAW;AAC7B,kBAAkB,WAAW;AAC7B,kBAAkB,WAAW;AAC7B,kBAAkB,WAAW;AAC7B,6BAA6B,yBAAyB;AACtD,6BAA6B,yBAAyB;AACtD,gCAAgC,4BAA4B;AAC5D,gCAAgC,4BAA4B;;AAE5D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,sBAAsB,WAAW;AACjC,0BAA0B,WAAW;;AAErC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,WAAW;AAC7B,kBAAkB,WAAW;AAC7B,kBAAkB,WAAW;AAC7B,kBAAkB,WAAW;AAC7B,6BAA6B,yBAAyB;AACtD,6BAA6B,yBAAyB;AACtD,gCAAgC,4BAA4B;AAC5D,gCAAgC,4BAA4B;;AAE5D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,WAAW;AACjC,0BAA0B,WAAW;;AAErC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,2BAA2B,qBAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC,EAAE,mRAAmR;AACtR;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,kBAAkB,qBAAqB;AACvC,WAAW;AACX;AACA;;AAEA;AACA;AACA,kBAAkB,qBAAqB;AACvC,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;;AAEA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA,mGAAmG,kCAAkC;;AAErI;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,YAAY,gBAAgB;AAC5B;AACA;AACA,sDAAsD;AACtD;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,WAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,uBAAuB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,SAAS;AACrB,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,cAAc;AAC1B,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,KAAK;AACjB,YAAY,KAAK;AACjB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,cAAc;AAC1B,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;;AAE9B;AACA,oBAAoB,mBAAmB;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB;AACA;;AAEA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kCAAkC;;AAElC;;AAEA;AACA;;AAEA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,qBAAqB;AACzC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA,gCAAgC,gBAAgB;AAChD,+BAA+B,eAAe;AAC9C,+BAA+B,yCAAyC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAY,OAAO;AACnB;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oDAAoD,iBAAiB;AACrE;AACA;;AAEA;AACA,oBAAoB,oCAAoC;AACxD,kBAAkB;AAClB;AACA;AACA,oBAAoB,yDAAyD;;AAE7E;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA,oCAAoC,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,oBAAoB,oCAAoC;AACxD;AACA;;AAEA,YAAY,kBAAkB;AAC9B;AACA;AACA;;AAEA;AACA;AACA,YAAY,2BAA2B;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,mCAAmC;AACtD;AACA;;AAEA;AACA,gBAAgB,eAAe;;AAE/B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA,4CAA4C,SAAS;AACrD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY,OAAO;AACnB;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAY,OAAO;AACnB;AACA;AACA;AACA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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","file":"bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 3);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 8aa295a9d13b8efe8776","/**\n * This class implements a singleton game world instance, created by Lance.\n * It represents an instance of the game world, and includes all the game objects.\n * It is the state of the game.\n */\nclass GameWorld {\n /**\n * Constructor of the World instance. Invoked by Lance on startup.\n *\n * @hideconstructor\n */\n constructor() {\n this.stepCount = 0;\n this.objects = {};\n this.playerCount = 0;\n this.idCount = 0;\n }\n\n /**\n * Gets a new, fresh and unused id that can be used for a new object\n * @private\n * @return {Number} the new id\n */\n getNewId() {\n let possibleId = this.idCount;\n // find a free id\n while (possibleId in this.objects) possibleId++;\n\n this.idCount = possibleId + 1;\n return possibleId;\n }\n\n /**\n * Returns all the game world objects which match a criteria\n * @param {Object} query The query object\n * @param {Object} [query.id] object id\n * @param {Object} [query.playerId] player id\n * @param {Object} [query.roomName] roomName\n * @param {Object} [query.AI] Is AI. {AI: true} or {AI: false}\n * @param {Class} [query.instanceType] matches whether `object instanceof instanceType`\n * @param {Array} [query.components] An array of component names\n * @param {Boolean} [query.returnSingle] Return the first object matched\n * @return {Array | Object} All game objects which match all the query parameters, or the first match if returnSingle was specified\n */\n queryObjects(query) {\n let queriedObjects = [];\n\n // todo this is currently a somewhat inefficient implementation for API testing purposes.\n // It should be implemented with cached dictionaries like in nano-ecs\n this.forEachObject((id, object) => {\n let conditions = [];\n\n // object id condition\n conditions.push(!(\"id\" in query) || (query.id !== null && object.id === query.id));\n\n // player id condition\n conditions.push(!(\"playerId\" in query) || (query.playerId !== null && object.playerId === query.playerId));\n\n // roomName condition\n conditions.push(!(\"roomName\" in query) || (query.roomName !== null && object.roomName === query.roomName));\n\n // roomName condition\n conditions.push(!(\"AI\" in query) || (query.AI !== null && !!object.AI === !!query.AI));\n\n // instance type conditio\n conditions.push(\n !(\"instanceType\" in query) || (query.instanceType !== null && object instanceof query.instanceType),\n );\n\n // components conditions\n if (\"components\" in query) {\n query.components.forEach((componentClass) => {\n conditions.push(object.hasComponent(componentClass));\n });\n }\n\n // all conditions are true, object is qualified for the query\n if (conditions.every((value) => value)) {\n queriedObjects.push(object);\n if (query.returnSingle) return false;\n }\n });\n\n // return a single object or null\n if (query.returnSingle) {\n return queriedObjects.length > 0 ? queriedObjects[0] : null;\n }\n\n return queriedObjects;\n }\n\n /**\n * Returns The first game object encountered which matches a criteria.\n * Syntactic sugar for {@link queryObjects} with `returnSingle: true`\n * @param {Object} query See queryObjects\n * @return {Object} The game object, if found\n */\n queryObject(query) {\n return this.queryObjects(\n Object.assign(query, {\n returnSingle: true,\n }),\n );\n }\n\n /**\n * Add an object to the game world\n * @private\n * @param {Object} object object to add\n */\n addObject(object) {\n this.objects[object.id] = object;\n }\n\n /**\n * Remove an object from the game world\n * @private\n * @param {number} id id of the object to remove\n */\n removeObject(id) {\n delete this.objects[id];\n }\n\n /**\n * World object iterator.\n * Invoke callback(objId, obj) for each object\n *\n * @param {function} callback function receives id and object. If callback returns false, the iteration will cease\n */\n forEachObject(callback) {\n for (let id of Object.keys(this.objects)) {\n let returnValue = callback(id, this.objects[id]); // TODO: the key should be Number(id)\n if (returnValue === false) break;\n }\n }\n}\n\nexport default GameWorld;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/GameWorld.js","\"use strict\";\n\n// ES3 safe\nvar _undefined = void 0;\n\nmodule.exports = function (value) { return value !== _undefined && value !== null; };\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/type/value/is.js","\"use strict\";\n\nvar isValue = require(\"../value/is\");\n\n// prettier-ignore\nvar possibleTypes = { \"object\": true, \"function\": true, \"undefined\": true /* document.all */ };\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) return false;\n\treturn hasOwnProperty.call(possibleTypes, typeof value);\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/type/object/is.js","\"use strict\";\n\nvar isObject = require(\"../object/is\");\n\nmodule.exports = function (value) {\n\tif (!isObject(value)) return false;\n\ttry {\n\t\tif (!value.constructor) return false;\n\t\treturn value.constructor.prototype === value;\n\t} catch (error) {\n\t\treturn false;\n\t}\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/type/prototype/is.js","\"use strict\";\n\nvar isPrototype = require(\"../prototype/is\");\n\nmodule.exports = function (value) {\n\tif (typeof value !== \"function\") return false;\n\n\tif (!hasOwnProperty.call(value, \"length\")) return false;\n\n\ttry {\n\t\tif (typeof value.length !== \"number\") return false;\n\t\tif (typeof value.call !== \"function\") return false;\n\t\tif (typeof value.apply !== \"function\") return false;\n\t} catch (error) {\n\t\treturn false;\n\t}\n\n\treturn !isPrototype(value);\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/type/function/is.js","\"use strict\";\n\nvar isFunction = require(\"../function/is\");\n\nvar classRe = /^\\s*class[\\s{/}]/, functionToString = Function.prototype.toString;\n\nmodule.exports = function (value) {\n\tif (!isFunction(value)) return false;\n\tif (classRe.test(functionToString.call(value))) return false;\n\treturn true;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/type/plain-function/is.js","\"use strict\";\n\nmodule.exports = function () {\n\tvar assign = Object.assign, obj;\n\tif (typeof assign !== \"function\") return false;\n\tobj = { foo: \"raz\" };\n\tassign(obj, { bar: \"dwa\" }, { trzy: \"trzy\" });\n\treturn obj.foo + obj.bar + obj.trzy === \"razdwatrzy\";\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/object/assign/is-implemented.js","\"use strict\";\n\nmodule.exports = function () {\n\ttry {\n\t\tObject.keys(\"primitive\");\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/object/keys/is-implemented.js","\"use strict\";\n\n// eslint-disable-next-line no-empty-function\nmodule.exports = function () {};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/function/noop.js","\"use strict\";\n\nvar _undefined = require(\"../function/noop\")(); // Support ES3 engines\n\nmodule.exports = function (val) { return val !== _undefined && val !== null; };\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/object/is-value.js","\"use strict\";\n\nvar isValue = require(\"../is-value\");\n\nvar keys = Object.keys;\n\nmodule.exports = function (object) { return keys(isValue(object) ? Object(object) : object); };\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/object/keys/shim.js","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? Object.keys : require(\"./shim\");\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/object/keys/index.js","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nmodule.exports = function (value) {\n\tif (!isValue(value)) throw new TypeError(\"Cannot use null or undefined\");\n\treturn value;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/object/valid-value.js","\"use strict\";\n\nvar keys = require(\"../keys\")\n , value = require(\"../valid-value\")\n , max = Math.max;\n\nmodule.exports = function (dest, src /*, …srcn*/) {\n\tvar error, i, length = max(arguments.length, 2), assign;\n\tdest = Object(value(dest));\n\tassign = function (key) {\n\t\ttry {\n\t\t\tdest[key] = src[key];\n\t\t} catch (e) {\n\t\t\tif (!error) error = e;\n\t\t}\n\t};\n\tfor (i = 1; i < length; ++i) {\n\t\tsrc = arguments[i];\n\t\tkeys(src).forEach(assign);\n\t}\n\tif (error !== undefined) throw error;\n\treturn dest;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/object/assign/shim.js","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? Object.assign : require(\"./shim\");\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/object/assign/index.js","\"use strict\";\n\nvar isValue = require(\"./is-value\");\n\nvar forEach = Array.prototype.forEach, create = Object.create;\n\nvar process = function (src, obj) {\n\tvar key;\n\tfor (key in src) obj[key] = src[key];\n};\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function (opts1 /*, …options*/) {\n\tvar result = create(null);\n\tforEach.call(arguments, function (options) {\n\t\tif (!isValue(options)) return;\n\t\tprocess(Object(options), result);\n\t});\n\treturn result;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/object/normalize-options.js","\"use strict\";\n\nvar str = \"razdwatrzy\";\n\nmodule.exports = function () {\n\tif (typeof str.contains !== \"function\") return false;\n\treturn str.contains(\"dwa\") === true && str.contains(\"foo\") === false;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/string/#/contains/is-implemented.js","\"use strict\";\n\nvar indexOf = String.prototype.indexOf;\n\nmodule.exports = function (searchString /*, position*/) {\n\treturn indexOf.call(this, searchString, arguments[1]) > -1;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/string/#/contains/shim.js","\"use strict\";\n\nmodule.exports = require(\"./is-implemented\")() ? String.prototype.contains : require(\"./shim\");\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/string/#/contains/index.js","\"use strict\";\n\nvar isValue = require(\"type/value/is\")\n , isPlainFunction = require(\"type/plain-function/is\")\n , assign = require(\"es5-ext/object/assign\")\n , normalizeOpts = require(\"es5-ext/object/normalize-options\")\n , contains = require(\"es5-ext/string/#/contains\");\n\nvar d = (module.exports = function (dscr, value/*, options*/) {\n\tvar c, e, w, options, desc;\n\tif (arguments.length < 2 || typeof dscr !== \"string\") {\n\t\toptions = value;\n\t\tvalue = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[2];\n\t}\n\tif (isValue(dscr)) {\n\t\tc = contains.call(dscr, \"c\");\n\t\te = contains.call(dscr, \"e\");\n\t\tw = contains.call(dscr, \"w\");\n\t} else {\n\t\tc = w = true;\n\t\te = false;\n\t}\n\n\tdesc = { value: value, configurable: c, enumerable: e, writable: w };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n});\n\nd.gs = function (dscr, get, set/*, options*/) {\n\tvar c, e, options, desc;\n\tif (typeof dscr !== \"string\") {\n\t\toptions = set;\n\t\tset = get;\n\t\tget = dscr;\n\t\tdscr = null;\n\t} else {\n\t\toptions = arguments[3];\n\t}\n\tif (!isValue(get)) {\n\t\tget = undefined;\n\t} else if (!isPlainFunction(get)) {\n\t\toptions = get;\n\t\tget = set = undefined;\n\t} else if (!isValue(set)) {\n\t\tset = undefined;\n\t} else if (!isPlainFunction(set)) {\n\t\toptions = set;\n\t\tset = undefined;\n\t}\n\tif (isValue(dscr)) {\n\t\tc = contains.call(dscr, \"c\");\n\t\te = contains.call(dscr, \"e\");\n\t} else {\n\t\tc = true;\n\t\te = false;\n\t}\n\n\tdesc = { get: get, set: set, configurable: c, enumerable: e };\n\treturn !options ? desc : assign(normalizeOpts(options), desc);\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/d/index.js","\"use strict\";\n\nmodule.exports = function (fn) {\n\tif (typeof fn !== \"function\") throw new TypeError(fn + \" is not a function\");\n\treturn fn;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/es5-ext/object/valid-callable.js","'use strict';\n\nvar d = require('d')\n , callable = require('es5-ext/object/valid-callable')\n\n , apply = Function.prototype.apply, call = Function.prototype.call\n , create = Object.create, defineProperty = Object.defineProperty\n , defineProperties = Object.defineProperties\n , hasOwnProperty = Object.prototype.hasOwnProperty\n , descriptor = { configurable: true, enumerable: false, writable: true }\n\n , on, once, off, emit, methods, descriptors, base;\n\non = function (type, listener) {\n\tvar data;\n\n\tcallable(listener);\n\n\tif (!hasOwnProperty.call(this, '__ee__')) {\n\t\tdata = descriptor.value = create(null);\n\t\tdefineProperty(this, '__ee__', descriptor);\n\t\tdescriptor.value = null;\n\t} else {\n\t\tdata = this.__ee__;\n\t}\n\tif (!data[type]) data[type] = listener;\n\telse if (typeof data[type] === 'object') data[type].push(listener);\n\telse data[type] = [data[type], listener];\n\n\treturn this;\n};\n\nonce = function (type, listener) {\n\tvar once, self;\n\n\tcallable(listener);\n\tself = this;\n\ton.call(this, type, once = function () {\n\t\toff.call(self, type, once);\n\t\tapply.call(listener, this, arguments);\n\t});\n\n\tonce.__eeOnceListener__ = listener;\n\treturn this;\n};\n\noff = function (type, listener) {\n\tvar data, listeners, candidate, i;\n\n\tcallable(listener);\n\n\tif (!hasOwnProperty.call(this, '__ee__')) return this;\n\tdata = this.__ee__;\n\tif (!data[type]) return this;\n\tlisteners = data[type];\n\n\tif (typeof listeners === 'object') {\n\t\tfor (i = 0; (candidate = listeners[i]); ++i) {\n\t\t\tif ((candidate === listener) ||\n\t\t\t\t\t(candidate.__eeOnceListener__ === listener)) {\n\t\t\t\tif (listeners.length === 2) data[type] = listeners[i ? 0 : 1];\n\t\t\t\telse listeners.splice(i, 1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif ((listeners === listener) ||\n\t\t\t\t(listeners.__eeOnceListener__ === listener)) {\n\t\t\tdelete data[type];\n\t\t}\n\t}\n\n\treturn this;\n};\n\nemit = function (type) {\n\tvar i, l, listener, listeners, args;\n\n\tif (!hasOwnProperty.call(this, '__ee__')) return;\n\tlisteners = this.__ee__[type];\n\tif (!listeners) return;\n\n\tif (typeof listeners === 'object') {\n\t\tl = arguments.length;\n\t\targs = new Array(l - 1);\n\t\tfor (i = 1; i < l; ++i) args[i - 1] = arguments[i];\n\n\t\tlisteners = listeners.slice();\n\t\tfor (i = 0; (listener = listeners[i]); ++i) {\n\t\t\tapply.call(listener, this, args);\n\t\t}\n\t} else {\n\t\tswitch (arguments.length) {\n\t\tcase 1:\n\t\t\tcall.call(listeners, this);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tcall.call(listeners, this, arguments[1]);\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tcall.call(listeners, this, arguments[1], arguments[2]);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tl = arguments.length;\n\t\t\targs = new Array(l - 1);\n\t\t\tfor (i = 1; i < l; ++i) {\n\t\t\t\targs[i - 1] = arguments[i];\n\t\t\t}\n\t\t\tapply.call(listeners, this, args);\n\t\t}\n\t}\n};\n\nmethods = {\n\ton: on,\n\tonce: once,\n\toff: off,\n\temit: emit\n};\n\ndescriptors = {\n\ton: d(on),\n\tonce: d(once),\n\toff: d(off),\n\temit: d(emit)\n};\n\nbase = defineProperties({}, descriptors);\n\nmodule.exports = exports = function (o) {\n\treturn (o == null) ? create(base) : defineProperties(Object(o), descriptors);\n};\nexports.methods = methods;\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/event-emitter/index.js","// TODO: needs documentation\n// I think the API could be simpler\n// - Timer.run(waitSteps, cb)\n// - Timer.repeat(waitSteps, count, cb) // count=null=>forever\n// - Timer.cancel(cb)\nexport default class Timer {\n\n constructor() {\n this.currentTime = 0;\n this.isActive = false;\n this.idCounter = 0;\n\n this.events = {};\n }\n\n play() {\n this.isActive = true;\n }\n\n tick() {\n let event;\n let eventId;\n\n if (this.isActive) {\n this.currentTime++;\n\n for (eventId in this.events) {\n event = this.events[eventId];\n if (event) {\n\n if (event.type == 'repeat') {\n if ((this.currentTime - event.startOffset) % event.time == 0) {\n event.callback.apply(event.thisContext, event.args);\n }\n }\n if (event.type == 'single') {\n if ((this.currentTime - event.startOffset) % event.time == 0) {\n event.callback.apply(event.thisContext, event.args);\n event.destroy();\n }\n }\n\n }\n\n }\n }\n }\n\n destroyEvent(eventId) {\n delete this.events[eventId];\n }\n\n loop(time, callback) {\n let timerEvent = new TimerEvent(this,\n TimerEvent.TYPES.repeat,\n time,\n callback\n );\n\n this.events[timerEvent.id] = timerEvent;\n\n return timerEvent;\n }\n\n add(time, callback, thisContext, args) {\n let timerEvent = new TimerEvent(this,\n TimerEvent.TYPES.single,\n time,\n callback,\n thisContext,\n args\n );\n\n this.events[timerEvent.id] = timerEvent;\n return timerEvent;\n }\n\n // todo implement timer delete all events\n\n destroy(id) {\n delete this.events[id];\n }\n}\n\n// timer event\nclass TimerEvent {\n constructor(timer, type, time, callback, thisContext, args) {\n this.id = ++timer.idCounter;\n this.timer = timer;\n this.type = type;\n this.time = time;\n this.callback = callback;\n this.startOffset = timer.currentTime;\n this.thisContext = thisContext;\n this.args = args;\n\n this.destroy = function() {\n this.timer.destroy(this.id);\n };\n }\n}\n\nTimerEvent.TYPES = {\n repeat: 'repeat',\n single: 'single'\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../src/game/Timer.js","/**\n * Tracing Services.\n * Use the trace functions to trace game state. Turn on tracing by\n * specifying the minimum trace level which should be recorded. For\n * example, setting traceLevel to Trace.TRACE_INFO will cause info,\n * warn, and error traces to be recorded.\n */\nclass Trace {\n\n constructor(options) {\n\n this.options = Object.assign({\n traceLevel: this.TRACE_DEBUG\n }, options);\n\n this.traceBuffer = [];\n this.step = 'initializing';\n\n // syntactic sugar functions\n this.error = this.trace.bind(this, Trace.TRACE_ERROR);\n this.warn = this.trace.bind(this, Trace.TRACE_WARN);\n this.info = this.trace.bind(this, Trace.TRACE_INFO);\n this.debug = this.trace.bind(this, Trace.TRACE_DEBUG);\n this.trace = this.trace.bind(this, Trace.TRACE_ALL);\n }\n\n /**\n * Include all trace levels.\n * @memberof Trace\n * @member {Number} TRACE_ALL\n */\n static get TRACE_ALL() { return 0; }\n\n /**\n * Include debug traces and higher.\n * @memberof Trace\n * @member {Number} TRACE_DEBUG\n */\n static get TRACE_DEBUG() { return 1; }\n\n /**\n * Include info traces and higher.\n * @memberof Trace\n * @member {Number} TRACE_INFO\n */\n static get TRACE_INFO() { return 2; }\n\n /**\n * Include warn traces and higher.\n * @memberof Trace\n * @member {Number} TRACE_WARN\n */\n static get TRACE_WARN() { return 3; }\n\n /**\n * Include error traces and higher.\n * @memberof Trace\n * @member {Number} TRACE_ERROR\n */\n static get TRACE_ERROR() { return 4; }\n\n /**\n * Disable all tracing.\n * @memberof Trace\n * @member {Number} TRACE_NONE\n */\n static get TRACE_NONE() { return 1000; }\n\n trace(level, dataCB) {\n\n // all traces must be functions which return strings\n if (typeof dataCB !== 'function') {\n throw new Error(`Lance trace was called but instead of passing a function, it received a [${typeof dataCB}]`);\n }\n\n if (level < this.options.traceLevel)\n return;\n\n this.traceBuffer.push({ data: dataCB(), level, step: this.step, time: new Date() });\n }\n\n rotate() {\n let buffer = this.traceBuffer;\n this.traceBuffer = [];\n return buffer;\n }\n\n get length() {\n return this.traceBuffer.length;\n }\n\n setStep(s) {\n this.step = s;\n }\n}\n\nexport default Trace;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/lib/Trace.js","import GameWorld from './GameWorld';\nimport EventEmitter from 'event-emitter';\nimport Timer from './game/Timer';\nimport Trace from './lib/Trace';\n\n/**\n * The GameEngine contains the game logic. Extend this class\n * to implement game mechanics. The GameEngine derived\n * instance runs once on the server, where the final decisions\n * are always taken, and one instance will run on each client as well,\n * where the client emulates what it expects to be happening\n * on the server.\n *\n * The game engine's logic must listen to user inputs and\n * act on these inputs to change the game state. For example,\n * the game engine listens to controller/keyboard inputs to infer\n * movement for the player/ship/first-person. The game engine listens\n * to clicks, button-presses to infer firing, etc..\n *\n * Note that the game engine runs on both the server and on the\n * clients - but the server decisions always have the final say,\n * and therefore clients must resolve server updates which conflict\n * with client-side predictions.\n */\nclass GameEngine {\n\n /**\n * Create a game engine instance. This needs to happen\n * once on the server, and once on each client.\n *\n * @param {Object} options - options object\n * @param {Number} options.traceLevel - the trace level.\n */\n constructor(options) {\n\n // place the game engine in the LANCE globals\n const isServerSide = (typeof window === 'undefined');\n const glob = isServerSide ? global : window;\n glob.LANCE = { gameEngine: this };\n\n // set options\n const defaultOpts = { traceLevel: Trace.TRACE_NONE };\n if (!isServerSide) defaultOpts.clientIDSpace = 1000000;\n this.options = Object.assign(defaultOpts, options);\n\n /**\n * client's player ID, as a string. If running on the client, this is set at runtime by the clientEngine\n * @member {String}\n */\n this.playerId = NaN;\n\n // set up event emitting and interface\n let eventEmitter = this.options.eventEmitter;\n if (typeof eventEmitter === 'undefined')\n eventEmitter = new EventEmitter();\n\n /**\n * Register a handler for an event\n *\n * @method on\n * @memberof GameEngine\n * @instance\n * @param {String} eventName - name of the event\n * @param {Function} eventHandler - handler function\n */\n this.on = eventEmitter.on;\n\n /**\n * Register a handler for an event, called just once (if at all)\n *\n * @method once\n * @memberof GameEngine\n * @instance\n * @param {String} eventName - name of the event\n * @param {Function} eventHandler - handler function\n */\n this.once = eventEmitter.once;\n\n /**\n * Remove a handler\n *\n * @method removeListener\n * @memberof GameEngine\n * @instance\n * @param {String} eventName - name of the event\n * @param {Function} eventHandler - handler function\n */\n this.removeListener = eventEmitter.off;\n this.off = eventEmitter.off;\n\n this.emit = eventEmitter.emit;\n\n // set up trace\n this.trace = new Trace({ traceLevel: this.options.traceLevel });\n }\n\n findLocalShadow(serverObj) {\n\n for (let localId of Object.keys(this.world.objects)) {\n if (Number(localId) < this.options.clientIDSpace) continue;\n let localObj = this.world.objects[localId];\n if (localObj.hasOwnProperty('inputId') && localObj.inputId === serverObj.inputId)\n return localObj;\n }\n\n return null;\n }\n\n initWorld(worldSettings) {\n\n this.world = new GameWorld();\n\n // on the client we have a different ID space\n if (this.options.clientIDSpace) {\n this.world.idCount = this.options.clientIDSpace;\n }\n\n /**\n * The worldSettings defines the game world constants, such\n * as width, height, depth, etc. such that all other classes\n * can reference these values.\n * @member {Object} worldSettings\n * @memberof GameEngine\n */\n this.worldSettings = Object.assign({}, worldSettings);\n }\n\n /**\n * Start the game. This method runs on both server\n * and client. Extending the start method is useful\n * for setting up the game's worldSettings attribute,\n * and registering methods on the event handler.\n */\n start() {\n this.trace.info(() => '========== game engine started ==========');\n this.initWorld();\n\n // create the default timer\n this.timer = new Timer();\n this.timer.play();\n this.on('postStep', (step, isReenact) => {\n if (!isReenact) this.timer.tick();\n });\n\n this.emit('start', { timestamp: (new Date()).getTime() });\n }\n\n /**\n * Single game step.\n *\n * @param {Boolean} isReenact - is this step a re-enactment of the past.\n * @param {Number} t - the current time (optional)\n * @param {Number} dt - elapsed time since last step was called. (optional)\n * @param {Boolean} physicsOnly - do a physics step only, no game logic\n */\n step(isReenact, t, dt, physicsOnly) {\n // physics-only step\n if (physicsOnly) {\n if (dt) dt /= 1000; // physics engines work in seconds\n this.physicsEngine.step(dt, objectFilter);\n return;\n }\n\n // emit preStep event\n if (isReenact === undefined)\n throw new Error('game engine does not forward argument isReenact to super class');\n\n isReenact = Boolean(isReenact);\n let step = ++this.world.stepCount;\n let clientIDSpace = this.options.clientIDSpace;\n this.emit('preStep', { step, isReenact, dt });\n\n // skip physics for shadow objects during re-enactment\n function objectFilter(o) {\n return !isReenact || o.id < clientIDSpace;\n }\n\n // physics step\n if (this.physicsEngine && !this.ignorePhysics) {\n if (dt) dt /= 1000; // physics engines work in seconds\n this.physicsEngine.step(dt, objectFilter);\n }\n\n // for each object\n // - apply incremental bending\n // - refresh object positions after physics\n this.world.forEachObject((id, o) => {\n if (typeof o.refreshFromPhysics === 'function')\n o.refreshFromPhysics();\n this.trace.trace(() => `object[${id}] after ${isReenact ? 'reenact' : 'step'} : ${o.toString()}`);\n });\n\n // emit postStep event\n this.emit('postStep', { step, isReenact });\n }\n\n /**\n * Add object to the game world.\n * On the client side, the object may not be created, if the server copy\n * of this object is already in the game world. This could happen when the client\n * is using delayed-input, and the RTT is very low.\n *\n * @param {Object} object - the object.\n * @return {Object} the final object.\n */\n addObjectToWorld(object) {\n\n // if we are asked to create a local shadow object\n // the server copy may already have arrived.\n if (Number(object.id) >= this.options.clientIDSpace) {\n let serverCopyArrived = false;\n this.world.forEachObject((id, o) => {\n if (o.hasOwnProperty('inputId') && o.inputId === object.inputId) {\n serverCopyArrived = true;\n return false;\n }\n });\n if (serverCopyArrived) {\n this.trace.info(() => `========== shadow object NOT added ${object.toString()} ==========`);\n return null;\n }\n }\n\n this.world.addObject(object);\n\n // tell the object to join the game, by creating\n // its corresponding physical entities and renderer entities.\n if (typeof object.onAddToWorld === 'function')\n object.onAddToWorld(this);\n\n this.emit('objectAdded', object);\n this.trace.info(() => `========== object added ${object.toString()} ==========`);\n\n return object;\n }\n\n /**\n * Override this function to implement input handling.\n * This method will be called on the specific client where the\n * input was received, and will also be called on the server\n * when the input reaches the server. The client does not call this\n * method directly, rather the client calls {@link ClientEngine#sendInput}\n * so that the input is sent to both server and client, and so that\n * the input is delayed artificially if so configured.\n *\n * The input is described by a short string, and is given an index.\n * The index is used internally to keep track of inputs which have already been applied\n * on the client during synchronization. The input is also associated with\n * the ID of a player.\n *\n * @param {Object} inputDesc - input descriptor object\n * @param {String} inputDesc.input - describe the input (e.g. \"up\", \"down\", \"fire\")\n * @param {Number} inputDesc.messageIndex - input identifier\n * @param {Number} inputDesc.step - the step on which this input occurred\n * @param {Number} playerId - the player ID\n * @param {Boolean} isServer - indicate if this function is being called on the server side\n */\n processInput(inputDesc, playerId, isServer) {\n this.trace.info(() => `game engine processing input[${inputDesc.messageIndex}] <${inputDesc.input}> from playerId ${playerId}`);\n }\n\n /**\n * Remove an object from the game world.\n *\n * @param {Object|String} objectId - the object or object ID\n */\n removeObjectFromWorld(objectId) {\n\n if (typeof objectId === 'object') objectId = objectId.id;\n let object = this.world.objects[objectId];\n\n if (!object) {\n throw new Error(`Game attempted to remove a game object which doesn't (or never did) exist, id=${objectId}`);\n }\n this.trace.info(() => `========== destroying object ${object.toString()} ==========`);\n\n if (typeof object.onRemoveFromWorld === 'function')\n object.onRemoveFromWorld(this);\n\n this.emit('objectDestroyed', object);\n this.world.removeObject(objectId);\n }\n\n /**\n * Check if a given object is owned by the player on this client\n *\n * @param {Object} object the game object to check\n * @return {Boolean} true if the game object is owned by the player on this client\n */\n isOwnedByPlayer(object) {\n return (object.playerId == this.playerId);\n }\n\n /**\n * Register Game Object Classes\n *\n * @example\n * registerClasses(serializer) {\n * serializer.registerClass(Paddle);\n * serializer.registerClass(Ball);\n * }\n *\n * @param {Serializer} serializer - the serializer\n */\n registerClasses(serializer) {\n }\n\n /**\n * Decide whether the player game is over by returning an Object, need to be implemented\n *\n * @return {Object} truthful if the game is over for the player and the object is returned as GameOver data\n */\n getPlayerGameOverResult() {\n return null;\n }\n}\n\n/**\n * EVENTS\n */\n\n/**\n * Marks the beginning of a new game step\n *\n * @event GameEngine#preStep\n * @param {Number} stepNumber - the step number\n * @param {Boolean} isReenact - is this step a re-enactment\n */\n\n/**\n * Marks the end of a game step\n *\n * @event GameEngine#postStep\n * @param {Number} stepNumber - the step number\n * @param {Boolean} isReenact - is this step a re-enactment\n */\n\n/**\n * An object has been added to the world\n *\n * @event GameEngine#objectAdded\n * @param {Object} obj - the new object\n */\n\n/**\n * An object has been removed from the world\n *\n * @event GameEngine#objectDestroyed\n * @param {Object} obj - the object\n */\n\n/**\n * A player has joined\n *\n * @event GameEngine#playerJoined\n * @param {Number} joinTime - epoch of join time\n * @param {Object} playerDesc - player descriptor\n * @param {String} playerDesc.playerId - the player ID\n */\n\n/**\n * A player has left\n *\n * @event GameEngine#playerDisconnected\n * @param {Number} joinTime - epoch of join time\n * @param {Number} disconnectTime - epoch of disconnect time\n * @param {Object} playerDesc - player descriptor\n * @param {String} playerDesc.playerId - the player ID\n */\n\n/**\n * A player has joined on the server\n *\n * @event GameEngine#server__playerJoined\n * @param {Number} joinTime - epoch of join time\n * @param {Object} playerDesc - player descriptor\n * @param {String} playerDesc.playerId - the player ID\n */\n\n/**\n * A player has left on the server\n *\n * @event GameEngine#server__playerDisconnected\n * @param {Number} joinTime - epoch of join time\n * @param {Number} disconnectTime - epoch of disconnect time\n * @param {Object} playerDesc - player descriptor\n * @param {String} playerDesc.playerId - the player ID\n */\n\n/**\n * A synchronization update arrived from the server\n *\n * @event GameEngine#syncReceived\n * @param {Object} sync - the synchronization object\n */\n\n /**\n * Marks the beginning of a game step on the client\n *\n * @event GameEngine#client__preStep\n */\n\n /**\n * Marks the end of a game step on the client\n *\n * @event GameEngine#client__postStep\n */\n\n/**\n * An input needs to be handled. Emitted just before the GameEngine\n * method processInput is invoked.\n *\n * @event GameEngine#processInput\n * @param {Object} input - input descriptor object\n * @param {String} input.input - describe the input (e.g. \"up\", \"down\", \"fire\")\n * @param {Number} input.messageIndex - input identifier\n * @param {Object} input.options - the object which was passed as SendInput's InputOptions parameter\n * @param {Number} input.step - input execution step\n * @param {Number} playerId - the player ID\n */\n\n/**\n * An input needs to be handled.\n * This event is emitted on the server only, just before the\n * general processInput event.\n *\n * @event GameEngine#server__processInput\n * @param {Object} input - input descriptor object\n * @param {String} input.input - describe the input (e.g. \"up\", \"down\", \"fire\")\n * @param {Number} input.messageIndex - input identifier\n * @param {Object} input.options - the object which was passed as SendInput's InputOptions parameter\n * @param {Number} input.step - input execution step\n * @param {Number} playerId - the player ID\n */\n\n /**\n * Client moved from one room to another\n *\n * @event GameEngine#server__roomUpdate\n * @param {Number} playerId - the player ID\n * @param {String} from - the room from which the client came\n * @param {String} to - the room to which the client went\n */\n\n/**\n * An input needs to be handled.\n * This event is emitted on the client only, just before the\n * general processInput event.\n *\n * @event GameEngine#client__processInput\n * @param {Object} input - input descriptor object\n * @param {String} input.input - describe the input (e.g. \"up\", \"down\", \"fire\")\n * @param {Number} input.messageIndex - input identifier\n * @param {Object} input.options - the object which was passed as SendInput's InputOptions parameter\n * @param {Number} input.step - input execution step\n * @param {Number} playerId - the player ID\n */\n\n/**\n * Client received a sync from the server\n *\n * @event GameEngine#client__syncReceived\n * @param {Object} sync - sync from the server\n * @param {Array} syncEvents - array of events in the sync\n * @param {Number} maxStepCount - highest step in the sync\n */\n\n /**\n * Client moved from one room to another\n *\n * @event GameEngine#client__roomUpdate\n * @param {Number} playerId - the player ID\n * @param {String} from - the room from which the client came\n * @param {String} to - the room to which the client went\n */\n\n /**\n * Client reset the world step\n *\n * @event GameEngine#client__stepReset\n * @param {Object} resetDesc - sync from the server\n * @param {Number} oldStep - the old step count\n * @param {Number} newStep - the new step count\n */\n\n/**\n * Marks the beginning of a game step on the server\n *\n * @event GameEngine#server__preStep\n * @param {Number} stepNumber - the step number\n */\n\n/**\n * Marks the end of a game step on the server\n *\n * @event GameEngine#server__postStep\n * @param {Number} stepNumber - the step number\n */\n\n/**\n * User input received on the server\n *\n * @event GameEngine#server__inputReceived\n * @param {Object} input - input descriptor\n * @param {Object} input.data - input descriptor\n * @param {String} input.playerId - player that sent the input\n */\n\n /**\n * Report slow frame rate on the browser.\n * The browser did not achieve a reasonable frame rate\n *\n * @event GameEngine#client__slowFrameRate\n */\n\n /**\n * server has started\n *\n * @event GameEngine#start\n * @param {Number} timestamp - UTC epoch of start time\n */\n\n// TODO: the declaration \"export default\" could be done as part of the class\n// declaration up above, but the current version of jsdoc doesn't support this.\n// when jsdoc is fixed, move this descriptor back to the class declaration,\n// in all relevant files (12 files)\n// see: https://github.com/jsdoc3/jsdoc/issues/1132\nexport default GameEngine;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/GameEngine.js","// The base Physics Engine class defines the expected interface\n// for all physics engines\nexport default class PhysicsEngine {\n\n constructor(options) {\n this.options = options;\n this.gameEngine = options.gameEngine;\n\n if (!options.gameEngine) {\n console.warn('Physics engine initialized without gameEngine!');\n }\n }\n\n /**\n * A single Physics step.\n *\n * @param {Number} dt - time elapsed since last step\n * @param {Function} objectFilter - a test function which filters which objects should move\n */\n step(dt, objectFilter) {}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/physics/PhysicsEngine.js","export default class Utils {\n\n static hashStr(str, bits) {\n let hash = 5381;\n let i = str.length;\n bits = bits ? bits : 8;\n\n while (i) {\n hash = (hash * 33) ^ str.charCodeAt(--i);\n }\n hash = hash >>> 0;\n hash = hash % (Math.pow(2, bits) - 1);\n\n // JavaScript does bitwise operations (like XOR, above) on 32-bit signed\n // integers. Since we want the results to be always positive, convert the\n // signed int to an unsigned by doing an unsigned bitshift. */\n return hash;\n }\n\n static arrayBuffersEqual(buf1, buf2) {\n if (buf1.byteLength !== buf2.byteLength) return false;\n let dv1 = new Int8Array(buf1);\n let dv2 = new Int8Array(buf2);\n for (let i = 0; i !== buf1.byteLength; i++) {\n if (dv1[i] !== dv2[i]) return false;\n }\n return true;\n }\n\n static httpGetPromise(url) {\n return new Promise((resolve, reject) => {\n let req = new XMLHttpRequest();\n req.open('GET', url, true);\n req.onload = () => {\n if (req.status >= 200 && req.status < 400) resolve(JSON.parse(req.responseText));\n else reject();\n };\n req.onerror = () => {};\n req.send();\n });\n }\n}\n\n\n// WEBPACK FOOTER //\n// ../../src/lib/Utils.js","\n/**\n * The BaseTypes class defines the base types used in Lance.\n * These are the types which can be used to define an object's netscheme attributes,\n * which can be serialized by lance.\n * @example\n * static get netScheme() {\n * return {\n * strength: { type: BaseTypes.TYPES.FLOAT32 },\n * shield: { type: BaseTypes.TYPES.INT8 },\n * name: { type: BaseTypes.TYPES.STRING },\n * backpack: { type: BaseTypes.TYPES.CLASSINSTANCE },\n * coins: {\n * type: BaseTypes.TYPES.LIST,\n * itemType: BaseTypes.TYPES.UINT8\n * }\n * };\n * }\n */\nclass BaseTypes {}\n\n/**\n * @type {object}\n * @property {string} FLOAT32 Seriablizable float\n * @property {string} INT32 Seriablizable 32-bit integer\n * @property {string} INT16 Seriablizable 16-bit integer\n * @property {string} INT8 Seriablizable 8-bit integer\n * @property {string} UINT8 Seriablizable unsigned 8-bit integer\n * @property {string} STRING Seriablizable string\n * @property {string} CLASSINSTANCE Seriablizable class. Make sure you register all the classes included in this way.\n * @property {string} LIST Seriablizable list. In the netScheme definition, if an attribute is defined as a list, the itemType should also be defined.\n */\nBaseTypes.TYPES = {\n\n /**\n * Seriablizable float\n * @alias TYPES.FLOAT32\n * @memberof! BaseTypes#\n */\n FLOAT32: 'FLOAT32',\n\n /**\n * Seriablizable 32-bit int\n * @alias TYPES.INT32\n * @memberof! BaseTypes#\n */\n INT32: 'INT32',\n\n /**\n * Seriablizable 16-bit int\n * @alias TYPES.INT16\n * @memberof! BaseTypes#\n */\n INT16: 'INT16',\n\n /**\n * Seriablizable 8-bit int\n * @alias TYPES.INT8\n * @memberof! BaseTypes#\n */\n INT8: 'INT8',\n\n /**\n * Seriablizable unsigned 8-bit int\n * @alias TYPES.UINT8\n * @memberof! BaseTypes#\n */\n UINT8: 'UINT8',\n\n /**\n * Seriablizable string\n * @alias TYPES.STRING\n * @memberof! BaseTypes#\n */\n STRING: 'STRING',\n\n /**\n * Seriablizable class. Make sure you registered the classes included in this way.\n * @alias TYPES.CLASSINSTANCE\n * @memberof! BaseTypes#\n */\n CLASSINSTANCE: 'CLASSINSTANCE',\n\n /**\n * Seriablizable list.\n * @alias TYPES.LIST\n * @memberof! BaseTypes#\n */\n LIST: 'LIST'\n};\n\nexport default BaseTypes;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/serialize/BaseTypes.js","import Utils from './../lib/Utils';\nimport BaseTypes from './BaseTypes';\n\nclass Serializable {\n /**\n * Class can be serialized using either:\n * - a class based netScheme\n * - an instance based netScheme\n * - completely dynamically (not implemented yet)\n *\n * @param {Object} serializer - Serializer instance\n * @param {Object} [options] - Options object\n * @param {Object} options.dataBuffer [optional] - Data buffer to write to. If null a new data buffer will be created\n * @param {Number} options.bufferOffset [optional] - The buffer data offset to start writing at. Default: 0\n * @param {String} options.dry [optional] - Does not actually write to the buffer (useful to gather serializeable size)\n * @return {Object} the serialized object. Contains attributes: dataBuffer - buffer which contains the serialized data; bufferOffset - offset where the serialized data starts.\n */\n serialize(serializer, options) {\n options = Object.assign({\n bufferOffset: 0\n }, options);\n\n let netScheme;\n let dataBuffer;\n let dataView;\n let classId = 0;\n let bufferOffset = options.bufferOffset;\n let localBufferOffset = 0; // used for counting the bufferOffset\n\n // instance classId\n if (this.classId) {\n classId = this.classId;\n } else {\n classId = Utils.hashStr(this.constructor.name);\n }\n\n // instance netScheme\n if (this.netScheme) {\n netScheme = this.netScheme;\n } else if (this.constructor.netScheme) {\n netScheme = this.constructor.netScheme;\n } else {\n // todo define behaviour when a netScheme is undefined\n console.warn('no netScheme defined! This will result in awful performance');\n }\n\n // TODO: currently we serialize every node twice, once to calculate the size\n // of the buffers and once to write them out. This can be reduced to\n // a single pass by starting with a large (and static) ArrayBuffer and\n // recursively building it up.\n // buffer has one Uint8Array for class id, then payload\n if (options.dataBuffer == null && options.dry != true) {\n let bufferSize = this.serialize(serializer, { dry: true }).bufferOffset;\n dataBuffer = new ArrayBuffer(bufferSize);\n } else {\n dataBuffer = options.dataBuffer;\n }\n\n if (options.dry != true) {\n dataView = new DataView(dataBuffer);\n // first set the id of the class, so that the deserializer can fetch information about it\n dataView.setUint8(bufferOffset + localBufferOffset, classId);\n }\n\n // advance the offset counter\n localBufferOffset += Uint8Array.BYTES_PER_ELEMENT;\n\n if (netScheme) {\n for (let property of Object.keys(netScheme).sort()) {\n\n // write the property to buffer\n if (options.dry != true) {\n serializer.writeDataView(dataView, this[property], bufferOffset + localBufferOffset, netScheme[property]);\n }\n\n if (netScheme[property].type === BaseTypes.TYPES.STRING) {\n // derive the size of the string\n localBufferOffset += Uint16Array.BYTES_PER_ELEMENT;\n if (this[property] !== null && this[property] !== undefined)\n localBufferOffset += this[property].length * Uint16Array.BYTES_PER_ELEMENT;\n } else if (netScheme[property].type === BaseTypes.TYPES.CLASSINSTANCE) {\n // derive the size of the included class\n let objectInstanceBufferOffset = this[property].serialize(serializer, { dry: true }).bufferOffset;\n localBufferOffset += objectInstanceBufferOffset;\n } else if (netScheme[property].type === BaseTypes.TYPES.LIST) {\n // derive the size of the list\n // list starts with number of elements\n localBufferOffset += Uint16Array.BYTES_PER_ELEMENT;\n\n for (let item of this[property]) {\n // todo inelegant, currently doesn't support list of lists\n if (netScheme[property].itemType === BaseTypes.TYPES.CLASSINSTANCE) {\n let listBufferOffset = item.serialize(serializer, { dry: true }).bufferOffset;\n localBufferOffset += listBufferOffset;\n } else if (netScheme[property].itemType === BaseTypes.TYPES.STRING) {\n // size includes string length plus double-byte characters\n localBufferOffset += Uint16Array.BYTES_PER_ELEMENT * (1 + item.length);\n } else {\n localBufferOffset += serializer.getTypeByteSize(netScheme[property].itemType);\n }\n }\n } else {\n // advance offset\n localBufferOffset += serializer.getTypeByteSize(netScheme[property].type);\n }\n\n }\n } else {\n // TODO no netScheme, dynamic class\n }\n\n return { dataBuffer, bufferOffset: localBufferOffset };\n }\n\n // build a clone of this object with pruned strings (if necessary)\n prunedStringsClone(serializer, prevObject) {\n\n if (!prevObject) return this;\n prevObject = serializer.deserialize(prevObject).obj;\n\n // get list of string properties which changed\n let netScheme = this.constructor.netScheme;\n let isString = p => netScheme[p].type === BaseTypes.TYPES.STRING;\n let hasChanged = p => prevObject[p] !== this[p];\n let changedStrings = Object.keys(netScheme).filter(isString).filter(hasChanged);\n if (changedStrings.length == 0) return this;\n\n // build a clone with pruned strings\n let prunedCopy = new this.constructor(null, { id: null });\n for (let p of Object.keys(netScheme))\n prunedCopy[p] = changedStrings.indexOf(p) < 0 ? this[p] : null;\n\n return prunedCopy;\n }\n\n syncTo(other) {\n let netScheme = this.constructor.netScheme;\n for (let p of Object.keys(netScheme)) {\n\n // ignore classes and lists\n if (netScheme[p].type === BaseTypes.TYPES.LIST || netScheme[p].type === BaseTypes.TYPES.CLASSINSTANCE)\n continue;\n\n // strings might be pruned\n if (netScheme[p].type === BaseTypes.TYPES.STRING) {\n if (typeof other[p] === 'string') this[p] = other[p];\n continue;\n }\n\n // all other values are copied\n this[p] = other[p];\n }\n }\n\n}\n\nexport default Serializable;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/serialize/Serializable.js","import Serializable from './Serializable';\nimport BaseTypes from './BaseTypes';\n\n/**\n * A TwoVector is a geometric object which is completely described\n * by two values.\n */\nclass TwoVector extends Serializable {\n\n static get netScheme() {\n return {\n x: { type: BaseTypes.TYPES.FLOAT32 },\n y: { type: BaseTypes.TYPES.FLOAT32 }\n };\n }\n\n /**\n * Creates an instance of a TwoVector.\n * @param {Number} x - first value\n * @param {Number} y - second value\n * @return {TwoVector} v - the new TwoVector\n */\n constructor(x, y) {\n super();\n this.x = x;\n this.y = y;\n\n return this;\n }\n\n /**\n * Formatted textual description of the TwoVector.\n * @return {String} description\n */\n toString() {\n function round3(x) { return Math.round(x * 1000) / 1000; }\n return `[${round3(this.x)}, ${round3(this.y)}]`;\n }\n\n /**\n * Set TwoVector values\n *\n * @param {Number} x x-value\n * @param {Number} y y-value\n * @return {TwoVector} returns self\n */\n set(x, y) {\n this.x = x;\n this.y = y;\n return this;\n }\n\n multiply(other) {\n this.x *= other.x;\n this.y *= other.y;\n\n return this;\n }\n\n /**\n * Multiply this TwoVector by a scalar\n *\n * @param {Number} s the scale\n * @return {TwoVector} returns self\n */\n multiplyScalar(s) {\n this.x *= s;\n this.y *= s;\n\n return this;\n }\n\n /**\n * Add other vector to this vector\n *\n * @param {TwoVector} other the other vector\n * @return {TwoVector} returns self\n */\n add(other) {\n this.x += other.x;\n this.y += other.y;\n\n return this;\n }\n\n /**\n * Subtract other vector to this vector\n *\n * @param {TwoVector} other the other vector\n * @return {TwoVector} returns self\n */\n subtract(other) {\n this.x -= other.x;\n this.y -= other.y;\n\n return this;\n }\n\n /**\n * Get vector length\n *\n * @return {Number} length of this vector\n */\n length() {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n\n /**\n * Normalize this vector, in-place\n *\n * @return {TwoVector} returns self\n */\n normalize() {\n this.multiplyScalar(1 / this.length());\n return this;\n }\n\n /**\n * Copy values from another TwoVector into this TwoVector\n *\n * @param {TwoVector} sourceObj the other vector\n * @return {TwoVector} returns self\n */\n copy(sourceObj) {\n this.x = sourceObj.x;\n this.y = sourceObj.y;\n\n return this;\n }\n\n /**\n * Create a clone of this vector\n *\n * @return {TwoVector} returns clone\n */\n clone() {\n return new TwoVector(this.x, this.y);\n }\n\n /**\n * Apply in-place lerp (linear interpolation) to this TwoVector\n * towards another TwoVector\n * @param {TwoVector} target the target vector\n * @param {Number} p The percentage to interpolate\n * @return {TwoVector} returns self\n */\n lerp(target, p) {\n this.x += (target.x - this.x) * p;\n this.y += (target.y - this.y) * p;\n\n return this;\n }\n\n /**\n * Get bending Delta Vector\n * towards another TwoVector\n * @param {TwoVector} target the target vector\n * @param {Object} options bending options\n * @param {Number} options.increments number of increments\n * @param {Number} options.percent The percentage to bend\n * @param {Number} options.min No less than this value\n * @param {Number} options.max No more than this value\n * @return {TwoVector} returns new Incremental Vector\n */\n getBendingDelta(target, options) {\n let increment = target.clone();\n increment.subtract(this);\n increment.multiplyScalar(options.percent);\n\n // check for max case\n if (((typeof options.max === 'number') && increment.length() > options.max) ||\n ((typeof options.min === 'number') && increment.length() < options.min)) {\n return new TwoVector(0, 0);\n }\n\n // divide into increments\n increment.multiplyScalar(1 / options.increments);\n\n return increment;\n }\n}\n\nexport default TwoVector;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/serialize/TwoVector.js","// Hierarchical Spatial Hash Grid: HSHG\n// source: https://gist.github.com/kirbysayshi/1760774\n\n// ---------------------------------------------------------------------\n// GLOBAL FUNCTIONS\n// ---------------------------------------------------------------------\n\n/**\n * Updates every object's position in the grid, but only if\n * the hash value for that object has changed.\n * This method DOES NOT take into account object expansion or\n * contraction, just position, and does not attempt to change\n * the grid the object is currently in; it only (possibly) changes\n * the cell.\n *\n * If the object has significantly changed in size, the best bet is to\n * call removeObject() and addObject() sequentially, outside of the\n * normal update cycle of HSHG.\n *\n * @return void desc\n */\nfunction update_RECOMPUTE() {\n\n var i,\n obj,\n grid,\n meta,\n objAABB,\n newObjHash;\n\n // for each object\n for (i = 0; i < this._globalObjects.length; i++) {\n obj = this._globalObjects[i];\n meta = obj.HSHG;\n grid = meta.grid;\n\n // recompute hash\n objAABB = obj.getAABB();\n newObjHash = grid.toHash(objAABB.min[0], objAABB.min[1]);\n\n if (newObjHash !== meta.hash) {\n // grid position has changed, update!\n grid.removeObject(obj);\n grid.addObject(obj, newObjHash);\n }\n }\n}\n\n// not implemented yet :)\nfunction update_REMOVEALL() {\n\n}\n\nfunction testAABBOverlap(objA, objB) {\n var a = objA.getAABB(),\n b = objB.getAABB();\n\n // if(a.min[0] > b.max[0] || a.min[1] > b.max[1] || a.min[2] > b.max[2]\n // || a.max[0] < b.min[0] || a.max[1] < b.min[1] || a.max[2] < b.min[2]){\n\n if (a.min[0] > b.max[0] || a.min[1] > b.max[1] ||\n a.max[0] < b.min[0] || a.max[1] < b.min[1]) {\n return false;\n }\n return true;\n\n}\n\nfunction getLongestAABBEdge(min, max) {\n return Math.max(\n Math.abs(max[0] - min[0])\n , Math.abs(max[1] - min[1])\n // ,Math.abs(max[2] - min[2])\n );\n}\n\n// ---------------------------------------------------------------------\n// ENTITIES\n// ---------------------------------------------------------------------\n\nfunction HSHG() {\n\n this.MAX_OBJECT_CELL_DENSITY = 1 / 8; // objects / cells\n this.INITIAL_GRID_LENGTH = 256; // 16x16\n this.HIERARCHY_FACTOR = 2;\n this.HIERARCHY_FACTOR_SQRT = Math.SQRT2;\n this.UPDATE_METHOD = update_RECOMPUTE; // or update_REMOVEALL\n\n this._grids = [];\n this._globalObjects = [];\n}\n\n// HSHG.prototype.init = function(){\n//\tthis._grids = [];\n//\tthis._globalObjects = [];\n// }\n\nHSHG.prototype.addObject = function (obj) {\n var x, i,\n cellSize,\n objAABB = obj.getAABB(),\n objSize = getLongestAABBEdge(objAABB.min, objAABB.max),\n oneGrid, newGrid;\n\n // for HSHG metadata\n obj.HSHG = {\n globalObjectsIndex: this._globalObjects.length\n };\n\n // add to global object array\n this._globalObjects.push(obj);\n\n if (this._grids.length == 0) {\n // no grids exist yet\n cellSize = objSize * this.HIERARCHY_FACTOR_SQRT;\n newGrid = new Grid(cellSize, this.INITIAL_GRID_LENGTH, this);\n newGrid.initCells();\n newGrid.addObject(obj);\n\n this._grids.push(newGrid);\n } else {\n x = 0;\n\n // grids are sorted by cellSize, smallest to largest\n for (i = 0; i < this._grids.length; i++) {\n oneGrid = this._grids[i];\n x = oneGrid.cellSize;\n if (objSize < x) {\n x /= this.HIERARCHY_FACTOR;\n if (objSize < x) {\n // find appropriate size\n while (objSize < x) {\n x /= this.HIERARCHY_FACTOR;\n }\n newGrid = new Grid(x * this.HIERARCHY_FACTOR, this.INITIAL_GRID_LENGTH, this);\n newGrid.initCells();\n // assign obj to grid\n newGrid.addObject(obj);\n // insert grid into list of grids directly before oneGrid\n this._grids.splice(i, 0, newGrid);\n } else {\n // insert obj into grid oneGrid\n oneGrid.addObject(obj);\n }\n return;\n }\n }\n\n while (objSize >= x) {\n x *= this.HIERARCHY_FACTOR;\n }\n\n newGrid = new Grid(x, this.INITIAL_GRID_LENGTH, this);\n newGrid.initCells();\n // insert obj into grid\n newGrid.addObject(obj);\n // add newGrid as last element in grid list\n this._grids.push(newGrid);\n }\n};\n\nHSHG.prototype.removeObject = function (obj) {\n var meta = obj.HSHG,\n globalObjectsIndex,\n replacementObj;\n\n if (meta === undefined) {\n throw Error(obj + ' was not in the HSHG.');\n return;\n }\n\n // remove object from global object list\n globalObjectsIndex = meta.globalObjectsIndex;\n if (globalObjectsIndex === this._globalObjects.length - 1) {\n this._globalObjects.pop();\n } else {\n replacementObj = this._globalObjects.pop();\n replacementObj.HSHG.globalObjectsIndex = globalObjectsIndex;\n this._globalObjects[globalObjectsIndex] = replacementObj;\n }\n\n meta.grid.removeObject(obj);\n\n // remove meta data\n delete obj.HSHG;\n};\n\nHSHG.prototype.update = function () {\n this.UPDATE_METHOD.call(this);\n};\n\nHSHG.prototype.queryForCollisionPairs = function (broadOverlapTestCallback) {\n\n var i, j, k, l, c,\n grid,\n cell,\n objA,\n objB,\n offset,\n adjacentCell,\n biggerGrid,\n objAAABB,\n objAHashInBiggerGrid,\n possibleCollisions = [];\n\n // default broad test to internal aabb overlap test\n let broadOverlapTest = broadOverlapTestCallback || testAABBOverlap;\n\n // for all grids ordered by cell size ASC\n for (i = 0; i < this._grids.length; i++) {\n grid = this._grids[i];\n\n // for each cell of the grid that is occupied\n for (j = 0; j < grid.occupiedCells.length; j++) {\n cell = grid.occupiedCells[j];\n\n // collide all objects within the occupied cell\n for (k = 0; k < cell.objectContainer.length; k++) {\n objA = cell.objectContainer[k];\n for (l = k + 1; l < cell.objectContainer.length; l++) {\n objB = cell.objectContainer[l];\n if (broadOverlapTest(objA, objB) === true) {\n possibleCollisions.push([objA, objB]);\n }\n }\n }\n\n // for the first half of all adjacent cells (offset 4 is the current cell)\n for (c = 0; c < 4; c++) {\n offset = cell.neighborOffsetArray[c];\n\n // if(offset === null) { continue; }\n\n adjacentCell = grid.allCells[cell.allCellsIndex + offset];\n\n // collide all objects in cell with adjacent cell\n for (k = 0; k < cell.objectContainer.length; k++) {\n objA = cell.objectContainer[k];\n for (l = 0; l < adjacentCell.objectContainer.length; l++) {\n objB = adjacentCell.objectContainer[l];\n if (broadOverlapTest(objA, objB) === true) {\n possibleCollisions.push([objA, objB]);\n }\n }\n }\n }\n }\n\n // forall objects that are stored in this grid\n for (j = 0; j < grid.allObjects.length; j++) {\n objA = grid.allObjects[j];\n objAAABB = objA.getAABB();\n\n // for all grids with cellsize larger than grid\n for (k = i + 1; k < this._grids.length; k++) {\n biggerGrid = this._grids[k];\n objAHashInBiggerGrid = biggerGrid.toHash(objAAABB.min[0], objAAABB.min[1]);\n cell = biggerGrid.allCells[objAHashInBiggerGrid];\n\n // check objA against every object in all cells in offset array of cell\n // for all adjacent cells...\n for (c = 0; c < cell.neighborOffsetArray.length; c++) {\n offset = cell.neighborOffsetArray[c];\n\n // if(offset === null) { continue; }\n\n adjacentCell = biggerGrid.allCells[cell.allCellsIndex + offset];\n\n // for all objects in the adjacent cell...\n for (l = 0; l < adjacentCell.objectContainer.length; l++) {\n objB = adjacentCell.objectContainer[l];\n // test against object A\n if (broadOverlapTest(objA, objB) === true) {\n possibleCollisions.push([objA, objB]);\n }\n }\n }\n }\n }\n }\n\n // return list of object pairs\n return possibleCollisions;\n};\n\nHSHG.update_RECOMPUTE = update_RECOMPUTE;\nHSHG.update_REMOVEALL = update_REMOVEALL;\n\n/**\n * Grid\n *\n * @constructor\n * @param int cellSize the pixel size of each cell of the grid\n * @param int cellCount the total number of cells for the grid (width x height)\n * @param HSHG parentHierarchy the HSHG to which this grid belongs\n * @return void\n */\nfunction Grid(cellSize, cellCount, parentHierarchy) {\n this.cellSize = cellSize;\n this.inverseCellSize = 1 / cellSize;\n this.rowColumnCount = ~~Math.sqrt(cellCount);\n this.xyHashMask = this.rowColumnCount - 1;\n this.occupiedCells = [];\n this.allCells = Array(this.rowColumnCount * this.rowColumnCount);\n this.allObjects = [];\n this.sharedInnerOffsets = [];\n\n this._parentHierarchy = parentHierarchy || null;\n}\n\nGrid.prototype.initCells = function () {\n\n // TODO: inner/unique offset rows 0 and 2 may need to be\n // swapped due to +y being \"down\" vs \"up\"\n\n var i,\n gridLength = this.allCells.length,\n x, y,\n wh = this.rowColumnCount,\n isOnRightEdge, isOnLeftEdge, isOnTopEdge, isOnBottomEdge,\n innerOffsets = [\n // y+ down offsets\n // -1 + -wh, -wh, -wh + 1,\n // -1, 0, 1,\n // wh - 1, wh, wh + 1\n\n // y+ up offsets\n wh - 1, wh, wh + 1,\n -1, 0, 1,\n -1 + -wh, -wh, -wh + 1\n ],\n leftOffset, rightOffset, topOffset, bottomOffset,\n uniqueOffsets = [],\n cell;\n\n this.sharedInnerOffsets = innerOffsets;\n\n // init all cells, creating offset arrays as needed\n\n for (i = 0; i < gridLength; i++) {\n\n cell = new Cell();\n // compute row (y) and column (x) for an index\n y = ~~(i / this.rowColumnCount);\n x = ~~(i - (y * this.rowColumnCount));\n\n // reset / init\n isOnRightEdge = false;\n isOnLeftEdge = false;\n isOnTopEdge = false;\n isOnBottomEdge = false;\n\n // right or left edge cell\n if ((x + 1) % this.rowColumnCount == 0) {\n isOnRightEdge = true;\n } else if (x % this.rowColumnCount == 0) {\n isOnLeftEdge = true;\n }\n\n // top or bottom edge cell\n if ((y + 1) % this.rowColumnCount == 0) {\n isOnTopEdge = true;\n } else if (y % this.rowColumnCount == 0) {\n isOnBottomEdge = true;\n }\n\n // if cell is edge cell, use unique offsets, otherwise use inner offsets\n if (isOnRightEdge || isOnLeftEdge || isOnTopEdge || isOnBottomEdge) {\n\n // figure out cardinal offsets first\n rightOffset = isOnRightEdge === true ? -wh + 1 : 1;\n leftOffset = isOnLeftEdge === true ? wh - 1 : -1;\n topOffset = isOnTopEdge === true ? -gridLength + wh : wh;\n bottomOffset = isOnBottomEdge === true ? gridLength - wh : -wh;\n\n // diagonals are composites of the cardinals\n uniqueOffsets = [\n // y+ down offset\n // leftOffset + bottomOffset, bottomOffset, rightOffset + bottomOffset,\n // leftOffset, 0, rightOffset,\n // leftOffset + topOffset, topOffset, rightOffset + topOffset\n\n // y+ up offset\n leftOffset + topOffset, topOffset, rightOffset + topOffset,\n leftOffset, 0, rightOffset,\n leftOffset + bottomOffset, bottomOffset, rightOffset + bottomOffset\n ];\n\n cell.neighborOffsetArray = uniqueOffsets;\n } else {\n cell.neighborOffsetArray = this.sharedInnerOffsets;\n }\n\n cell.allCellsIndex = i;\n this.allCells[i] = cell;\n }\n};\n\nGrid.prototype.toHash = function (x, y, z) {\n var i, xHash, yHash, zHash;\n\n if (x < 0) {\n i = (-x) * this.inverseCellSize;\n xHash = this.rowColumnCount - 1 - (~~i & this.xyHashMask);\n } else {\n i = x * this.inverseCellSize;\n xHash = ~~i & this.xyHashMask;\n }\n\n if (y < 0) {\n i = (-y) * this.inverseCellSize;\n yHash = this.rowColumnCount - 1 - (~~i & this.xyHashMask);\n } else {\n i = y * this.inverseCellSize;\n yHash = ~~i & this.xyHashMask;\n }\n\n // if(z < 0){\n //\ti = (-z) * this.inverseCellSize;\n //\tzHash = this.rowColumnCount - 1 - ( ~~i & this.xyHashMask );\n // } else {\n //\ti = z * this.inverseCellSize;\n //\tzHash = ~~i & this.xyHashMask;\n // }\n\n return xHash + yHash * this.rowColumnCount;\n // + zHash * this.rowColumnCount * this.rowColumnCount;\n};\n\nGrid.prototype.addObject = function (obj, hash) {\n var objAABB,\n objHash,\n targetCell;\n\n // technically, passing this in this should save some computational effort when updating objects\n if (hash !== undefined) {\n objHash = hash;\n } else {\n objAABB = obj.getAABB();\n objHash = this.toHash(objAABB.min[0], objAABB.min[1]);\n }\n targetCell = this.allCells[objHash];\n\n if (targetCell.objectContainer.length === 0) {\n // insert this cell into occupied cells list\n targetCell.occupiedCellsIndex = this.occupiedCells.length;\n this.occupiedCells.push(targetCell);\n }\n\n // add meta data to obj, for fast update/removal\n obj.HSHG.objectContainerIndex = targetCell.objectContainer.length;\n obj.HSHG.hash = objHash;\n obj.HSHG.grid = this;\n obj.HSHG.allGridObjectsIndex = this.allObjects.length;\n // add obj to cell\n targetCell.objectContainer.push(obj);\n\n // we can assume that the targetCell is already a member of the occupied list\n\n // add to grid-global object list\n this.allObjects.push(obj);\n\n // do test for grid density\n if (this.allObjects.length / this.allCells.length > this._parentHierarchy.MAX_OBJECT_CELL_DENSITY) {\n // grid must be increased in size\n this.expandGrid();\n }\n};\n\nGrid.prototype.removeObject = function (obj) {\n var meta = obj.HSHG,\n hash,\n containerIndex,\n allGridObjectsIndex,\n cell,\n replacementCell,\n replacementObj;\n\n hash = meta.hash;\n containerIndex = meta.objectContainerIndex;\n allGridObjectsIndex = meta.allGridObjectsIndex;\n cell = this.allCells[hash];\n\n // remove object from cell object container\n if (cell.objectContainer.length === 1) {\n // this is the last object in the cell, so reset it\n cell.objectContainer.length = 0;\n\n // remove cell from occupied list\n if (cell.occupiedCellsIndex === this.occupiedCells.length - 1) {\n // special case if the cell is the newest in the list\n this.occupiedCells.pop();\n } else {\n replacementCell = this.occupiedCells.pop();\n replacementCell.occupiedCellsIndex = cell.occupiedCellsIndex;\n this.occupiedCells[cell.occupiedCellsIndex] = replacementCell;\n }\n\n cell.occupiedCellsIndex = null;\n } else {\n // there is more than one object in the container\n if (containerIndex === cell.objectContainer.length - 1) {\n // special case if the obj is the newest in the container\n cell.objectContainer.pop();\n } else {\n replacementObj = cell.objectContainer.pop();\n replacementObj.HSHG.objectContainerIndex = containerIndex;\n cell.objectContainer[containerIndex] = replacementObj;\n }\n }\n\n // remove object from grid object list\n if (allGridObjectsIndex === this.allObjects.length - 1) {\n this.allObjects.pop();\n } else {\n replacementObj = this.allObjects.pop();\n replacementObj.HSHG.allGridObjectsIndex = allGridObjectsIndex;\n this.allObjects[allGridObjectsIndex] = replacementObj;\n }\n};\n\nGrid.prototype.expandGrid = function () {\n var i, j,\n currentCellCount = this.allCells.length,\n currentRowColumnCount = this.rowColumnCount,\n currentXYHashMask = this.xyHashMask,\n\n newCellCount = currentCellCount * 4, // double each dimension\n newRowColumnCount = ~~Math.sqrt(newCellCount),\n newXYHashMask = newRowColumnCount - 1,\n allObjects = this.allObjects.slice(0), // duplicate array, not objects contained\n aCell,\n push = Array.prototype.push;\n\n // remove all objects\n for (i = 0; i < allObjects.length; i++) {\n this.removeObject(allObjects[i]);\n }\n\n // reset grid values, set new grid to be 4x larger than last\n this.rowColumnCount = newRowColumnCount;\n this.allCells = Array(this.rowColumnCount * this.rowColumnCount);\n this.xyHashMask = newXYHashMask;\n\n // initialize new cells\n this.initCells();\n\n // re-add all objects to grid\n for (i = 0; i < allObjects.length; i++) {\n this.addObject(allObjects[i]);\n }\n};\n\n/**\n * A cell of the grid\n *\n * @constructor\n * @return void desc\n */\nfunction Cell() {\n this.objectContainer = [];\n this.neighborOffsetArray;\n this.occupiedCellsIndex = null;\n this.allCellsIndex = null;\n}\n\n// ---------------------------------------------------------------------\n// EXPORTS\n// ---------------------------------------------------------------------\n\nHSHG._private = {\n Grid: Grid,\n Cell: Cell,\n testAABBOverlap: testAABBOverlap,\n getLongestAABBEdge: getLongestAABBEdge\n};\n\nexport default HSHG;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/physics/SimplePhysics/HSHG.js","import HSHG from './HSHG';\n\n// Collision detection based on Hierarchical Spatial Hash Grid\n// uses this implementation https://gist.github.com/kirbysayshi/1760774\nclass HSHGCollisionDetection {\n\n constructor(options) {\n this.options = Object.assign({ COLLISION_DISTANCE: 28 }, options);\n }\n\n init(options) {\n this.gameEngine = options.gameEngine;\n this.grid = new HSHG();\n this.previousCollisionPairs = {};\n this.stepCollidingPairs = {};\n\n this.gameEngine.on('objectAdded', obj => {\n // add the gameEngine obj the the spatial grid\n this.grid.addObject(obj);\n });\n\n this.gameEngine.on('objectDestroyed', obj => {\n // add the gameEngine obj the the spatial grid\n this.grid.removeObject(obj);\n });\n }\n\n detect() {\n this.grid.update();\n this.stepCollidingPairs = this.grid.queryForCollisionPairs().reduce((accumulator, currentValue, i) => {\n let pairId = getArrayPairId(currentValue);\n accumulator[pairId] = { o1: currentValue[0], o2: currentValue[1] };\n return accumulator;\n }, {});\n\n for (let pairId of Object.keys(this.previousCollisionPairs)) {\n let pairObj = this.previousCollisionPairs[pairId];\n\n // existed in previous pairs, but not during this step: this pair stopped colliding\n if (pairId in this.stepCollidingPairs === false) {\n this.gameEngine.emit('collisionStop', pairObj);\n }\n }\n\n for (let pairId of Object.keys(this.stepCollidingPairs)) {\n let pairObj = this.stepCollidingPairs[pairId];\n\n // didn't exist in previous pairs, but exists now: this is a new colliding pair\n if (pairId in this.previousCollisionPairs === false) {\n this.gameEngine.emit('collisionStart', pairObj);\n }\n }\n\n this.previousCollisionPairs = this.stepCollidingPairs;\n }\n\n /**\n * checks wheter two objects are currently colliding\n * @param {Object} o1 first object\n * @param {Object} o2 second object\n * @return {boolean} are the two objects colliding?\n */\n areObjectsColliding(o1, o2) {\n return getArrayPairId([o1, o2]) in this.stepCollidingPairs;\n }\n\n}\n\nfunction getArrayPairId(arrayPair) {\n // make sure to get the same id regardless of object order\n let sortedArrayPair = arrayPair.slice(0).sort();\n return sortedArrayPair[0].id + '-' + sortedArrayPair[1].id;\n}\n\nexport default HSHGCollisionDetection;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/physics/SimplePhysics/HSHGCollisionDetection.js","import TwoVector from '../../serialize/TwoVector';\nlet differenceVector = new TwoVector();\n\n// The collision detection of SimplePhysicsEngine is a brute-force approach\nexport default class BruteForceCollisionDetection {\n\n constructor(options) {\n this.options = Object.assign({\n autoResolve: true\n }, options);\n this.collisionPairs = {};\n }\n\n init(options) {\n this.gameEngine = options.gameEngine;\n }\n\n findCollision(o1, o2) {\n\n // static objects don't collide\n if (o1.isStatic && o2.isStatic)\n return false;\n\n // allow a collision checker function\n if (typeof o1.collidesWith === 'function') {\n if (!o1.collidesWith(o2))\n return false;\n }\n\n // radius-based collision\n if (this.options.collisionDistance) {\n differenceVector.copy(o1.position).subtract(o2.position);\n return differenceVector.length() < this.options.collisionDistance;\n }\n\n // check for no-collision first\n let o1Box = getBox(o1);\n let o2Box = getBox(o2);\n if (o1Box.xMin > o2Box.xMax ||\n o1Box.yMin > o2Box.yMax ||\n o2Box.xMin > o1Box.xMax ||\n o2Box.yMin > o1Box.yMax)\n return false;\n\n if (!this.options.autoResolve)\n return true;\n\n // need to auto-resolve\n let shiftY1 = o2Box.yMax - o1Box.yMin;\n let shiftY2 = o1Box.yMax - o2Box.yMin;\n let shiftX1 = o2Box.xMax - o1Box.xMin;\n let shiftX2 = o1Box.xMax - o2Box.xMin;\n let smallestYShift = Math.min(Math.abs(shiftY1), Math.abs(shiftY2));\n let smallestXShift = Math.min(Math.abs(shiftX1), Math.abs(shiftX2));\n\n // choose to apply the smallest shift which solves the collision\n if (smallestYShift < smallestXShift) {\n if (o1Box.yMin > o2Box.yMin && o1Box.yMin < o2Box.yMax) {\n if (o2.isStatic) o1.position.y += shiftY1;\n else if (o1.isStatic) o2.position.y -= shiftY1;\n else {\n o1.position.y += shiftY1 / 2;\n o2.position.y -= shiftY1 / 2;\n }\n } else if (o1Box.yMax > o2Box.yMin && o1Box.yMax < o2Box.yMax) {\n if (o2.isStatic) o1.position.y -= shiftY2;\n else if (o1.isStatic) o2.position.y += shiftY2;\n else {\n o1.position.y -= shiftY2 / 2;\n o2.position.y += shiftY2 / 2;\n }\n }\n o1.velocity.y = 0;\n o2.velocity.y = 0;\n } else {\n if (o1Box.xMin > o2Box.xMin && o1Box.xMin < o2Box.xMax) {\n if (o2.isStatic) o1.position.x += shiftX1;\n else if (o1.isStatic) o2.position.x -= shiftX1;\n else {\n o1.position.x += shiftX1 / 2;\n o2.position.x -= shiftX1 / 2;\n }\n } else if (o1Box.xMax > o2Box.xMin && o1Box.xMax < o2Box.xMax) {\n if (o2.isStatic) o1.position.x -= shiftX2;\n else if (o1.isStatic) o2.position.x += shiftX2;\n else {\n o1.position.x -= shiftX2 / 2;\n o2.position.x += shiftX2 / 2;\n }\n }\n o1.velocity.x = 0;\n o2.velocity.x = 0;\n }\n\n return true;\n }\n\n // check if pair (id1, id2) have collided\n checkPair(id1, id2) {\n let objects = this.gameEngine.world.objects;\n let o1 = objects[id1];\n let o2 = objects[id2];\n\n // make sure that objects actually exist. might have been destroyed\n if (!o1 || !o2) return;\n let pairId = [id1, id2].join(',');\n\n if (this.findCollision(o1, o2)) {\n if (!(pairId in this.collisionPairs)) {\n this.collisionPairs[pairId] = true;\n this.gameEngine.emit('collisionStart', { o1, o2 });\n }\n } else if (pairId in this.collisionPairs) {\n this.gameEngine.emit('collisionStop', { o1, o2 });\n delete this.collisionPairs[pairId];\n }\n }\n\n // detect by checking all pairs\n detect() {\n let objects = this.gameEngine.world.objects;\n let keys = Object.keys(objects);\n\n // delete non existant object pairs\n for (let pairId in this.collisionPairs)\n if (this.collisionPairs.hasOwnProperty(pairId))\n if (keys.indexOf(pairId.split(',')[0]) === -1 || keys.indexOf(pairId.split(',')[1]) === -1)\n delete this.collisionPairs[pairId];\n\n // check all pairs\n for (let k1 of keys)\n for (let k2 of keys)\n if (k2 > k1) this.checkPair(k1, k2);\n }\n}\n\n// get bounding box of object o\nfunction getBox(o) {\n return {\n xMin: o.position.x,\n xMax: o.position.x + o.width,\n yMin: o.position.y,\n yMax: o.position.y + o.height\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/physics/SimplePhysics/BruteForceCollisionDetection.js","import PhysicsEngine from './PhysicsEngine';\nimport TwoVector from '../serialize/TwoVector';\nimport HSHGCollisionDetection from './SimplePhysics/HSHGCollisionDetection';\nimport BruteForceCollisionDetection from './SimplePhysics/BruteForceCollisionDetection';\n\nlet dv = new TwoVector();\nlet dx = new TwoVector();\n\n/**\n * SimplePhysicsEngine is a pseudo-physics engine which works with\n * objects of class DynamicObject.\n * The Simple Physics Engine is a \"fake\" physics engine, which is more\n * appropriate for arcade games, and it is sometimes referred to as \"arcade\"\n * physics. For example if a character is standing at the edge of a platform,\n * with only one foot on the platform, it won't fall over. This is a desired\n * game behaviour in platformer games.\n */\nclass SimplePhysicsEngine extends PhysicsEngine {\n\n /**\n * Creates an instance of the Simple Physics Engine.\n * @param {Object} options - physics options\n * @param {Object} options.collisions - collision options\n * @param {String} options.collisions.type - can be set to \"HSHG\" or \"bruteForce\". Default is Brute-Force collision detection.\n * @param {Number} options.collisions.collisionDistance - for brute force, this can be set for a simple distance-based (radius) collision detection.\n * @param {Boolean} options.collisions.autoResolve - for brute force collision, colliding objects should be moved apart\n * @param {TwoVector} options.gravity - TwoVector instance which describes gravity, which will be added to the velocity of all objects at every step. For example TwoVector(0, -0.01)\n */\n constructor(options) {\n super(options);\n\n // todo does this mean both modules always get loaded?\n if (options.collisions && options.collisions.type === 'HSHG') {\n this.collisionDetection = new HSHGCollisionDetection(options.collisions);\n } else {\n this.collisionDetection = new BruteForceCollisionDetection(options.collisions);\n }\n\n /**\n * The actor's name.\n * @memberof SimplePhysicsEngine\n * @member {TwoVector} gravity affecting all objects\n */\n this.gravity = new TwoVector(0, 0);\n\n if (options.gravity)\n this.gravity.copy(options.gravity);\n\n let collisionOptions = Object.assign({ gameEngine: this.gameEngine }, options.collisionOptions);\n this.collisionDetection.init(collisionOptions);\n }\n\n // a single object advances, based on:\n // isRotatingRight, isRotatingLeft, isAccelerating, current velocity\n // wrap-around the world if necessary\n objectStep(o, dt) {\n\n // calculate factor\n if (dt === 0)\n return;\n\n if (dt)\n dt /= (1 / 60);\n else\n dt = 1;\n\n // TODO: worldsettings is a hack. Find all places which use it in all games\n // and come up with a better solution. for example an option sent to the physics Engine\n // with a \"worldWrap:true\" options\n // replace with a \"worldBounds\" parameter to the PhysicsEngine constructor\n\n let worldSettings = this.gameEngine.worldSettings;\n\n // TODO: remove this code in version 4: these attributes are deprecated\n if (o.isRotatingRight) { o.angle += o.rotationSpeed; }\n if (o.isRotatingLeft) { o.angle -= o.rotationSpeed; }\n\n // TODO: remove this code in version 4: these attributes are deprecated\n if (o.angle >= 360) { o.angle -= 360; }\n if (o.angle < 0) { o.angle += 360; }\n\n // TODO: remove this code in version 4: these attributes are deprecated\n if (o.isAccelerating) {\n let rad = o.angle * (Math.PI / 180);\n dv.set(Math.cos(rad), Math.sin(rad)).multiplyScalar(o.acceleration).multiplyScalar(dt);\n o.velocity.add(dv);\n }\n\n // apply gravity\n if (!o.isStatic) o.velocity.add(this.gravity);\n\n let velMagnitude = o.velocity.length();\n if ((o.maxSpeed !== null) && (velMagnitude > o.maxSpeed)) {\n o.velocity.multiplyScalar(o.maxSpeed / velMagnitude);\n }\n\n o.isAccelerating = false;\n o.isRotatingLeft = false;\n o.isRotatingRight = false;\n\n dx.copy(o.velocity).multiplyScalar(dt);\n o.position.add(dx);\n\n o.velocity.multiply(o.friction);\n\n // wrap around the world edges\n if (worldSettings.worldWrap) {\n if (o.position.x >= worldSettings.width) { o.position.x -= worldSettings.width; }\n if (o.position.y >= worldSettings.height) { o.position.y -= worldSettings.height; }\n if (o.position.x < 0) { o.position.x += worldSettings.width; }\n if (o.position.y < 0) { o.position.y += worldSettings.height; }\n }\n }\n\n // entry point for a single step of the Simple Physics\n step(dt, objectFilter) {\n\n // each object should advance\n let objects = this.gameEngine.world.objects;\n for (let objId of Object.keys(objects)) {\n\n // shadow objects are not re-enacted\n let ob = objects[objId];\n if (!objectFilter(ob))\n continue;\n\n // run the object step\n this.objectStep(ob, dt);\n }\n\n // emit event on collision\n this.collisionDetection.detect(this.gameEngine);\n }\n}\n\nexport default SimplePhysicsEngine;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/physics/SimplePhysicsEngine.js","import PhysicsEngine from './PhysicsEngine';\nconst CANNON = require('cannon');\n\n/**\n * CannonPhysicsEngine is a three-dimensional lightweight physics engine\n */\nclass CannonPhysicsEngine extends PhysicsEngine {\n\n constructor(options) {\n super(options);\n\n this.options.dt = this.options.dt || (1 / 60);\n let world = this.world = new CANNON.World();\n world.quatNormalizeSkip = 0;\n world.quatNormalizeFast = false;\n world.gravity.set(0, -10, 0);\n world.broadphase = new CANNON.NaiveBroadphase();\n this.CANNON = CANNON;\n }\n\n // entry point for a single step of the Simple Physics\n step(dt, objectFilter) {\n this.world.step(dt || this.options.dt);\n }\n\n addSphere(radius, mass) {\n let shape = new CANNON.Sphere(radius);\n let body = new CANNON.Body({ mass, shape });\n body.position.set(0, 0, 0);\n this.world.addBody(body);\n return body;\n }\n\n addBox(x, y, z, mass, friction) {\n let shape = new CANNON.Box(new CANNON.Vec3(x, y, z));\n let options = { mass, shape };\n if (friction !== undefined)\n options.material = new CANNON.Material({ friction });\n\n let body = new CANNON.Body(options);\n body.position.set(0, 0, 0);\n this.world.addBody(body);\n return body;\n }\n\n addCylinder(radiusTop, radiusBottom, height, numSegments, mass) {\n let shape = new CANNON.Cylinder(radiusTop, radiusBottom, height, numSegments);\n let body = new CANNON.Body({ mass, shape });\n this.world.addBody(body);\n return body;\n }\n\n removeObject(obj) {\n this.world.removeBody(obj);\n }\n}\n\nexport default CannonPhysicsEngine;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/physics/CannonPhysicsEngine.js","import Serializable from './Serializable';\nimport BaseTypes from './BaseTypes';\n\n/**\n * A ThreeVector is a geometric object which is completely described\n * by three values.\n */\nclass ThreeVector extends Serializable {\n\n static get netScheme() {\n return {\n x: { type: BaseTypes.TYPES.FLOAT32 },\n y: { type: BaseTypes.TYPES.FLOAT32 },\n z: { type: BaseTypes.TYPES.FLOAT32 }\n };\n }\n\n /**\n * Creates an instance of a ThreeVector.\n * @param {Number} x - first value\n * @param {Number} y - second value\n * @param {Number} z - second value\n * @return {ThreeVector} v - the new ThreeVector\n */\n constructor(x, y, z) {\n super();\n this.x = x;\n this.y = y;\n this.z = z;\n\n return this;\n }\n\n /**\n * Formatted textual description of the ThreeVector.\n * @return {String} description\n */\n toString() {\n function round3(x) { return Math.round(x * 1000) / 1000; }\n return `[${round3(this.x)}, ${round3(this.y)}, ${round3(this.z)}]`;\n }\n\n /**\n * Multiply this ThreeVector by a scalar\n *\n * @param {Number} s the scale\n * @return {ThreeVector} returns self\n */\n multiplyScalar(s) {\n this.x *= s;\n this.y *= s;\n this.z *= s;\n return this;\n }\n\n /**\n * Get vector length\n *\n * @return {Number} length of this vector\n */\n length() {\n return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n }\n\n /**\n * Add other vector to this vector\n *\n * @param {ThreeVector} other the other vector\n * @return {ThreeVector} returns self\n */\n add(other) {\n this.x += other.x;\n this.y += other.y;\n this.z += other.z;\n return this;\n }\n\n /**\n * Subtract other vector from this vector\n *\n * @param {ThreeVector} other the other vector\n * @return {ThreeVector} returns self\n */\n subtract(other) {\n this.x -= other.x;\n this.y -= other.y;\n this.z -= other.z;\n return this;\n }\n\n /**\n * Normalize this vector, in-place\n *\n * @return {ThreeVector} returns self\n */\n normalize() {\n this.multiplyScalar(1 / this.length());\n return this;\n }\n\n /**\n * Copy values from another ThreeVector into this ThreeVector\n *\n * @param {ThreeVector} sourceObj the other vector\n * @return {ThreeVector} returns self\n */\n copy(sourceObj) {\n this.x = sourceObj.x;\n this.y = sourceObj.y;\n this.z = sourceObj.z;\n return this;\n }\n\n /**\n * Set ThreeVector values\n *\n * @param {Number} x x-value\n * @param {Number} y y-value\n * @param {Number} z z-value\n * @return {ThreeVector} returns self\n */\n set(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n }\n\n /**\n * Create a clone of this vector\n *\n * @return {ThreeVector} returns clone\n */\n clone() {\n return new ThreeVector(this.x, this.y, this.z);\n }\n\n /**\n * Apply in-place lerp (linear interpolation) to this ThreeVector\n * towards another ThreeVector\n * @param {ThreeVector} target the target vector\n * @param {Number} p The percentage to interpolate\n * @return {ThreeVector} returns self\n */\n lerp(target, p) {\n this.x += (target.x - this.x) * p;\n this.y += (target.y - this.y) * p;\n this.z += (target.z - this.z) * p;\n return this;\n }\n\n /**\n * Get bending Delta Vector\n * towards another ThreeVector\n * @param {ThreeVector} target the target vector\n * @param {Object} options bending options\n * @param {Number} options.increments number of increments\n * @param {Number} options.percent The percentage to bend\n * @param {Number} options.min No less than this value\n * @param {Number} options.max No more than this value\n * @return {ThreeVector} returns new Incremental Vector\n */\n getBendingDelta(target, options) {\n let increment = target.clone();\n increment.subtract(this);\n increment.multiplyScalar(options.percent);\n\n // check for max case\n if ((options.max && increment.length() > options.max) ||\n (options.max && increment.length() < options.min)) {\n return new ThreeVector(0, 0, 0);\n }\n\n // divide into increments\n increment.multiplyScalar(1 / options.increments);\n\n return increment;\n }\n}\n\nexport default ThreeVector;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/serialize/ThreeVector.js","import Serializable from './Serializable';\nimport BaseTypes from './BaseTypes';\nimport ThreeVector from './ThreeVector';\n\nconst SHOW_AS_AXIS_ANGLE = true;\nconst MAX_DEL_THETA = 0.2;\n\n/**\n * A Quaternion is a geometric object which can be used to\n * represent a three-dimensional rotation.\n */\nclass Quaternion extends Serializable {\n\n static get netScheme() {\n return {\n w: { type: BaseTypes.TYPES.FLOAT32 },\n x: { type: BaseTypes.TYPES.FLOAT32 },\n y: { type: BaseTypes.TYPES.FLOAT32 },\n z: { type: BaseTypes.TYPES.FLOAT32 }\n };\n }\n\n /**\n * Creates an instance of a Quaternion.\n * @param {Number} w - first value\n * @param {Number} x - second value\n * @param {Number} y - third value\n * @param {Number} z - fourth value\n * @return {Quaternion} v - the new Quaternion\n */\n constructor(w, x, y, z) {\n super();\n this.w = w;\n this.x = x;\n this.y = y;\n this.z = z;\n\n return this;\n }\n\n /**\n * Formatted textual description of the Quaternion.\n * @return {String} description\n */\n toString() {\n function round3(x) { return Math.round(x * 1000) / 1000; }\n if (SHOW_AS_AXIS_ANGLE) {\n let axisAngle = this.toAxisAngle();\n return `[${round3(axisAngle.angle)},${axisAngle.axis.toString()}]`;\n }\n return `[${round3(this.w)}, ${round3(this.x)}, ${round3(this.y)}, ${round3(this.z)}]`;\n }\n\n /**\n * copy values from another quaternion into this quaternion\n *\n * @param {Quaternion} sourceObj the quaternion to copy from\n * @return {Quaternion} returns self\n */\n copy(sourceObj) {\n this.set(sourceObj.w, sourceObj.x, sourceObj.y, sourceObj.z);\n return this;\n }\n\n /**\n * set quaternion values\n *\n * @param {Number} w w-value\n * @param {Number} x x-value\n * @param {Number} y y-value\n * @param {Number} z z-value\n * @return {Quaternion} returns self\n */\n set(w, x, y, z) {\n this.w = w;\n this.x = x;\n this.y = y;\n this.z = z;\n\n return this;\n }\n\n /**\n * return an axis-angle representation of this quaternion\n *\n * @return {Object} contains two attributes: axis (ThreeVector) and angle.\n */\n toAxisAngle() {\n\n // assuming quaternion normalised then w is less than 1, so term always positive.\n let axis = new ThreeVector(1, 0, 0);\n this.normalize();\n let angle = 2 * Math.acos(this.w);\n let s = Math.sqrt(1 - this.w * this.w);\n if (s > 0.001) {\n let divS = 1 / s;\n axis.x = this.x * divS;\n axis.y = this.y * divS;\n axis.z = this.z * divS;\n }\n if (s > Math.PI) {\n s -= 2 * Math.PI;\n }\n return { axis, angle };\n }\n\n normalize() {\n let l = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);\n if (l === 0) {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n this.w = 0;\n } else {\n l = 1 / l;\n this.x *= l;\n this.y *= l;\n this.z *= l;\n this.w *= l;\n }\n\n return this;\n }\n\n /**\n * set the values of this quaternion from an axis/angle representation\n *\n * @param {ThreeVector} axis The axis\n * @param {Number} angle angle in radians\n * @return {Quaternion} returns self\n */\n setFromAxisAngle(axis, angle) {\n\n if (angle < 0)\n angle += Math.PI * 2;\n let halfAngle = angle * 0.5;\n let s = Math.sin(halfAngle);\n this.x = axis.x * s;\n this.y = axis.y * s;\n this.z = axis.z * s;\n this.w = Math.cos(halfAngle);\n\n return this;\n }\n\n /**\n * conjugate the quaternion, in-place\n *\n * @return {Quaternion} returns self\n */\n conjugate() {\n this.x *= -1;\n this.y *= -1;\n this.z *= -1;\n return this;\n }\n\n /* eslint-disable */\n /**\n * multiply this quaternion by another, in-place\n *\n * @param {Quaternion} other The other quaternion\n * @return {Quaternion} returns self\n */\n multiply(other) {\n let aw = this.w, ax = this.x, ay = this.y, az = this.z;\n let bw = other.w, bx = other.x, by = other.y, bz = other.z;\n\n this.x = ax * bw + aw * bx + ay * bz - az * by;\n this.y = ay * bw + aw * by + az * bx - ax * bz;\n this.z = az * bw + aw * bz + ax * by - ay * bx;\n this.w = aw * bw - ax * bx - ay * by - az * bz;\n\n return this;\n }\n /* eslint-enable */\n\n /* eslint-disable */\n /**\n * Apply in-place slerp (spherical linear interpolation) to this quaternion,\n * towards another quaternion.\n *\n * @param {Quaternion} target The target quaternion\n * @param {Number} bending The percentage to interpolate\n * @return {Quaternion} returns self\n */\n slerp(target, bending) {\n\n if (bending <= 0) return this;\n if (bending >= 1) return this.copy(target);\n\n let aw = this.w, ax = this.x, ay = this.y, az = this.z;\n let bw = target.w, bx = target.x, by = target.y, bz = target.z;\n\n let cosHalfTheta = aw*bw + ax*bx + ay*by + az*bz;\n if (cosHalfTheta < 0) {\n this.set(-bw, -bx, -by, -bz);\n cosHalfTheta = -cosHalfTheta;\n } else {\n this.copy(target);\n }\n\n if (cosHalfTheta >= 1.0) {\n this.set(aw, ax, ay, az);\n return this;\n }\n\n let sqrSinHalfTheta = 1.0 - cosHalfTheta*cosHalfTheta;\n if (sqrSinHalfTheta < Number.EPSILON) {\n let s = 1 - bending;\n this.set(s*aw + bending*this.w, s*ax + bending*this.x, s*ay + bending*this.y, s*az + bending*this.z);\n return this.normalize();\n }\n\n let sinHalfTheta = Math.sqrt(sqrSinHalfTheta);\n let halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta);\n let delTheta = bending * halfTheta;\n if (Math.abs(delTheta) > MAX_DEL_THETA)\n delTheta = MAX_DEL_THETA * Math.sign(delTheta);\n let ratioA = Math.sin(halfTheta - delTheta)/sinHalfTheta;\n let ratioB = Math.sin(delTheta)/sinHalfTheta;\n this.set(aw*ratioA + this.w*ratioB,\n ax*ratioA + this.x*ratioB,\n ay*ratioA + this.y*ratioB,\n az*ratioA + this.z*ratioB);\n return this;\n }\n /* eslint-enable */\n}\n\nexport default Quaternion;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/serialize/Quaternion.js","import Serializable from './Serializable';\nimport BaseTypes from './BaseTypes';\n\n/**\n * GameObject is the base class of all game objects.\n * It is created only for the purpose of clearly defining the game\n * object interface.\n * Game developers will use one of the subclasses such as DynamicObject,\n * or PhysicalObject.\n */\nclass GameObject extends Serializable {\n\n static get netScheme() {\n return {\n id: { type: BaseTypes.TYPES.INT32 },\n playerId: { type: BaseTypes.TYPES.INT16 }\n };\n }\n\n /**\n * Creates an instance of a game object.\n * @param {GameEngine} gameEngine - the gameEngine this object will be used in\n * @param {Object} options - options for instantiation of the GameObject\n * @param {Number} id - if set, the new instantiated object will be set to this id instead of being generated a new one. Use with caution!\n * @param {Object} props - additional properties for creation\n * @param {Number} props.playerId - the playerId value of the player who owns this object\n */\n constructor(gameEngine, options, props) {\n super();\n /**\n * The gameEngine this object will be used in\n * @member {GameEngine}\n */\n this.gameEngine = gameEngine;\n\n /**\n * ID of this object's instance.\n * There are three cases of instance creation which can occur:\n * 1. In the normal case, the constructor is asked to assign an ID which is unique\n * across the entire game world, including the server and all the clients.\n * 2. In extrapolation mode, the client may have an object instance which does not\n * yet exist on the server, these objects are known as shadow objects. Their IDs must\n * be allocated from a different range.\n * 3. Also, temporary objects are created on the client side each time a sync is received.\n * These are used for interpolation purposes and as bending targets of position, velocity,\n * angular velocity, and orientation. In this case the id will be set to null.\n * @member {Number}\n */\n this.id = null;\n if (options && 'id' in options)\n this.id = options.id;\n else if (this.gameEngine)\n this.id = this.gameEngine.world.getNewId();\n\n /**\n * playerId of player who created this object\n * @member {Number}\n */\n this.playerId = (props && props.playerId) ? props.playerId : 0;\n\n this.components = {};\n }\n\n /**\n * Called after the object is added to to the game world.\n * This is the right place to add renderer sub-objects, physics sub-objects\n * and any other resources that should be created\n * @param {GameEngine} gameEngine the game engine\n */\n onAddToWorld(gameEngine) {}\n\n /**\n * Called after the object is removed from game-world.\n * This is where renderer sub-objects and any other resources should be freed\n * @param {GameEngine} gameEngine the game engine\n */\n onRemoveFromWorld(gameEngine) {}\n\n /**\n * Formatted textual description of the game object.\n * @return {String} description - a string description\n */\n toString() {\n return `game-object[${this.id}]`;\n }\n\n /**\n * Formatted textual description of the game object's current bending properties.\n * @return {String} description - a string description\n */\n bendingToString() {\n return 'no bending';\n }\n\n saveState(other) {\n this.savedCopy = (new this.constructor(this.gameEngine, { id: null }));\n this.savedCopy.syncTo(other ? other : this);\n }\n /**\n * Bending is defined as the amount of error correction that will be applied\n * on the client side to a given object's physical attributes, incrementally,\n * by the time the next server broadcast is expected to arrive.\n *\n * When this percentage is 0.0, the client always ignores the server object's value.\n * When this percentage is 1.0, the server object's attributes will be applied in full.\n *\n * The GameObject bending attribute is implemented as a getter, and can provide\n * distinct values for position, velocity, angle, and angularVelocity.\n * And in each case, you can also provide overrides for local objects,\n * these attributes will be called, respectively, positionLocal, velocityLocal,\n * angleLocal, angularVelocityLocal.\n *\n * @example\n * get bending() {\n * return {\n * position: { percent: 1.0, min: 0.0 },\n * velocity: { percent: 0.0, min: 0.0 },\n * angularVelocity: { percent: 0.0 },\n * angleLocal: { percent: 1.0 }\n * }\n * };\n *\n * @memberof GameObject\n * @member {Object} bending\n */\n get bending() {\n return {\n position: { percent: 1.0, min: 0.0 },\n velocity: { percent: 0.0, min: 0.0 },\n angularVelocity: { percent: 0.0 },\n angleLocal: { percent: 1.0 }\n };\n }\n\n // TODO:\n // rather than pass worldSettings on each bend, they could\n // be passed in on the constructor just once.\n bendToCurrentState(bending, worldSettings, isLocal, bendingIncrements) {\n if (this.savedCopy) {\n this.bendToCurrent(this.savedCopy, bending, worldSettings, isLocal, bendingIncrements);\n }\n this.savedCopy = null;\n }\n\n bendToCurrent(original, bending, worldSettings, isLocal, bendingIncrements) {\n }\n\n /**\n * synchronize this object to the state of an other object, by copying all the netscheme variables.\n * This is used by the synchronizer to create temporary objects, and must be implemented by all sub-classes as well.\n * @param {GameObject} other the other object to synchronize to\n */\n syncTo(other) {\n super.syncTo(other);\n this.playerId = other.playerId;\n }\n\n // copy physical attributes to physics sub-object\n refreshToPhysics() {}\n\n // copy physical attributes from physics sub-object\n refreshFromPhysics() {}\n\n // apply a single bending increment\n applyIncrementalBending() { }\n\n // clean up resources\n destroy() {}\n\n addComponent(componentInstance) {\n componentInstance.parentObject = this;\n this.components[componentInstance.constructor.name] = componentInstance;\n\n // a gameEngine might not exist if this class is instantiated by the serializer\n if (this.gameEngine) {\n this.gameEngine.emit('componentAdded', this, componentInstance);\n }\n }\n\n removeComponent(componentName) {\n // todo cleanup of the component ?\n delete this.components[componentName];\n\n // a gameEngine might not exist if this class is instantiated by the serializer\n if (this.gameEngine) {\n this.gameEngine.emit('componentRemoved', this, componentName);\n }\n }\n\n /**\n * Check whether this game object has a certain component\n * @param {Object} componentClass the comp\n * @return {Boolean} true if the gameObject contains this component\n */\n hasComponent(componentClass) {\n return componentClass.name in this.components;\n }\n\n getComponent(componentClass) {\n return this.components[componentClass.name];\n }\n\n}\n\nexport default GameObject;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/serialize/GameObject.js","export default class MathUtils {\n\n // interpolate from start to end, advancing \"percent\" of the way\n static interpolate(start, end, percent) {\n return (end - start) * percent + start;\n }\n\n // interpolate from start to end, advancing \"percent\" of the way\n //\n // returns just the delta. i.e. the value that must be added to the start value\n static interpolateDelta(start, end, percent) {\n return (end - start) * percent;\n }\n\n // interpolate from start to end, advancing \"percent\" of the way\n // and noting that the dimension wraps around {x >= wrapMin, x < wrapMax}\n //\n // returns just the delta. i.e. the value that must be added to the start value\n static interpolateDeltaWithWrapping(start, end, percent, wrapMin, wrapMax) {\n let wrapTest = wrapMax - wrapMin;\n if (start - end > wrapTest / 2) end += wrapTest;\n else if (end - start > wrapTest / 2) start += wrapTest;\n if (Math.abs(start - end) > wrapTest / 3) {\n console.log('wrap interpolation is close to limit. Not sure which edge to wrap to.');\n }\n return (end - start) * percent;\n }\n\n static interpolateWithWrapping(start, end, percent, wrapMin, wrapMax) {\n let interpolatedVal = start + this.interpolateDeltaWithWrapping(start, end, percent, wrapMin, wrapMax);\n let wrapLength = wrapMax - wrapMin;\n if (interpolatedVal >= wrapLength) interpolatedVal -= wrapLength;\n if (interpolatedVal < 0) interpolatedVal += wrapLength;\n return interpolatedVal;\n }\n}\n\n\n// WEBPACK FOOTER //\n// ../../src/lib/MathUtils.js","import TwoVector from './TwoVector';\nimport GameObject from './GameObject';\nimport BaseTypes from './BaseTypes';\nimport MathUtils from '../lib/MathUtils';\n\n/**\n * DynamicObject is the base class of the game's objects, for 2D games which\n * rely on {@link SimplePhysicsEngine}. It defines the\n * base object which can move around in the game world. The\n * extensions of this object (the subclasses)\n * will be periodically synchronized from the server to every client.\n *\n * The dynamic objects have pseudo-physical properties, which\n * allow the client to extrapolate the position\n * of dynamic objects in-between server updates.\n */\nclass DynamicObject extends GameObject {\n\n /**\n * The netScheme is a dictionary of attributes in this game\n * object. The attributes listed in the netScheme are those exact\n * attributes which will be serialized and sent from the server\n * to each client on every server update.\n * The netScheme member is implemented as a getter.\n *\n * You may choose not to implement this method, in which\n * case your object only transmits the default attributes\n * which are already part of {@link DynamicObject}.\n * But if you choose to add more attributes, make sure\n * the return value includes the netScheme of the super class.\n *\n * @memberof DynamicObject\n * @member {Object} netScheme\n * @example\n * static get netScheme() {\n * return Object.assign({\n * mojo: { type: BaseTypes.TYPES.UINT8 },\n * }, super.netScheme);\n * }\n */\n static get netScheme() {\n return Object.assign({\n position: { type: BaseTypes.TYPES.CLASSINSTANCE },\n width: { type: BaseTypes.TYPES.INT16 },\n height: { type: BaseTypes.TYPES.INT16 },\n isStatic: { type: BaseTypes.TYPES.UINT8 },\n velocity: { type: BaseTypes.TYPES.CLASSINSTANCE },\n angle: { type: BaseTypes.TYPES.FLOAT32 }\n }, super.netScheme);\n }\n\n /**\n * Creates an instance of a dynamic object.\n * NOTE 1: do not add logic to subcclasses of this function, instead, create an instance and\n * assign attributes to the new objects.\n * NOTE 2: all subclasses of this class must comply with this constructor signature.\n * This is required because the engine will create temporary instances when\n * syncs arrive on the clients.\n * @param {GameEngine} gameEngine - the gameEngine this object will be used in\n * @param {Object} options - options for the new object. See {@link GameObject}\n * @param {Object} props - properties to be set in the new object\n * @param {TwoVector} props.position - position vector\n * @param {TwoVector} props.velocity - velocity vector\n * @param {Number} props.height - object height\n * @param {Number} props.width - object width\n */\n constructor(gameEngine, options, props) {\n super(gameEngine, options, props);\n\n this.bendingIncrements = 0;\n\n this.position = new TwoVector(0, 0);\n this.velocity = new TwoVector(0, 0);\n\n /**\n * Object width for collision detection purposes. Default is 1\n * @member {Number}\n */\n this.width = (props && props.width) ? props.width : 1;\n\n /**\n * Object height for collision detection purposes. Default is 1\n * @member {Number}\n */\n this.height = (props && props.height) ? props.height : 1;\n\n /**\n * Determine if the object is static (i.e. it never moves, like a wall). The value 0 implies the object is dynamic. Default is 0 (dynamic).\n * @member {Number}\n */\n this.isStatic = (props && props.isStatic) ? props.isStatic : 0;\n\n /**\n * The friction coefficient. Velocity is multiplied by this for each step. Default is (1,1)\n * @member {TwoVector}\n */\n this.friction = new TwoVector(1, 1);\n\n /**\n * position\n * @member {TwoVector}\n */\n if (props && props.position) this.position.copy(props.position);\n\n /**\n * velocity\n * @member {TwoVector}\n */\n if (props && props.velocity) this.velocity.copy(props.velocity);\n\n /**\n * object orientation angle in degrees\n * @member {Number}\n */\n this.angle = 90;\n\n /**\n * @deprecated since version 3.0.8\n * should rotate left by {@link DynamicObject#rotationSpeed} on next step\n * @member {Boolean}\n */\n this.isRotatingLeft = false;\n\n /**\n * @deprecated since version 3.0.8\n * should rotate right by {@link DynamicObject#rotationSpeed} on next step\n * @member {Boolean}\n */\n this.isRotatingRight = false;\n\n /**\n * @deprecated since version 3.0.8\n * should accelerate by {@link DynamicObject#acceleration} on next step\n * @member {Boolean}\n */\n this.isAccelerating = false;\n\n /**\n * @deprecated since version 3.0.8\n * angle rotation per step\n * @member {Number}\n */\n this.rotationSpeed = 2.5;\n\n /**\n * @deprecated since version 3.0.8\n * acceleration per step\n * @member {Number}\n */\n this.acceleration = 0.1;\n\n this.deceleration = 0.99;\n }\n\n // convenience getters\n get x() { return this.position.x; }\n get y() { return this.position.y; }\n\n /**\n * Formatted textual description of the dynamic object.\n * The output of this method is used to describe each instance in the traces,\n * which significantly helps in debugging.\n *\n * @return {String} description - a string describing the DynamicObject\n */\n toString() {\n function round3(x) { return Math.round(x * 1000) / 1000; }\n return `${this.constructor.name}[${this.id}] player${this.playerId} Pos=${this.position} Vel=${this.velocity} angle${round3(this.angle)}`;\n }\n\n /**\n * Each object class can define its own bending overrides.\n * return an object which can include attributes: position, velocity,\n * and angle. In each case, you can specify a min value, max\n * value, and a percent value. { @see GameObject.bending }\n *\n * @return {Object} bending - an object with bending paramters\n */\n get bending() {\n return {\n // example:\n // position: { percent: 0.8, min: 0.0, max: 4.0 },\n // velocity: { percent: 0.4, min: 0.0 },\n // angleLocal: { percent: 0.0 }\n };\n }\n\n /**\n * turn object clock-wise\n * @param {Number} deltaAngle - the angle to turn, in degrees\n * @return {DynamicObject} return this object\n */\n turnRight(deltaAngle) {\n this.angle += deltaAngle;\n if (this.angle >= 360) { this.angle -= 360; }\n if (this.angle < 0) { this.angle += 360; }\n return this;\n }\n\n /**\n * turn object counter-clock-wise\n * @param {Number} deltaAngle - the angle to turn, in degrees\n * @return {DynamicObject} return this object\n */\n turnLeft(deltaAngle) {\n return this.turnRight(-deltaAngle);\n }\n\n /**\n * accelerate along the direction that the object is facing\n * @param {Number} acceleration - the acceleration\n * @return {DynamicObject} return this object\n */\n accelerate(acceleration) {\n let rad = this.angle * (Math.PI / 180);\n let dv = new TwoVector(Math.cos(rad), Math.sin(rad));\n dv.multiplyScalar(acceleration);\n this.velocity.add(dv);\n\n return this;\n }\n\n /**\n * Formatted textual description of the game object's current bending properties.\n * @return {String} description - a string description\n */\n bendingToString() {\n if (this.bendingIncrements)\n return `ΔPos=${this.bendingPositionDelta} ΔVel=${this.bendingVelocityDelta} ΔAngle=${this.bendingAngleDelta} increments=${this.bendingIncrements}`;\n return 'no bending';\n }\n\n /**\n * The maximum velocity allowed. If returns null then ignored.\n * @memberof DynamicObject\n * @member {Number} maxSpeed\n */\n get maxSpeed() { return null; }\n\n /**\n * Copy the netscheme variables from another DynamicObject.\n * This is used by the synchronizer to create temporary objects, and must be implemented by all sub-classes as well.\n * @param {DynamicObject} other DynamicObject\n */\n syncTo(other) {\n super.syncTo(other);\n this.position.copy(other.position);\n this.velocity.copy(other.velocity);\n this.width = other.width;\n this.height = other.height;\n this.bendingAngle = other.bendingAngle;\n this.rotationSpeed = other.rotationSpeed;\n this.acceleration = other.acceleration;\n this.deceleration = other.deceleration;\n }\n\n bendToCurrent(original, percent, worldSettings, isLocal, increments) {\n\n let bending = { increments, percent };\n // if the object has defined a bending multiples for this object, use them\n let positionBending = Object.assign({}, bending, this.bending.position);\n let velocityBending = Object.assign({}, bending, this.bending.velocity);\n let angleBending = Object.assign({}, bending, this.bending.angle);\n\n if (isLocal) {\n Object.assign(positionBending, this.bending.positionLocal);\n Object.assign(velocityBending, this.bending.velocityLocal);\n Object.assign(angleBending, this.bending.angleLocal);\n }\n\n // get the incremental delta position & velocity\n this.incrementScale = percent / increments;\n this.bendingPositionDelta = original.position.getBendingDelta(this.position, positionBending);\n this.bendingVelocityDelta = original.velocity.getBendingDelta(this.velocity, velocityBending);\n this.bendingAngleDelta = MathUtils.interpolateDeltaWithWrapping(original.angle, this.angle, angleBending.percent, 0, 360) / increments;\n\n this.bendingTarget = (new this.constructor());\n this.bendingTarget.syncTo(this);\n\n // revert to original\n this.position.copy(original.position);\n this.velocity.copy(original.velocity);\n this.angle = original.angle;\n\n // keep parameters\n this.bendingIncrements = increments;\n this.bendingOptions = bending;\n }\n\n applyIncrementalBending(stepDesc) {\n if (this.bendingIncrements === 0)\n return;\n\n let timeFactor = 1;\n if (stepDesc && stepDesc.dt)\n timeFactor = stepDesc.dt / (1000 / 60);\n\n const posDelta = this.bendingPositionDelta.clone().multiplyScalar(timeFactor);\n const velDelta = this.bendingVelocityDelta.clone().multiplyScalar(timeFactor);\n this.position.add(posDelta);\n this.velocity.add(velDelta);\n this.angle += (this.bendingAngleDelta * timeFactor);\n\n this.bendingIncrements--;\n }\n\n getAABB() {\n // todo take rotation into account\n // registration point is in the middle\n return {\n min: [this.x - this.width / 2, this.y - this.height / 2],\n max: [this.x + this.width / 2, this.y + this.height / 2]\n };\n }\n\n /**\n * Determine if this object will collide with another object.\n * Only applicable on \"bruteForce\" physics engine.\n * @param {DynamicObject} other DynamicObject\n * @return {Boolean} true if the two objects collide\n */\n collidesWith(other) {\n return true;\n }\n\n}\n\nexport default DynamicObject;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/serialize/DynamicObject.js","import GameObject from './GameObject';\nimport BaseTypes from './BaseTypes';\nimport TwoVector from './TwoVector';\nimport MathUtils from '../lib/MathUtils';\n\n/**\n * The PhysicalObject2D is the base class for physical game objects in 2D Physics\n */\nclass PhysicalObject2D extends GameObject {\n\n /**\n * The netScheme is a dictionary of attributes in this game\n * object. The attributes listed in the netScheme are those exact\n * attributes which will be serialized and sent from the server\n * to each client on every server update.\n * The netScheme member is implemented as a getter.\n *\n * You may choose not to implement this method, in which\n * case your object only transmits the default attributes\n * which are already part of {@link PhysicalObject2D}.\n * But if you choose to add more attributes, make sure\n * the return value includes the netScheme of the super class.\n *\n * @memberof PhysicalObject2D\n * @member {Object} netScheme\n * @example\n * static get netScheme() {\n * return Object.assign({\n * mojo: { type: BaseTypes.TYPES.UINT8 },\n * }, super.netScheme);\n * }\n */\n static get netScheme() {\n return Object.assign({\n mass: { type: BaseTypes.TYPES.FLOAT32 },\n position: { type: BaseTypes.TYPES.CLASSINSTANCE },\n angle: { type: BaseTypes.TYPES.FLOAT32 },\n velocity: { type: BaseTypes.TYPES.CLASSINSTANCE },\n angularVelocity: { type: BaseTypes.TYPES.FLOAT32 }\n }, super.netScheme);\n }\n\n /**\n * Creates an instance of a physical object.\n * Override to provide starting values for position, velocity, angle and angular velocity.\n * NOTE: all subclasses of this class must comply with this constructor signature.\n * This is required because the engine will create temporary instances when\n * syncs arrive on the clients.\n * @param {GameEngine} gameEngine - the gameEngine this object will be used in\n * @param {Object} options - options for the new object. See {@link GameObject}\n * @param {Object} props - properties to be set in the new object\n * @param {TwoVector} props.position - position vector\n * @param {TwoVector} props.velocity - velocity vector\n * @param {Number} props.angle - orientation angle\n * @param {Number} props.mass - the mass\n * @param {Number} props.angularVelocity - angular velocity\n */\n constructor(gameEngine, options, props) {\n super(gameEngine, options, props);\n this.bendingIncrements = 0;\n\n // set default position, velocity and quaternion\n this.position = new TwoVector(0, 0);\n this.velocity = new TwoVector(0, 0);\n this.angle = 0;\n this.angularVelocity = 0;\n this.mass = 0;\n\n // use values if provided\n props = props || {};\n if (props.position) this.position.copy(props.position);\n if (props.velocity) this.velocity.copy(props.velocity);\n if (props.angle) this.angle = props.angle;\n if (props.angularVelocity) this.angularVelocity = props.angularVelocity;\n if (props.mass) this.mass = props.mass;\n\n this.class = PhysicalObject2D;\n }\n\n /**\n * Called after the object is added to to the game world.\n * This is the right place to add renderer sub-objects, physics sub-objects\n * and any other resources that should be created\n */\n onAddToWorld() {}\n\n /**\n * Formatted textual description of the dynamic object.\n * The output of this method is used to describe each instance in the traces,\n * which significantly helps in debugging.\n *\n * @return {String} description - a string describing the PhysicalObject2D\n */\n toString() {\n let p = this.position.toString();\n let v = this.velocity.toString();\n let a = this.angle;\n let av = this.angularVelocity;\n return `phyObj2D[${this.id}] player${this.playerId} Pos=${p} Vel=${v} Ang=${a} AVel=${av}`;\n }\n\n /**\n * Each object class can define its own bending overrides.\n * return an object which can include attributes: position, velocity,\n * angle, and angularVelocity. In each case, you can specify a min value, max\n * value, and a percent value.\n *\n * @return {Object} bending - an object with bending paramters\n */\n get bending() {\n return {\n // example:\n // position: { percent: 0.8, min: 0.0, max: 4.0 },\n // velocity: { percent: 0.4, min: 0.0 },\n // angularVelocity: { percent: 0.0 },\n // angleLocal: { percent: 0.0 }\n };\n }\n\n // display object's physical attributes as a string\n // for debugging purposes mostly\n bendingToString() {\n if (this.bendingIncrements)\n return `ΔPos=${this.bendingPositionDelta} ΔVel=${this.bendingVelocityDelta} ΔAngle=${this.bendingAngleDelta} increments=${this.bendingIncrements}`;\n return 'no bending';\n }\n\n // derive and save the bending increment parameters:\n // - bendingPositionDelta\n // - bendingVelocityDelta\n // - bendingAVDelta\n // - bendingAngleDelta\n // these can later be used to \"bend\" incrementally from the state described\n // by \"original\" to the state described by \"self\"\n bendToCurrent(original, percent, worldSettings, isLocal, increments) {\n\n let bending = { increments, percent };\n // if the object has defined a bending multiples for this object, use them\n let positionBending = Object.assign({}, bending, this.bending.position);\n let velocityBending = Object.assign({}, bending, this.bending.velocity);\n let angleBending = Object.assign({}, bending, this.bending.angle);\n let avBending = Object.assign({}, bending, this.bending.angularVelocity);\n\n // check for local object overrides to bendingTarget\n if (isLocal) {\n Object.assign(positionBending, this.bending.positionLocal);\n Object.assign(velocityBending, this.bending.velocityLocal);\n Object.assign(angleBending, this.bending.angleLocal);\n Object.assign(avBending, this.bending.angularVelocityLocal);\n }\n\n // get the incremental delta position & velocity\n this.incrementScale = percent / increments;\n this.bendingPositionDelta = original.position.getBendingDelta(this.position, positionBending);\n this.bendingVelocityDelta = original.velocity.getBendingDelta(this.velocity, velocityBending);\n\n // get the incremental angular-velocity\n this.bendingAVDelta = (this.angularVelocity - original.angularVelocity) * this.incrementScale * avBending.percent;\n\n // get the incremental angle correction\n this.bendingAngleDelta = MathUtils.interpolateDeltaWithWrapping(original.angle, this.angle, angleBending.percent, 0, 2 * Math.PI) / increments;\n\n this.bendingTarget = (new this.constructor());\n this.bendingTarget.syncTo(this);\n\n // revert to original\n this.position.copy(original.position);\n this.angle = original.angle;\n this.angularVelocity = original.angularVelocity;\n this.velocity.copy(original.velocity);\n\n this.bendingIncrements = increments;\n this.bendingOptions = bending;\n\n this.refreshToPhysics();\n }\n\n syncTo(other, options) {\n\n super.syncTo(other);\n\n this.position.copy(other.position);\n this.angle = other.angle;\n this.angularVelocity = other.angularVelocity;\n\n if (!options || !options.keepVelocity) {\n this.velocity.copy(other.velocity);\n }\n\n if (this.physicsObj) this.refreshToPhysics();\n }\n\n // update position, angle, angular velocity, and velocity from new physical state.\n refreshFromPhysics() {\n this.copyVector(this.physicsObj.position, this.position);\n this.copyVector(this.physicsObj.velocity, this.velocity);\n this.angle = this.physicsObj.angle;\n this.angularVelocity = this.physicsObj.angularVelocity;\n }\n\n // generic vector copy. We need this because different\n // physics engines have different implementations.\n // TODO: Better implementation: the physics engine implementor\n // should define copyFromLanceVector and copyToLanceVector\n copyVector(source, target) {\n let sourceVec = source;\n if (typeof source[0] === 'number' && typeof source[1] === 'number')\n sourceVec = { x: source[0], y: source[1] };\n\n if (typeof target.copy === 'function') {\n target.copy(sourceVec);\n } else if (target instanceof Float32Array) {\n target[0] = sourceVec.x;\n target[1] = sourceVec.y;\n } else {\n target.x = sourceVec.x;\n target.y = sourceVec.y;\n }\n }\n\n // update position, angle, angular velocity, and velocity from new game state.\n refreshToPhysics() {\n this.copyVector(this.position, this.physicsObj.position);\n this.copyVector(this.velocity, this.physicsObj.velocity);\n this.physicsObj.angle = this.angle;\n this.physicsObj.angularVelocity = this.angularVelocity;\n }\n\n // apply one increment of bending\n applyIncrementalBending(stepDesc) {\n if (this.bendingIncrements === 0)\n return;\n\n let timeFactor = 1;\n if (stepDesc && stepDesc.dt)\n timeFactor = stepDesc.dt / (1000 / 60);\n\n const posDelta = this.bendingPositionDelta.clone().multiplyScalar(timeFactor);\n const velDelta = this.bendingVelocityDelta.clone().multiplyScalar(timeFactor);\n this.position.add(posDelta);\n this.velocity.add(velDelta);\n this.angularVelocity += (this.bendingAVDelta * timeFactor);\n this.angle += (this.bendingAngleDelta * timeFactor);\n\n this.bendingIncrements--;\n }\n\n // interpolate implementation\n interpolate(nextObj, percent) {\n\n // slerp to target position\n this.position.lerp(nextObj.position, percent);\n this.angle = MathUtils.interpolateDeltaWithWrapping(this.angle, nextObj.angle, percent, 0, 2 * Math.PI);\n }\n}\n\nexport default PhysicalObject2D;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/serialize/PhysicalObject2D.js","import GameObject from './GameObject';\nimport BaseTypes from './BaseTypes';\nimport ThreeVector from './ThreeVector';\nimport Quaternion from './Quaternion';\n\n/**\n * The PhysicalObject3D is the base class for physical game objects\n */\nclass PhysicalObject3D extends GameObject {\n\n /**\n * The netScheme is a dictionary of attributes in this game\n * object. The attributes listed in the netScheme are those exact\n * attributes which will be serialized and sent from the server\n * to each client on every server update.\n * The netScheme member is implemented as a getter.\n *\n * You may choose not to implement this method, in which\n * case your object only transmits the default attributes\n * which are already part of {@link PhysicalObject3D}.\n * But if you choose to add more attributes, make sure\n * the return value includes the netScheme of the super class.\n *\n * @memberof PhysicalObject3D\n * @member {Object} netScheme\n * @example\n * static get netScheme() {\n * return Object.assign({\n * mojo: { type: BaseTypes.TYPES.UINT8 },\n * }, super.netScheme);\n * }\n */\n static get netScheme() {\n return Object.assign({\n position: { type: BaseTypes.TYPES.CLASSINSTANCE },\n quaternion: { type: BaseTypes.TYPES.CLASSINSTANCE },\n velocity: { type: BaseTypes.TYPES.CLASSINSTANCE },\n angularVelocity: { type: BaseTypes.TYPES.CLASSINSTANCE }\n }, super.netScheme);\n }\n\n /**\n * Creates an instance of a physical object.\n * Override to provide starting values for position, velocity, quaternion and angular velocity.\n * NOTE: all subclasses of this class must comply with this constructor signature.\n * This is required because the engine will create temporary instances when\n * syncs arrive on the clients.\n * @param {GameEngine} gameEngine - the gameEngine this object will be used in\n * @param {Object} options - options for the new object. See {@link GameObject}\n * @param {Object} props - properties to be set in the new object\n * @param {ThreeVector} props.position - position vector\n * @param {ThreeVector} props.velocity - velocity vector\n * @param {Quaternion} props.quaternion - orientation quaternion\n * @param {ThreeVector} props.angularVelocity - 3-vector representation of angular velocity\n */\n constructor(gameEngine, options, props) {\n super(gameEngine, options, props);\n this.bendingIncrements = 0;\n\n // set default position, velocity and quaternion\n this.position = new ThreeVector(0, 0, 0);\n this.velocity = new ThreeVector(0, 0, 0);\n this.quaternion = new Quaternion(1, 0, 0, 0);\n this.angularVelocity = new ThreeVector(0, 0, 0);\n\n // use values if provided\n props = props || {};\n if (props.position) this.position.copy(props.position);\n if (props.velocity) this.velocity.copy(props.velocity);\n if (props.quaternion) this.quaternion.copy(props.quaternion);\n if (props.angularVelocity) this.angularVelocity.copy(props.angularVelocity);\n\n this.class = PhysicalObject3D;\n }\n\n /**\n * Formatted textual description of the dynamic object.\n * The output of this method is used to describe each instance in the traces,\n * which significantly helps in debugging.\n *\n * @return {String} description - a string describing the PhysicalObject3D\n */\n toString() {\n let p = this.position.toString();\n let v = this.velocity.toString();\n let q = this.quaternion.toString();\n let a = this.angularVelocity.toString();\n return `phyObj[${this.id}] player${this.playerId} Pos${p} Vel${v} Dir${q} AVel${a}`;\n }\n\n // display object's physical attributes as a string\n // for debugging purposes mostly\n bendingToString() {\n if (this.bendingOptions)\n return `bend=${this.bendingOptions.percent} deltaPos=${this.bendingPositionDelta} deltaVel=${this.bendingVelocityDelta} deltaQuat=${this.bendingQuaternionDelta}`;\n return 'no bending';\n }\n\n // derive and save the bending increment parameters:\n // - bendingPositionDelta\n // - bendingAVDelta\n // - bendingQuaternionDelta\n // these can later be used to \"bend\" incrementally from the state described\n // by \"original\" to the state described by \"self\"\n bendToCurrent(original, percent, worldSettings, isLocal, increments) {\n\n let bending = { increments, percent };\n // if the object has defined a bending multiples for this object, use them\n let positionBending = Object.assign({}, bending, this.bending.position);\n let velocityBending = Object.assign({}, bending, this.bending.velocity);\n\n // check for local object overrides to bendingTarget\n if (isLocal) {\n Object.assign(positionBending, this.bending.positionLocal);\n Object.assign(velocityBending, this.bending.velocityLocal);\n }\n\n // get the incremental delta position & velocity\n this.incrementScale = percent / increments;\n this.bendingPositionDelta = original.position.getBendingDelta(this.position, positionBending);\n this.bendingVelocityDelta = original.velocity.getBendingDelta(this.velocity, velocityBending);\n this.bendingAVDelta = new ThreeVector(0, 0, 0);\n\n // get the incremental quaternion rotation\n this.bendingQuaternionDelta = (new Quaternion()).copy(original.quaternion).conjugate();\n this.bendingQuaternionDelta.multiply(this.quaternion);\n\n let axisAngle = this.bendingQuaternionDelta.toAxisAngle();\n axisAngle.angle *= this.incrementScale;\n this.bendingQuaternionDelta.setFromAxisAngle(axisAngle.axis, axisAngle.angle);\n\n this.bendingTarget = (new this.constructor());\n this.bendingTarget.syncTo(this);\n\n this.position.copy(original.position);\n this.quaternion.copy(original.quaternion);\n this.angularVelocity.copy(original.angularVelocity);\n\n this.bendingIncrements = increments;\n this.bendingOptions = bending;\n\n this.refreshToPhysics();\n }\n\n syncTo(other, options) {\n\n super.syncTo(other);\n\n this.position.copy(other.position);\n this.quaternion.copy(other.quaternion);\n this.angularVelocity.copy(other.angularVelocity);\n\n if (!options || !options.keepVelocity) {\n this.velocity.copy(other.velocity);\n }\n\n if (this.physicsObj)\n this.refreshToPhysics();\n }\n\n // update position, quaternion, and velocity from new physical state.\n refreshFromPhysics() {\n this.position.copy(this.physicsObj.position);\n this.quaternion.copy(this.physicsObj.quaternion);\n this.velocity.copy(this.physicsObj.velocity);\n this.angularVelocity.copy(this.physicsObj.angularVelocity);\n }\n\n // update position, quaternion, and velocity from new game state.\n refreshToPhysics() {\n this.physicsObj.position.copy(this.position);\n this.physicsObj.quaternion.copy(this.quaternion);\n this.physicsObj.velocity.copy(this.velocity);\n this.physicsObj.angularVelocity.copy(this.angularVelocity);\n }\n\n // apply one increment of bending\n applyIncrementalBending(stepDesc) {\n if (this.bendingIncrements === 0)\n return;\n\n if (stepDesc && stepDesc.dt) {\n const timeFactor = stepDesc.dt / (1000 / 60);\n // TODO: use clone() below. it's cleaner\n const posDelta = (new ThreeVector()).copy(this.bendingPositionDelta).multiplyScalar(timeFactor);\n const avDelta = (new ThreeVector()).copy(this.bendingAVDelta).multiplyScalar(timeFactor);\n this.position.add(posDelta);\n this.angularVelocity.add(avDelta);\n\n // one approach to orientation bending is slerp:\n this.quaternion.slerp(this.bendingTarget.quaternion, this.incrementScale * timeFactor * 0.8);\n } else {\n this.position.add(this.bendingPositionDelta);\n this.angularVelocity.add(this.bendingAVDelta);\n this.quaternion.slerp(this.bendingTarget.quaternion, this.incrementScale);\n }\n\n // alternative: fixed delta-quaternion correction\n // TODO: adjust quaternion bending to dt timefactor precision\n // this.quaternion.multiply(this.bendingQuaternionDelta);\n this.bendingIncrements--;\n }\n\n // interpolate implementation\n interpolate(nextObj, percent) {\n\n // slerp to target position\n this.position.lerp(nextObj.position, percent);\n this.quaternion.slerp(nextObj.quaternion, percent);\n }\n}\n\nexport default PhysicalObject3D;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/serialize/PhysicalObject3D.js","import Trace from './Trace.js';\n\nexport default {\n Trace\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../src/lib/lib.js","const PACKET_TYPES = Object.create(null); // no Map = no polyfill\nPACKET_TYPES[\"open\"] = \"0\";\nPACKET_TYPES[\"close\"] = \"1\";\nPACKET_TYPES[\"ping\"] = \"2\";\nPACKET_TYPES[\"pong\"] = \"3\";\nPACKET_TYPES[\"message\"] = \"4\";\nPACKET_TYPES[\"upgrade\"] = \"5\";\nPACKET_TYPES[\"noop\"] = \"6\";\nconst PACKET_TYPES_REVERSE = Object.create(null);\nObject.keys(PACKET_TYPES).forEach(key => {\n PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;\n});\nconst ERROR_PACKET = { type: \"error\", data: \"parser error\" };\nexport { PACKET_TYPES, PACKET_TYPES_REVERSE, ERROR_PACKET };\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-parser/build/esm/commons.js","import { PACKET_TYPES } from \"./commons.js\";\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n Object.prototype.toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n// ArrayBuffer.isView method is not defined in IE10\nconst isView = obj => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj && obj.buffer instanceof ArrayBuffer;\n};\nconst encodePacket = ({ type, data }, supportsBinary, callback) => {\n if (withNativeBlob && data instanceof Blob) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(data, callback);\n }\n }\n else if (withNativeArrayBuffer &&\n (data instanceof ArrayBuffer || isView(data))) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(new Blob([data]), callback);\n }\n }\n // plain string\n return callback(PACKET_TYPES[type] + (data || \"\"));\n};\nconst encodeBlobAsBase64 = (data, callback) => {\n const fileReader = new FileReader();\n fileReader.onload = function () {\n const content = fileReader.result.split(\",\")[1];\n callback(\"b\" + (content || \"\"));\n };\n return fileReader.readAsDataURL(data);\n};\nfunction toArray(data) {\n if (data instanceof Uint8Array) {\n return data;\n }\n else if (data instanceof ArrayBuffer) {\n return new Uint8Array(data);\n }\n else {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n }\n}\nlet TEXT_ENCODER;\nexport function encodePacketToBinary(packet, callback) {\n if (withNativeBlob && packet.data instanceof Blob) {\n return packet.data\n .arrayBuffer()\n .then(toArray)\n .then(callback);\n }\n else if (withNativeArrayBuffer &&\n (packet.data instanceof ArrayBuffer || isView(packet.data))) {\n return callback(toArray(packet.data));\n }\n encodePacket(packet, false, encoded => {\n if (!TEXT_ENCODER) {\n TEXT_ENCODER = new TextEncoder();\n }\n callback(TEXT_ENCODER.encode(encoded));\n });\n}\nexport { encodePacket };\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-parser/build/esm/encodePacket.browser.js","// imported from https://github.com/socketio/base64-arraybuffer\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nexport const encode = (arraybuffer) => {\n let bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nexport const decode = (base64) => {\n let bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n const arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return arraybuffer;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"./contrib/base64-arraybuffer.js\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nexport const decodePacket = (encodedPacket, binaryType) => {\n if (typeof encodedPacket !== \"string\") {\n return {\n type: \"message\",\n data: mapBinary(encodedPacket, binaryType)\n };\n }\n const type = encodedPacket.charAt(0);\n if (type === \"b\") {\n return {\n type: \"message\",\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType)\n };\n }\n const packetType = PACKET_TYPES_REVERSE[type];\n if (!packetType) {\n return ERROR_PACKET;\n }\n return encodedPacket.length > 1\n ? {\n type: PACKET_TYPES_REVERSE[type],\n data: encodedPacket.substring(1)\n }\n : {\n type: PACKET_TYPES_REVERSE[type]\n };\n};\nconst decodeBase64Packet = (data, binaryType) => {\n if (withNativeArrayBuffer) {\n const decoded = decode(data);\n return mapBinary(decoded, binaryType);\n }\n else {\n return { base64: true, data }; // fallback for old browsers\n }\n};\nconst mapBinary = (data, binaryType) => {\n switch (binaryType) {\n case \"blob\":\n if (data instanceof Blob) {\n // from WebSocket + binaryType \"blob\"\n return data;\n }\n else {\n // from HTTP long-polling or WebTransport\n return new Blob([data]);\n }\n case \"arraybuffer\":\n default:\n if (data instanceof ArrayBuffer) {\n // from HTTP long-polling (base64) or WebSocket + binaryType \"arraybuffer\"\n return data;\n }\n else {\n // from WebTransport (Uint8Array)\n return data.buffer;\n }\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-parser/build/esm/decodePacket.browser.js","import { encodePacket, encodePacketToBinary } from \"./encodePacket.js\";\nimport { decodePacket } from \"./decodePacket.js\";\nimport { ERROR_PACKET } from \"./commons.js\";\nconst SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\nconst encodePayload = (packets, callback) => {\n // some packets may be added to the array while encoding, so the initial length must be saved\n const length = packets.length;\n const encodedPackets = new Array(length);\n let count = 0;\n packets.forEach((packet, i) => {\n // force base64 encoding for binary packets\n encodePacket(packet, false, encodedPacket => {\n encodedPackets[i] = encodedPacket;\n if (++count === length) {\n callback(encodedPackets.join(SEPARATOR));\n }\n });\n });\n};\nconst decodePayload = (encodedPayload, binaryType) => {\n const encodedPackets = encodedPayload.split(SEPARATOR);\n const packets = [];\n for (let i = 0; i < encodedPackets.length; i++) {\n const decodedPacket = decodePacket(encodedPackets[i], binaryType);\n packets.push(decodedPacket);\n if (decodedPacket.type === \"error\") {\n break;\n }\n }\n return packets;\n};\nexport function createPacketEncoderStream() {\n return new TransformStream({\n transform(packet, controller) {\n encodePacketToBinary(packet, encodedPacket => {\n const payloadLength = encodedPacket.length;\n let header;\n // inspired by the WebSocket format: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#decoding_payload_length\n if (payloadLength < 126) {\n header = new Uint8Array(1);\n new DataView(header.buffer).setUint8(0, payloadLength);\n }\n else if (payloadLength < 65536) {\n header = new Uint8Array(3);\n const view = new DataView(header.buffer);\n view.setUint8(0, 126);\n view.setUint16(1, payloadLength);\n }\n else {\n header = new Uint8Array(9);\n const view = new DataView(header.buffer);\n view.setUint8(0, 127);\n view.setBigUint64(1, BigInt(payloadLength));\n }\n // first bit indicates whether the payload is plain text (0) or binary (1)\n if (packet.data && typeof packet.data !== \"string\") {\n header[0] |= 0x80;\n }\n controller.enqueue(header);\n controller.enqueue(encodedPacket);\n });\n }\n });\n}\nlet TEXT_DECODER;\nfunction totalLength(chunks) {\n return chunks.reduce((acc, chunk) => acc + chunk.length, 0);\n}\nfunction concatChunks(chunks, size) {\n if (chunks[0].length === size) {\n return chunks.shift();\n }\n const buffer = new Uint8Array(size);\n let j = 0;\n for (let i = 0; i < size; i++) {\n buffer[i] = chunks[0][j++];\n if (j === chunks[0].length) {\n chunks.shift();\n j = 0;\n }\n }\n if (chunks.length && j < chunks[0].length) {\n chunks[0] = chunks[0].slice(j);\n }\n return buffer;\n}\nexport function createPacketDecoderStream(maxPayload, binaryType) {\n if (!TEXT_DECODER) {\n TEXT_DECODER = new TextDecoder();\n }\n const chunks = [];\n let state = 0 /* READ_HEADER */;\n let expectedLength = -1;\n let isBinary = false;\n return new TransformStream({\n transform(chunk, controller) {\n chunks.push(chunk);\n while (true) {\n if (state === 0 /* READ_HEADER */) {\n if (totalLength(chunks) < 1) {\n break;\n }\n const header = concatChunks(chunks, 1);\n isBinary = (header[0] & 0x80) === 0x80;\n expectedLength = header[0] & 0x7f;\n if (expectedLength < 126) {\n state = 3 /* READ_PAYLOAD */;\n }\n else if (expectedLength === 126) {\n state = 1 /* READ_EXTENDED_LENGTH_16 */;\n }\n else {\n state = 2 /* READ_EXTENDED_LENGTH_64 */;\n }\n }\n else if (state === 1 /* READ_EXTENDED_LENGTH_16 */) {\n if (totalLength(chunks) < 2) {\n break;\n }\n const headerArray = concatChunks(chunks, 2);\n expectedLength = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length).getUint16(0);\n state = 3 /* READ_PAYLOAD */;\n }\n else if (state === 2 /* READ_EXTENDED_LENGTH_64 */) {\n if (totalLength(chunks) < 8) {\n break;\n }\n const headerArray = concatChunks(chunks, 8);\n const view = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length);\n const n = view.getUint32(0);\n if (n > Math.pow(2, 53 - 32) - 1) {\n // the maximum safe integer in JavaScript is 2^53 - 1\n controller.enqueue(ERROR_PACKET);\n break;\n }\n expectedLength = n * Math.pow(2, 32) + view.getUint32(4);\n state = 3 /* READ_PAYLOAD */;\n }\n else {\n if (totalLength(chunks) < expectedLength) {\n break;\n }\n const data = concatChunks(chunks, expectedLength);\n controller.enqueue(decodePacket(isBinary ? data : TEXT_DECODER.decode(data), binaryType));\n state = 0 /* READ_HEADER */;\n }\n if (expectedLength === 0 || expectedLength > maxPayload) {\n controller.enqueue(ERROR_PACKET);\n break;\n }\n }\n }\n });\n}\nexport const protocol = 4;\nexport { encodePacket, encodePayload, decodePacket, decodePayload };\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-parser/build/esm/index.js","/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nexport function Emitter(obj) {\n if (obj) return mixin(obj);\n}\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n .push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n function on() {\n this.off(event, on);\n fn.apply(this, arguments);\n }\n\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks['$' + event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks['$' + event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this._callbacks['$' + event];\n }\n\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n this._callbacks = this._callbacks || {};\n\n var args = new Array(arguments.length - 1)\n , callbacks = this._callbacks['$' + event];\n\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n\n return this;\n};\n\n// alias used for reserved events (protected method)\nEmitter.prototype.emitReserved = Emitter.prototype.emit;\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n this._callbacks = this._callbacks || {};\n return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n return !! this.listeners(event).length;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/@socket.io/component-emitter/index.mjs","export const globalThisShim = (() => {\n if (typeof self !== \"undefined\") {\n return self;\n }\n else if (typeof window !== \"undefined\") {\n return window;\n }\n else {\n return Function(\"return this\")();\n }\n})();\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/globalThis.browser.js","import { globalThisShim as globalThis } from \"./globalThis.js\";\nexport function pick(obj, ...attr) {\n return attr.reduce((acc, k) => {\n if (obj.hasOwnProperty(k)) {\n acc[k] = obj[k];\n }\n return acc;\n }, {});\n}\n// Keep a reference to the real timeout functions so they can be used when overridden\nconst NATIVE_SET_TIMEOUT = globalThis.setTimeout;\nconst NATIVE_CLEAR_TIMEOUT = globalThis.clearTimeout;\nexport function installTimerFunctions(obj, opts) {\n if (opts.useNativeTimers) {\n obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globalThis);\n obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globalThis);\n }\n else {\n obj.setTimeoutFn = globalThis.setTimeout.bind(globalThis);\n obj.clearTimeoutFn = globalThis.clearTimeout.bind(globalThis);\n }\n}\n// base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64)\nconst BASE64_OVERHEAD = 1.33;\n// we could also have used `new Blob([obj]).size`, but it isn't supported in IE9\nexport function byteLength(obj) {\n if (typeof obj === \"string\") {\n return utf8Length(obj);\n }\n // arraybuffer or blob\n return Math.ceil((obj.byteLength || obj.size) * BASE64_OVERHEAD);\n}\nfunction utf8Length(str) {\n let c = 0, length = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/util.js","// imported from https://github.com/galkn/querystring\n/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\nexport function encode(obj) {\n let str = '';\n for (let i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (str.length)\n str += '&';\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n }\n }\n return str;\n}\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\nexport function decode(qs) {\n let qry = {};\n let pairs = qs.split('&');\n for (let i = 0, l = pairs.length; i < l; i++) {\n let pair = pairs[i].split('=');\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n return qry;\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/contrib/parseqs.js","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nimport { encode } from \"./contrib/parseqs.js\";\nclass TransportError extends Error {\n constructor(reason, description, context) {\n super(reason);\n this.description = description;\n this.context = context;\n this.type = \"TransportError\";\n }\n}\nexport class Transport extends Emitter {\n /**\n * Transport abstract constructor.\n *\n * @param {Object} opts - options\n * @protected\n */\n constructor(opts) {\n super();\n this.writable = false;\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.query = opts.query;\n this.socket = opts.socket;\n }\n /**\n * Emits an error.\n *\n * @param {String} reason\n * @param description\n * @param context - the error context\n * @return {Transport} for chaining\n * @protected\n */\n onError(reason, description, context) {\n super.emitReserved(\"error\", new TransportError(reason, description, context));\n return this;\n }\n /**\n * Opens the transport.\n */\n open() {\n this.readyState = \"opening\";\n this.doOpen();\n return this;\n }\n /**\n * Closes the transport.\n */\n close() {\n if (this.readyState === \"opening\" || this.readyState === \"open\") {\n this.doClose();\n this.onClose();\n }\n return this;\n }\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n */\n send(packets) {\n if (this.readyState === \"open\") {\n this.write(packets);\n }\n else {\n // this might happen if the transport was silently closed in the beforeunload event handler\n }\n }\n /**\n * Called upon open\n *\n * @protected\n */\n onOpen() {\n this.readyState = \"open\";\n this.writable = true;\n super.emitReserved(\"open\");\n }\n /**\n * Called with data.\n *\n * @param {String} data\n * @protected\n */\n onData(data) {\n const packet = decodePacket(data, this.socket.binaryType);\n this.onPacket(packet);\n }\n /**\n * Called with a decoded packet.\n *\n * @protected\n */\n onPacket(packet) {\n super.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon close.\n *\n * @protected\n */\n onClose(details) {\n this.readyState = \"closed\";\n super.emitReserved(\"close\", details);\n }\n /**\n * Pauses the transport, in order not to lose packets during an upgrade.\n *\n * @param onPause\n */\n pause(onPause) { }\n createUri(schema, query = {}) {\n return (schema +\n \"://\" +\n this._hostname() +\n this._port() +\n this.opts.path +\n this._query(query));\n }\n _hostname() {\n const hostname = this.opts.hostname;\n return hostname.indexOf(\":\") === -1 ? hostname : \"[\" + hostname + \"]\";\n }\n _port() {\n if (this.opts.port &&\n ((this.opts.secure && Number(this.opts.port !== 443)) ||\n (!this.opts.secure && Number(this.opts.port) !== 80))) {\n return \":\" + this.opts.port;\n }\n else {\n return \"\";\n }\n }\n _query(query) {\n const encodedQuery = encode(query);\n return encodedQuery.length ? \"?\" + encodedQuery : \"\";\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/transport.js","// imported from https://github.com/unshiftio/yeast\n'use strict';\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), length = 64, map = {};\nlet seed = 0, i = 0, prev;\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nexport function encode(num) {\n let encoded = '';\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n return encoded;\n}\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nexport function decode(str) {\n let decoded = 0;\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n return decoded;\n}\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nexport function yeast() {\n const now = encode(+new Date());\n if (now !== prev)\n return seed = 0, prev = now;\n return now + '.' + encode(seed++);\n}\n//\n// Map each character to its index.\n//\nfor (; i < length; i++)\n map[alphabet[i]] = i;\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/contrib/yeast.js","// imported from https://github.com/component/has-cors\nlet value = false;\ntry {\n value = typeof XMLHttpRequest !== 'undefined' &&\n 'withCredentials' in new XMLHttpRequest();\n}\ncatch (err) {\n // if XMLHttp support is disabled in IE then it will throw\n // when trying to create\n}\nexport const hasCORS = value;\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/contrib/has-cors.js","// browser shim for xmlhttprequest module\nimport { hasCORS } from \"../contrib/has-cors.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nexport function XHR(opts) {\n const xdomain = opts.xdomain;\n // XMLHttpRequest can be disabled on IE\n try {\n if (\"undefined\" !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n return new XMLHttpRequest();\n }\n }\n catch (e) { }\n if (!xdomain) {\n try {\n return new globalThis[[\"Active\"].concat(\"Object\").join(\"X\")](\"Microsoft.XMLHTTP\");\n }\n catch (e) { }\n }\n}\nexport function createCookieJar() { }\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/transports/xmlhttprequest.browser.js","import { Transport } from \"../transport.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nimport { createCookieJar, XHR as XMLHttpRequest, } from \"./xmlhttprequest.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nfunction empty() { }\nconst hasXHR2 = (function () {\n const xhr = new XMLHttpRequest({\n xdomain: false,\n });\n return null != xhr.responseType;\n})();\nexport class Polling extends Transport {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @package\n */\n constructor(opts) {\n super(opts);\n this.polling = false;\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? \"443\" : \"80\";\n }\n this.xd =\n (typeof location !== \"undefined\" &&\n opts.hostname !== location.hostname) ||\n port !== opts.port;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n if (this.opts.withCredentials) {\n this.cookieJar = createCookieJar();\n }\n }\n get name() {\n return \"polling\";\n }\n /**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @protected\n */\n doOpen() {\n this.poll();\n }\n /**\n * Pauses polling.\n *\n * @param {Function} onPause - callback upon buffers are flushed and transport is paused\n * @package\n */\n pause(onPause) {\n this.readyState = \"pausing\";\n const pause = () => {\n this.readyState = \"paused\";\n onPause();\n };\n if (this.polling || !this.writable) {\n let total = 0;\n if (this.polling) {\n total++;\n this.once(\"pollComplete\", function () {\n --total || pause();\n });\n }\n if (!this.writable) {\n total++;\n this.once(\"drain\", function () {\n --total || pause();\n });\n }\n }\n else {\n pause();\n }\n }\n /**\n * Starts polling cycle.\n *\n * @private\n */\n poll() {\n this.polling = true;\n this.doPoll();\n this.emitReserved(\"poll\");\n }\n /**\n * Overloads onData to detect payloads.\n *\n * @protected\n */\n onData(data) {\n const callback = (packet) => {\n // if its the first message we consider the transport open\n if (\"opening\" === this.readyState && packet.type === \"open\") {\n this.onOpen();\n }\n // if its a close packet, we close the ongoing requests\n if (\"close\" === packet.type) {\n this.onClose({ description: \"transport closed by the server\" });\n return false;\n }\n // otherwise bypass onData and handle the message\n this.onPacket(packet);\n };\n // decode payload\n decodePayload(data, this.socket.binaryType).forEach(callback);\n // if an event did not trigger closing\n if (\"closed\" !== this.readyState) {\n // if we got data we're not polling\n this.polling = false;\n this.emitReserved(\"pollComplete\");\n if (\"open\" === this.readyState) {\n this.poll();\n }\n else {\n }\n }\n }\n /**\n * For polling, send a close packet.\n *\n * @protected\n */\n doClose() {\n const close = () => {\n this.write([{ type: \"close\" }]);\n };\n if (\"open\" === this.readyState) {\n close();\n }\n else {\n // in case we're trying to close while\n // handshaking is in progress (GH-164)\n this.once(\"open\", close);\n }\n }\n /**\n * Writes a packets payload.\n *\n * @param {Array} packets - data packets\n * @protected\n */\n write(packets) {\n this.writable = false;\n encodePayload(packets, (data) => {\n this.doWrite(data, () => {\n this.writable = true;\n this.emitReserved(\"drain\");\n });\n });\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"https\" : \"http\";\n const query = this.query || {};\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n /**\n * Creates a request.\n *\n * @param {String} method\n * @private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, cookieJar: this.cookieJar }, this.opts);\n return new Request(this.uri(), opts);\n }\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @private\n */\n doWrite(data, fn) {\n const req = this.request({\n method: \"POST\",\n data: data,\n });\n req.on(\"success\", fn);\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr post error\", xhrStatus, context);\n });\n }\n /**\n * Starts a poll cycle.\n *\n * @private\n */\n doPoll() {\n const req = this.request();\n req.on(\"data\", this.onData.bind(this));\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr poll error\", xhrStatus, context);\n });\n this.pollXhr = req;\n }\n}\nexport class Request extends Emitter {\n /**\n * Request constructor\n *\n * @param {Object} options\n * @package\n */\n constructor(uri, opts) {\n super();\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.data = undefined !== opts.data ? opts.data : null;\n this.create();\n }\n /**\n * Creates the XHR object and sends the request.\n *\n * @private\n */\n create() {\n var _a;\n const opts = pick(this.opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this.opts.xd;\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n try {\n xhr.open(this.method, this.uri, true);\n try {\n if (this.opts.extraHeaders) {\n xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n for (let i in this.opts.extraHeaders) {\n if (this.opts.extraHeaders.hasOwnProperty(i)) {\n xhr.setRequestHeader(i, this.opts.extraHeaders[i]);\n }\n }\n }\n }\n catch (e) { }\n if (\"POST\" === this.method) {\n try {\n xhr.setRequestHeader(\"Content-type\", \"text/plain;charset=UTF-8\");\n }\n catch (e) { }\n }\n try {\n xhr.setRequestHeader(\"Accept\", \"*/*\");\n }\n catch (e) { }\n (_a = this.opts.cookieJar) === null || _a === void 0 ? void 0 : _a.addCookies(xhr);\n // ie6 check\n if (\"withCredentials\" in xhr) {\n xhr.withCredentials = this.opts.withCredentials;\n }\n if (this.opts.requestTimeout) {\n xhr.timeout = this.opts.requestTimeout;\n }\n xhr.onreadystatechange = () => {\n var _a;\n if (xhr.readyState === 3) {\n (_a = this.opts.cookieJar) === null || _a === void 0 ? void 0 : _a.parseCookies(xhr);\n }\n if (4 !== xhr.readyState)\n return;\n if (200 === xhr.status || 1223 === xhr.status) {\n this.onLoad();\n }\n else {\n // make sure the `error` event handler that's user-set\n // does not throw in the same tick and gets caught here\n this.setTimeoutFn(() => {\n this.onError(typeof xhr.status === \"number\" ? xhr.status : 0);\n }, 0);\n }\n };\n xhr.send(this.data);\n }\n catch (e) {\n // Need to defer since .create() is called directly from the constructor\n // and thus the 'error' event can only be only bound *after* this exception\n // occurs. Therefore, also, we cannot throw here at all.\n this.setTimeoutFn(() => {\n this.onError(e);\n }, 0);\n return;\n }\n if (typeof document !== \"undefined\") {\n this.index = Request.requestsCount++;\n Request.requests[this.index] = this;\n }\n }\n /**\n * Called upon error.\n *\n * @private\n */\n onError(err) {\n this.emitReserved(\"error\", err, this.xhr);\n this.cleanup(true);\n }\n /**\n * Cleans up house.\n *\n * @private\n */\n cleanup(fromError) {\n if (\"undefined\" === typeof this.xhr || null === this.xhr) {\n return;\n }\n this.xhr.onreadystatechange = empty;\n if (fromError) {\n try {\n this.xhr.abort();\n }\n catch (e) { }\n }\n if (typeof document !== \"undefined\") {\n delete Request.requests[this.index];\n }\n this.xhr = null;\n }\n /**\n * Called upon load.\n *\n * @private\n */\n onLoad() {\n const data = this.xhr.responseText;\n if (data !== null) {\n this.emitReserved(\"data\", data);\n this.emitReserved(\"success\");\n this.cleanup();\n }\n }\n /**\n * Aborts the request.\n *\n * @package\n */\n abort() {\n this.cleanup();\n }\n}\nRequest.requestsCount = 0;\nRequest.requests = {};\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\nif (typeof document !== \"undefined\") {\n // @ts-ignore\n if (typeof attachEvent === \"function\") {\n // @ts-ignore\n attachEvent(\"onunload\", unloadHandler);\n }\n else if (typeof addEventListener === \"function\") {\n const terminationEvent = \"onpagehide\" in globalThis ? \"pagehide\" : \"unload\";\n addEventListener(terminationEvent, unloadHandler, false);\n }\n}\nfunction unloadHandler() {\n for (let i in Request.requests) {\n if (Request.requests.hasOwnProperty(i)) {\n Request.requests[i].abort();\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/transports/polling.js","import { globalThisShim as globalThis } from \"../globalThis.js\";\nexport const nextTick = (() => {\n const isPromiseAvailable = typeof Promise === \"function\" && typeof Promise.resolve === \"function\";\n if (isPromiseAvailable) {\n return (cb) => Promise.resolve().then(cb);\n }\n else {\n return (cb, setTimeoutFn) => setTimeoutFn(cb, 0);\n }\n})();\nexport const WebSocket = globalThis.WebSocket || globalThis.MozWebSocket;\nexport const usingBrowserWebSocket = true;\nexport const defaultBinaryType = \"arraybuffer\";\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/transports/websocket-constructor.browser.js","import { Transport } from \"../transport.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { pick } from \"../util.js\";\nimport { nextTick, usingBrowserWebSocket, WebSocket, } from \"./websocket-constructor.js\";\nimport { encodePacket } from \"engine.io-parser\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class WS extends Transport {\n /**\n * WebSocket transport constructor.\n *\n * @param {Object} opts - connection options\n * @protected\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n get name() {\n return \"websocket\";\n }\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\n const uri = this.uri();\n const protocols = this.opts.protocols;\n // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n const opts = isReactNative\n ? {}\n : pick(this.opts, \"agent\", \"perMessageDeflate\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"localAddress\", \"protocolVersion\", \"origin\", \"maxPayload\", \"family\", \"checkServerIdentity\");\n if (this.opts.extraHeaders) {\n opts.headers = this.opts.extraHeaders;\n }\n try {\n this.ws =\n usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new WebSocket(uri, protocols)\n : new WebSocket(uri)\n : new WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType;\n this.addEventListeners();\n }\n /**\n * Adds event listeners to the socket\n *\n * @private\n */\n addEventListeners() {\n this.ws.onopen = () => {\n if (this.opts.autoUnref) {\n this.ws._socket.unref();\n }\n this.onOpen();\n };\n this.ws.onclose = (closeEvent) => this.onClose({\n description: \"websocket connection closed\",\n context: closeEvent,\n });\n this.ws.onmessage = (ev) => this.onData(ev.data);\n this.ws.onerror = (e) => this.onError(\"websocket error\", e);\n }\n write(packets) {\n this.writable = false;\n // encodePacket efficient as it uses WS framing\n // no need for encodePayload\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n encodePacket(packet, this.supportsBinary, (data) => {\n // always create a new object (GH-437)\n const opts = {};\n if (!usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \n // @ts-ignore\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\n // Sometimes the websocket has already been closed but the browser didn't\n // have a chance of informing us about it yet, in that case send will\n // throw an error\n try {\n if (usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\n }\n catch (e) {\n }\n if (lastPacket) {\n // fake drain\n // defer to next tick to allow Socket to clear writeBuffer\n nextTick(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n if (typeof this.ws !== \"undefined\") {\n this.ws.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n const query = this.query || {};\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @private\n */\n check() {\n return !!WebSocket;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/transports/websocket.js","import { Transport } from \"../transport.js\";\nimport { nextTick } from \"./websocket-constructor.js\";\nimport { createPacketDecoderStream, createPacketEncoderStream, } from \"engine.io-parser\";\nexport class WT extends Transport {\n get name() {\n return \"webtransport\";\n }\n doOpen() {\n // @ts-ignore\n if (typeof WebTransport !== \"function\") {\n return;\n }\n // @ts-ignore\n this.transport = new WebTransport(this.createUri(\"https\"), this.opts.transportOptions[this.name]);\n this.transport.closed\n .then(() => {\n this.onClose();\n })\n .catch((err) => {\n this.onError(\"webtransport error\", err);\n });\n // note: we could have used async/await, but that would require some additional polyfills\n this.transport.ready.then(() => {\n this.transport.createBidirectionalStream().then((stream) => {\n const decoderStream = createPacketDecoderStream(Number.MAX_SAFE_INTEGER, this.socket.binaryType);\n const reader = stream.readable.pipeThrough(decoderStream).getReader();\n const encoderStream = createPacketEncoderStream();\n encoderStream.readable.pipeTo(stream.writable);\n this.writer = encoderStream.writable.getWriter();\n const read = () => {\n reader\n .read()\n .then(({ done, value }) => {\n if (done) {\n return;\n }\n this.onPacket(value);\n read();\n })\n .catch((err) => {\n });\n };\n read();\n const packet = { type: \"open\" };\n if (this.query.sid) {\n packet.data = `{\"sid\":\"${this.query.sid}\"}`;\n }\n this.writer.write(packet).then(() => this.onOpen());\n });\n });\n }\n write(packets) {\n this.writable = false;\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n this.writer.write(packet).then(() => {\n if (lastPacket) {\n nextTick(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n var _a;\n (_a = this.transport) === null || _a === void 0 ? void 0 : _a.close();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/transports/webtransport.js","import { Polling } from \"./polling.js\";\nimport { WS } from \"./websocket.js\";\nimport { WT } from \"./webtransport.js\";\nexport const transports = {\n websocket: WS,\n webtransport: WT,\n polling: Polling,\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/transports/index.js","// imported from https://github.com/galkn/parseuri\n/**\n * Parses a URI\n *\n * Note: we could also have used the built-in URL object, but it isn't supported on all platforms.\n *\n * See:\n * - https://developer.mozilla.org/en-US/docs/Web/API/URL\n * - https://caniuse.com/url\n * - https://www.rfc-editor.org/rfc/rfc3986#appendix-B\n *\n * History of the parse() method:\n * - first commit: https://github.com/socketio/socket.io-client/commit/4ee1d5d94b3906a9c052b459f1a818b15f38f91c\n * - export into its own module: https://github.com/socketio/engine.io-client/commit/de2c561e4564efeb78f1bdb1ba39ef81b2822cb3\n * - reimport: https://github.com/socketio/engine.io-client/commit/df32277c3f6d622eec5ed09f493cae3f3391d242\n *\n * @author Steven Levithan (MIT license)\n * @api private\n */\nconst re = /^(?:(?![^:@\\/?#]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@\\/?#]*)(?::([^:@\\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\nconst parts = [\n 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\nexport function parse(str) {\n const src = str, b = str.indexOf('['), e = str.indexOf(']');\n if (b != -1 && e != -1) {\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n }\n let m = re.exec(str || ''), uri = {}, i = 14;\n while (i--) {\n uri[parts[i]] = m[i] || '';\n }\n if (b != -1 && e != -1) {\n uri.source = src;\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n uri.ipv6uri = true;\n }\n uri.pathNames = pathNames(uri, uri['path']);\n uri.queryKey = queryKey(uri, uri['query']);\n return uri;\n}\nfunction pathNames(obj, path) {\n const regx = /\\/{2,9}/g, names = path.replace(regx, \"/\").split(\"/\");\n if (path.slice(0, 1) == '/' || path.length === 0) {\n names.splice(0, 1);\n }\n if (path.slice(-1) == '/') {\n names.splice(names.length - 1, 1);\n }\n return names;\n}\nfunction queryKey(uri, query) {\n const data = {};\n query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n if ($1) {\n data[$1] = $2;\n }\n });\n return data;\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/contrib/parseuri.js","import { transports } from \"./transports/index.js\";\nimport { installTimerFunctions, byteLength } from \"./util.js\";\nimport { decode } from \"./contrib/parseqs.js\";\nimport { parse } from \"./contrib/parseuri.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { protocol } from \"engine.io-parser\";\nimport { defaultBinaryType } from \"./transports/websocket-constructor.js\";\nexport class Socket extends Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri - uri or options\n * @param {Object} opts - options\n */\n constructor(uri, opts = {}) {\n super();\n this.binaryType = defaultBinaryType;\n this.writeBuffer = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n uri = parse(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query)\n opts.query = uri.query;\n }\n else if (opts.host) {\n opts.hostname = parse(opts.host).host;\n }\n installTimerFunctions(this, opts);\n this.secure =\n null != opts.secure\n ? opts.secure\n : typeof location !== \"undefined\" && \"https:\" === location.protocol;\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? \"443\" : \"80\";\n }\n this.hostname =\n opts.hostname ||\n (typeof location !== \"undefined\" ? location.hostname : \"localhost\");\n this.port =\n opts.port ||\n (typeof location !== \"undefined\" && location.port\n ? location.port\n : this.secure\n ? \"443\"\n : \"80\");\n this.transports = opts.transports || [\n \"polling\",\n \"websocket\",\n \"webtransport\",\n ];\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n this.opts = Object.assign({\n path: \"/engine.io\",\n agent: false,\n withCredentials: false,\n upgrade: true,\n timestampParam: \"t\",\n rememberUpgrade: false,\n addTrailingSlash: true,\n rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024,\n },\n transportOptions: {},\n closeOnBeforeunload: false,\n }, opts);\n this.opts.path =\n this.opts.path.replace(/\\/$/, \"\") +\n (this.opts.addTrailingSlash ? \"/\" : \"\");\n if (typeof this.opts.query === \"string\") {\n this.opts.query = decode(this.opts.query);\n }\n // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n // set on heartbeat\n this.pingTimeoutTimer = null;\n if (typeof addEventListener === \"function\") {\n if (this.opts.closeOnBeforeunload) {\n // Firefox closes the connection when the \"beforeunload\" event is emitted but not Chrome. This event listener\n // ensures every browser behaves the same (no \"disconnect\" event at the Socket.IO level when the page is\n // closed/reloaded)\n this.beforeunloadEventListener = () => {\n if (this.transport) {\n // silently close the transport\n this.transport.removeAllListeners();\n this.transport.close();\n }\n };\n addEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n }\n if (this.hostname !== \"localhost\") {\n this.offlineEventListener = () => {\n this.onClose(\"transport close\", {\n description: \"network connection lost\",\n });\n };\n addEventListener(\"offline\", this.offlineEventListener, false);\n }\n }\n this.open();\n }\n /**\n * Creates transport of the given type.\n *\n * @param {String} name - transport name\n * @return {Transport}\n * @private\n */\n createTransport(name) {\n const query = Object.assign({}, this.opts.query);\n // append engine.io protocol identifier\n query.EIO = protocol;\n // transport name\n query.transport = name;\n // session id if we already have one\n if (this.id)\n query.sid = this.id;\n const opts = Object.assign({}, this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port,\n }, this.opts.transportOptions[name]);\n return new transports[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @private\n */\n open() {\n let transport;\n if (this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1) {\n transport = \"websocket\";\n }\n else if (0 === this.transports.length) {\n // Emit error on next tick so it can be listened to\n this.setTimeoutFn(() => {\n this.emitReserved(\"error\", \"No transports available\");\n }, 0);\n return;\n }\n else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n }\n catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\n transport.open();\n this.setTransport(transport);\n }\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @private\n */\n setTransport(transport) {\n if (this.transport) {\n this.transport.removeAllListeners();\n }\n // set up transport\n this.transport = transport;\n // set up transport listeners\n transport\n .on(\"drain\", this.onDrain.bind(this))\n .on(\"packet\", this.onPacket.bind(this))\n .on(\"error\", this.onError.bind(this))\n .on(\"close\", (reason) => this.onClose(\"transport close\", reason));\n }\n /**\n * Probes a transport.\n *\n * @param {String} name - transport name\n * @private\n */\n probe(name) {\n let transport = this.createTransport(name);\n let failed = false;\n Socket.priorWebsocketSuccess = false;\n const onTransportOpen = () => {\n if (failed)\n return;\n transport.send([{ type: \"ping\", data: \"probe\" }]);\n transport.once(\"packet\", (msg) => {\n if (failed)\n return;\n if (\"pong\" === msg.type && \"probe\" === msg.data) {\n this.upgrading = true;\n this.emitReserved(\"upgrading\", transport);\n if (!transport)\n return;\n Socket.priorWebsocketSuccess = \"websocket\" === transport.name;\n this.transport.pause(() => {\n if (failed)\n return;\n if (\"closed\" === this.readyState)\n return;\n cleanup();\n this.setTransport(transport);\n transport.send([{ type: \"upgrade\" }]);\n this.emitReserved(\"upgrade\", transport);\n transport = null;\n this.upgrading = false;\n this.flush();\n });\n }\n else {\n const err = new Error(\"probe error\");\n // @ts-ignore\n err.transport = transport.name;\n this.emitReserved(\"upgradeError\", err);\n }\n });\n };\n function freezeTransport() {\n if (failed)\n return;\n // Any callback called by transport should be ignored since now\n failed = true;\n cleanup();\n transport.close();\n transport = null;\n }\n // Handle any error that happens while probing\n const onerror = (err) => {\n const error = new Error(\"probe error: \" + err);\n // @ts-ignore\n error.transport = transport.name;\n freezeTransport();\n this.emitReserved(\"upgradeError\", error);\n };\n function onTransportClose() {\n onerror(\"transport closed\");\n }\n // When the socket is closed while we're probing\n function onclose() {\n onerror(\"socket closed\");\n }\n // When the socket is upgraded while we're probing\n function onupgrade(to) {\n if (transport && to.name !== transport.name) {\n freezeTransport();\n }\n }\n // Remove all listeners on the transport and on self\n const cleanup = () => {\n transport.removeListener(\"open\", onTransportOpen);\n transport.removeListener(\"error\", onerror);\n transport.removeListener(\"close\", onTransportClose);\n this.off(\"close\", onclose);\n this.off(\"upgrading\", onupgrade);\n };\n transport.once(\"open\", onTransportOpen);\n transport.once(\"error\", onerror);\n transport.once(\"close\", onTransportClose);\n this.once(\"close\", onclose);\n this.once(\"upgrading\", onupgrade);\n if (this.upgrades.indexOf(\"webtransport\") !== -1 &&\n name !== \"webtransport\") {\n // favor WebTransport\n this.setTimeoutFn(() => {\n if (!failed) {\n transport.open();\n }\n }, 200);\n }\n else {\n transport.open();\n }\n }\n /**\n * Called when connection is deemed open.\n *\n * @private\n */\n onOpen() {\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\"open\" === this.readyState && this.opts.upgrade) {\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\n }\n /**\n * Handles a packet.\n *\n * @private\n */\n onPacket(packet) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n this.emitReserved(\"packet\", packet);\n // Socket is live - any packet counts\n this.emitReserved(\"heartbeat\");\n this.resetPingTimeout();\n switch (packet.type) {\n case \"open\":\n this.onHandshake(JSON.parse(packet.data));\n break;\n case \"ping\":\n this.sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\n break;\n case \"error\":\n const err = new Error(\"server error\");\n // @ts-ignore\n err.code = packet.data;\n this.onError(err);\n break;\n case \"message\":\n this.emitReserved(\"data\", packet.data);\n this.emitReserved(\"message\", packet.data);\n break;\n }\n }\n else {\n }\n }\n /**\n * Called upon handshake completion.\n *\n * @param {Object} data - handshake obj\n * @private\n */\n onHandshake(data) {\n this.emitReserved(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this.upgrades = this.filterUpgrades(data.upgrades);\n this.pingInterval = data.pingInterval;\n this.pingTimeout = data.pingTimeout;\n this.maxPayload = data.maxPayload;\n this.onOpen();\n // In case open handler closes socket\n if (\"closed\" === this.readyState)\n return;\n this.resetPingTimeout();\n }\n /**\n * Sets and resets ping timeout timer based on server pings.\n *\n * @private\n */\n resetPingTimeout() {\n this.clearTimeoutFn(this.pingTimeoutTimer);\n this.pingTimeoutTimer = this.setTimeoutFn(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\n if (this.opts.autoUnref) {\n this.pingTimeoutTimer.unref();\n }\n }\n /**\n * Called on `drain` event\n *\n * @private\n */\n onDrain() {\n this.writeBuffer.splice(0, this.prevBufferLen);\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this.prevBufferLen = 0;\n if (0 === this.writeBuffer.length) {\n this.emitReserved(\"drain\");\n }\n else {\n this.flush();\n }\n }\n /**\n * Flush write buffers.\n *\n * @private\n */\n flush() {\n if (\"closed\" !== this.readyState &&\n this.transport.writable &&\n !this.upgrading &&\n this.writeBuffer.length) {\n const packets = this.getWritablePackets();\n this.transport.send(packets);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this.prevBufferLen = packets.length;\n this.emitReserved(\"flush\");\n }\n }\n /**\n * Ensure the encoded size of the writeBuffer is below the maxPayload value sent by the server (only for HTTP\n * long-polling)\n *\n * @private\n */\n getWritablePackets() {\n const shouldCheckPayloadSize = this.maxPayload &&\n this.transport.name === \"polling\" &&\n this.writeBuffer.length > 1;\n if (!shouldCheckPayloadSize) {\n return this.writeBuffer;\n }\n let payloadSize = 1; // first packet type\n for (let i = 0; i < this.writeBuffer.length; i++) {\n const data = this.writeBuffer[i].data;\n if (data) {\n payloadSize += byteLength(data);\n }\n if (i > 0 && payloadSize > this.maxPayload) {\n return this.writeBuffer.slice(0, i);\n }\n payloadSize += 2; // separator + packet type\n }\n return this.writeBuffer;\n }\n /**\n * Sends a message.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} callback function.\n * @return {Socket} for chaining.\n */\n write(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n send(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a packet.\n *\n * @param {String} type: packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @private\n */\n sendPacket(type, data, options, fn) {\n if (\"function\" === typeof data) {\n fn = data;\n data = undefined;\n }\n if (\"function\" === typeof options) {\n fn = options;\n options = null;\n }\n if (\"closing\" === this.readyState || \"closed\" === this.readyState) {\n return;\n }\n options = options || {};\n options.compress = false !== options.compress;\n const packet = {\n type: type,\n data: data,\n options: options,\n };\n this.emitReserved(\"packetCreate\", packet);\n this.writeBuffer.push(packet);\n if (fn)\n this.once(\"flush\", fn);\n this.flush();\n }\n /**\n * Closes the connection.\n */\n close() {\n const close = () => {\n this.onClose(\"forced close\");\n this.transport.close();\n };\n const cleanupAndClose = () => {\n this.off(\"upgrade\", cleanupAndClose);\n this.off(\"upgradeError\", cleanupAndClose);\n close();\n };\n const waitForUpgrade = () => {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n this.once(\"upgrade\", cleanupAndClose);\n this.once(\"upgradeError\", cleanupAndClose);\n };\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.readyState = \"closing\";\n if (this.writeBuffer.length) {\n this.once(\"drain\", () => {\n if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n });\n }\n else if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n }\n return this;\n }\n /**\n * Called upon transport error\n *\n * @private\n */\n onError(err) {\n Socket.priorWebsocketSuccess = false;\n this.emitReserved(\"error\", err);\n this.onClose(\"transport error\", err);\n }\n /**\n * Called upon transport close.\n *\n * @private\n */\n onClose(reason, description) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n // clear timers\n this.clearTimeoutFn(this.pingTimeoutTimer);\n // stop event from firing again for transport\n this.transport.removeAllListeners(\"close\");\n // ensure transport won't stay open\n this.transport.close();\n // ignore further transport communication\n this.transport.removeAllListeners();\n if (typeof removeEventListener === \"function\") {\n removeEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n removeEventListener(\"offline\", this.offlineEventListener, false);\n }\n // set ready state\n this.readyState = \"closed\";\n // clear session id\n this.id = null;\n // emit close event\n this.emitReserved(\"close\", reason, description);\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n this.writeBuffer = [];\n this.prevBufferLen = 0;\n }\n }\n /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} upgrades - server upgrades\n * @private\n */\n filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nSocket.protocol = protocol;\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/engine.io-client/build/esm/socket.js","import { parse } from \"engine.io-client\";\n/**\n * URL parser.\n *\n * @param uri - url\n * @param path - the request path of the connection\n * @param loc - An object meant to mimic window.location.\n * Defaults to window.location.\n * @public\n */\nexport function url(uri, path = \"\", loc) {\n let obj = uri;\n // default to window.location\n loc = loc || (typeof location !== \"undefined\" && location);\n if (null == uri)\n uri = loc.protocol + \"//\" + loc.host;\n // relative path support\n if (typeof uri === \"string\") {\n if (\"/\" === uri.charAt(0)) {\n if (\"/\" === uri.charAt(1)) {\n uri = loc.protocol + uri;\n }\n else {\n uri = loc.host + uri;\n }\n }\n if (!/^(https?|wss?):\\/\\//.test(uri)) {\n if (\"undefined\" !== typeof loc) {\n uri = loc.protocol + \"//\" + uri;\n }\n else {\n uri = \"https://\" + uri;\n }\n }\n // parse\n obj = parse(uri);\n }\n // make sure we treat `localhost:80` and `localhost` equally\n if (!obj.port) {\n if (/^(http|ws)$/.test(obj.protocol)) {\n obj.port = \"80\";\n }\n else if (/^(http|ws)s$/.test(obj.protocol)) {\n obj.port = \"443\";\n }\n }\n obj.path = obj.path || \"/\";\n const ipv6 = obj.host.indexOf(\":\") !== -1;\n const host = ipv6 ? \"[\" + obj.host + \"]\" : obj.host;\n // define unique id\n obj.id = obj.protocol + \"://\" + host + \":\" + obj.port + path;\n // define href\n obj.href =\n obj.protocol +\n \"://\" +\n host +\n (loc && loc.port === obj.port ? \"\" : \":\" + obj.port);\n return obj;\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/socket.io-client/build/esm/url.js","const withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst isView = (obj) => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj.buffer instanceof ArrayBuffer;\n};\nconst toString = Object.prototype.toString;\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeFile = typeof File === \"function\" ||\n (typeof File !== \"undefined\" &&\n toString.call(File) === \"[object FileConstructor]\");\n/**\n * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.\n *\n * @private\n */\nexport function isBinary(obj) {\n return ((withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj))) ||\n (withNativeBlob && obj instanceof Blob) ||\n (withNativeFile && obj instanceof File));\n}\nexport function hasBinary(obj, toJSON) {\n if (!obj || typeof obj !== \"object\") {\n return false;\n }\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (hasBinary(obj[i])) {\n return true;\n }\n }\n return false;\n }\n if (isBinary(obj)) {\n return true;\n }\n if (obj.toJSON &&\n typeof obj.toJSON === \"function\" &&\n arguments.length === 1) {\n return hasBinary(obj.toJSON(), true);\n }\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n return true;\n }\n }\n return false;\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/socket.io-parser/build/esm/is-binary.js","import { isBinary } from \"./is-binary.js\";\n/**\n * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @public\n */\nexport function deconstructPacket(packet) {\n const buffers = [];\n const packetData = packet.data;\n const pack = packet;\n pack.data = _deconstructPacket(packetData, buffers);\n pack.attachments = buffers.length; // number of binary 'attachments'\n return { packet: pack, buffers: buffers };\n}\nfunction _deconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (isBinary(data)) {\n const placeholder = { _placeholder: true, num: buffers.length };\n buffers.push(data);\n return placeholder;\n }\n else if (Array.isArray(data)) {\n const newData = new Array(data.length);\n for (let i = 0; i < data.length; i++) {\n newData[i] = _deconstructPacket(data[i], buffers);\n }\n return newData;\n }\n else if (typeof data === \"object\" && !(data instanceof Date)) {\n const newData = {};\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newData[key] = _deconstructPacket(data[key], buffers);\n }\n }\n return newData;\n }\n return data;\n}\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @public\n */\nexport function reconstructPacket(packet, buffers) {\n packet.data = _reconstructPacket(packet.data, buffers);\n delete packet.attachments; // no longer useful\n return packet;\n}\nfunction _reconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (data && data._placeholder === true) {\n const isIndexValid = typeof data.num === \"number\" &&\n data.num >= 0 &&\n data.num < buffers.length;\n if (isIndexValid) {\n return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n }\n else {\n throw new Error(\"illegal attachments\");\n }\n }\n else if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n data[i] = _reconstructPacket(data[i], buffers);\n }\n }\n else if (typeof data === \"object\") {\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n data[key] = _reconstructPacket(data[key], buffers);\n }\n }\n }\n return data;\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/socket.io-parser/build/esm/binary.js","import { Emitter } from \"@socket.io/component-emitter\";\nimport { deconstructPacket, reconstructPacket } from \"./binary.js\";\nimport { isBinary, hasBinary } from \"./is-binary.js\";\n/**\n * These strings must not be used as event names, as they have a special meaning.\n */\nconst RESERVED_EVENTS = [\n \"connect\",\n \"connect_error\",\n \"disconnect\",\n \"disconnecting\",\n \"newListener\",\n \"removeListener\", // used by the Node.js EventEmitter\n];\n/**\n * Protocol version.\n *\n * @public\n */\nexport const protocol = 5;\nexport var PacketType;\n(function (PacketType) {\n PacketType[PacketType[\"CONNECT\"] = 0] = \"CONNECT\";\n PacketType[PacketType[\"DISCONNECT\"] = 1] = \"DISCONNECT\";\n PacketType[PacketType[\"EVENT\"] = 2] = \"EVENT\";\n PacketType[PacketType[\"ACK\"] = 3] = \"ACK\";\n PacketType[PacketType[\"CONNECT_ERROR\"] = 4] = \"CONNECT_ERROR\";\n PacketType[PacketType[\"BINARY_EVENT\"] = 5] = \"BINARY_EVENT\";\n PacketType[PacketType[\"BINARY_ACK\"] = 6] = \"BINARY_ACK\";\n})(PacketType || (PacketType = {}));\n/**\n * A socket.io Encoder instance\n */\nexport class Encoder {\n /**\n * Encoder constructor\n *\n * @param {function} replacer - custom replacer to pass down to JSON.parse\n */\n constructor(replacer) {\n this.replacer = replacer;\n }\n /**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n */\n encode(obj) {\n if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n if (hasBinary(obj)) {\n return this.encodeAsBinary({\n type: obj.type === PacketType.EVENT\n ? PacketType.BINARY_EVENT\n : PacketType.BINARY_ACK,\n nsp: obj.nsp,\n data: obj.data,\n id: obj.id,\n });\n }\n }\n return [this.encodeAsString(obj)];\n }\n /**\n * Encode packet as string.\n */\n encodeAsString(obj) {\n // first is type\n let str = \"\" + obj.type;\n // attachments if we have them\n if (obj.type === PacketType.BINARY_EVENT ||\n obj.type === PacketType.BINARY_ACK) {\n str += obj.attachments + \"-\";\n }\n // if we have a namespace other than `/`\n // we append it followed by a comma `,`\n if (obj.nsp && \"/\" !== obj.nsp) {\n str += obj.nsp + \",\";\n }\n // immediately followed by the id\n if (null != obj.id) {\n str += obj.id;\n }\n // json data\n if (null != obj.data) {\n str += JSON.stringify(obj.data, this.replacer);\n }\n return str;\n }\n /**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n */\n encodeAsBinary(obj) {\n const deconstruction = deconstructPacket(obj);\n const pack = this.encodeAsString(deconstruction.packet);\n const buffers = deconstruction.buffers;\n buffers.unshift(pack); // add packet info to beginning of data list\n return buffers; // write all the buffers\n }\n}\n// see https://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript\nfunction isObject(value) {\n return Object.prototype.toString.call(value) === \"[object Object]\";\n}\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\nexport class Decoder extends Emitter {\n /**\n * Decoder constructor\n *\n * @param {function} reviver - custom reviver to pass down to JSON.stringify\n */\n constructor(reviver) {\n super();\n this.reviver = reviver;\n }\n /**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n */\n add(obj) {\n let packet;\n if (typeof obj === \"string\") {\n if (this.reconstructor) {\n throw new Error(\"got plaintext data when reconstructing a packet\");\n }\n packet = this.decodeString(obj);\n const isBinaryEvent = packet.type === PacketType.BINARY_EVENT;\n if (isBinaryEvent || packet.type === PacketType.BINARY_ACK) {\n packet.type = isBinaryEvent ? PacketType.EVENT : PacketType.ACK;\n // binary packet's json\n this.reconstructor = new BinaryReconstructor(packet);\n // no attachments, labeled binary but no binary data to follow\n if (packet.attachments === 0) {\n super.emitReserved(\"decoded\", packet);\n }\n }\n else {\n // non-binary full packet\n super.emitReserved(\"decoded\", packet);\n }\n }\n else if (isBinary(obj) || obj.base64) {\n // raw binary data\n if (!this.reconstructor) {\n throw new Error(\"got binary data when not reconstructing a packet\");\n }\n else {\n packet = this.reconstructor.takeBinaryData(obj);\n if (packet) {\n // received final buffer\n this.reconstructor = null;\n super.emitReserved(\"decoded\", packet);\n }\n }\n }\n else {\n throw new Error(\"Unknown type: \" + obj);\n }\n }\n /**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n */\n decodeString(str) {\n let i = 0;\n // look up type\n const p = {\n type: Number(str.charAt(0)),\n };\n if (PacketType[p.type] === undefined) {\n throw new Error(\"unknown packet type \" + p.type);\n }\n // look up attachments if type binary\n if (p.type === PacketType.BINARY_EVENT ||\n p.type === PacketType.BINARY_ACK) {\n const start = i + 1;\n while (str.charAt(++i) !== \"-\" && i != str.length) { }\n const buf = str.substring(start, i);\n if (buf != Number(buf) || str.charAt(i) !== \"-\") {\n throw new Error(\"Illegal attachments\");\n }\n p.attachments = Number(buf);\n }\n // look up namespace (if any)\n if (\"/\" === str.charAt(i + 1)) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (\",\" === c)\n break;\n if (i === str.length)\n break;\n }\n p.nsp = str.substring(start, i);\n }\n else {\n p.nsp = \"/\";\n }\n // look up id\n const next = str.charAt(i + 1);\n if (\"\" !== next && Number(next) == next) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (null == c || Number(c) != c) {\n --i;\n break;\n }\n if (i === str.length)\n break;\n }\n p.id = Number(str.substring(start, i + 1));\n }\n // look up json data\n if (str.charAt(++i)) {\n const payload = this.tryParse(str.substr(i));\n if (Decoder.isPayloadValid(p.type, payload)) {\n p.data = payload;\n }\n else {\n throw new Error(\"invalid payload\");\n }\n }\n return p;\n }\n tryParse(str) {\n try {\n return JSON.parse(str, this.reviver);\n }\n catch (e) {\n return false;\n }\n }\n static isPayloadValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return isObject(payload);\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || isObject(payload);\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n return (Array.isArray(payload) &&\n (typeof payload[0] === \"number\" ||\n (typeof payload[0] === \"string\" &&\n RESERVED_EVENTS.indexOf(payload[0]) === -1)));\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n return Array.isArray(payload);\n }\n }\n /**\n * Deallocates a parser's resources\n */\n destroy() {\n if (this.reconstructor) {\n this.reconstructor.finishedReconstruction();\n this.reconstructor = null;\n }\n }\n}\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n */\nclass BinaryReconstructor {\n constructor(packet) {\n this.packet = packet;\n this.buffers = [];\n this.reconPack = packet;\n }\n /**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n * a reconstructed packet object if all buffers have been received.\n */\n takeBinaryData(binData) {\n this.buffers.push(binData);\n if (this.buffers.length === this.reconPack.attachments) {\n // done with buffer list\n const packet = reconstructPacket(this.reconPack, this.buffers);\n this.finishedReconstruction();\n return packet;\n }\n return null;\n }\n /**\n * Cleans up binary packet reconstruction variables.\n */\n finishedReconstruction() {\n this.reconPack = null;\n this.buffers = [];\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/socket.io-parser/build/esm/index.js","export function on(obj, ev, fn) {\n obj.on(ev, fn);\n return function subDestroy() {\n obj.off(ev, fn);\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/socket.io-client/build/esm/on.js","import { PacketType } from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\nconst RESERVED_EVENTS = Object.freeze({\n connect: 1,\n connect_error: 1,\n disconnect: 1,\n disconnecting: 1,\n // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n newListener: 1,\n removeListener: 1,\n});\n/**\n * A Socket is the fundamental class for interacting with the server.\n *\n * A Socket belongs to a certain Namespace (by default /) and uses an underlying {@link Manager} to communicate.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(\"connected\");\n * });\n *\n * // send an event to the server\n * socket.emit(\"foo\", \"bar\");\n *\n * socket.on(\"foobar\", () => {\n * // an event was received from the server\n * });\n *\n * // upon disconnection\n * socket.on(\"disconnect\", (reason) => {\n * console.log(`disconnected due to ${reason}`);\n * });\n */\nexport class Socket extends Emitter {\n /**\n * `Socket` constructor.\n */\n constructor(io, nsp, opts) {\n super();\n /**\n * Whether the socket is currently connected to the server.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.connected); // true\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.connected); // false\n * });\n */\n this.connected = false;\n /**\n * Whether the connection state was recovered after a temporary disconnection. In that case, any missed packets will\n * be transmitted by the server.\n */\n this.recovered = false;\n /**\n * Buffer for packets received before the CONNECT packet\n */\n this.receiveBuffer = [];\n /**\n * Buffer for packets that will be sent once the socket is connected\n */\n this.sendBuffer = [];\n /**\n * The queue of packets to be sent with retry in case of failure.\n *\n * Packets are sent one by one, each waiting for the server acknowledgement, in order to guarantee the delivery order.\n * @private\n */\n this._queue = [];\n /**\n * A sequence to generate the ID of the {@link QueuedPacket}.\n * @private\n */\n this._queueSeq = 0;\n this.ids = 0;\n this.acks = {};\n this.flags = {};\n this.io = io;\n this.nsp = nsp;\n if (opts && opts.auth) {\n this.auth = opts.auth;\n }\n this._opts = Object.assign({}, opts);\n if (this.io._autoConnect)\n this.open();\n }\n /**\n * Whether the socket is currently disconnected\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.disconnected); // false\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.disconnected); // true\n * });\n */\n get disconnected() {\n return !this.connected;\n }\n /**\n * Subscribe to open, close and packet events\n *\n * @private\n */\n subEvents() {\n if (this.subs)\n return;\n const io = this.io;\n this.subs = [\n on(io, \"open\", this.onopen.bind(this)),\n on(io, \"packet\", this.onpacket.bind(this)),\n on(io, \"error\", this.onerror.bind(this)),\n on(io, \"close\", this.onclose.bind(this)),\n ];\n }\n /**\n * Whether the Socket will try to reconnect when its Manager connects or reconnects.\n *\n * @example\n * const socket = io();\n *\n * console.log(socket.active); // true\n *\n * socket.on(\"disconnect\", (reason) => {\n * if (reason === \"io server disconnect\") {\n * // the disconnection was initiated by the server, you need to manually reconnect\n * console.log(socket.active); // false\n * }\n * // else the socket will automatically try to reconnect\n * console.log(socket.active); // true\n * });\n */\n get active() {\n return !!this.subs;\n }\n /**\n * \"Opens\" the socket.\n *\n * @example\n * const socket = io({\n * autoConnect: false\n * });\n *\n * socket.connect();\n */\n connect() {\n if (this.connected)\n return this;\n this.subEvents();\n if (!this.io[\"_reconnecting\"])\n this.io.open(); // ensure open\n if (\"open\" === this.io._readyState)\n this.onopen();\n return this;\n }\n /**\n * Alias for {@link connect()}.\n */\n open() {\n return this.connect();\n }\n /**\n * Sends a `message` event.\n *\n * This method mimics the WebSocket.send() method.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send\n *\n * @example\n * socket.send(\"hello\");\n *\n * // this is equivalent to\n * socket.emit(\"message\", \"hello\");\n *\n * @return self\n */\n send(...args) {\n args.unshift(\"message\");\n this.emit.apply(this, args);\n return this;\n }\n /**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @example\n * socket.emit(\"hello\", \"world\");\n *\n * // all serializable datastructures are supported (no need to call JSON.stringify)\n * socket.emit(\"hello\", 1, \"2\", { 3: [\"4\"], 5: Uint8Array.from([6]) });\n *\n * // with an acknowledgement from the server\n * socket.emit(\"hello\", \"world\", (val) => {\n * // ...\n * });\n *\n * @return self\n */\n emit(ev, ...args) {\n if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n throw new Error('\"' + ev.toString() + '\" is a reserved event name');\n }\n args.unshift(ev);\n if (this._opts.retries && !this.flags.fromQueue && !this.flags.volatile) {\n this._addToQueue(args);\n return this;\n }\n const packet = {\n type: PacketType.EVENT,\n data: args,\n };\n packet.options = {};\n packet.options.compress = this.flags.compress !== false;\n // event ack callback\n if (\"function\" === typeof args[args.length - 1]) {\n const id = this.ids++;\n const ack = args.pop();\n this._registerAckCallback(id, ack);\n packet.id = id;\n }\n const isTransportWritable = this.io.engine &&\n this.io.engine.transport &&\n this.io.engine.transport.writable;\n const discardPacket = this.flags.volatile && (!isTransportWritable || !this.connected);\n if (discardPacket) {\n }\n else if (this.connected) {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n }\n else {\n this.sendBuffer.push(packet);\n }\n this.flags = {};\n return this;\n }\n /**\n * @private\n */\n _registerAckCallback(id, ack) {\n var _a;\n const timeout = (_a = this.flags.timeout) !== null && _a !== void 0 ? _a : this._opts.ackTimeout;\n if (timeout === undefined) {\n this.acks[id] = ack;\n return;\n }\n // @ts-ignore\n const timer = this.io.setTimeoutFn(() => {\n delete this.acks[id];\n for (let i = 0; i < this.sendBuffer.length; i++) {\n if (this.sendBuffer[i].id === id) {\n this.sendBuffer.splice(i, 1);\n }\n }\n ack.call(this, new Error(\"operation has timed out\"));\n }, timeout);\n this.acks[id] = (...args) => {\n // @ts-ignore\n this.io.clearTimeoutFn(timer);\n ack.apply(this, [null, ...args]);\n };\n }\n /**\n * Emits an event and waits for an acknowledgement\n *\n * @example\n * // without timeout\n * const response = await socket.emitWithAck(\"hello\", \"world\");\n *\n * // with a specific timeout\n * try {\n * const response = await socket.timeout(1000).emitWithAck(\"hello\", \"world\");\n * } catch (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n *\n * @return a Promise that will be fulfilled when the server acknowledges the event\n */\n emitWithAck(ev, ...args) {\n // the timeout flag is optional\n const withErr = this.flags.timeout !== undefined || this._opts.ackTimeout !== undefined;\n return new Promise((resolve, reject) => {\n args.push((arg1, arg2) => {\n if (withErr) {\n return arg1 ? reject(arg1) : resolve(arg2);\n }\n else {\n return resolve(arg1);\n }\n });\n this.emit(ev, ...args);\n });\n }\n /**\n * Add the packet to the queue.\n * @param args\n * @private\n */\n _addToQueue(args) {\n let ack;\n if (typeof args[args.length - 1] === \"function\") {\n ack = args.pop();\n }\n const packet = {\n id: this._queueSeq++,\n tryCount: 0,\n pending: false,\n args,\n flags: Object.assign({ fromQueue: true }, this.flags),\n };\n args.push((err, ...responseArgs) => {\n if (packet !== this._queue[0]) {\n // the packet has already been acknowledged\n return;\n }\n const hasError = err !== null;\n if (hasError) {\n if (packet.tryCount > this._opts.retries) {\n this._queue.shift();\n if (ack) {\n ack(err);\n }\n }\n }\n else {\n this._queue.shift();\n if (ack) {\n ack(null, ...responseArgs);\n }\n }\n packet.pending = false;\n return this._drainQueue();\n });\n this._queue.push(packet);\n this._drainQueue();\n }\n /**\n * Send the first packet of the queue, and wait for an acknowledgement from the server.\n * @param force - whether to resend a packet that has not been acknowledged yet\n *\n * @private\n */\n _drainQueue(force = false) {\n if (!this.connected || this._queue.length === 0) {\n return;\n }\n const packet = this._queue[0];\n if (packet.pending && !force) {\n return;\n }\n packet.pending = true;\n packet.tryCount++;\n this.flags = packet.flags;\n this.emit.apply(this, packet.args);\n }\n /**\n * Sends a packet.\n *\n * @param packet\n * @private\n */\n packet(packet) {\n packet.nsp = this.nsp;\n this.io._packet(packet);\n }\n /**\n * Called upon engine `open`.\n *\n * @private\n */\n onopen() {\n if (typeof this.auth == \"function\") {\n this.auth((data) => {\n this._sendConnectPacket(data);\n });\n }\n else {\n this._sendConnectPacket(this.auth);\n }\n }\n /**\n * Sends a CONNECT packet to initiate the Socket.IO session.\n *\n * @param data\n * @private\n */\n _sendConnectPacket(data) {\n this.packet({\n type: PacketType.CONNECT,\n data: this._pid\n ? Object.assign({ pid: this._pid, offset: this._lastOffset }, data)\n : data,\n });\n }\n /**\n * Called upon engine or manager `error`.\n *\n * @param err\n * @private\n */\n onerror(err) {\n if (!this.connected) {\n this.emitReserved(\"connect_error\", err);\n }\n }\n /**\n * Called upon engine `close`.\n *\n * @param reason\n * @param description\n * @private\n */\n onclose(reason, description) {\n this.connected = false;\n delete this.id;\n this.emitReserved(\"disconnect\", reason, description);\n }\n /**\n * Called with socket packet.\n *\n * @param packet\n * @private\n */\n onpacket(packet) {\n const sameNamespace = packet.nsp === this.nsp;\n if (!sameNamespace)\n return;\n switch (packet.type) {\n case PacketType.CONNECT:\n if (packet.data && packet.data.sid) {\n this.onconnect(packet.data.sid, packet.data.pid);\n }\n else {\n this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n }\n break;\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n this.onevent(packet);\n break;\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n this.onack(packet);\n break;\n case PacketType.DISCONNECT:\n this.ondisconnect();\n break;\n case PacketType.CONNECT_ERROR:\n this.destroy();\n const err = new Error(packet.data.message);\n // @ts-ignore\n err.data = packet.data.data;\n this.emitReserved(\"connect_error\", err);\n break;\n }\n }\n /**\n * Called upon a server event.\n *\n * @param packet\n * @private\n */\n onevent(packet) {\n const args = packet.data || [];\n if (null != packet.id) {\n args.push(this.ack(packet.id));\n }\n if (this.connected) {\n this.emitEvent(args);\n }\n else {\n this.receiveBuffer.push(Object.freeze(args));\n }\n }\n emitEvent(args) {\n if (this._anyListeners && this._anyListeners.length) {\n const listeners = this._anyListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, args);\n }\n }\n super.emit.apply(this, args);\n if (this._pid && args.length && typeof args[args.length - 1] === \"string\") {\n this._lastOffset = args[args.length - 1];\n }\n }\n /**\n * Produces an ack callback to emit with an event.\n *\n * @private\n */\n ack(id) {\n const self = this;\n let sent = false;\n return function (...args) {\n // prevent double callbacks\n if (sent)\n return;\n sent = true;\n self.packet({\n type: PacketType.ACK,\n id: id,\n data: args,\n });\n };\n }\n /**\n * Called upon a server acknowlegement.\n *\n * @param packet\n * @private\n */\n onack(packet) {\n const ack = this.acks[packet.id];\n if (\"function\" === typeof ack) {\n ack.apply(this, packet.data);\n delete this.acks[packet.id];\n }\n else {\n }\n }\n /**\n * Called upon server connect.\n *\n * @private\n */\n onconnect(id, pid) {\n this.id = id;\n this.recovered = pid && this._pid === pid;\n this._pid = pid; // defined only if connection state recovery is enabled\n this.connected = true;\n this.emitBuffered();\n this.emitReserved(\"connect\");\n this._drainQueue(true);\n }\n /**\n * Emit buffered events (received and emitted).\n *\n * @private\n */\n emitBuffered() {\n this.receiveBuffer.forEach((args) => this.emitEvent(args));\n this.receiveBuffer = [];\n this.sendBuffer.forEach((packet) => {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n });\n this.sendBuffer = [];\n }\n /**\n * Called upon server disconnect.\n *\n * @private\n */\n ondisconnect() {\n this.destroy();\n this.onclose(\"io server disconnect\");\n }\n /**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @private\n */\n destroy() {\n if (this.subs) {\n // clean subscriptions to avoid reconnections\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs = undefined;\n }\n this.io[\"_destroy\"](this);\n }\n /**\n * Disconnects the socket manually. In that case, the socket will not try to reconnect.\n *\n * If this is the last active Socket instance of the {@link Manager}, the low-level connection will be closed.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"disconnect\", (reason) => {\n * // console.log(reason); prints \"io client disconnect\"\n * });\n *\n * socket.disconnect();\n *\n * @return self\n */\n disconnect() {\n if (this.connected) {\n this.packet({ type: PacketType.DISCONNECT });\n }\n // remove socket from pool\n this.destroy();\n if (this.connected) {\n // fire events\n this.onclose(\"io client disconnect\");\n }\n return this;\n }\n /**\n * Alias for {@link disconnect()}.\n *\n * @return self\n */\n close() {\n return this.disconnect();\n }\n /**\n * Sets the compress flag.\n *\n * @example\n * socket.compress(false).emit(\"hello\");\n *\n * @param compress - if `true`, compresses the sending data\n * @return self\n */\n compress(compress) {\n this.flags.compress = compress;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n * ready to send messages.\n *\n * @example\n * socket.volatile.emit(\"hello\"); // the server may or may not receive it\n *\n * @returns self\n */\n get volatile() {\n this.flags.volatile = true;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the callback will be called with an error when the\n * given number of milliseconds have elapsed without an acknowledgement from the server:\n *\n * @example\n * socket.timeout(5000).emit(\"my-event\", (err) => {\n * if (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n * });\n *\n * @returns self\n */\n timeout(timeout) {\n this.flags.timeout = timeout;\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * @example\n * socket.onAny((event, ...args) => {\n * console.log(`got ${event}`);\n * });\n *\n * @param listener\n */\n onAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * @example\n * socket.prependAny((event, ...args) => {\n * console.log(`got event ${event}`);\n * });\n *\n * @param listener\n */\n prependAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`got event ${event}`);\n * }\n *\n * socket.onAny(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAny(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAny();\n *\n * @param listener\n */\n offAny(listener) {\n if (!this._anyListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAny() {\n return this._anyListeners || [];\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.onAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n onAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.prependAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n prependAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`sent event ${event}`);\n * }\n *\n * socket.onAnyOutgoing(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAnyOutgoing(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAnyOutgoing();\n *\n * @param [listener] - the catch-all listener (optional)\n */\n offAnyOutgoing(listener) {\n if (!this._anyOutgoingListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyOutgoingListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyOutgoingListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAnyOutgoing() {\n return this._anyOutgoingListeners || [];\n }\n /**\n * Notify the listeners for each packet sent\n *\n * @param packet\n *\n * @private\n */\n notifyOutgoingListeners(packet) {\n if (this._anyOutgoingListeners && this._anyOutgoingListeners.length) {\n const listeners = this._anyOutgoingListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, packet.data);\n }\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/socket.io-client/build/esm/socket.js","/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\nexport function Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\nBackoff.prototype.duration = function () {\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\nBackoff.prototype.reset = function () {\n this.attempts = 0;\n};\n/**\n * Set the minimum duration\n *\n * @api public\n */\nBackoff.prototype.setMin = function (min) {\n this.ms = min;\n};\n/**\n * Set the maximum duration\n *\n * @api public\n */\nBackoff.prototype.setMax = function (max) {\n this.max = max;\n};\n/**\n * Set the jitter\n *\n * @api public\n */\nBackoff.prototype.setJitter = function (jitter) {\n this.jitter = jitter;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/socket.io-client/build/esm/contrib/backo2.js","import { Socket as Engine, installTimerFunctions, nextTick, } from \"engine.io-client\";\nimport { Socket } from \"./socket.js\";\nimport * as parser from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Backoff } from \"./contrib/backo2.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\nexport class Manager extends Emitter {\n constructor(uri, opts) {\n var _a;\n super();\n this.nsps = {};\n this.subs = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n opts.path = opts.path || \"/socket.io\";\n this.opts = opts;\n installTimerFunctions(this, opts);\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor((_a = opts.randomizationFactor) !== null && _a !== void 0 ? _a : 0.5);\n this.backoff = new Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor(),\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this._readyState = \"closed\";\n this.uri = uri;\n const _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this._autoConnect = opts.autoConnect !== false;\n if (this._autoConnect)\n this.open();\n }\n reconnection(v) {\n if (!arguments.length)\n return this._reconnection;\n this._reconnection = !!v;\n return this;\n }\n reconnectionAttempts(v) {\n if (v === undefined)\n return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n }\n reconnectionDelay(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelay;\n this._reconnectionDelay = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n return this;\n }\n randomizationFactor(v) {\n var _a;\n if (v === undefined)\n return this._randomizationFactor;\n this._randomizationFactor = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n return this;\n }\n reconnectionDelayMax(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n return this;\n }\n timeout(v) {\n if (!arguments.length)\n return this._timeout;\n this._timeout = v;\n return this;\n }\n /**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @private\n */\n maybeReconnectOnOpen() {\n // Only try to reconnect if it's the first time we're connecting\n if (!this._reconnecting &&\n this._reconnection &&\n this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n }\n /**\n * Sets the current transport `socket`.\n *\n * @param {Function} fn - optional, callback\n * @return self\n * @public\n */\n open(fn) {\n if (~this._readyState.indexOf(\"open\"))\n return this;\n this.engine = new Engine(this.uri, this.opts);\n const socket = this.engine;\n const self = this;\n this._readyState = \"opening\";\n this.skipReconnect = false;\n // emit `open`\n const openSubDestroy = on(socket, \"open\", function () {\n self.onopen();\n fn && fn();\n });\n const onError = (err) => {\n this.cleanup();\n this._readyState = \"closed\";\n this.emitReserved(\"error\", err);\n if (fn) {\n fn(err);\n }\n else {\n // Only do this if there is no fn to handle the error\n this.maybeReconnectOnOpen();\n }\n };\n // emit `error`\n const errorSub = on(socket, \"error\", onError);\n if (false !== this._timeout) {\n const timeout = this._timeout;\n // set timer\n const timer = this.setTimeoutFn(() => {\n openSubDestroy();\n onError(new Error(\"timeout\"));\n socket.close();\n }, timeout);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n this.subs.push(openSubDestroy);\n this.subs.push(errorSub);\n return this;\n }\n /**\n * Alias for open()\n *\n * @return self\n * @public\n */\n connect(fn) {\n return this.open(fn);\n }\n /**\n * Called upon transport open.\n *\n * @private\n */\n onopen() {\n // clear old subs\n this.cleanup();\n // mark as open\n this._readyState = \"open\";\n this.emitReserved(\"open\");\n // add new subs\n const socket = this.engine;\n this.subs.push(on(socket, \"ping\", this.onping.bind(this)), on(socket, \"data\", this.ondata.bind(this)), on(socket, \"error\", this.onerror.bind(this)), on(socket, \"close\", this.onclose.bind(this)), on(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n }\n /**\n * Called upon a ping.\n *\n * @private\n */\n onping() {\n this.emitReserved(\"ping\");\n }\n /**\n * Called with data.\n *\n * @private\n */\n ondata(data) {\n try {\n this.decoder.add(data);\n }\n catch (e) {\n this.onclose(\"parse error\", e);\n }\n }\n /**\n * Called when parser fully decodes a packet.\n *\n * @private\n */\n ondecoded(packet) {\n // the nextTick call prevents an exception in a user-provided event listener from triggering a disconnection due to a \"parse error\"\n nextTick(() => {\n this.emitReserved(\"packet\", packet);\n }, this.setTimeoutFn);\n }\n /**\n * Called upon socket error.\n *\n * @private\n */\n onerror(err) {\n this.emitReserved(\"error\", err);\n }\n /**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @public\n */\n socket(nsp, opts) {\n let socket = this.nsps[nsp];\n if (!socket) {\n socket = new Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n }\n else if (this._autoConnect && !socket.active) {\n socket.connect();\n }\n return socket;\n }\n /**\n * Called upon a socket close.\n *\n * @param socket\n * @private\n */\n _destroy(socket) {\n const nsps = Object.keys(this.nsps);\n for (const nsp of nsps) {\n const socket = this.nsps[nsp];\n if (socket.active) {\n return;\n }\n }\n this._close();\n }\n /**\n * Writes a packet.\n *\n * @param packet\n * @private\n */\n _packet(packet) {\n const encodedPackets = this.encoder.encode(packet);\n for (let i = 0; i < encodedPackets.length; i++) {\n this.engine.write(encodedPackets[i], packet.options);\n }\n }\n /**\n * Clean up transport subscriptions and packet buffer.\n *\n * @private\n */\n cleanup() {\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs.length = 0;\n this.decoder.destroy();\n }\n /**\n * Close the current socket.\n *\n * @private\n */\n _close() {\n this.skipReconnect = true;\n this._reconnecting = false;\n this.onclose(\"forced close\");\n if (this.engine)\n this.engine.close();\n }\n /**\n * Alias for close()\n *\n * @private\n */\n disconnect() {\n return this._close();\n }\n /**\n * Called upon engine close.\n *\n * @private\n */\n onclose(reason, description) {\n this.cleanup();\n this.backoff.reset();\n this._readyState = \"closed\";\n this.emitReserved(\"close\", reason, description);\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n }\n /**\n * Attempt a reconnection.\n *\n * @private\n */\n reconnect() {\n if (this._reconnecting || this.skipReconnect)\n return this;\n const self = this;\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n this.backoff.reset();\n this.emitReserved(\"reconnect_failed\");\n this._reconnecting = false;\n }\n else {\n const delay = this.backoff.duration();\n this._reconnecting = true;\n const timer = this.setTimeoutFn(() => {\n if (self.skipReconnect)\n return;\n this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n // check again for the case socket closed in above events\n if (self.skipReconnect)\n return;\n self.open((err) => {\n if (err) {\n self._reconnecting = false;\n self.reconnect();\n this.emitReserved(\"reconnect_error\", err);\n }\n else {\n self.onreconnect();\n }\n });\n }, delay);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n }\n /**\n * Called upon successful reconnect.\n *\n * @private\n */\n onreconnect() {\n const attempt = this.backoff.attempts;\n this._reconnecting = false;\n this.backoff.reset();\n this.emitReserved(\"reconnect\", attempt);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/socket.io-client/build/esm/manager.js","import { url } from \"./url.js\";\nimport { Manager } from \"./manager.js\";\nimport { Socket } from \"./socket.js\";\n/**\n * Managers cache.\n */\nconst cache = {};\nfunction lookup(uri, opts) {\n if (typeof uri === \"object\") {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n const parsed = url(uri, opts.path || \"/socket.io\");\n const source = parsed.source;\n const id = parsed.id;\n const path = parsed.path;\n const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n const newConnection = opts.forceNew ||\n opts[\"force new connection\"] ||\n false === opts.multiplex ||\n sameNamespace;\n let io;\n if (newConnection) {\n io = new Manager(source, opts);\n }\n else {\n if (!cache[id]) {\n cache[id] = new Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.queryKey;\n }\n return io.socket(parsed.path, opts);\n}\n// so that \"lookup\" can be used both as a function (e.g. `io(...)`) and as a\n// namespace (e.g. `io.connect(...)`), for backward compatibility\nObject.assign(lookup, {\n Manager,\n Socket,\n io: lookup,\n connect: lookup,\n});\n/**\n * Protocol version.\n *\n * @public\n */\nexport { protocol } from \"socket.io-parser\";\n/**\n * Expose constructors for standalone build.\n *\n * @public\n */\nexport { Manager, Socket, lookup as io, lookup as connect, lookup as default, };\n\n\n\n// WEBPACK FOOTER //\n// ../../node_modules/socket.io-client/build/esm/index.js","import EventEmitter from 'event-emitter';\n\nconst SIXTY_PER_SEC = 1000 / 60;\nconst LOOP_SLOW_THRESH = 0.3;\nconst LOOP_SLOW_COUNT = 10;\n\n/**\n * Scheduler class\n *\n */\nexport default class Scheduler {\n\n /**\n * schedule a function to be called\n *\n * @param {Object} options the options\n * @param {Function} options.tick the function to be called\n * @param {Number} options.period number of milliseconds between each invocation, not including the function's execution time\n * @param {Number} options.delay number of milliseconds to add when delaying or hurrying the execution\n */\n constructor(options) {\n this.options = Object.assign({\n tick: null,\n period: SIXTY_PER_SEC,\n delay: SIXTY_PER_SEC / 3\n }, options);\n this.nextExecTime = null;\n this.requestedDelay = 0;\n this.delayCounter = 0;\n\n // mixin for EventEmitter\n let eventEmitter = new EventEmitter();\n this.on = eventEmitter.on;\n this.once = eventEmitter.once;\n this.removeListener = eventEmitter.removeListener;\n this.emit = eventEmitter.emit;\n\n }\n\n // in same cases, setTimeout is ignored by the browser,\n // this is known to happen during the first 100ms of a touch event\n // on android chrome. Double-check the game loop using requestAnimationFrame\n nextTickChecker() {\n let currentTime = (new Date()).getTime();\n if (currentTime > this.nextExecTime) {\n this.delayCounter++;\n this.callTick();\n this.nextExecTime = currentTime + this.options.stepPeriod;\n }\n window.requestAnimationFrame(this.nextTickChecker.bind(this));\n }\n\n nextTick() {\n let stepStartTime = (new Date()).getTime();\n if (stepStartTime > this.nextExecTime + this.options.period * LOOP_SLOW_THRESH) {\n this.delayCounter++;\n } else\n this.delayCounter = 0;\n\n this.callTick();\n this.nextExecTime = stepStartTime + this.options.period + this.requestedDelay;\n this.requestedDelay = 0;\n setTimeout(this.nextTick.bind(this), this.nextExecTime - (new Date()).getTime());\n }\n\n callTick() {\n if (this.delayCounter >= LOOP_SLOW_COUNT) {\n this.emit('loopRunningSlow');\n this.delayCounter = 0;\n }\n this.options.tick();\n }\n\n /**\n * start the schedule\n * @return {Scheduler} returns this scheduler instance\n */\n start() {\n setTimeout(this.nextTick.bind(this));\n if (typeof window === 'object' && typeof window.requestAnimationFrame === 'function')\n window.requestAnimationFrame(this.nextTickChecker.bind(this));\n return this;\n }\n\n /**\n * delay next execution\n */\n delayTick() {\n this.requestedDelay += this.options.delay;\n }\n\n /**\n * hurry the next execution\n */\n hurryTick() {\n this.requestedDelay -= this.options.delay;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/lib/Scheduler.js","export default class SyncStrategy {\n\n constructor(clientEngine, inputOptions) {\n this.clientEngine = clientEngine;\n this.gameEngine = clientEngine.gameEngine;\n this.needFirstSync = true;\n this.options = Object.assign({}, inputOptions);\n this.gameEngine.on('client__postStep', this.syncStep.bind(this));\n this.gameEngine.on('client__syncReceived', this.collectSync.bind(this));\n this.requiredSyncs = [];\n this.SYNC_APPLIED = 'SYNC_APPLIED';\n this.STEP_DRIFT_THRESHOLDS = {\n onServerSync: { MAX_LEAD: 1, MAX_LAG: 3 }, // max step lead/lag allowed after every server sync\n onEveryStep: { MAX_LEAD: 7, MAX_LAG: 8 }, // max step lead/lag allowed at every step\n clientReset: 20 // if we are behind this many steps, just reset the step counter\n };\n }\n\n // collect a sync and its events\n // maintain a \"lastSync\" member which describes the last sync we received from\n // the server. the lastSync object contains:\n // - syncObjects: all events in the sync indexed by the id of the object involved\n // - syncSteps: all events in the sync indexed by the step on which they occurred\n // - objCount\n // - eventCount\n // - stepCount\n collectSync(e) {\n\n // on first connect we need to wait for a full world update\n if (this.needFirstSync) {\n if (!e.fullUpdate)\n return;\n } else {\n\n // TODO: there is a problem below in the case where the client is 10 steps behind the server,\n // and the syncs that arrive are always in the future and never get processed. To address this\n // we may need to store more than one sync.\n\n // ignore syncs which are older than the latest\n if (this.lastSync && this.lastSync.stepCount && this.lastSync.stepCount > e.stepCount)\n return;\n }\n\n // before we overwrite the last sync, check if it was a required sync\n // syncs that create or delete objects are saved because they must be applied.\n if (this.lastSync && this.lastSync.required) {\n this.requiredSyncs.push(this.lastSync);\n }\n\n // build new sync object\n let lastSync = this.lastSync = {\n stepCount: e.stepCount,\n fullUpdate: e.fullUpdate,\n syncObjects: {},\n syncSteps: {}\n };\n\n e.syncEvents.forEach(sEvent => {\n\n // keep a reference of events by object id\n if (sEvent.objectInstance) {\n let objectId = sEvent.objectInstance.id;\n if (!lastSync.syncObjects[objectId]) lastSync.syncObjects[objectId] = [];\n lastSync.syncObjects[objectId].push(sEvent);\n }\n\n // keep a reference of events by step\n let stepCount = sEvent.stepCount;\n let eventName = sEvent.eventName;\n if (eventName === 'objectDestroy' || eventName === 'objectCreate')\n lastSync.required = true;\n\n if (!lastSync.syncSteps[stepCount]) lastSync.syncSteps[stepCount] = {};\n if (!lastSync.syncSteps[stepCount][eventName]) lastSync.syncSteps[stepCount][eventName] = [];\n lastSync.syncSteps[stepCount][eventName].push(sEvent);\n });\n\n let eventCount = e.syncEvents.length;\n let objCount = (Object.keys(lastSync.syncObjects)).length;\n let stepCount = (Object.keys(lastSync.syncSteps)).length;\n this.gameEngine.trace.debug(() => `sync contains ${objCount} objects ${eventCount} events ${stepCount} steps`);\n }\n\n // add an object to our world\n addNewObject(objId, newObj, options) {\n\n let curObj = new newObj.constructor(this.gameEngine, {\n id: objId\n });\n\n // enforce object implementations of syncTo\n if (!curObj.__proto__.hasOwnProperty('syncTo')) {\n throw `GameObject of type ${curObj.class} does not implement the syncTo() method, which must copy the netscheme`;\n }\n\n curObj.syncTo(newObj);\n this.gameEngine.addObjectToWorld(curObj);\n if (this.clientEngine.options.verbose)\n console.log(`adding new object ${curObj}`);\n\n return curObj;\n }\n\n // sync to step, by applying bending, and applying the latest sync\n syncStep(stepDesc) {\n\n // apply incremental bending\n this.gameEngine.world.forEachObject((id, o) => {\n if (typeof o.applyIncrementalBending === 'function') {\n o.applyIncrementalBending(stepDesc);\n o.refreshToPhysics();\n }\n });\n\n // apply all pending required syncs\n while (this.requiredSyncs.length) {\n\n let requiredStep = this.requiredSyncs[0].stepCount;\n\n // if we haven't reached the corresponding step, it's too soon to apply syncs\n if (requiredStep > this.gameEngine.world.stepCount)\n return;\n\n this.gameEngine.trace.trace(() => `applying a required sync ${requiredStep}`);\n this.applySync(this.requiredSyncs.shift(), true);\n }\n\n // apply the sync and delete it on success\n if (this.lastSync) {\n let rc = this.applySync(this.lastSync, false);\n if (rc === this.SYNC_APPLIED)\n this.lastSync = null;\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/syncStrategies/SyncStrategy.js","import SyncStrategy from './SyncStrategy';\n\nconst defaults = {\n clientStepHold: 6,\n localObjBending: 1.0, // amount of bending towards position of sync object\n remoteObjBending: 1.0, // amount of bending towards position of sync object\n bendingIncrements: 6, // the bending should be applied increments (how many steps for entire bend)\n reflect: false\n};\n\nexport default class InterpolateStrategy extends SyncStrategy {\n\n constructor(clientEngine, inputOptions) {\n\n const options = Object.assign({}, defaults, inputOptions);\n super(clientEngine, options);\n\n this.gameEngine.ignoreInputs = true; // client side engine ignores inputs\n this.gameEngine.ignorePhysics = true; // client side engine ignores physics\n this.STEP_DRIFT_THRESHOLDS = {\n onServerSync: { MAX_LEAD: -8, MAX_LAG: 16 }, // max step lead/lag allowed after every server sync\n onEveryStep: { MAX_LEAD: -4, MAX_LAG: 24 }, // max step lead/lag allowed at every step\n clientReset: 40 // if we are behind this many steps, just reset the step counter\n };\n }\n\n // apply a new sync\n applySync(sync, required) {\n\n // if sync is in the past we cannot interpolate to it\n if (!required && sync.stepCount <= this.gameEngine.world.stepCount) {\n return this.SYNC_APPLIED;\n }\n\n this.gameEngine.trace.debug(() => 'interpolate applying sync');\n //\n // scan all the objects in the sync\n //\n // 1. if the object exists locally, sync to the server object\n // 2. if the object is new, just create it\n //\n this.needFirstSync = false;\n let world = this.gameEngine.world;\n for (let ids of Object.keys(sync.syncObjects)) {\n\n // TODO: we are currently taking only the first event out of\n // the events that may have arrived for this object\n let ev = sync.syncObjects[ids][0];\n let curObj = world.objects[ev.objectInstance.id];\n\n if (curObj) {\n\n // case 1: this object already exists locally\n this.gameEngine.trace.trace(() => `object before syncTo: ${curObj.toString()}`);\n curObj.saveState();\n curObj.syncTo(ev.objectInstance);\n this.gameEngine.trace.trace(() => `object after syncTo: ${curObj.toString()} synced to step[${ev.stepCount}]`);\n\n } else {\n\n // case 2: object does not exist. create it now\n this.addNewObject(ev.objectInstance.id, ev.objectInstance);\n }\n }\n\n //\n // bend back to original state\n //\n for (let objId of Object.keys(world.objects)) {\n\n let obj = world.objects[objId];\n let isLocal = (obj.playerId == this.gameEngine.playerId); // eslint-disable-line eqeqeq\n let bending = isLocal ? this.options.localObjBending : this.options.remoteObjBending;\n obj.bendToCurrentState(bending, this.gameEngine.worldSettings, isLocal, this.options.bendingIncrements);\n if (typeof obj.refreshRenderObject === 'function')\n obj.refreshRenderObject();\n this.gameEngine.trace.trace(() => `object[${objId}] ${obj.bendingToString()}`);\n }\n\n // destroy objects\n // TODO: use world.forEachObject((id, ob) => {});\n // TODO: identical code is in InterpolateStrategy\n for (let objId of Object.keys(world.objects)) {\n\n let objEvents = sync.syncObjects[objId];\n\n // if this was a full sync, and we did not get a corresponding object,\n // remove the local object\n if (sync.fullUpdate && !objEvents && objId < this.gameEngine.options.clientIDSpace) {\n this.gameEngine.removeObjectFromWorld(objId);\n continue;\n }\n\n if (!objEvents || objId >= this.gameEngine.options.clientIDSpace)\n continue;\n\n // if we got an objectDestroy event, destroy the object\n objEvents.forEach((e) => {\n if (e.eventName === 'objectDestroy') this.gameEngine.removeObjectFromWorld(objId);\n });\n }\n\n return this.SYNC_APPLIED;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/syncStrategies/InterpolateStrategy.js","import SyncStrategy from './SyncStrategy';\n\nconst defaults = {\n syncsBufferLength: 5,\n maxReEnactSteps: 60, // maximum number of steps to re-enact\n RTTEstimate: 2, // estimate the RTT as two steps (for updateRate=6, that's 200ms)\n extrapolate: 2, // player performs method \"X\" which means extrapolate to match server time. that 100 + (0..100)\n localObjBending: 0.1, // amount of bending towards position of sync object\n remoteObjBending: 0.6, // amount of bending towards position of sync object\n bendingIncrements: 10 // the bending should be applied increments (how many steps for entire bend)\n};\n\nexport default class ExtrapolateStrategy extends SyncStrategy {\n\n constructor(clientEngine, inputOptions) {\n\n const options = Object.assign({}, defaults, inputOptions);\n super(clientEngine, options);\n\n this.lastSync = null;\n this.recentInputs = {};\n this.gameEngine.on('client__processInput', this.clientInputSave.bind(this));\n this.STEP_DRIFT_THRESHOLDS = {\n onServerSync: { MAX_LEAD: 2, MAX_LAG: 3 }, // max step lead/lag allowed after every server sync\n onEveryStep: { MAX_LEAD: 7, MAX_LAG: 4 }, // max step lead/lag allowed at every step\n clientReset: 40 // if we are behind this many steps, just reset the step counter\n };\n }\n\n // keep a buffer of inputs so that we can replay them on extrapolation\n clientInputSave(inputEvent) {\n\n // if no inputs have been stored for this step, create an array\n if (!this.recentInputs[inputEvent.input.step]) {\n this.recentInputs[inputEvent.input.step] = [];\n }\n this.recentInputs[inputEvent.input.step].push(inputEvent.input);\n }\n\n // clean up the input buffer\n cleanRecentInputs(lastServerStep) {\n for (let input of Object.keys(this.recentInputs)) {\n if (this.recentInputs[input][0].step <= lastServerStep) {\n delete this.recentInputs[input];\n }\n }\n }\n\n // apply a new sync\n applySync(sync, required) {\n\n // if sync is in the future, we are not ready to apply yet.\n if (!required && sync.stepCount > this.gameEngine.world.stepCount) {\n return null;\n }\n\n this.gameEngine.trace.debug(() => 'extrapolate applying sync');\n\n //\n // scan all the objects in the sync\n //\n // 1. if the object has a local shadow, adopt the server object,\n // and destroy the shadow\n //\n // 2. if the object exists locally, sync to the server object,\n // later we will re-enact the missing steps and then bend to\n // the current position\n //\n // 3. if the object is new, just create it\n //\n this.needFirstSync = false;\n let world = this.gameEngine.world;\n let serverStep = sync.stepCount;\n for (let ids of Object.keys(sync.syncObjects)) {\n\n // TODO: we are currently taking only the first event out of\n // the events that may have arrived for this object\n let ev = sync.syncObjects[ids][0];\n let curObj = world.objects[ev.objectInstance.id];\n\n let localShadowObj = this.gameEngine.findLocalShadow(ev.objectInstance);\n if (localShadowObj) {\n // case 1: this object has a local shadow object on the client\n this.gameEngine.trace.debug(() => `object ${ev.objectInstance.id} replacing local shadow ${localShadowObj.id}`);\n\n if (!world.objects.hasOwnProperty(ev.objectInstance.id)) {\n let newObj = this.addNewObject(ev.objectInstance.id, ev.objectInstance, { visible: false });\n newObj.saveState(localShadowObj);\n }\n this.gameEngine.removeObjectFromWorld(localShadowObj.id);\n\n } else if (curObj) {\n\n // case 2: this object already exists locally\n this.gameEngine.trace.trace(() => `object before syncTo: ${curObj.toString()}`);\n curObj.saveState();\n curObj.syncTo(ev.objectInstance);\n this.gameEngine.trace.trace(() => `object after syncTo: ${curObj.toString()} synced to step[${ev.stepCount}]`);\n\n } else {\n\n // case 3: object does not exist. create it now\n this.addNewObject(ev.objectInstance.id, ev.objectInstance);\n }\n }\n\n //\n // reenact the steps that we want to extrapolate forwards\n //\n this.gameEngine.trace.debug(() => `extrapolate re-enacting steps from [${serverStep}] to [${world.stepCount}]`);\n if (serverStep < world.stepCount - this.options.maxReEnactSteps) {\n serverStep = world.stepCount - this.options.maxReEnactSteps;\n this.gameEngine.trace.info(() => `too many steps to re-enact. Starting from [${serverStep}] to [${world.stepCount}]`);\n }\n\n let clientStep = world.stepCount;\n for (world.stepCount = serverStep; world.stepCount < clientStep;) {\n\n if (this.recentInputs[world.stepCount]) {\n this.recentInputs[world.stepCount].forEach(inputDesc => {\n\n // only movement inputs are re-enacted\n if (!inputDesc.options || !inputDesc.options.movement) return;\n\n this.gameEngine.trace.trace(() => `extrapolate re-enacting movement input[${inputDesc.messageIndex}]: ${inputDesc.input}`);\n this.gameEngine.processInput(inputDesc, this.gameEngine.playerId);\n });\n }\n\n // run the game engine step in \"reenact\" mode\n this.gameEngine.step(true);\n }\n this.cleanRecentInputs(serverStep);\n\n //\n // bend back to original state\n //\n for (let objId of Object.keys(world.objects)) {\n\n // shadow objects are not bent\n if (objId >= this.gameEngine.options.clientIDSpace)\n continue;\n\n // TODO: using == instead of === because of string/number mismatch\n // These values should always be strings (which contain a number)\n // Reminder: the reason we use a string is that these\n // values are sometimes used as object keys\n let obj = world.objects[objId];\n let isLocal = (obj.playerId == this.gameEngine.playerId); // eslint-disable-line eqeqeq\n let bending = isLocal ? this.options.localObjBending : this.options.remoteObjBending;\n obj.bendToCurrentState(bending, this.gameEngine.worldSettings, isLocal, this.options.bendingIncrements);\n if (typeof obj.refreshRenderObject === 'function')\n obj.refreshRenderObject();\n this.gameEngine.trace.trace(() => `object[${objId}] ${obj.bendingToString()}`);\n }\n\n // trace object state after sync\n for (let objId of Object.keys(world.objects)) {\n this.gameEngine.trace.trace(() => `object after extrapolate replay: ${world.objects[objId].toString()}`);\n }\n\n // destroy objects\n // TODO: use world.forEachObject((id, ob) => {});\n // TODO: identical code is in InterpolateStrategy\n for (let objId of Object.keys(world.objects)) {\n\n let objEvents = sync.syncObjects[objId];\n\n // if this was a full sync, and we did not get a corresponding object,\n // remove the local object\n if (sync.fullUpdate && !objEvents && objId < this.gameEngine.options.clientIDSpace) {\n this.gameEngine.removeObjectFromWorld(objId);\n continue;\n }\n\n if (!objEvents || objId >= this.gameEngine.options.clientIDSpace)\n continue;\n\n // if we got an objectDestroy event, destroy the object\n objEvents.forEach((e) => {\n if (e.eventName === 'objectDestroy') this.gameEngine.removeObjectFromWorld(objId);\n });\n }\n\n return this.SYNC_APPLIED;\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/syncStrategies/ExtrapolateStrategy.js","import SyncStrategy from './SyncStrategy'\n\nconst defaults = {\n worldBufferLength: 60,\n clientStepLag: 0\n};\n\nexport default class FrameSyncStrategy extends SyncStrategy {\n\n constructor(clientEngine, inputOptions) {\n\n const options = Object.assign({}, defaults, inputOptions);\n super(clientEngine, options);\n\n this.gameEngine = this.clientEngine.gameEngine;\n }\n\n // apply a new sync\n applySync(sync, required) {\n\n this.needFirstSync = false;\n this.gameEngine.trace.debug(() => 'framySync applying sync');\n let world = this.gameEngine.world;\n\n for (let ids of Object.keys(sync.syncObjects)) {\n let ev = sync.syncObjects[ids][0];\n let curObj = world.objects[ev.objectInstance.id];\n if (curObj) {\n curObj.syncTo(ev.objectInstance);\n } else {\n this.addNewObject(ev.objectInstance.id, ev.objectInstance);\n }\n }\n\n // destroy objects\n for (let objId of Object.keys(world.objects)) {\n\n let objEvents = sync.syncObjects[objId];\n\n // if this was a full sync, and we did not get a corresponding object,\n // remove the local object\n if (sync.fullUpdate && !objEvents && objId < this.gameEngine.options.clientIDSpace) {\n this.gameEngine.removeObjectFromWorld(objId);\n continue;\n }\n\n if (!objEvents || objId >= this.gameEngine.options.clientIDSpace)\n continue;\n\n // if we got an objectDestroy event, destroy the object\n objEvents.forEach((e) => {\n if (e.eventName === 'objectDestroy') this.gameEngine.removeObjectFromWorld(objId);\n });\n }\n\n return this.SYNC_APPLIED;\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/syncStrategies/FrameSyncStrategy.js","import InterpolateStrategy from './syncStrategies/InterpolateStrategy';\nimport ExtrapolateStrategy from './syncStrategies/ExtrapolateStrategy';\nimport FrameSyncStrategy from './syncStrategies/FrameSyncStrategy';\n\nconst strategies = {\n extrapolate: ExtrapolateStrategy,\n interpolate: InterpolateStrategy,\n frameSync: FrameSyncStrategy\n};\n\nexport default class Synchronizer {\n // create a synchronizer instance\n constructor(clientEngine, options) {\n this.clientEngine = clientEngine;\n this.options = options || {};\n if (!strategies.hasOwnProperty(this.options.sync)) {\n throw new Error(`ERROR: unknown synchronzation strategy ${this.options.sync}`);\n }\n this.syncStrategy = new strategies[this.options.sync](this.clientEngine, this.options);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/Synchronizer.js","import Utils from './../lib/Utils';\nimport TwoVector from './TwoVector';\nimport ThreeVector from './ThreeVector';\nimport Quaternion from './Quaternion';\nimport BaseTypes from './BaseTypes';\n\nconst MAX_UINT_16 = 0xFFFF;\n\n/**\n * The Serializer is responsible for serializing the game world and its\n * objects on the server, before they are sent to each client. On the client side the\n * Serializer deserializes these objects.\n *\n */\nclass Serializer {\n\n constructor() {\n this.registeredClasses = {};\n this.customTypes = {};\n this.registerClass(TwoVector);\n this.registerClass(ThreeVector);\n this.registerClass(Quaternion);\n }\n\n /**\n * Adds a custom primitive to the serializer instance.\n * This will enable you to use it in an object's netScheme\n * @param customType\n */\n // TODO: the function below is not used, and it is not clear what that\n // first argument is supposed to be\n addCustomType(customType) {\n this.customTypes[customType.type] = customType;\n }\n\n /**\n * Checks if type can be assigned by value.\n * @param {String} type Type to Checks\n * @return {Boolean} True if type can be assigned\n */\n static typeCanAssign(type) {\n return type !== BaseTypes.TYPES.CLASSINSTANCE && type !== BaseTypes.TYPES.LIST;\n }\n\n /**\n * Registers a new class with the serializer, so it may be deserialized later\n * @param {Function} classObj reference to the class (not an instance!)\n * @param {String} classId Unit specifying a class ID\n */\n registerClass(classObj, classId) {\n // if no classId is specified, hash one from the class name\n classId = classId ? classId : Utils.hashStr(classObj.name);\n if (this.registeredClasses[classId]) {\n console.error(`Serializer: accidental override of classId ${classId} when registering class`, classObj);\n }\n\n this.registeredClasses[classId] = classObj;\n }\n\n deserialize(dataBuffer, byteOffset) {\n byteOffset = byteOffset ? byteOffset : 0;\n let localByteOffset = 0;\n\n let dataView = new DataView(dataBuffer);\n\n let objectClassId = dataView.getUint8(byteOffset + localByteOffset);\n\n // todo if classId is 0 - take care of dynamic serialization.\n let objectClass = this.registeredClasses[objectClassId];\n if (objectClass == null) {\n console.error('Serializer: Found a class which was not registered. Please use serializer.registerClass() to register all serialized classes.');\n }\n\n localByteOffset += Uint8Array.BYTES_PER_ELEMENT; // advance the byteOffset after the classId\n\n // create de-referenced instance of the class. gameEngine and id will be 'tacked on' later at the sync strategies\n let obj = new objectClass(null, { id: null });\n for (let property of Object.keys(objectClass.netScheme).sort()) {\n let read = this.readDataView(dataView, byteOffset + localByteOffset, objectClass.netScheme[property]);\n obj[property] = read.data;\n localByteOffset += read.bufferSize;\n }\n\n return { obj, byteOffset: localByteOffset };\n }\n\n writeDataView(dataView, value, bufferOffset, netSchemProp) {\n if (netSchemProp.type === BaseTypes.TYPES.FLOAT32) {\n dataView.setFloat32(bufferOffset, value);\n } else if (netSchemProp.type === BaseTypes.TYPES.INT32) {\n dataView.setInt32(bufferOffset, value);\n } else if (netSchemProp.type === BaseTypes.TYPES.INT16) {\n dataView.setInt16(bufferOffset, value);\n } else if (netSchemProp.type === BaseTypes.TYPES.INT8) {\n dataView.setInt8(bufferOffset, value);\n } else if (netSchemProp.type === BaseTypes.TYPES.UINT8) {\n dataView.setUint8(bufferOffset, value);\n } else if (netSchemProp.type === BaseTypes.TYPES.STRING) {\n\n // MAX_UINT_16 is a reserved (length) value which indicates string hasn't changed\n if (value === null) {\n dataView.setUint16(bufferOffset, MAX_UINT_16);\n } else {\n let strLen = value.length;\n dataView.setUint16(bufferOffset, strLen);\n let localBufferOffset = 2;\n for (let i = 0; i < strLen; i++)\n dataView.setUint16(bufferOffset + localBufferOffset + i * 2, value.charCodeAt(i));\n }\n } else if (netSchemProp.type === BaseTypes.TYPES.CLASSINSTANCE) {\n value.serialize(this, {\n dataBuffer: dataView.buffer,\n bufferOffset: bufferOffset\n });\n } else if (netSchemProp.type === BaseTypes.TYPES.LIST) {\n let localBufferOffset = 0;\n\n // a list is comprised of the number of items followed by the items\n dataView.setUint16(bufferOffset + localBufferOffset, value.length);\n localBufferOffset += Uint16Array.BYTES_PER_ELEMENT;\n\n for (let item of value) {\n // TODO: inelegant, currently doesn't support list of lists\n if (netSchemProp.itemType === BaseTypes.TYPES.CLASSINSTANCE) {\n let serializedObj = item.serialize(this, {\n dataBuffer: dataView.buffer,\n bufferOffset: bufferOffset + localBufferOffset\n });\n localBufferOffset += serializedObj.bufferOffset;\n } else if (netSchemProp.itemType === BaseTypes.TYPES.STRING) {\n // MAX_UINT_16 is a reserved (length) value which indicates string hasn't changed\n if (item === null) {\n dataView.setUint16(bufferOffset + localBufferOffset, MAX_UINT_16);\n localBufferOffset += Uint16Array.BYTES_PER_ELEMENT;\n } else {\n let strLen = item.length;\n dataView.setUint16(bufferOffset + localBufferOffset, strLen);\n localBufferOffset += Uint16Array.BYTES_PER_ELEMENT;\n for (let i = 0; i < strLen; i++)\n dataView.setUint16(bufferOffset + localBufferOffset + i * 2, item.charCodeAt(i));\n localBufferOffset += Uint16Array.BYTES_PER_ELEMENT * strLen;\n }\n } else {\n this.writeDataView(dataView, item, bufferOffset + localBufferOffset, { type: netSchemProp.itemType });\n localBufferOffset += this.getTypeByteSize(netSchemProp.itemType);\n }\n }\n } else if (this.customTypes[netSchemProp.type]) {\n // this is a custom data property which needs to define its own write method\n this.customTypes[netSchemProp.type].writeDataView(dataView, value, bufferOffset);\n } else {\n console.error(`No custom property ${netSchemProp.type} found!`);\n }\n\n }\n\n readDataView(dataView, bufferOffset, netSchemProp) {\n let data, bufferSize;\n\n if (netSchemProp.type === BaseTypes.TYPES.FLOAT32) {\n data = dataView.getFloat32(bufferOffset);\n bufferSize = this.getTypeByteSize(netSchemProp.type);\n } else if (netSchemProp.type === BaseTypes.TYPES.INT32) {\n data = dataView.getInt32(bufferOffset);\n bufferSize = this.getTypeByteSize(netSchemProp.type);\n } else if (netSchemProp.type === BaseTypes.TYPES.INT16) {\n data = dataView.getInt16(bufferOffset);\n bufferSize = this.getTypeByteSize(netSchemProp.type);\n } else if (netSchemProp.type === BaseTypes.TYPES.INT8) {\n data = dataView.getInt8(bufferOffset);\n bufferSize = this.getTypeByteSize(netSchemProp.type);\n } else if (netSchemProp.type === BaseTypes.TYPES.UINT8) {\n data = dataView.getUint8(bufferOffset);\n bufferSize = this.getTypeByteSize(netSchemProp.type);\n } else if (netSchemProp.type === BaseTypes.TYPES.STRING) {\n let length = dataView.getUint16(bufferOffset);\n let localBufferOffset = Uint16Array.BYTES_PER_ELEMENT;\n bufferSize = localBufferOffset;\n if (length === MAX_UINT_16) {\n data = null;\n } else {\n let a = [];\n for (let i = 0; i < length; i++)\n a[i] = dataView.getUint16(bufferOffset + localBufferOffset + i * 2);\n data = String.fromCharCode.apply(null, a);\n bufferSize += length * Uint16Array.BYTES_PER_ELEMENT;\n }\n } else if (netSchemProp.type === BaseTypes.TYPES.CLASSINSTANCE) {\n var deserializeData = this.deserialize(dataView.buffer, bufferOffset);\n data = deserializeData.obj;\n bufferSize = deserializeData.byteOffset;\n } else if (netSchemProp.type === BaseTypes.TYPES.LIST) {\n let localBufferOffset = 0;\n\n let items = [];\n let itemCount = dataView.getUint16(bufferOffset + localBufferOffset);\n localBufferOffset += Uint16Array.BYTES_PER_ELEMENT;\n\n for (let x = 0; x < itemCount; x++) {\n let read = this.readDataView(dataView, bufferOffset + localBufferOffset, { type: netSchemProp.itemType });\n items.push(read.data);\n localBufferOffset += read.bufferSize;\n }\n\n data = items;\n bufferSize = localBufferOffset;\n } else if (this.customTypes[netSchemProp.type] != null) {\n // this is a custom data property which needs to define its own read method\n data = this.customTypes[netSchemProp.type].readDataView(dataView, bufferOffset);\n } else {\n console.error(`No custom property ${netSchemProp.type} found!`);\n }\n\n return { data: data, bufferSize: bufferSize };\n }\n\n getTypeByteSize(type) {\n\n switch (type) {\n case BaseTypes.TYPES.FLOAT32: {\n return Float32Array.BYTES_PER_ELEMENT;\n }\n case BaseTypes.TYPES.INT32: {\n return Int32Array.BYTES_PER_ELEMENT;\n }\n case BaseTypes.TYPES.INT16: {\n return Int16Array.BYTES_PER_ELEMENT;\n }\n case BaseTypes.TYPES.INT8: {\n return Int8Array.BYTES_PER_ELEMENT;\n }\n case BaseTypes.TYPES.UINT8: {\n return Uint8Array.BYTES_PER_ELEMENT;\n }\n\n // not one of the basic properties\n default: {\n if (type === undefined) {\n throw 'netScheme property declared without type attribute!';\n } else if (this.customTypes[type] === null) {\n throw `netScheme property ${type} undefined! Did you forget to add it to the serializer?`;\n } else {\n return this.customTypes[type].BYTES_PER_ELEMENT;\n }\n }\n\n }\n\n }\n}\n\nexport default Serializer;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/serialize/Serializer.js","import EventEmitter from \"event-emitter\";\n// import http from 'http';\n\n/**\n * Measures network performance between the client and the server\n * Represents both the client and server portions of NetworkMonitor\n */\nexport default class NetworkMonitor {\n constructor(server) {\n // server-side keep game name\n if (server) {\n this.server = server;\n this.gameName = Object.getPrototypeOf(server.gameEngine).constructor.name;\n }\n\n // mixin for EventEmitter\n let eventEmitter = new EventEmitter();\n this.on = eventEmitter.on;\n this.once = eventEmitter.once;\n this.removeListener = eventEmitter.removeListener;\n this.emit = eventEmitter.emit;\n }\n\n // client\n registerClient(clientEngine) {\n this.queryIdCounter = 0;\n this.RTTQueries = {};\n\n this.movingRTTAverage = 0;\n this.movingRTTAverageFrame = [];\n this.movingFPSAverageSize = clientEngine.options.healthCheckRTTSample;\n this.clientEngine = clientEngine;\n clientEngine.socket.on(\"RTTResponse\", this.onReceivedRTTQuery.bind(this));\n setInterval(this.sendRTTQuery.bind(this), clientEngine.options.healthCheckInterval);\n }\n\n sendRTTQuery() {\n // todo implement cleanup of older timestamp\n this.RTTQueries[this.queryIdCounter] = new Date().getTime();\n this.clientEngine.socket.emit(\"RTTQuery\", this.queryIdCounter);\n this.queryIdCounter++;\n }\n\n onReceivedRTTQuery(queryId) {\n let RTT = new Date().getTime() - this.RTTQueries[queryId];\n\n this.movingRTTAverageFrame.push(RTT);\n if (this.movingRTTAverageFrame.length > this.movingFPSAverageSize) {\n this.movingRTTAverageFrame.shift();\n }\n this.movingRTTAverage = this.movingRTTAverageFrame.reduce((a, b) => a + b) / this.movingRTTAverageFrame.length;\n this.emit(\"RTTUpdate\", {\n RTT: RTT,\n RTTAverage: this.movingRTTAverage,\n });\n }\n\n // server\n registerPlayerOnServer(socket) {\n socket.on(\"RTTQuery\", this.respondToRTTQuery.bind(this, socket));\n // if (this.server && this.server.options.countConnections) {\n // http.get(`http://ping.games-eu.lance.gg:2000/${this.gameName}`).on('error', () => {});\n // }\n }\n\n respondToRTTQuery(socket, queryId) {\n socket.emit(\"RTTResponse\", queryId);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/network/NetworkMonitor.js","import Serializable from './../serialize/Serializable';\nimport Utils from './../lib/Utils';\n\nexport default class NetworkedEventFactory {\n\n constructor(serializer, eventName, options) {\n options = Object.assign({}, options);\n\n this.seriazlier = serializer;\n this.options = options;\n\n this.eventName = eventName;\n this.netScheme = options.netScheme;\n\n }\n\n /**\n * Creates a new networkedEvent\n * @param {Object} payload an object representing the payload to be transferred over the wire\n * @return {Serializable} the new networkedEvent object\n */\n create(payload) {\n let networkedEvent = new Serializable();\n networkedEvent.classId = Utils.hashStr(this.eventName);\n\n if (this.netScheme) {\n networkedEvent.netScheme = Object.assign({}, this.netScheme);\n\n // copy properties from the networkedEvent instance to its ad-hoc netsScheme\n for (let property of Object.keys(this.netScheme)) {\n networkedEvent[property] = payload[property];\n }\n\n } else {\n // todo take care of the event where no netScheme is defined\n }\n\n return networkedEvent;\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/network/NetworkedEventFactory.js","import BaseTypes from '../serialize/BaseTypes';\nimport Serializable from '../serialize/Serializable';\n\n/**\n * Defines a collection of NetworkEvents to be transmitted over the wire\n */\nexport default class NetworkedEventCollection extends Serializable {\n\n static get netScheme() {\n return {\n events: {\n type: BaseTypes.TYPES.LIST,\n itemType: BaseTypes.TYPES.CLASSINSTANCE\n },\n };\n }\n\n constructor(events) {\n super();\n this.events = events || [];\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/network/NetworkedEventCollection.js","import BaseTypes from '../serialize/BaseTypes';\n\nimport NetworkedEventFactory from './NetworkedEventFactory';\nimport NetworkedEventCollection from './NetworkedEventCollection';\nimport Utils from './../lib/Utils';\n\nexport default class NetworkTransmitter {\n\n constructor(serializer) {\n this.serializer = serializer;\n\n this.registeredEvents = [];\n\n this.serializer.registerClass(NetworkedEventCollection);\n\n this.registerNetworkedEventFactory('objectUpdate', {\n netScheme: {\n stepCount: { type: BaseTypes.TYPES.INT32 },\n objectInstance: { type: BaseTypes.TYPES.CLASSINSTANCE }\n }\n });\n\n this.registerNetworkedEventFactory('objectCreate', {\n netScheme: {\n stepCount: { type: BaseTypes.TYPES.INT32 },\n objectInstance: { type: BaseTypes.TYPES.CLASSINSTANCE }\n }\n });\n\n this.registerNetworkedEventFactory('objectDestroy', {\n netScheme: {\n stepCount: { type: BaseTypes.TYPES.INT32 },\n objectInstance: { type: BaseTypes.TYPES.CLASSINSTANCE }\n }\n });\n\n this.registerNetworkedEventFactory('syncHeader', {\n netScheme: {\n stepCount: { type: BaseTypes.TYPES.INT32 },\n fullUpdate: { type: BaseTypes.TYPES.UINT8 }\n }\n });\n\n this.networkedEventCollection = new NetworkedEventCollection();\n }\n\n registerNetworkedEventFactory(eventName, options) {\n options = Object.assign({}, options);\n\n let classHash = Utils.hashStr(eventName);\n\n let networkedEventPrototype = function() {};\n networkedEventPrototype.prototype.classId = classHash;\n networkedEventPrototype.prototype.eventName = eventName;\n networkedEventPrototype.netScheme = options.netScheme;\n\n this.serializer.registerClass(networkedEventPrototype, classHash);\n\n this.registeredEvents[eventName] = new NetworkedEventFactory(this.serializer, eventName, options);\n }\n\n addNetworkedEvent(eventName, payload) {\n if (!this.registeredEvents[eventName]) {\n console.error(`NetworkTransmitter: no such event ${eventName}`);\n return null;\n }\n\n let stagedNetworkedEvent = this.registeredEvents[eventName].create(payload);\n this.networkedEventCollection.events.push(stagedNetworkedEvent);\n\n return stagedNetworkedEvent;\n }\n\n serializePayload() {\n if (this.networkedEventCollection.events.length === 0)\n return null;\n\n let dataBuffer = this.networkedEventCollection.serialize(this.serializer);\n\n return dataBuffer;\n }\n\n deserializePayload(payload) {\n return this.serializer.deserialize(payload.dataBuffer).obj;\n }\n\n clearPayload() {\n this.networkedEventCollection.events = [];\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ../../src/network/NetworkTransmitter.js","import io from 'socket.io-client';\nimport Utils from './lib/Utils';\nimport Scheduler from './lib/Scheduler';\nimport Synchronizer from './Synchronizer';\nimport Serializer from './serialize/Serializer';\nimport NetworkMonitor from './network/NetworkMonitor';\nimport NetworkTransmitter from './network/NetworkTransmitter';\n\n// TODO: the GAME_UPS below should be common to the value implemented in the server engine,\n// or better yet, it should be configurable in the GameEngine instead of ServerEngine+ClientEngine\nconst GAME_UPS = 60; // default number of game steps per second\nconst STEP_DELAY_MSEC = 12; // if forward drift detected, delay next execution by this amount\nconst STEP_HURRY_MSEC = 8; // if backward drift detected, hurry next execution by this amount\n\n/**\n * The client engine is the singleton which manages the client-side\n * process, starting the game engine, listening to network messages,\n * starting client steps, and handling world updates which arrive from\n * the server.\n * Normally, a game will implement its own sub-class of ClientEngine, and may\n * override the constructor {@link ClientEngine#constructor} and the methods\n * {@link ClientEngine#start} and {@link ClientEngine#connect}\n */\nclass ClientEngine {\n\n /**\n * Create a client engine instance.\n *\n * @param {GameEngine} gameEngine - a game engine\n * @param {Object} inputOptions - options object\n * @param {Boolean} inputOptions.verbose - print logs to console\n * @param {Boolean} inputOptions.autoConnect - if true, the client will automatically attempt connect to server.\n * @param {Boolean} inputOptions.standaloneMode - if true, the client will never try to connect to a server\n * @param {Number} inputOptions.delayInputCount - if set, inputs will be delayed by this many steps before they are actually applied on the client.\n * @param {Number} inputOptions.healthCheckInterval - health check message interval (millisec). Default is 1000.\n * @param {Number} inputOptions.healthCheckRTTSample - health check RTT calculation sample size. Default is 10.\n * @param {String} inputOptions.scheduler - When set to \"render-schedule\" the game step scheduling is controlled by the renderer and step time is variable. When set to \"fixed\" the game step is run independently with a fixed step time. Default is \"render-schedule\".\n * @param {Object} inputOptions.syncOptions - an object describing the synchronization method. If not set, will be set to extrapolate, with local object bending set to 0.0 and remote object bending set to 0.6. If the query-string parameter \"sync\" is defined, then that value is passed to this object's sync attribute.\n * @param {String} inputOptions.syncOptions.sync - chosen sync option, can be \"interpolate\", \"extrapolate\", or \"frameSync\"\n * @param {Number} inputOptions.syncOptions.localObjBending - amount (0 to 1.0) of bending towards original client position, after each sync, for local objects\n * @param {Number} inputOptions.syncOptions.remoteObjBending - amount (0 to 1.0) of bending towards original client position, after each sync, for remote objects\n * @param {String} inputOptions.serverURL - Socket server url\n * @param {Renderer} Renderer - the Renderer class constructor\n */\n constructor(gameEngine, inputOptions, Renderer) {\n\n this.options = Object.assign({\n autoConnect: true,\n healthCheckInterval: 1000,\n healthCheckRTTSample: 10,\n stepPeriod: 1000 / GAME_UPS,\n scheduler: 'render-schedule',\n serverURL: null,\n }, inputOptions);\n\n /**\n * reference to serializer\n * @member {Serializer}\n */\n this.serializer = new Serializer();\n\n /**\n * reference to game engine\n * @member {GameEngine}\n */\n this.gameEngine = gameEngine;\n this.gameEngine.registerClasses(this.serializer);\n this.networkTransmitter = new NetworkTransmitter(this.serializer);\n this.networkMonitor = new NetworkMonitor();\n\n this.inboundMessages = [];\n this.outboundMessages = [];\n\n // create the renderer\n this.renderer = this.gameEngine.renderer = new Renderer(gameEngine, this);\n\n // step scheduler\n this.scheduler = null;\n this.lastStepTime = 0;\n this.correction = 0;\n\n if (this.options.standaloneMode !== true) {\n this.configureSynchronization();\n }\n\n // create a buffer of delayed inputs (fifo)\n if (inputOptions && inputOptions.delayInputCount) {\n this.delayedInputs = [];\n for (let i = 0; i < inputOptions.delayInputCount; i++)\n this.delayedInputs[i] = [];\n }\n\n this.gameEngine.emit('client__init');\n }\n\n // configure the Synchronizer singleton\n configureSynchronization() {\n\n // the reflect syncronizer is just interpolate strategy,\n // configured to show server syncs\n let syncOptions = this.options.syncOptions;\n if (syncOptions.sync === 'reflect') {\n syncOptions.sync = 'interpolate';\n syncOptions.reflect = true;\n }\n\n this.synchronizer = new Synchronizer(this, syncOptions);\n }\n\n /**\n * Makes a connection to the game server. Extend this method if you want to add additional\n * logic on every connection. Call the super-class connect first, and return a promise which\n * executes when the super-class promise completes.\n *\n * @param {Object} [options] additional socket.io options\n * @return {Promise} Resolved when the connection is made to the server\n */\n connect(options = {}) {\n\n let connectSocket = matchMakerAnswer => {\n return new Promise((resolve, reject) => {\n\n if (matchMakerAnswer.status !== 'ok')\n reject('matchMaker failed status: ' + matchMakerAnswer.status);\n\n if (this.options.verbose)\n console.log(`connecting to game server ${matchMakerAnswer.serverURL}`);\n this.socket = io(matchMakerAnswer.serverURL, options);\n\n this.networkMonitor.registerClient(this);\n\n this.socket.once('connect', () => {\n if (this.options.verbose)\n console.log('connection made');\n resolve();\n });\n\n this.socket.once('error', (error) => {\n reject(error);\n });\n\n this.socket.on('playerJoined', (playerData) => {\n this.gameEngine.playerId = playerData.playerId;\n this.messageIndex = Number(this.gameEngine.playerId) * 10000;\n });\n\n this.socket.on('worldUpdate', (worldData) => {\n this.inboundMessages.push(worldData);\n });\n\n this.socket.on('roomUpdate', (roomData) => {\n this.gameEngine.emit('client__roomUpdate', roomData);\n });\n });\n };\n\n let matchmaker = Promise.resolve({ serverURL: this.options.serverURL, status: 'ok' });\n if (this.options.matchmaker)\n matchmaker = Utils.httpGetPromise(this.options.matchmaker);\n\n return matchmaker.then(connectSocket);\n }\n\n /**\n * Start the client engine, setting up the game loop, rendering loop and renderer.\n *\n * @return {Promise} Resolves once the Renderer has been initialized, and the game is\n * ready to connect\n */\n start() {\n this.stopped = false;\n this.resolved = false;\n // initialize the renderer\n // the render loop waits for next animation frame\n if (!this.renderer) alert('ERROR: game has not defined a renderer');\n let renderLoop = (timestamp) => {\n if (this.stopped) {\n this.renderer.stop();\n return;\n }\n this.lastTimestamp = this.lastTimestamp || timestamp;\n this.renderer.draw(timestamp, timestamp - this.lastTimestamp);\n this.lastTimestamp = timestamp;\n window.requestAnimationFrame(renderLoop);\n };\n\n return this.renderer.init().then(() => {\n this.gameEngine.start();\n\n if (this.options.scheduler === 'fixed') {\n // schedule and start the game loop\n this.scheduler = new Scheduler({\n period: this.options.stepPeriod,\n tick: this.step.bind(this),\n delay: STEP_DELAY_MSEC\n });\n this.scheduler.start();\n }\n\n if (typeof window !== 'undefined')\n window.requestAnimationFrame(renderLoop);\n if (this.options.autoConnect && this.options.standaloneMode !== true) {\n return this.connect()\n .catch((error) => {\n this.stopped = true;\n throw error;\n });\n }\n }).then(() => {\n return new Promise((resolve, reject) => {\n this.resolveGame = resolve;\n if (this.socket) {\n this.socket.on('disconnect', () => {\n if (!this.resolved && !this.stopped) {\n if (this.options.verbose)\n console.log('disconnected by server...');\n this.stopped = true;\n reject();\n }\n });\n }\n });\n });\n }\n\n /**\n * Disconnect from game server\n */\n disconnect() {\n if (!this.stopped) {\n this.socket.disconnect();\n this.stopped = true;\n }\n }\n\n // check if client step is too far ahead (leading) or too far\n // behing (lagging) the server step\n checkDrift(checkType) {\n\n if (!this.gameEngine.highestServerStep)\n return;\n\n let thresholds = this.synchronizer.syncStrategy.STEP_DRIFT_THRESHOLDS;\n let maxLead = thresholds[checkType].MAX_LEAD;\n let maxLag = thresholds[checkType].MAX_LAG;\n let clientStep = this.gameEngine.world.stepCount;\n let serverStep = this.gameEngine.highestServerStep;\n if (clientStep > serverStep + maxLead) {\n this.gameEngine.trace.warn(() => `step drift ${checkType}. [${clientStep} > ${serverStep} + ${maxLead}] Client is ahead of server. Delaying next step.`);\n if (this.scheduler) this.scheduler.delayTick();\n this.lastStepTime += STEP_DELAY_MSEC;\n this.correction += STEP_DELAY_MSEC;\n } else if (serverStep > clientStep + maxLag) {\n this.gameEngine.trace.warn(() => `step drift ${checkType}. [${serverStep} > ${clientStep} + ${maxLag}] Client is behind server. Hurrying next step.`);\n if (this.scheduler) this.scheduler.hurryTick();\n this.lastStepTime -= STEP_HURRY_MSEC;\n this.correction -= STEP_HURRY_MSEC;\n }\n }\n\n // execute a single game step. This is normally called by the Renderer\n // at each draw event.\n step(t, dt, physicsOnly) {\n\n if (!this.resolved) {\n const result = this.gameEngine.getPlayerGameOverResult();\n if (result) {\n this.resolved = true;\n this.resolveGame(result);\n // simulation can continue...\n // call disconnect to quit\n }\n }\n\n // physics only case\n if (physicsOnly) {\n this.gameEngine.step(false, t, dt, physicsOnly);\n return;\n }\n\n // first update the trace state\n this.gameEngine.trace.setStep(this.gameEngine.world.stepCount + 1);\n\n // skip one step if requested\n if (this.skipOneStep === true) {\n this.skipOneStep = false;\n return;\n }\n\n this.gameEngine.emit('client__preStep');\n while (this.inboundMessages.length > 0) {\n this.handleInboundMessage(this.inboundMessages.pop());\n this.checkDrift('onServerSync');\n }\n\n // check for server/client step drift without update\n this.checkDrift('onEveryStep');\n\n // perform game engine step\n if (this.options.standaloneMode !== true) {\n this.handleOutboundInput();\n }\n this.applyDelayedInputs();\n this.gameEngine.step(false, t, dt);\n this.gameEngine.emit('client__postStep', { dt });\n\n if (this.options.standaloneMode !== true && this.gameEngine.trace.length && this.socket) {\n // socket might not have been initialized at this point\n this.socket.emit('trace', JSON.stringify(this.gameEngine.trace.rotate()));\n }\n }\n\n // apply a user input on the client side\n doInputLocal(message) {\n\n // some synchronization strategies (interpolate) ignore inputs on client side\n if (this.gameEngine.ignoreInputs) {\n return;\n }\n\n const inputEvent = { input: message.data, playerId: this.gameEngine.playerId };\n this.gameEngine.emit('client__processInput', inputEvent);\n this.gameEngine.emit('processInput', inputEvent);\n this.gameEngine.processInput(message.data, this.gameEngine.playerId, false);\n }\n\n // apply user inputs which have been queued in order to create\n // an artificial delay\n applyDelayedInputs() {\n if (!this.delayedInputs) {\n return;\n }\n let that = this;\n let delayed = this.delayedInputs.shift();\n if (delayed && delayed.length) {\n delayed.forEach(that.doInputLocal.bind(that));\n }\n this.delayedInputs.push([]);\n }\n\n /**\n * This function should be called by the client whenever a user input\n * occurs. This function will emit the input event,\n * forward the input to the client's game engine (with a delay if\n * so configured) and will transmit the input to the server as well.\n *\n * This function can be called by the extended client engine class,\n * typically at the beginning of client-side step processing {@see GameEngine#client__preStep}.\n *\n * @param {String} input - string representing the input\n * @param {Object} inputOptions - options for the input\n */\n sendInput(input, inputOptions) {\n let inputEvent = {\n command: 'move',\n data: {\n messageIndex: this.messageIndex,\n step: this.gameEngine.world.stepCount,\n input: input,\n options: inputOptions\n }\n };\n\n this.gameEngine.trace.info(() => `USER INPUT[${this.messageIndex}]: ${input} ${inputOptions ? JSON.stringify(inputOptions) : '{}'}`);\n\n // if we delay input application on client, then queue it\n // otherwise apply it now\n if (this.delayedInputs) {\n this.delayedInputs[this.delayedInputs.length - 1].push(inputEvent);\n } else {\n this.doInputLocal(inputEvent);\n }\n\n if (this.options.standaloneMode !== true) {\n this.outboundMessages.push(inputEvent);\n }\n\n this.messageIndex++;\n }\n\n // handle a message that has been received from the server\n handleInboundMessage(syncData) {\n\n let syncEvents = this.networkTransmitter.deserializePayload(syncData).events;\n let syncHeader = syncEvents.find((e) => e.eventName === 'syncHeader');\n\n // emit that a snapshot has been received\n if (!this.gameEngine.highestServerStep || syncHeader.stepCount > this.gameEngine.highestServerStep)\n this.gameEngine.highestServerStep = syncHeader.stepCount;\n this.gameEngine.emit('client__syncReceived', {\n syncEvents: syncEvents,\n stepCount: syncHeader.stepCount,\n fullUpdate: syncHeader.fullUpdate\n });\n\n this.gameEngine.trace.info(() => `========== inbound world update ${syncHeader.stepCount} ==========`);\n\n // finally update the stepCount\n if (syncHeader.stepCount > this.gameEngine.world.stepCount + this.synchronizer.syncStrategy.STEP_DRIFT_THRESHOLDS.clientReset) {\n this.gameEngine.trace.info(() => `========== world step count updated from ${this.gameEngine.world.stepCount} to ${syncHeader.stepCount} ==========`);\n this.gameEngine.emit('client__stepReset', { oldStep: this.gameEngine.world.stepCount, newStep: syncHeader.stepCount });\n this.gameEngine.world.stepCount = syncHeader.stepCount;\n }\n }\n\n // emit an input to the authoritative server\n handleOutboundInput() {\n for (var x = 0; x < this.outboundMessages.length; x++) {\n this.socket.emit(this.outboundMessages[x].command, this.outboundMessages[x].data);\n }\n this.outboundMessages = [];\n }\n\n}\n\nexport default ClientEngine;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/ClientEngine.js","// based on http://keycode.info/\n\n// keyboard handling\nconst keyCodeTable = {\n 3: 'break',\n 8: 'backspace', // backspace / delete\n 9: 'tab',\n 12: 'clear',\n 13: 'enter',\n 16: 'shift',\n 17: 'ctrl',\n 18: 'alt',\n 19: 'pause/break',\n 20: 'caps lock',\n 27: 'escape',\n 28: 'conversion',\n 29: 'non-conversion',\n 32: 'space',\n 33: 'page up',\n 34: 'page down',\n 35: 'end',\n 36: 'home',\n 37: 'left',\n 38: 'up',\n 39: 'right',\n 40: 'down',\n 41: 'select',\n 42: 'print',\n 43: 'execute',\n 44: 'Print Screen',\n 45: 'insert',\n 46: 'delete',\n 48: '0',\n 49: '1',\n 50: '2',\n 51: '3',\n 52: '4',\n 53: '5',\n 54: '6',\n 55: '7',\n 56: '8',\n 57: '9',\n 58: ':',\n 59: 'semicolon (firefox), equals',\n 60: '<',\n 61: 'equals (firefox)',\n 63: 'ß',\n 64: '@',\n 65: 'a',\n 66: 'b',\n 67: 'c',\n 68: 'd',\n 69: 'e',\n 70: 'f',\n 71: 'g',\n 72: 'h',\n 73: 'i',\n 74: 'j',\n 75: 'k',\n 76: 'l',\n 77: 'm',\n 78: 'n',\n 79: 'o',\n 80: 'p',\n 81: 'q',\n 82: 'r',\n 83: 's',\n 84: 't',\n 85: 'u',\n 86: 'v',\n 87: 'w',\n 88: 'x',\n 89: 'y',\n 90: 'z',\n 91: 'Windows Key / Left ⌘ / Chromebook Search key',\n 92: 'right window key',\n 93: 'Windows Menu / Right ⌘',\n 96: 'numpad 0',\n 97: 'numpad 1',\n 98: 'numpad 2',\n 99: 'numpad 3',\n 100: 'numpad 4',\n 101: 'numpad 5',\n 102: 'numpad 6',\n 103: 'numpad 7',\n 104: 'numpad 8',\n 105: 'numpad 9',\n 106: 'multiply',\n 107: 'add',\n 108: 'numpad period (firefox)',\n 109: 'subtract',\n 110: 'decimal point',\n 111: 'divide',\n 112: 'f1',\n 113: 'f2',\n 114: 'f3',\n 115: 'f4',\n 116: 'f5',\n 117: 'f6',\n 118: 'f7',\n 119: 'f8',\n 120: 'f9',\n 121: 'f10',\n 122: 'f11',\n 123: 'f12',\n 124: 'f13',\n 125: 'f14',\n 126: 'f15',\n 127: 'f16',\n 128: 'f17',\n 129: 'f18',\n 130: 'f19',\n 131: 'f20',\n 132: 'f21',\n 133: 'f22',\n 134: 'f23',\n 135: 'f24',\n 144: 'num lock',\n 145: 'scroll lock',\n 160: '^',\n 161: '!',\n 163: '#',\n 164: '$',\n 165: 'ù',\n 166: 'page backward',\n 167: 'page forward',\n 169: 'closing paren (AZERTY)',\n 170: '*',\n 171: '~ + * key',\n 173: 'minus (firefox), mute/unmute',\n 174: 'decrease volume level',\n 175: 'increase volume level',\n 176: 'next',\n 177: 'previous',\n 178: 'stop',\n 179: 'play/pause',\n 180: 'e-mail',\n 181: 'mute/unmute (firefox)',\n 182: 'decrease volume level (firefox)',\n 183: 'increase volume level (firefox)',\n 186: 'semi-colon / ñ',\n 187: 'equal sign',\n 188: 'comma',\n 189: 'dash',\n 190: 'period',\n 191: 'forward slash / ç',\n 192: 'grave accent / ñ / æ',\n 193: '?, / or °',\n 194: 'numpad period (chrome)',\n 219: 'open bracket',\n 220: 'back slash',\n 221: 'close bracket / å',\n 222: 'single quote / ø',\n 223: '`',\n 224: 'left or right ⌘ key (firefox)',\n 225: 'altgr',\n 226: '< /git >',\n 230: 'GNOME Compose Key',\n 231: 'ç',\n 233: 'XF86Forward',\n 234: 'XF86Back',\n 240: 'alphanumeric',\n 242: 'hiragana/katakana',\n 243: 'half-width/full-width',\n 244: 'kanji',\n 255: 'toggle touchpad'\n};\n\n/**\n * This class allows easy usage of device keyboard controls. Use the method {@link KeyboardControls#bindKey} to\n * generate events whenever a key is pressed.\n *\n * @example\n * // in the ClientEngine constructor\n * this.controls = new KeyboardControls(this);\n * this.controls.bindKey('left', 'left', { repeat: true } );\n * this.controls.bindKey('right', 'right', { repeat: true } );\n * this.controls.bindKey('space', 'space');\n *\n */\nclass KeyboardControls {\n\n constructor(clientEngine) {\n\n this.clientEngine = clientEngine;\n this.gameEngine = clientEngine.gameEngine;\n\n this.setupListeners();\n\n // keep a reference for key press state\n this.keyState = {};\n\n // a list of bound keys and their corresponding actions\n this.boundKeys = {};\n\n this.gameEngine.on('client__preStep', () => {\n for (let keyName of Object.keys(this.boundKeys)) {\n if (this.keyState[keyName] && this.keyState[keyName].isDown) {\n\n // handle repeat press\n if (this.boundKeys[keyName].options.repeat || this.keyState[keyName].count == 0) {\n\n // callback to get live parameters if function\n let parameters = this.boundKeys[keyName].parameters;\n if (typeof parameters === \"function\") {\n parameters = parameters();\n }\n\n // todo movement is probably redundant\n let inputOptions = Object.assign({\n movement: true\n }, parameters || {});\n this.clientEngine.sendInput(this.boundKeys[keyName].actionName, inputOptions);\n this.keyState[keyName].count++;\n }\n }\n }\n });\n }\n\n setupListeners() {\n document.addEventListener('keydown', (e) => { this.onKeyChange(e, true);});\n document.addEventListener('keyup', (e) => { this.onKeyChange(e, false);});\n }\n\n /**\n * Bind a keyboard key to a Lance client event. Each time the key is pressed,\n * an event will be transmitted by the client engine, using {@link ClientEngine#sendInput},\n * and the specified event name.\n *\n * Common key names: up, down, left, right, enter, shift, ctrl, alt,\n * escape, space, page up, page down, end, home, 0..9, a..z, A..Z.\n * For a full list, please check the source link above.\n *\n * @param {String} keys - keyboard key (or array of keys) which will cause the event.\n * @param {String} actionName - the event name\n * @param {Object} options - options object\n * @param {Boolean} options.repeat - if set to true, an event continues to be sent on each game step, while the key is pressed\n * @param {Object/Function} parameters - parameters (or function to get parameters) to be sent to\n * the server with sendInput as the inputOptions\n */\n bindKey(keys, actionName, options, parameters) {\n if (!Array.isArray(keys)) keys = [keys];\n\n let keyOptions = Object.assign({\n repeat: false\n }, options);\n\n keys.forEach(keyName => {\n this.boundKeys[keyName] = { actionName, options: keyOptions, parameters: parameters };\n });\n }\n\n // todo implement unbindKey\n\n onKeyChange(e, isDown) {\n e = e || window.event;\n\n let keyName = keyCodeTable[e.keyCode];\n if (keyName && this.boundKeys[keyName]) {\n if (this.keyState[keyName] == null) {\n this.keyState[keyName] = {\n count: 0\n };\n }\n this.keyState[keyName].isDown = isDown;\n\n // key up, reset press count\n if (!isDown) this.keyState[keyName].count = 0;\n\n // keep reference to the last key pressed to avoid duplicates\n this.lastKeyPressed = isDown ? e.keyCode : null;\n // this.renderer.onKeyChange({ keyName, isDown });\n e.preventDefault();\n }\n }\n}\n\nexport default KeyboardControls;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/controls/KeyboardControls.js","let singleton = null;\n\nconst TIME_RESET_THRESHOLD = 100;\n\n/**\n * The Renderer is the component which must *draw* the game on the client.\n * It will be instantiated once on each client, and must implement the draw\n * method. The draw method will be invoked on every iteration of the browser's\n * render loop.\n */\nclass Renderer {\n\n static getInstance() {\n return singleton;\n }\n\n /**\n * Constructor of the Renderer singleton.\n * @param {GameEngine} gameEngine - Reference to the GameEngine instance.\n * @param {ClientEngine} clientEngine - Reference to the ClientEngine instance.\n */\n constructor(gameEngine, clientEngine) {\n this.gameEngine = gameEngine;\n this.clientEngine = clientEngine;\n this.gameEngine.on('client__stepReset', () => { this.doReset = true; });\n gameEngine.on('objectAdded', this.addObject.bind(this));\n gameEngine.on('objectDestroyed', this.removeObject.bind(this));\n\n // the singleton renderer has been created\n singleton = this;\n }\n\n /**\n * Initialize the renderer.\n * @return {Promise} Resolves when renderer is ready.\n */\n init() {\n if ((typeof window === 'undefined') || !document) {\n console.log('renderer invoked on server side.');\n }\n this.gameEngine.emit('client__rendererReady');\n return Promise.resolve(); // eslint-disable-line new-cap\n }\n\n reportSlowFrameRate() {\n this.gameEngine.emit('client__slowFrameRate');\n }\n\n /**\n * The main draw function. This method is called at high frequency,\n * at the rate of the render loop. Typically this is 60Hz, in WebVR 90Hz.\n * If the client engine has been configured to render-schedule, then this\n * method must call the clientEngine's step method.\n *\n * @param {Number} t - current time (only required in render-schedule mode)\n * @param {Number} dt - time elapsed since last draw\n */\n draw(t, dt) {\n this.gameEngine.emit('client__draw');\n\n if (this.clientEngine.options.scheduler === 'render-schedule')\n this.runClientStep(t);\n }\n\n /**\n * The main draw function. This method is called at high frequency,\n * at the rate of the render loop. Typically this is 60Hz, in WebVR 90Hz.\n *\n * @param {Number} t - current time\n * @param {Number} dt - time elapsed since last draw\n */\n runClientStep(t) {\n let p = this.clientEngine.options.stepPeriod;\n let dt = 0;\n\n // reset step time if we passed a threshold\n if (this.doReset || t > this.clientEngine.lastStepTime + TIME_RESET_THRESHOLD) {\n this.doReset = false;\n this.clientEngine.lastStepTime = t - p / 2;\n this.clientEngine.correction = p / 2;\n }\n\n // catch-up missed steps\n while (t > this.clientEngine.lastStepTime + p) {\n this.clientEngine.step(this.clientEngine.lastStepTime + p, p + this.clientEngine.correction);\n this.clientEngine.lastStepTime += p;\n this.clientEngine.correction = 0;\n }\n\n // if not ready for a real step yet, return\n // this might happen after catch up above\n if (t < this.clientEngine.lastStepTime) {\n dt = t - this.clientEngine.lastStepTime + this.clientEngine.correction;\n if (dt < 0) dt = 0;\n this.clientEngine.correction = this.clientEngine.lastStepTime - t;\n this.clientEngine.step(t, dt, true);\n return;\n }\n\n // render-controlled step\n dt = t - this.clientEngine.lastStepTime + this.clientEngine.correction;\n this.clientEngine.lastStepTime += p;\n this.clientEngine.correction = this.clientEngine.lastStepTime - t;\n this.clientEngine.step(t, dt);\n }\n\n /**\n * Handle the addition of a new object to the world.\n * @param {Object} obj - The object to be added.\n */\n addObject(obj) {}\n\n /**\n * Handle the removal of an old object from the world.\n * @param {Object} obj - The object to be removed.\n */\n removeObject(obj) {}\n\n /**\n * Called when clientEngine has stopped, time to clean up\n */\n stop() {}\n}\n\nexport default Renderer;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/render/Renderer.js","/* global THREE */\nconst FRAME_HISTORY_SIZE = 20;\nconst MAX_SLOW_FRAMES = 10;\n\nexport default {\n schema: {\n traceLevel: { default: 4 }\n },\n\n init: function() {\n\n // TODO: Sometimes an object is \"simple\". For example it uses\n // existing AFrame assets (an OBJ file and a material)\n // in this case, we can auto-generate the DOM element,\n // setting the quaternion, position, material, game-object-id\n // and obj-model. Same goes for objects which use primitive\n // geometric objects. Remember to also remove them.\n this.CAMERA_OFFSET_VEC = new THREE.Vector3(0, 5, -10);\n this.frameRateHistory = [];\n for (let i = 0; i < FRAME_HISTORY_SIZE; i++)\n this.frameRateHistory.push(false);\n this.frameRateTest = (1000 / 60) * 1.2;\n\n // capture the chase camera if available\n let chaseCameras = document.getElementsByClassName('chaseCamera');\n if (chaseCameras)\n this.cameraEl = chaseCameras[0];\n },\n\n tick: function(t, dt) {\n if (!this.gameEngine)\n return;\n this.renderer.tick(t, dt);\n\n let frh = this.frameRateHistory;\n frh.push(dt > this.frameRateTest);\n frh.shift();\n const slowFrames = frh.filter(x => x);\n if (slowFrames.length > MAX_SLOW_FRAMES) {\n this.frameRateHistory = frh.map(x => false);\n this.renderer.reportSlowFrameRate();\n }\n\n // for each object in the world, update the a-frame element\n this.gameEngine.world.forEachObject((id, o) => {\n let el = o.renderEl;\n if (el) {\n let q = o.quaternion;\n let p = o.position;\n el.setAttribute('position', `${p.x} ${p.y} ${p.z}`);\n el.object3D.quaternion.set(q.x, q.y, q.z, q.w);\n\n // if a chase camera is configured, update it\n if (this.cameraEl && this.gameEngine.playerId === o.playerId) {\n let camera = this.cameraEl.object3D.children[0];\n let relativeCameraOffset = this.CAMERA_OFFSET_VEC.clone();\n let cameraOffset = relativeCameraOffset.applyMatrix4(o.renderEl.object3D.matrixWorld);\n camera.position.copy(cameraOffset);\n camera.lookAt(o.renderEl.object3D.position);\n }\n\n }\n });\n },\n\n // NOTE: webpack generated incorrect code if you use arrow notation below\n // it sets \"this\" to \"undefined\"\n setGlobals: function(gameEngine, renderer) {\n this.gameEngine = gameEngine;\n this.renderer = renderer;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ../../src/render/aframe/system.js","/* globals AFRAME */\n\nimport Renderer from './Renderer';\nimport networkedPhysics from './aframe/system';\n\n/**\n * The A-Frame Renderer\n */\nclass AFrameRenderer extends Renderer {\n\n /**\n * Constructor of the Renderer singleton.\n * @param {GameEngine} gameEngine - Reference to the GameEngine instance.\n * @param {ClientEngine} clientEngine - Reference to the ClientEngine instance.\n */\n constructor(gameEngine, clientEngine) {\n super(gameEngine, clientEngine);\n\n // set up the networkedPhysics as an A-Frame system\n networkedPhysics.setGlobals(gameEngine, this);\n AFRAME.registerSystem('networked-physics', networkedPhysics);\n }\n\n reportSlowFrameRate() {\n this.gameEngine.emit('client__slowFrameRate');\n }\n\n /**\n * Initialize the renderer.\n * @return {Promise} Resolves when renderer is ready.\n */\n init() {\n\n let p = super.init();\n\n let sceneElArray = document.getElementsByTagName('a-scene');\n if (sceneElArray.length !== 1) {\n throw new Error('A-Frame scene element not found');\n }\n this.scene = sceneElArray[0];\n\n this.gameEngine.on('objectRemoved', (o) => {\n o.renderObj.remove();\n });\n\n return p; // eslint-disable-line new-cap\n }\n\n /**\n * In AFrame, we set the draw method (which is called at requestAnimationFrame)\n * to a NO-OP. See tick() instead\n */\n draw() {}\n\n tick(t, dt) {\n super.draw(t, dt);\n }\n\n}\n\nexport default AFrameRenderer;\n\n\n\n// WEBPACK FOOTER //\n// ../../src/render/AFrameRenderer.js","\"use strict\";\n\nimport { BaseTypes, DynamicObject } from \"@rtsdk/lance-topia\";\n\nexport default class Wiggle extends DynamicObject {\n static get netScheme() {\n return Object.assign(\n {\n direction: { type: BaseTypes.TYPES.FLOAT32 },\n bodyLength: { type: BaseTypes.TYPES.INT16 },\n score: { type: BaseTypes.TYPES.INT16 },\n name: { type: BaseTypes.TYPES.STRING },\n },\n super.netScheme,\n );\n }\n\n constructor(gameEngine, options, props) {\n super(gameEngine, options, props);\n this.class = Wiggle;\n this.bodyParts = [];\n this.score = 0;\n this.stat_foodPerGame = \"\";\n }\n\n syncTo(other) {\n super.syncTo(other);\n this.direction = other.direction;\n this.bodyLength = other.bodyLength;\n this.name = other.name;\n this.score = other.score;\n }\n\n toString() {\n return `Wiggle::${super.toString()} direction=${this.direction} length=${this.bodyLength} name=${this.name} score=${\n this.score\n }`;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/common/Wiggle.js","\"use strict\";\nimport { DynamicObject } from \"@rtsdk/lance-topia\";\n\nexport default class Food extends DynamicObject {\n static get netScheme() {\n return Object.assign(\n {\n // add serializable properties here\n },\n super.netScheme,\n );\n }\n\n syncTo(other) {\n super.syncTo(other);\n }\n\n constructor(gameEngine, options, props) {\n super(gameEngine, options, props);\n this.class = Food;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/common/Food.js","import querystring from \"query-string\";\nimport { Lib } from \"@rtsdk/lance-topia\";\nimport WiggleClientEngine from \"../client/WiggleClientEngine\";\nimport WiggleGameEngine from \"../common/WiggleGameEngine\";\nconst qsOptions = querystring.parse(location.search);\n\n// default options, overwritten by query-string options\n// is sent to both game engine and client engine\nconst defaults = {\n traceLevel: Lib.Trace.TRACE_NONE,\n delayInputCount: 5,\n scheduler: \"render-schedule\",\n\n // Using interpolate because sending fullSyncRate every 5 steps on server. Extrapolate would try to predict and then undo.\n // Interpolate waits for the server instead of predicting, so there's less teleporting.\n // If increase fullSyncRate, might want to use extrapolate so has some prediction between server updates.\n // However, if have lots of collision in game and need that to be snappy, need to have low fullSyncRate as server controls collision.\n // Higher bending means it'll teleport to the server's truthiness. Higher bending value: With a higher bending value, the client state will adjust more quickly to match the server state. This can make the game feel more responsive, as the client will closely mirror the server state. However, if there are irregularities in the network (like jitter or packet loss), this can also lead to more noticeable jumps or \"teleportation\" of game entities, as the client state rapidly adjusts to the server state.\n syncOptions: {\n sync: qsOptions.sync || \"interpolate\",\n bendingIncrements: 5,\n },\n};\nlet options = Object.assign(defaults, qsOptions);\n\n// create a client engine and a game engine\nconst gameEngine = new WiggleGameEngine(options);\nconst clientEngine = new WiggleClientEngine(gameEngine, options);\n\ndocument.addEventListener(\"DOMContentLoaded\", function (e) {\n clientEngine.start();\n});\n\n\n\n// WEBPACK FOOTER //\n// ./src/client/clientEntryPoint.js","'use strict';\nvar strictUriEncode = require('strict-uri-encode');\nvar objectAssign = require('object-assign');\n\nfunction encoderForArrayFormat(opts) {\n\tswitch (opts.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn function (key, value, index) {\n\t\t\t\treturn value === null ? [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'[',\n\t\t\t\t\tindex,\n\t\t\t\t\t']'\n\t\t\t\t].join('') : [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'[',\n\t\t\t\t\tencode(index, opts),\n\t\t\t\t\t']=',\n\t\t\t\t\tencode(value, opts)\n\t\t\t\t].join('');\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn function (key, value) {\n\t\t\t\treturn value === null ? encode(key, opts) : [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'[]=',\n\t\t\t\t\tencode(value, opts)\n\t\t\t\t].join('');\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn function (key, value) {\n\t\t\t\treturn value === null ? encode(key, opts) : [\n\t\t\t\t\tencode(key, opts),\n\t\t\t\t\t'=',\n\t\t\t\t\tencode(value, opts)\n\t\t\t\t].join('');\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(opts) {\n\tvar result;\n\n\tswitch (opts.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn function (key, value, accumulator) {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn function (key, value, accumulator) {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t} else if (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn function (key, value, accumulator) {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction encode(value, opts) {\n\tif (opts.encode) {\n\t\treturn opts.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t} else if (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input)).sort(function (a, b) {\n\t\t\treturn Number(a) - Number(b);\n\t\t}).map(function (key) {\n\t\t\treturn input[key];\n\t\t});\n\t}\n\n\treturn input;\n}\n\nexports.extract = function (str) {\n\treturn str.split('?')[1] || '';\n};\n\nexports.parse = function (str, opts) {\n\topts = objectAssign({arrayFormat: 'none'}, opts);\n\n\tvar formatter = parserForArrayFormat(opts);\n\n\t// Create an object with no prototype\n\t// https://github.com/sindresorhus/query-string/issues/47\n\tvar ret = Object.create(null);\n\n\tif (typeof str !== 'string') {\n\t\treturn ret;\n\t}\n\n\tstr = str.trim().replace(/^(\\?|#|&)/, '');\n\n\tif (!str) {\n\t\treturn ret;\n\t}\n\n\tstr.split('&').forEach(function (param) {\n\t\tvar parts = param.replace(/\\+/g, ' ').split('=');\n\t\t// Firefox (pre 40) decodes `%3D` to `=`\n\t\t// https://github.com/sindresorhus/query-string/pull/37\n\t\tvar key = parts.shift();\n\t\tvar val = parts.length > 0 ? parts.join('=') : undefined;\n\n\t\t// missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tval = val === undefined ? null : decodeURIComponent(val);\n\n\t\tformatter(decodeURIComponent(key), val, ret);\n\t});\n\n\treturn Object.keys(ret).sort().reduce(function (result, key) {\n\t\tvar val = ret[key];\n\t\tif (Boolean(val) && typeof val === 'object' && !Array.isArray(val)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(val);\n\t\t} else {\n\t\t\tresult[key] = val;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n};\n\nexports.stringify = function (obj, opts) {\n\tvar defaults = {\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none'\n\t};\n\n\topts = objectAssign(defaults, opts);\n\n\tvar formatter = encoderForArrayFormat(opts);\n\n\treturn obj ? Object.keys(obj).sort().map(function (key) {\n\t\tvar val = obj[key];\n\n\t\tif (val === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (val === null) {\n\t\t\treturn encode(key, opts);\n\t\t}\n\n\t\tif (Array.isArray(val)) {\n\t\t\tvar result = [];\n\n\t\t\tval.slice().forEach(function (val2) {\n\t\t\t\tif (val2 === undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresult.push(formatter(key, val2, result.length));\n\t\t\t});\n\n\t\t\treturn result.join('&');\n\t\t}\n\n\t\treturn encode(key, opts) + '=' + encode(val, opts);\n\t}).filter(function (x) {\n\t\treturn x.length > 0;\n\t}).join('&') : '';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/query-string/index.js\n// module id = 4\n// module chunks = 0","'use strict';\nmodule.exports = function (str) {\n\treturn encodeURIComponent(str).replace(/[!'()*]/g, function (c) {\n\t\treturn '%' + c.charCodeAt(0).toString(16).toUpperCase();\n\t});\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/strict-uri-encode/index.js\n// module id = 5\n// module chunks = 0","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/object-assign/index.js\n// module id = 6\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 7\n// module chunks = 0","/*\n * Copyright (c) 2015 cannon.js Authors\n *\n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use, copy,\n * modify, merge, publish, distribute, sublicense, and/or sell copies\n * of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&false)define([],e);else{var f;\"undefined\"!=typeof window?f=window:\"undefined\"!=typeof global?f=global:\"undefined\"!=typeof self&&(f=self),f.CANNON=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error(\"Cannot find module '\"+o+\"'\")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o (http://steffe.se)\",\n \"keywords\": [\n \"cannon.js\",\n \"cannon\",\n \"physics\",\n \"engine\",\n \"3d\"\n ],\n \"main\": \"./build/cannon.js\",\n \"engines\": {\n \"node\": \"*\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/schteppe/cannon.js.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/schteppe/cannon.js/issues\"\n },\n \"licenses\": [\n {\n \"type\": \"MIT\"\n }\n ],\n \"devDependencies\": {\n \"jshint\": \"latest\",\n \"uglify-js\": \"latest\",\n \"nodeunit\": \"^0.9.0\",\n \"grunt\": \"~0.4.0\",\n \"grunt-contrib-jshint\": \"~0.1.1\",\n \"grunt-contrib-nodeunit\": \"^0.4.1\",\n \"grunt-contrib-concat\": \"~0.1.3\",\n \"grunt-contrib-uglify\": \"^0.5.1\",\n \"grunt-browserify\": \"^2.1.4\",\n \"grunt-contrib-yuidoc\": \"^0.5.2\",\n \"browserify\": \"*\"\n },\n \"dependencies\": {}\n}\n\n},{}],2:[function(_dereq_,module,exports){\n// Export classes\nmodule.exports = {\n version : _dereq_('../package.json').version,\n\n AABB : _dereq_('./collision/AABB'),\n ArrayCollisionMatrix : _dereq_('./collision/ArrayCollisionMatrix'),\n Body : _dereq_('./objects/Body'),\n Box : _dereq_('./shapes/Box'),\n Broadphase : _dereq_('./collision/Broadphase'),\n Constraint : _dereq_('./constraints/Constraint'),\n ContactEquation : _dereq_('./equations/ContactEquation'),\n Narrowphase : _dereq_('./world/Narrowphase'),\n ConeTwistConstraint : _dereq_('./constraints/ConeTwistConstraint'),\n ContactMaterial : _dereq_('./material/ContactMaterial'),\n ConvexPolyhedron : _dereq_('./shapes/ConvexPolyhedron'),\n Cylinder : _dereq_('./shapes/Cylinder'),\n DistanceConstraint : _dereq_('./constraints/DistanceConstraint'),\n Equation : _dereq_('./equations/Equation'),\n EventTarget : _dereq_('./utils/EventTarget'),\n FrictionEquation : _dereq_('./equations/FrictionEquation'),\n GSSolver : _dereq_('./solver/GSSolver'),\n GridBroadphase : _dereq_('./collision/GridBroadphase'),\n Heightfield : _dereq_('./shapes/Heightfield'),\n HingeConstraint : _dereq_('./constraints/HingeConstraint'),\n LockConstraint : _dereq_('./constraints/LockConstraint'),\n Mat3 : _dereq_('./math/Mat3'),\n Material : _dereq_('./material/Material'),\n NaiveBroadphase : _dereq_('./collision/NaiveBroadphase'),\n ObjectCollisionMatrix : _dereq_('./collision/ObjectCollisionMatrix'),\n Pool : _dereq_('./utils/Pool'),\n Particle : _dereq_('./shapes/Particle'),\n Plane : _dereq_('./shapes/Plane'),\n PointToPointConstraint : _dereq_('./constraints/PointToPointConstraint'),\n Quaternion : _dereq_('./math/Quaternion'),\n Ray : _dereq_('./collision/Ray'),\n RaycastVehicle : _dereq_('./objects/RaycastVehicle'),\n RaycastResult : _dereq_('./collision/RaycastResult'),\n RigidVehicle : _dereq_('./objects/RigidVehicle'),\n RotationalEquation : _dereq_('./equations/RotationalEquation'),\n RotationalMotorEquation : _dereq_('./equations/RotationalMotorEquation'),\n SAPBroadphase : _dereq_('./collision/SAPBroadphase'),\n SPHSystem : _dereq_('./objects/SPHSystem'),\n Shape : _dereq_('./shapes/Shape'),\n Solver : _dereq_('./solver/Solver'),\n Sphere : _dereq_('./shapes/Sphere'),\n SplitSolver : _dereq_('./solver/SplitSolver'),\n Spring : _dereq_('./objects/Spring'),\n Trimesh : _dereq_('./shapes/Trimesh'),\n Vec3 : _dereq_('./math/Vec3'),\n Vec3Pool : _dereq_('./utils/Vec3Pool'),\n World : _dereq_('./world/World'),\n};\n\n},{\"../package.json\":1,\"./collision/AABB\":3,\"./collision/ArrayCollisionMatrix\":4,\"./collision/Broadphase\":5,\"./collision/GridBroadphase\":6,\"./collision/NaiveBroadphase\":7,\"./collision/ObjectCollisionMatrix\":8,\"./collision/Ray\":9,\"./collision/RaycastResult\":10,\"./collision/SAPBroadphase\":11,\"./constraints/ConeTwistConstraint\":12,\"./constraints/Constraint\":13,\"./constraints/DistanceConstraint\":14,\"./constraints/HingeConstraint\":15,\"./constraints/LockConstraint\":16,\"./constraints/PointToPointConstraint\":17,\"./equations/ContactEquation\":19,\"./equations/Equation\":20,\"./equations/FrictionEquation\":21,\"./equations/RotationalEquation\":22,\"./equations/RotationalMotorEquation\":23,\"./material/ContactMaterial\":24,\"./material/Material\":25,\"./math/Mat3\":27,\"./math/Quaternion\":28,\"./math/Vec3\":30,\"./objects/Body\":31,\"./objects/RaycastVehicle\":32,\"./objects/RigidVehicle\":33,\"./objects/SPHSystem\":34,\"./objects/Spring\":35,\"./shapes/Box\":37,\"./shapes/ConvexPolyhedron\":38,\"./shapes/Cylinder\":39,\"./shapes/Heightfield\":40,\"./shapes/Particle\":41,\"./shapes/Plane\":42,\"./shapes/Shape\":43,\"./shapes/Sphere\":44,\"./shapes/Trimesh\":45,\"./solver/GSSolver\":46,\"./solver/Solver\":47,\"./solver/SplitSolver\":48,\"./utils/EventTarget\":49,\"./utils/Pool\":51,\"./utils/Vec3Pool\":54,\"./world/Narrowphase\":55,\"./world/World\":56}],3:[function(_dereq_,module,exports){\nvar Vec3 = _dereq_('../math/Vec3');\nvar Utils = _dereq_('../utils/Utils');\n\nmodule.exports = AABB;\n\n/**\n * Axis aligned bounding box class.\n * @class AABB\n * @constructor\n * @param {Object} [options]\n * @param {Vec3} [options.upperBound]\n * @param {Vec3} [options.lowerBound]\n */\nfunction AABB(options){\n options = options || {};\n\n /**\n * The lower bound of the bounding box.\n * @property lowerBound\n * @type {Vec3}\n */\n this.lowerBound = new Vec3();\n if(options.lowerBound){\n this.lowerBound.copy(options.lowerBound);\n }\n\n /**\n * The upper bound of the bounding box.\n * @property upperBound\n * @type {Vec3}\n */\n this.upperBound = new Vec3();\n if(options.upperBound){\n this.upperBound.copy(options.upperBound);\n }\n}\n\nvar tmp = new Vec3();\n\n/**\n * Set the AABB bounds from a set of points.\n * @method setFromPoints\n * @param {Array} points An array of Vec3's.\n * @param {Vec3} position\n * @param {Quaternion} quaternion\n * @param {number} skinSize\n * @return {AABB} The self object\n */\nAABB.prototype.setFromPoints = function(points, position, quaternion, skinSize){\n var l = this.lowerBound,\n u = this.upperBound,\n q = quaternion;\n\n // Set to the first point\n l.copy(points[0]);\n if(q){\n q.vmult(l, l);\n }\n u.copy(l);\n\n for(var i = 1; i u.x){ u.x = p.x; }\n if(p.x < l.x){ l.x = p.x; }\n if(p.y > u.y){ u.y = p.y; }\n if(p.y < l.y){ l.y = p.y; }\n if(p.z > u.z){ u.z = p.z; }\n if(p.z < l.z){ l.z = p.z; }\n }\n\n // Add offset\n if (position) {\n position.vadd(l, l);\n position.vadd(u, u);\n }\n\n if(skinSize){\n l.x -= skinSize;\n l.y -= skinSize;\n l.z -= skinSize;\n u.x += skinSize;\n u.y += skinSize;\n u.z += skinSize;\n }\n\n return this;\n};\n\n/**\n * Copy bounds from an AABB to this AABB\n * @method copy\n * @param {AABB} aabb Source to copy from\n * @return {AABB} The this object, for chainability\n */\nAABB.prototype.copy = function(aabb){\n this.lowerBound.copy(aabb.lowerBound);\n this.upperBound.copy(aabb.upperBound);\n return this;\n};\n\n/**\n * Clone an AABB\n * @method clone\n */\nAABB.prototype.clone = function(){\n return new AABB().copy(this);\n};\n\n/**\n * Extend this AABB so that it covers the given AABB too.\n * @method extend\n * @param {AABB} aabb\n */\nAABB.prototype.extend = function(aabb){\n // Extend lower bound\n var l = aabb.lowerBound.x;\n if(this.lowerBound.x > l){\n this.lowerBound.x = l;\n }\n\n // Upper\n var u = aabb.upperBound.x;\n if(this.upperBound.x < u){\n this.upperBound.x = u;\n }\n\n // Extend lower bound\n var l = aabb.lowerBound.y;\n if(this.lowerBound.y > l){\n this.lowerBound.y = l;\n }\n\n // Upper\n var u = aabb.upperBound.y;\n if(this.upperBound.y < u){\n this.upperBound.y = u;\n }\n\n // Extend lower bound\n var l = aabb.lowerBound.z;\n if(this.lowerBound.z > l){\n this.lowerBound.z = l;\n }\n\n // Upper\n var u = aabb.upperBound.z;\n if(this.upperBound.z < u){\n this.upperBound.z = u;\n }\n};\n\n/**\n * Returns true if the given AABB overlaps this AABB.\n * @method overlaps\n * @param {AABB} aabb\n * @return {Boolean}\n */\nAABB.prototype.overlaps = function(aabb){\n var l1 = this.lowerBound,\n u1 = this.upperBound,\n l2 = aabb.lowerBound,\n u2 = aabb.upperBound;\n\n // l2 u2\n // |---------|\n // |--------|\n // l1 u1\n\n return ((l2.x <= u1.x && u1.x <= u2.x) || (l1.x <= u2.x && u2.x <= u1.x)) &&\n ((l2.y <= u1.y && u1.y <= u2.y) || (l1.y <= u2.y && u2.y <= u1.y)) &&\n ((l2.z <= u1.z && u1.z <= u2.z) || (l1.z <= u2.z && u2.z <= u1.z));\n};\n\n/**\n * Returns true if the given AABB is fully contained in this AABB.\n * @method contains\n * @param {AABB} aabb\n * @return {Boolean}\n */\nAABB.prototype.contains = function(aabb){\n var l1 = this.lowerBound,\n u1 = this.upperBound,\n l2 = aabb.lowerBound,\n u2 = aabb.upperBound;\n\n // l2 u2\n // |---------|\n // |---------------|\n // l1 u1\n\n return (\n (l1.x <= l2.x && u1.x >= u2.x) &&\n (l1.y <= l2.y && u1.y >= u2.y) &&\n (l1.z <= l2.z && u1.z >= u2.z)\n );\n};\n\n/**\n * @method getCorners\n * @param {Vec3} a\n * @param {Vec3} b\n * @param {Vec3} c\n * @param {Vec3} d\n * @param {Vec3} e\n * @param {Vec3} f\n * @param {Vec3} g\n * @param {Vec3} h\n */\nAABB.prototype.getCorners = function(a, b, c, d, e, f, g, h){\n var l = this.lowerBound,\n u = this.upperBound;\n\n a.copy(l);\n b.set( u.x, l.y, l.z );\n c.set( u.x, u.y, l.z );\n d.set( l.x, u.y, u.z );\n e.set( u.x, l.y, l.z );\n f.set( l.x, u.y, l.z );\n g.set( l.x, l.y, u.z );\n h.copy(u);\n};\n\nvar transformIntoFrame_corners = [\n new Vec3(),\n new Vec3(),\n new Vec3(),\n new Vec3(),\n new Vec3(),\n new Vec3(),\n new Vec3(),\n new Vec3()\n];\n\n/**\n * Get the representation of an AABB in another frame.\n * @method toLocalFrame\n * @param {Transform} frame\n * @param {AABB} target\n * @return {AABB} The \"target\" AABB object.\n */\nAABB.prototype.toLocalFrame = function(frame, target){\n\n var corners = transformIntoFrame_corners;\n var a = corners[0];\n var b = corners[1];\n var c = corners[2];\n var d = corners[3];\n var e = corners[4];\n var f = corners[5];\n var g = corners[6];\n var h = corners[7];\n\n // Get corners in current frame\n this.getCorners(a, b, c, d, e, f, g, h);\n\n // Transform them to new local frame\n for(var i=0; i !== 8; i++){\n var corner = corners[i];\n frame.pointToLocal(corner, corner);\n }\n\n return target.setFromPoints(corners);\n};\n\n/**\n * Get the representation of an AABB in the global frame.\n * @method toWorldFrame\n * @param {Transform} frame\n * @param {AABB} target\n * @return {AABB} The \"target\" AABB object.\n */\nAABB.prototype.toWorldFrame = function(frame, target){\n\n var corners = transformIntoFrame_corners;\n var a = corners[0];\n var b = corners[1];\n var c = corners[2];\n var d = corners[3];\n var e = corners[4];\n var f = corners[5];\n var g = corners[6];\n var h = corners[7];\n\n // Get corners in current frame\n this.getCorners(a, b, c, d, e, f, g, h);\n\n // Transform them to new local frame\n for(var i=0; i !== 8; i++){\n var corner = corners[i];\n frame.pointToWorld(corner, corner);\n }\n\n return target.setFromPoints(corners);\n};\n\n},{\"../math/Vec3\":30,\"../utils/Utils\":53}],4:[function(_dereq_,module,exports){\nmodule.exports = ArrayCollisionMatrix;\n\n/**\n * Collision \"matrix\". It's actually a triangular-shaped array of whether two bodies are touching this step, for reference next step\n * @class ArrayCollisionMatrix\n * @constructor\n */\nfunction ArrayCollisionMatrix() {\n\n /**\n * The matrix storage\n * @property matrix\n * @type {Array}\n */\n\tthis.matrix = [];\n}\n\n/**\n * Get an element\n * @method get\n * @param {Number} i\n * @param {Number} j\n * @return {Number}\n */\nArrayCollisionMatrix.prototype.get = function(i, j) {\n\ti = i.index;\n\tj = j.index;\n if (j > i) {\n var temp = j;\n j = i;\n i = temp;\n }\n\treturn this.matrix[(i*(i + 1)>>1) + j-1];\n};\n\n/**\n * Set an element\n * @method set\n * @param {Number} i\n * @param {Number} j\n * @param {Number} value\n */\nArrayCollisionMatrix.prototype.set = function(i, j, value) {\n\ti = i.index;\n\tj = j.index;\n if (j > i) {\n var temp = j;\n j = i;\n i = temp;\n }\n\tthis.matrix[(i*(i + 1)>>1) + j-1] = value ? 1 : 0;\n};\n\n/**\n * Sets all elements to zero\n * @method reset\n */\nArrayCollisionMatrix.prototype.reset = function() {\n\tfor (var i=0, l=this.matrix.length; i!==l; i++) {\n\t\tthis.matrix[i]=0;\n\t}\n};\n\n/**\n * Sets the max number of objects\n * @method setNumObjects\n * @param {Number} n\n */\nArrayCollisionMatrix.prototype.setNumObjects = function(n) {\n\tthis.matrix.length = n*(n-1)>>1;\n};\n\n},{}],5:[function(_dereq_,module,exports){\nvar Body = _dereq_('../objects/Body');\nvar Vec3 = _dereq_('../math/Vec3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar Shape = _dereq_('../shapes/Shape');\nvar Plane = _dereq_('../shapes/Plane');\n\nmodule.exports = Broadphase;\n\n/**\n * Base class for broadphase implementations\n * @class Broadphase\n * @constructor\n * @author schteppe\n */\nfunction Broadphase(){\n /**\n * The world to search for collisions in.\n * @property world\n * @type {World}\n */\n this.world = null;\n\n /**\n * If set to true, the broadphase uses bounding boxes for intersection test, else it uses bounding spheres.\n * @property useBoundingBoxes\n * @type {Boolean}\n */\n this.useBoundingBoxes = false;\n\n /**\n * Set to true if the objects in the world moved.\n * @property {Boolean} dirty\n */\n this.dirty = true;\n}\n\n/**\n * Get the collision pairs from the world\n * @method collisionPairs\n * @param {World} world The world to search in\n * @param {Array} p1 Empty array to be filled with body objects\n * @param {Array} p2 Empty array to be filled with body objects\n */\nBroadphase.prototype.collisionPairs = function(world,p1,p2){\n throw new Error(\"collisionPairs not implemented for this BroadPhase class!\");\n};\n\n/**\n * Check if a body pair needs to be intersection tested at all.\n * @method needBroadphaseCollision\n * @param {Body} bodyA\n * @param {Body} bodyB\n * @return {bool}\n */\nvar Broadphase_needBroadphaseCollision_STATIC_OR_KINEMATIC = Body.STATIC | Body.KINEMATIC;\nBroadphase.prototype.needBroadphaseCollision = function(bodyA,bodyB){\n\n // Check collision filter masks\n if( (bodyA.collisionFilterGroup & bodyB.collisionFilterMask)===0 || (bodyB.collisionFilterGroup & bodyA.collisionFilterMask)===0){\n return false;\n }\n\n // Check types\n if(((bodyA.type & Broadphase_needBroadphaseCollision_STATIC_OR_KINEMATIC)!==0 || bodyA.sleepState === Body.SLEEPING) &&\n ((bodyB.type & Broadphase_needBroadphaseCollision_STATIC_OR_KINEMATIC)!==0 || bodyB.sleepState === Body.SLEEPING)) {\n // Both bodies are static, kinematic or sleeping. Skip.\n return false;\n }\n\n return true;\n};\n\n/**\n * Check if the bounding volumes of two bodies intersect.\n * @method intersectionTest\n * @param {Body} bodyA\n * @param {Body} bodyB\n * @param {array} pairs1\n * @param {array} pairs2\n */\nBroadphase.prototype.intersectionTest = function(bodyA, bodyB, pairs1, pairs2){\n if(this.useBoundingBoxes){\n this.doBoundingBoxBroadphase(bodyA,bodyB,pairs1,pairs2);\n } else {\n this.doBoundingSphereBroadphase(bodyA,bodyB,pairs1,pairs2);\n }\n};\n\n/**\n * Check if the bounding spheres of two bodies are intersecting.\n * @method doBoundingSphereBroadphase\n * @param {Body} bodyA\n * @param {Body} bodyB\n * @param {Array} pairs1 bodyA is appended to this array if intersection\n * @param {Array} pairs2 bodyB is appended to this array if intersection\n */\nvar Broadphase_collisionPairs_r = new Vec3(), // Temp objects\n Broadphase_collisionPairs_normal = new Vec3(),\n Broadphase_collisionPairs_quat = new Quaternion(),\n Broadphase_collisionPairs_relpos = new Vec3();\nBroadphase.prototype.doBoundingSphereBroadphase = function(bodyA,bodyB,pairs1,pairs2){\n var r = Broadphase_collisionPairs_r;\n bodyB.position.vsub(bodyA.position,r);\n var boundingRadiusSum2 = Math.pow(bodyA.boundingRadius + bodyB.boundingRadius, 2);\n var norm2 = r.norm2();\n if(norm2 < boundingRadiusSum2){\n pairs1.push(bodyA);\n pairs2.push(bodyB);\n }\n};\n\n/**\n * Check if the bounding boxes of two bodies are intersecting.\n * @method doBoundingBoxBroadphase\n * @param {Body} bodyA\n * @param {Body} bodyB\n * @param {Array} pairs1\n * @param {Array} pairs2\n */\nBroadphase.prototype.doBoundingBoxBroadphase = function(bodyA,bodyB,pairs1,pairs2){\n if(bodyA.aabbNeedsUpdate){\n bodyA.computeAABB();\n }\n if(bodyB.aabbNeedsUpdate){\n bodyB.computeAABB();\n }\n\n // Check AABB / AABB\n if(bodyA.aabb.overlaps(bodyB.aabb)){\n pairs1.push(bodyA);\n pairs2.push(bodyB);\n }\n};\n\n/**\n * Removes duplicate pairs from the pair arrays.\n * @method makePairsUnique\n * @param {Array} pairs1\n * @param {Array} pairs2\n */\nvar Broadphase_makePairsUnique_temp = { keys:[] },\n Broadphase_makePairsUnique_p1 = [],\n Broadphase_makePairsUnique_p2 = [];\nBroadphase.prototype.makePairsUnique = function(pairs1,pairs2){\n var t = Broadphase_makePairsUnique_temp,\n p1 = Broadphase_makePairsUnique_p1,\n p2 = Broadphase_makePairsUnique_p2,\n N = pairs1.length;\n\n for(var i=0; i!==N; i++){\n p1[i] = pairs1[i];\n p2[i] = pairs2[i];\n }\n\n pairs1.length = 0;\n pairs2.length = 0;\n\n for(var i=0; i!==N; i++){\n var id1 = p1[i].id,\n id2 = p2[i].id;\n var key = id1 < id2 ? id1+\",\"+id2 : id2+\",\"+id1;\n t[key] = i;\n t.keys.push(key);\n }\n\n for(var i=0; i!==t.keys.length; i++){\n var key = t.keys.pop(),\n pairIndex = t[key];\n pairs1.push(p1[pairIndex]);\n pairs2.push(p2[pairIndex]);\n delete t[key];\n }\n};\n\n/**\n * To be implemented by subcasses\n * @method setWorld\n * @param {World} world\n */\nBroadphase.prototype.setWorld = function(world){\n};\n\n/**\n * Check if the bounding spheres of two bodies overlap.\n * @method boundingSphereCheck\n * @param {Body} bodyA\n * @param {Body} bodyB\n * @return {boolean}\n */\nvar bsc_dist = new Vec3();\nBroadphase.boundingSphereCheck = function(bodyA,bodyB){\n var dist = bsc_dist;\n bodyA.position.vsub(bodyB.position,dist);\n return Math.pow(bodyA.shape.boundingSphereRadius + bodyB.shape.boundingSphereRadius,2) > dist.norm2();\n};\n\n/**\n * Returns all the bodies within the AABB.\n * @method aabbQuery\n * @param {World} world\n * @param {AABB} aabb\n * @param {array} result An array to store resulting bodies in.\n * @return {array}\n */\nBroadphase.prototype.aabbQuery = function(world, aabb, result){\n console.warn('.aabbQuery is not implemented in this Broadphase subclass.');\n return [];\n};\n},{\"../math/Quaternion\":28,\"../math/Vec3\":30,\"../objects/Body\":31,\"../shapes/Plane\":42,\"../shapes/Shape\":43}],6:[function(_dereq_,module,exports){\nmodule.exports = GridBroadphase;\n\nvar Broadphase = _dereq_('./Broadphase');\nvar Vec3 = _dereq_('../math/Vec3');\nvar Shape = _dereq_('../shapes/Shape');\n\n/**\n * Axis aligned uniform grid broadphase.\n * @class GridBroadphase\n * @constructor\n * @extends Broadphase\n * @todo Needs support for more than just planes and spheres.\n * @param {Vec3} aabbMin\n * @param {Vec3} aabbMax\n * @param {Number} nx Number of boxes along x\n * @param {Number} ny Number of boxes along y\n * @param {Number} nz Number of boxes along z\n */\nfunction GridBroadphase(aabbMin,aabbMax,nx,ny,nz){\n Broadphase.apply(this);\n this.nx = nx || 10;\n this.ny = ny || 10;\n this.nz = nz || 10;\n this.aabbMin = aabbMin || new Vec3(100,100,100);\n this.aabbMax = aabbMax || new Vec3(-100,-100,-100);\n\tvar nbins = this.nx * this.ny * this.nz;\n\tif (nbins <= 0) {\n\t\tthrow \"GridBroadphase: Each dimension's n must be >0\";\n\t}\n this.bins = [];\n\tthis.binLengths = []; //Rather than continually resizing arrays (thrashing the memory), just record length and allow them to grow\n\tthis.bins.length = nbins;\n\tthis.binLengths.length = nbins;\n\tfor (var i=0;i= nx) { xoff0 = nx - 1; }\n\t\tif (yoff0 < 0) { yoff0 = 0; } else if (yoff0 >= ny) { yoff0 = ny - 1; }\n\t\tif (zoff0 < 0) { zoff0 = 0; } else if (zoff0 >= nz) { zoff0 = nz - 1; }\n\t\tif (xoff1 < 0) { xoff1 = 0; } else if (xoff1 >= nx) { xoff1 = nx - 1; }\n\t\tif (yoff1 < 0) { yoff1 = 0; } else if (yoff1 >= ny) { yoff1 = ny - 1; }\n\t\tif (zoff1 < 0) { zoff1 = 0; } else if (zoff1 >= nz) { zoff1 = nz - 1; }\n\n\t\txoff0 *= xstep;\n\t\tyoff0 *= ystep;\n\t\tzoff0 *= zstep;\n\t\txoff1 *= xstep;\n\t\tyoff1 *= ystep;\n\t\tzoff1 *= zstep;\n\n\t\tfor (var xoff = xoff0; xoff <= xoff1; xoff += xstep) {\n\t\t\tfor (var yoff = yoff0; yoff <= yoff1; yoff += ystep) {\n\t\t\t\tfor (var zoff = zoff0; zoff <= zoff1; zoff += zstep) {\n\t\t\t\t\tvar idx = xoff+yoff+zoff;\n\t\t\t\t\tbins[idx][binLengths[idx]++] = bi;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n // Put all bodies into the bins\n for(var i=0; i!==N; i++){\n var bi = bodies[i];\n var si = bi.shape;\n\n switch(si.type){\n case SPHERE:\n // Put in bin\n // check if overlap with other bins\n var x = bi.position.x,\n y = bi.position.y,\n z = bi.position.z;\n var r = si.radius;\n\n\t\t\taddBoxToBins(x-r, y-r, z-r, x+r, y+r, z+r, bi);\n break;\n\n case PLANE:\n if(si.worldNormalNeedsUpdate){\n si.computeWorldNormal(bi.quaternion);\n }\n var planeNormal = si.worldNormal;\n\n\t\t\t//Relative position from origin of plane object to the first bin\n\t\t\t//Incremented as we iterate through the bins\n\t\t\tvar xreset = xmin + binsizeX*0.5 - bi.position.x,\n\t\t\t\tyreset = ymin + binsizeY*0.5 - bi.position.y,\n\t\t\t\tzreset = zmin + binsizeZ*0.5 - bi.position.z;\n\n var d = GridBroadphase_collisionPairs_d;\n\t\t\td.set(xreset, yreset, zreset);\n\n\t\t\tfor (var xi = 0, xoff = 0; xi !== nx; xi++, xoff += xstep, d.y = yreset, d.x += binsizeX) {\n\t\t\t\tfor (var yi = 0, yoff = 0; yi !== ny; yi++, yoff += ystep, d.z = zreset, d.y += binsizeY) {\n\t\t\t\t\tfor (var zi = 0, zoff = 0; zi !== nz; zi++, zoff += zstep, d.z += binsizeZ) {\n\t\t\t\t\t\tif (d.dot(planeNormal) < binRadius) {\n\t\t\t\t\t\t\tvar idx = xoff + yoff + zoff;\n\t\t\t\t\t\t\tbins[idx][binLengths[idx]++] = bi;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n break;\n\n default:\n\t\t\tif (bi.aabbNeedsUpdate) {\n\t\t\t\tbi.computeAABB();\n\t\t\t}\n\n\t\t\taddBoxToBins(\n\t\t\t\tbi.aabb.lowerBound.x,\n\t\t\t\tbi.aabb.lowerBound.y,\n\t\t\t\tbi.aabb.lowerBound.z,\n\t\t\t\tbi.aabb.upperBound.x,\n\t\t\t\tbi.aabb.upperBound.y,\n\t\t\t\tbi.aabb.upperBound.z,\n\t\t\t\tbi);\n break;\n }\n }\n\n // Check each bin\n for(var i=0; i!==Nbins; i++){\n\t\tvar binLength = binLengths[i];\n\t\t//Skip bins with no potential collisions\n\t\tif (binLength > 1) {\n\t\t\tvar bin = bins[i];\n\n\t\t\t// Do N^2 broadphase inside\n\t\t\tfor(var xi=0; xi!==binLength; xi++){\n\t\t\t\tvar bi = bin[xi];\n\t\t\t\tfor(var yi=0; yi!==xi; yi++){\n\t\t\t\t\tvar bj = bin[yi];\n\t\t\t\t\tif(this.needBroadphaseCollision(bi,bj)){\n\t\t\t\t\t\tthis.intersectionTest(bi,bj,pairs1,pairs2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n }\n\n//\tfor (var zi = 0, zoff=0; zi < nz; zi++, zoff+= zstep) {\n//\t\tconsole.log(\"layer \"+zi);\n//\t\tfor (var yi = 0, yoff=0; yi < ny; yi++, yoff += ystep) {\n//\t\t\tvar row = '';\n//\t\t\tfor (var xi = 0, xoff=0; xi < nx; xi++, xoff += xstep) {\n//\t\t\t\tvar idx = xoff + yoff + zoff;\n//\t\t\t\trow += ' ' + binLengths[idx];\n//\t\t\t}\n//\t\t\tconsole.log(row);\n//\t\t}\n//\t}\n\n this.makePairsUnique(pairs1,pairs2);\n};\n\n},{\"../math/Vec3\":30,\"../shapes/Shape\":43,\"./Broadphase\":5}],7:[function(_dereq_,module,exports){\nmodule.exports = NaiveBroadphase;\n\nvar Broadphase = _dereq_('./Broadphase');\nvar AABB = _dereq_('./AABB');\n\n/**\n * Naive broadphase implementation, used in lack of better ones.\n * @class NaiveBroadphase\n * @constructor\n * @description The naive broadphase looks at all possible pairs without restriction, therefore it has complexity N^2 (which is bad)\n * @extends Broadphase\n */\nfunction NaiveBroadphase(){\n Broadphase.apply(this);\n}\nNaiveBroadphase.prototype = new Broadphase();\nNaiveBroadphase.prototype.constructor = NaiveBroadphase;\n\n/**\n * Get all the collision pairs in the physics world\n * @method collisionPairs\n * @param {World} world\n * @param {Array} pairs1\n * @param {Array} pairs2\n */\nNaiveBroadphase.prototype.collisionPairs = function(world,pairs1,pairs2){\n var bodies = world.bodies,\n n = bodies.length,\n i,j,bi,bj;\n\n // Naive N^2 ftw!\n for(i=0; i!==n; i++){\n for(j=0; j!==i; j++){\n\n bi = bodies[i];\n bj = bodies[j];\n\n if(!this.needBroadphaseCollision(bi,bj)){\n continue;\n }\n\n this.intersectionTest(bi,bj,pairs1,pairs2);\n }\n }\n};\n\nvar tmpAABB = new AABB();\n\n/**\n * Returns all the bodies within an AABB.\n * @method aabbQuery\n * @param {World} world\n * @param {AABB} aabb\n * @param {array} result An array to store resulting bodies in.\n * @return {array}\n */\nNaiveBroadphase.prototype.aabbQuery = function(world, aabb, result){\n result = result || [];\n\n for(var i = 0; i < world.bodies.length; i++){\n var b = world.bodies[i];\n\n if(b.aabbNeedsUpdate){\n b.computeAABB();\n }\n\n // Ugly hack until Body gets aabb\n if(b.aabb.overlaps(aabb)){\n result.push(b);\n }\n }\n\n return result;\n};\n},{\"./AABB\":3,\"./Broadphase\":5}],8:[function(_dereq_,module,exports){\nmodule.exports = ObjectCollisionMatrix;\n\n/**\n * Records what objects are colliding with each other\n * @class ObjectCollisionMatrix\n * @constructor\n */\nfunction ObjectCollisionMatrix() {\n\n /**\n * The matrix storage\n * @property matrix\n * @type {Object}\n */\n\tthis.matrix = {};\n}\n\n/**\n * @method get\n * @param {Number} i\n * @param {Number} j\n * @return {Number}\n */\nObjectCollisionMatrix.prototype.get = function(i, j) {\n\ti = i.id;\n\tj = j.id;\n if (j > i) {\n var temp = j;\n j = i;\n i = temp;\n }\n\treturn i+'-'+j in this.matrix;\n};\n\n/**\n * @method set\n * @param {Number} i\n * @param {Number} j\n * @param {Number} value\n */\nObjectCollisionMatrix.prototype.set = function(i, j, value) {\n\ti = i.id;\n\tj = j.id;\n if (j > i) {\n var temp = j;\n j = i;\n i = temp;\n\t}\n\tif (value) {\n\t\tthis.matrix[i+'-'+j] = true;\n\t}\n\telse {\n\t\tdelete this.matrix[i+'-'+j];\n\t}\n};\n\n/**\n * Empty the matrix\n * @method reset\n */\nObjectCollisionMatrix.prototype.reset = function() {\n\tthis.matrix = {};\n};\n\n/**\n * Set max number of objects\n * @method setNumObjects\n * @param {Number} n\n */\nObjectCollisionMatrix.prototype.setNumObjects = function(n) {\n};\n\n},{}],9:[function(_dereq_,module,exports){\nmodule.exports = Ray;\n\nvar Vec3 = _dereq_('../math/Vec3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar Transform = _dereq_('../math/Transform');\nvar ConvexPolyhedron = _dereq_('../shapes/ConvexPolyhedron');\nvar Box = _dereq_('../shapes/Box');\nvar RaycastResult = _dereq_('../collision/RaycastResult');\nvar Shape = _dereq_('../shapes/Shape');\nvar AABB = _dereq_('../collision/AABB');\n\n/**\n * A line in 3D space that intersects bodies and return points.\n * @class Ray\n * @constructor\n * @param {Vec3} from\n * @param {Vec3} to\n */\nfunction Ray(from, to){\n /**\n * @property {Vec3} from\n */\n this.from = from ? from.clone() : new Vec3();\n\n /**\n * @property {Vec3} to\n */\n this.to = to ? to.clone() : new Vec3();\n\n /**\n * @private\n * @property {Vec3} _direction\n */\n this._direction = new Vec3();\n\n /**\n * The precision of the ray. Used when checking parallelity etc.\n * @property {Number} precision\n */\n this.precision = 0.0001;\n\n /**\n * Set to true if you want the Ray to take .collisionResponse flags into account on bodies and shapes.\n * @property {Boolean} checkCollisionResponse\n */\n this.checkCollisionResponse = true;\n\n /**\n * If set to true, the ray skips any hits with normal.dot(rayDirection) < 0.\n * @property {Boolean} skipBackfaces\n */\n this.skipBackfaces = false;\n\n /**\n * @property {number} collisionFilterMask\n * @default -1\n */\n this.collisionFilterMask = -1;\n\n /**\n * @property {number} collisionFilterGroup\n * @default -1\n */\n this.collisionFilterGroup = -1;\n\n /**\n * The intersection mode. Should be Ray.ANY, Ray.ALL or Ray.CLOSEST.\n * @property {number} mode\n */\n this.mode = Ray.ANY;\n\n /**\n * Current result object.\n * @property {RaycastResult} result\n */\n this.result = new RaycastResult();\n\n /**\n * Will be set to true during intersectWorld() if the ray hit anything.\n * @property {Boolean} hasHit\n */\n this.hasHit = false;\n\n /**\n * Current, user-provided result callback. Will be used if mode is Ray.ALL.\n * @property {Function} callback\n */\n this.callback = function(result){};\n}\nRay.prototype.constructor = Ray;\n\nRay.CLOSEST = 1;\nRay.ANY = 2;\nRay.ALL = 4;\n\nvar tmpAABB = new AABB();\nvar tmpArray = [];\n\n/**\n * Do itersection against all bodies in the given World.\n * @method intersectWorld\n * @param {World} world\n * @param {object} options\n * @return {Boolean} True if the ray hit anything, otherwise false.\n */\nRay.prototype.intersectWorld = function (world, options) {\n this.mode = options.mode || Ray.ANY;\n this.result = options.result || new RaycastResult();\n this.skipBackfaces = !!options.skipBackfaces;\n this.collisionFilterMask = typeof(options.collisionFilterMask) !== 'undefined' ? options.collisionFilterMask : -1;\n this.collisionFilterGroup = typeof(options.collisionFilterGroup) !== 'undefined' ? options.collisionFilterGroup : -1;\n if(options.from){\n this.from.copy(options.from);\n }\n if(options.to){\n this.to.copy(options.to);\n }\n this.callback = options.callback || function(){};\n this.hasHit = false;\n\n this.result.reset();\n this._updateDirection();\n\n this.getAABB(tmpAABB);\n tmpArray.length = 0;\n world.broadphase.aabbQuery(world, tmpAABB, tmpArray);\n this.intersectBodies(tmpArray);\n\n return this.hasHit;\n};\n\nvar v1 = new Vec3(),\n v2 = new Vec3();\n\n/*\n * As per \"Barycentric Technique\" as named here http://www.blackpawn.com/texts/pointinpoly/default.html But without the division\n */\nRay.pointInTriangle = pointInTriangle;\nfunction pointInTriangle(p, a, b, c) {\n c.vsub(a,v0);\n b.vsub(a,v1);\n p.vsub(a,v2);\n\n var dot00 = v0.dot( v0 );\n var dot01 = v0.dot( v1 );\n var dot02 = v0.dot( v2 );\n var dot11 = v1.dot( v1 );\n var dot12 = v1.dot( v2 );\n\n var u,v;\n\n return ( (u = dot11 * dot02 - dot01 * dot12) >= 0 ) &&\n ( (v = dot00 * dot12 - dot01 * dot02) >= 0 ) &&\n ( u + v < ( dot00 * dot11 - dot01 * dot01 ) );\n}\n\n/**\n * Shoot a ray at a body, get back information about the hit.\n * @method intersectBody\n * @private\n * @param {Body} body\n * @param {RaycastResult} [result] Deprecated - set the result property of the Ray instead.\n */\nvar intersectBody_xi = new Vec3();\nvar intersectBody_qi = new Quaternion();\nRay.prototype.intersectBody = function (body, result) {\n if(result){\n this.result = result;\n this._updateDirection();\n }\n var checkCollisionResponse = this.checkCollisionResponse;\n\n if(checkCollisionResponse && !body.collisionResponse){\n return;\n }\n\n if((this.collisionFilterGroup & body.collisionFilterMask)===0 || (body.collisionFilterGroup & this.collisionFilterMask)===0){\n return;\n }\n\n var xi = intersectBody_xi;\n var qi = intersectBody_qi;\n\n for (var i = 0, N = body.shapes.length; i < N; i++) {\n var shape = body.shapes[i];\n\n if(checkCollisionResponse && !shape.collisionResponse){\n continue; // Skip\n }\n\n body.quaternion.mult(body.shapeOrientations[i], qi);\n body.quaternion.vmult(body.shapeOffsets[i], xi);\n xi.vadd(body.position, xi);\n\n this.intersectShape(\n shape,\n qi,\n xi,\n body\n );\n\n if(this.result._shouldStop){\n break;\n }\n }\n};\n\n/**\n * @method intersectBodies\n * @param {Array} bodies An array of Body objects.\n * @param {RaycastResult} [result] Deprecated\n */\nRay.prototype.intersectBodies = function (bodies, result) {\n if(result){\n this.result = result;\n this._updateDirection();\n }\n\n for ( var i = 0, l = bodies.length; !this.result._shouldStop && i < l; i ++ ) {\n this.intersectBody(bodies[i]);\n }\n};\n\n/**\n * Updates the _direction vector.\n * @private\n * @method _updateDirection\n */\nRay.prototype._updateDirection = function(){\n this.to.vsub(this.from, this._direction);\n this._direction.normalize();\n};\n\n/**\n * @method intersectShape\n * @private\n * @param {Shape} shape\n * @param {Quaternion} quat\n * @param {Vec3} position\n * @param {Body} body\n */\nRay.prototype.intersectShape = function(shape, quat, position, body){\n var from = this.from;\n\n\n // Checking boundingSphere\n var distance = distanceFromIntersection(from, this._direction, position);\n if ( distance > shape.boundingSphereRadius ) {\n return;\n }\n\n var intersectMethod = this[shape.type];\n if(intersectMethod){\n intersectMethod.call(this, shape, quat, position, body);\n }\n};\n\nvar vector = new Vec3();\nvar normal = new Vec3();\nvar intersectPoint = new Vec3();\n\nvar a = new Vec3();\nvar b = new Vec3();\nvar c = new Vec3();\nvar d = new Vec3();\n\nvar tmpRaycastResult = new RaycastResult();\n\n/**\n * @method intersectBox\n * @private\n * @param {Shape} shape\n * @param {Quaternion} quat\n * @param {Vec3} position\n * @param {Body} body\n */\nRay.prototype.intersectBox = function(shape, quat, position, body){\n return this.intersectConvex(shape.convexPolyhedronRepresentation, quat, position, body);\n};\nRay.prototype[Shape.types.BOX] = Ray.prototype.intersectBox;\n\n/**\n * @method intersectPlane\n * @private\n * @param {Shape} shape\n * @param {Quaternion} quat\n * @param {Vec3} position\n * @param {Body} body\n */\nRay.prototype.intersectPlane = function(shape, quat, position, body){\n var from = this.from;\n var to = this.to;\n var direction = this._direction;\n\n // Get plane normal\n var worldNormal = new Vec3(0, 0, 1);\n quat.vmult(worldNormal, worldNormal);\n\n var len = new Vec3();\n from.vsub(position, len);\n var planeToFrom = len.dot(worldNormal);\n to.vsub(position, len);\n var planeToTo = len.dot(worldNormal);\n\n if(planeToFrom * planeToTo > 0){\n // \"from\" and \"to\" are on the same side of the plane... bail out\n return;\n }\n\n if(from.distanceTo(to) < planeToFrom){\n return;\n }\n\n var n_dot_dir = worldNormal.dot(direction);\n\n if (Math.abs(n_dot_dir) < this.precision) {\n // No intersection\n return;\n }\n\n var planePointToFrom = new Vec3();\n var dir_scaled_with_t = new Vec3();\n var hitPointWorld = new Vec3();\n\n from.vsub(position, planePointToFrom);\n var t = -worldNormal.dot(planePointToFrom) / n_dot_dir;\n direction.scale(t, dir_scaled_with_t);\n from.vadd(dir_scaled_with_t, hitPointWorld);\n\n this.reportIntersection(worldNormal, hitPointWorld, shape, body, -1);\n};\nRay.prototype[Shape.types.PLANE] = Ray.prototype.intersectPlane;\n\n/**\n * Get the world AABB of the ray.\n * @method getAABB\n * @param {AABB} aabb\n */\nRay.prototype.getAABB = function(result){\n var to = this.to;\n var from = this.from;\n result.lowerBound.x = Math.min(to.x, from.x);\n result.lowerBound.y = Math.min(to.y, from.y);\n result.lowerBound.z = Math.min(to.z, from.z);\n result.upperBound.x = Math.max(to.x, from.x);\n result.upperBound.y = Math.max(to.y, from.y);\n result.upperBound.z = Math.max(to.z, from.z);\n};\n\nvar intersectConvexOptions = {\n faceList: [0]\n};\n\n/**\n * @method intersectHeightfield\n * @private\n * @param {Shape} shape\n * @param {Quaternion} quat\n * @param {Vec3} position\n * @param {Body} body\n */\nRay.prototype.intersectHeightfield = function(shape, quat, position, body){\n var data = shape.data,\n w = shape.elementSize,\n worldPillarOffset = new Vec3();\n\n // Convert the ray to local heightfield coordinates\n var localRay = new Ray(this.from, this.to);\n Transform.pointToLocalFrame(position, quat, localRay.from, localRay.from);\n Transform.pointToLocalFrame(position, quat, localRay.to, localRay.to);\n\n // Get the index of the data points to test against\n var index = [];\n var iMinX = null;\n var iMinY = null;\n var iMaxX = null;\n var iMaxY = null;\n\n var inside = shape.getIndexOfPosition(localRay.from.x, localRay.from.y, index, false);\n if(inside){\n iMinX = index[0];\n iMinY = index[1];\n iMaxX = index[0];\n iMaxY = index[1];\n }\n inside = shape.getIndexOfPosition(localRay.to.x, localRay.to.y, index, false);\n if(inside){\n if (iMinX === null || index[0] < iMinX) { iMinX = index[0]; }\n if (iMaxX === null || index[0] > iMaxX) { iMaxX = index[0]; }\n if (iMinY === null || index[1] < iMinY) { iMinY = index[1]; }\n if (iMaxY === null || index[1] > iMaxY) { iMaxY = index[1]; }\n }\n\n if(iMinX === null){\n return;\n }\n\n var minMax = [];\n shape.getRectMinMax(iMinX, iMinY, iMaxX, iMaxY, minMax);\n var min = minMax[0];\n var max = minMax[1];\n\n // // Bail out if the ray can't touch the bounding box\n // // TODO\n // var aabb = new AABB();\n // this.getAABB(aabb);\n // if(aabb.intersects()){\n // return;\n // }\n\n for(var i = iMinX; i <= iMaxX; i++){\n for(var j = iMinY; j <= iMaxY; j++){\n\n if(this.result._shouldStop){\n return;\n }\n\n // Lower triangle\n shape.getConvexTrianglePillar(i, j, false);\n Transform.pointToWorldFrame(position, quat, shape.pillarOffset, worldPillarOffset);\n this.intersectConvex(shape.pillarConvex, quat, worldPillarOffset, body, intersectConvexOptions);\n\n if(this.result._shouldStop){\n return;\n }\n\n // Upper triangle\n shape.getConvexTrianglePillar(i, j, true);\n Transform.pointToWorldFrame(position, quat, shape.pillarOffset, worldPillarOffset);\n this.intersectConvex(shape.pillarConvex, quat, worldPillarOffset, body, intersectConvexOptions);\n }\n }\n};\nRay.prototype[Shape.types.HEIGHTFIELD] = Ray.prototype.intersectHeightfield;\n\nvar Ray_intersectSphere_intersectionPoint = new Vec3();\nvar Ray_intersectSphere_normal = new Vec3();\n\n/**\n * @method intersectSphere\n * @private\n * @param {Shape} shape\n * @param {Quaternion} quat\n * @param {Vec3} position\n * @param {Body} body\n */\nRay.prototype.intersectSphere = function(shape, quat, position, body){\n var from = this.from,\n to = this.to,\n r = shape.radius;\n\n var a = Math.pow(to.x - from.x, 2) + Math.pow(to.y - from.y, 2) + Math.pow(to.z - from.z, 2);\n var b = 2 * ((to.x - from.x) * (from.x - position.x) + (to.y - from.y) * (from.y - position.y) + (to.z - from.z) * (from.z - position.z));\n var c = Math.pow(from.x - position.x, 2) + Math.pow(from.y - position.y, 2) + Math.pow(from.z - position.z, 2) - Math.pow(r, 2);\n\n var delta = Math.pow(b, 2) - 4 * a * c;\n\n var intersectionPoint = Ray_intersectSphere_intersectionPoint;\n var normal = Ray_intersectSphere_normal;\n\n if(delta < 0){\n // No intersection\n return;\n\n } else if(delta === 0){\n // single intersection point\n from.lerp(to, delta, intersectionPoint);\n\n intersectionPoint.vsub(position, normal);\n normal.normalize();\n\n this.reportIntersection(normal, intersectionPoint, shape, body, -1);\n\n } else {\n var d1 = (- b - Math.sqrt(delta)) / (2 * a);\n var d2 = (- b + Math.sqrt(delta)) / (2 * a);\n\n if(d1 >= 0 && d1 <= 1){\n from.lerp(to, d1, intersectionPoint);\n intersectionPoint.vsub(position, normal);\n normal.normalize();\n this.reportIntersection(normal, intersectionPoint, shape, body, -1);\n }\n\n if(this.result._shouldStop){\n return;\n }\n\n if(d2 >= 0 && d2 <= 1){\n from.lerp(to, d2, intersectionPoint);\n intersectionPoint.vsub(position, normal);\n normal.normalize();\n this.reportIntersection(normal, intersectionPoint, shape, body, -1);\n }\n }\n};\nRay.prototype[Shape.types.SPHERE] = Ray.prototype.intersectSphere;\n\n\nvar intersectConvex_normal = new Vec3();\nvar intersectConvex_minDistNormal = new Vec3();\nvar intersectConvex_minDistIntersect = new Vec3();\nvar intersectConvex_vector = new Vec3();\n\n/**\n * @method intersectConvex\n * @private\n * @param {Shape} shape\n * @param {Quaternion} quat\n * @param {Vec3} position\n * @param {Body} body\n * @param {object} [options]\n * @param {array} [options.faceList]\n */\nRay.prototype.intersectConvex = function intersectConvex(\n shape,\n quat,\n position,\n body,\n options\n){\n var minDistNormal = intersectConvex_minDistNormal;\n var normal = intersectConvex_normal;\n var vector = intersectConvex_vector;\n var minDistIntersect = intersectConvex_minDistIntersect;\n var faceList = (options && options.faceList) || null;\n\n // Checking faces\n var faces = shape.faces,\n vertices = shape.vertices,\n normals = shape.faceNormals;\n var direction = this._direction;\n\n var from = this.from;\n var to = this.to;\n var fromToDistance = from.distanceTo(to);\n\n var minDist = -1;\n var Nfaces = faceList ? faceList.length : faces.length;\n var result = this.result;\n\n for (var j = 0; !result._shouldStop && j < Nfaces; j++) {\n var fi = faceList ? faceList[j] : j;\n\n var face = faces[fi];\n var faceNormal = normals[fi];\n var q = quat;\n var x = position;\n\n // determine if ray intersects the plane of the face\n // note: this works regardless of the direction of the face normal\n\n // Get plane point in world coordinates...\n vector.copy(vertices[face[0]]);\n q.vmult(vector,vector);\n vector.vadd(x,vector);\n\n // ...but make it relative to the ray from. We'll fix this later.\n vector.vsub(from,vector);\n\n // Get plane normal\n q.vmult(faceNormal,normal);\n\n // If this dot product is negative, we have something interesting\n var dot = direction.dot(normal);\n\n // Bail out if ray and plane are parallel\n if ( Math.abs( dot ) < this.precision ){\n continue;\n }\n\n // calc distance to plane\n var scalar = normal.dot(vector) / dot;\n\n // if negative distance, then plane is behind ray\n if (scalar < 0){\n continue;\n }\n\n // if (dot < 0) {\n\n // Intersection point is from + direction * scalar\n direction.mult(scalar,intersectPoint);\n intersectPoint.vadd(from,intersectPoint);\n\n // a is the point we compare points b and c with.\n a.copy(vertices[face[0]]);\n q.vmult(a,a);\n x.vadd(a,a);\n\n for(var i = 1; !result._shouldStop && i < face.length - 1; i++){\n // Transform 3 vertices to world coords\n b.copy(vertices[face[i]]);\n c.copy(vertices[face[i+1]]);\n q.vmult(b,b);\n q.vmult(c,c);\n x.vadd(b,b);\n x.vadd(c,c);\n\n var distance = intersectPoint.distanceTo(from);\n\n if(!(pointInTriangle(intersectPoint, a, b, c) || pointInTriangle(intersectPoint, b, a, c)) || distance > fromToDistance){\n continue;\n }\n\n this.reportIntersection(normal, intersectPoint, shape, body, fi);\n }\n // }\n }\n};\nRay.prototype[Shape.types.CONVEXPOLYHEDRON] = Ray.prototype.intersectConvex;\n\nvar intersectTrimesh_normal = new Vec3();\nvar intersectTrimesh_localDirection = new Vec3();\nvar intersectTrimesh_localFrom = new Vec3();\nvar intersectTrimesh_localTo = new Vec3();\nvar intersectTrimesh_worldNormal = new Vec3();\nvar intersectTrimesh_worldIntersectPoint = new Vec3();\nvar intersectTrimesh_localAABB = new AABB();\nvar intersectTrimesh_triangles = [];\nvar intersectTrimesh_treeTransform = new Transform();\n\n/**\n * @method intersectTrimesh\n * @private\n * @param {Shape} shape\n * @param {Quaternion} quat\n * @param {Vec3} position\n * @param {Body} body\n * @param {object} [options]\n * @todo Optimize by transforming the world to local space first.\n * @todo Use Octree lookup\n */\nRay.prototype.intersectTrimesh = function intersectTrimesh(\n mesh,\n quat,\n position,\n body,\n options\n){\n var normal = intersectTrimesh_normal;\n var triangles = intersectTrimesh_triangles;\n var treeTransform = intersectTrimesh_treeTransform;\n var minDistNormal = intersectConvex_minDistNormal;\n var vector = intersectConvex_vector;\n var minDistIntersect = intersectConvex_minDistIntersect;\n var localAABB = intersectTrimesh_localAABB;\n var localDirection = intersectTrimesh_localDirection;\n var localFrom = intersectTrimesh_localFrom;\n var localTo = intersectTrimesh_localTo;\n var worldIntersectPoint = intersectTrimesh_worldIntersectPoint;\n var worldNormal = intersectTrimesh_worldNormal;\n var faceList = (options && options.faceList) || null;\n\n // Checking faces\n var indices = mesh.indices,\n vertices = mesh.vertices,\n normals = mesh.faceNormals;\n\n var from = this.from;\n var to = this.to;\n var direction = this._direction;\n\n var minDist = -1;\n treeTransform.position.copy(position);\n treeTransform.quaternion.copy(quat);\n\n // Transform ray to local space!\n Transform.vectorToLocalFrame(position, quat, direction, localDirection);\n //body.vectorToLocalFrame(direction, localDirection);\n Transform.pointToLocalFrame(position, quat, from, localFrom);\n //body.pointToLocalFrame(from, localFrom);\n Transform.pointToLocalFrame(position, quat, to, localTo);\n //body.pointToLocalFrame(to, localTo);\n var fromToDistanceSquared = localFrom.distanceSquared(localTo);\n\n mesh.tree.rayQuery(this, treeTransform, triangles);\n\n for (var i = 0, N = triangles.length; !this.result._shouldStop && i !== N; i++) {\n var trianglesIndex = triangles[i];\n\n mesh.getNormal(trianglesIndex, normal);\n\n // determine if ray intersects the plane of the face\n // note: this works regardless of the direction of the face normal\n\n // Get plane point in world coordinates...\n mesh.getVertex(indices[trianglesIndex * 3], a);\n\n // ...but make it relative to the ray from. We'll fix this later.\n a.vsub(localFrom,vector);\n\n // Get plane normal\n // quat.vmult(normal, normal);\n\n // If this dot product is negative, we have something interesting\n var dot = localDirection.dot(normal);\n\n // Bail out if ray and plane are parallel\n // if (Math.abs( dot ) < this.precision){\n // continue;\n // }\n\n // calc distance to plane\n var scalar = normal.dot(vector) / dot;\n\n // if negative distance, then plane is behind ray\n if (scalar < 0){\n continue;\n }\n\n // Intersection point is from + direction * scalar\n localDirection.scale(scalar,intersectPoint);\n intersectPoint.vadd(localFrom,intersectPoint);\n\n // Get triangle vertices\n mesh.getVertex(indices[trianglesIndex * 3 + 1], b);\n mesh.getVertex(indices[trianglesIndex * 3 + 2], c);\n\n var squaredDistance = intersectPoint.distanceSquared(localFrom);\n\n if(!(pointInTriangle(intersectPoint, b, a, c) || pointInTriangle(intersectPoint, a, b, c)) || squaredDistance > fromToDistanceSquared){\n continue;\n }\n\n // transform intersectpoint and normal to world\n Transform.vectorToWorldFrame(quat, normal, worldNormal);\n //body.vectorToWorldFrame(normal, worldNormal);\n Transform.pointToWorldFrame(position, quat, intersectPoint, worldIntersectPoint);\n //body.pointToWorldFrame(intersectPoint, worldIntersectPoint);\n this.reportIntersection(worldNormal, worldIntersectPoint, mesh, body, trianglesIndex);\n }\n triangles.length = 0;\n};\nRay.prototype[Shape.types.TRIMESH] = Ray.prototype.intersectTrimesh;\n\n\n/**\n * @method reportIntersection\n * @private\n * @param {Vec3} normal\n * @param {Vec3} hitPointWorld\n * @param {Shape} shape\n * @param {Body} body\n * @return {boolean} True if the intersections should continue\n */\nRay.prototype.reportIntersection = function(normal, hitPointWorld, shape, body, hitFaceIndex){\n var from = this.from;\n var to = this.to;\n var distance = from.distanceTo(hitPointWorld);\n var result = this.result;\n\n // Skip back faces?\n if(this.skipBackfaces && normal.dot(this._direction) > 0){\n return;\n }\n\n result.hitFaceIndex = typeof(hitFaceIndex) !== 'undefined' ? hitFaceIndex : -1;\n\n switch(this.mode){\n case Ray.ALL:\n this.hasHit = true;\n result.set(\n from,\n to,\n normal,\n hitPointWorld,\n shape,\n body,\n distance\n );\n result.hasHit = true;\n this.callback(result);\n break;\n\n case Ray.CLOSEST:\n\n // Store if closer than current closest\n if(distance < result.distance || !result.hasHit){\n this.hasHit = true;\n result.hasHit = true;\n result.set(\n from,\n to,\n normal,\n hitPointWorld,\n shape,\n body,\n distance\n );\n }\n break;\n\n case Ray.ANY:\n\n // Report and stop.\n this.hasHit = true;\n result.hasHit = true;\n result.set(\n from,\n to,\n normal,\n hitPointWorld,\n shape,\n body,\n distance\n );\n result._shouldStop = true;\n break;\n }\n};\n\nvar v0 = new Vec3(),\n intersect = new Vec3();\nfunction distanceFromIntersection(from, direction, position) {\n\n // v0 is vector from from to position\n position.vsub(from,v0);\n var dot = v0.dot(direction);\n\n // intersect = direction*dot + from\n direction.mult(dot,intersect);\n intersect.vadd(from,intersect);\n\n var distance = position.distanceTo(intersect);\n\n return distance;\n}\n\n\n},{\"../collision/AABB\":3,\"../collision/RaycastResult\":10,\"../math/Quaternion\":28,\"../math/Transform\":29,\"../math/Vec3\":30,\"../shapes/Box\":37,\"../shapes/ConvexPolyhedron\":38,\"../shapes/Shape\":43}],10:[function(_dereq_,module,exports){\nvar Vec3 = _dereq_('../math/Vec3');\n\nmodule.exports = RaycastResult;\n\n/**\n * Storage for Ray casting data.\n * @class RaycastResult\n * @constructor\n */\nfunction RaycastResult(){\n\n\t/**\n\t * @property {Vec3} rayFromWorld\n\t */\n\tthis.rayFromWorld = new Vec3();\n\n\t/**\n\t * @property {Vec3} rayToWorld\n\t */\n\tthis.rayToWorld = new Vec3();\n\n\t/**\n\t * @property {Vec3} hitNormalWorld\n\t */\n\tthis.hitNormalWorld = new Vec3();\n\n\t/**\n\t * @property {Vec3} hitPointWorld\n\t */\n\tthis.hitPointWorld = new Vec3();\n\n\t/**\n\t * @property {boolean} hasHit\n\t */\n\tthis.hasHit = false;\n\n\t/**\n\t * The hit shape, or null.\n\t * @property {Shape} shape\n\t */\n\tthis.shape = null;\n\n\t/**\n\t * The hit body, or null.\n\t * @property {Body} body\n\t */\n\tthis.body = null;\n\n\t/**\n\t * The index of the hit triangle, if the hit shape was a trimesh.\n\t * @property {number} hitFaceIndex\n\t * @default -1\n\t */\n\tthis.hitFaceIndex = -1;\n\n\t/**\n\t * Distance to the hit. Will be set to -1 if there was no hit.\n\t * @property {number} distance\n\t * @default -1\n\t */\n\tthis.distance = -1;\n\n\t/**\n\t * If the ray should stop traversing the bodies.\n\t * @private\n\t * @property {Boolean} _shouldStop\n\t * @default false\n\t */\n\tthis._shouldStop = false;\n}\n\n/**\n * Reset all result data.\n * @method reset\n */\nRaycastResult.prototype.reset = function () {\n\tthis.rayFromWorld.setZero();\n\tthis.rayToWorld.setZero();\n\tthis.hitNormalWorld.setZero();\n\tthis.hitPointWorld.setZero();\n\tthis.hasHit = false;\n\tthis.shape = null;\n\tthis.body = null;\n\tthis.hitFaceIndex = -1;\n\tthis.distance = -1;\n\tthis._shouldStop = false;\n};\n\n/**\n * @method abort\n */\nRaycastResult.prototype.abort = function(){\n\tthis._shouldStop = true;\n};\n\n/**\n * @method set\n * @param {Vec3} rayFromWorld\n * @param {Vec3} rayToWorld\n * @param {Vec3} hitNormalWorld\n * @param {Vec3} hitPointWorld\n * @param {Shape} shape\n * @param {Body} body\n * @param {number} distance\n */\nRaycastResult.prototype.set = function(\n\trayFromWorld,\n\trayToWorld,\n\thitNormalWorld,\n\thitPointWorld,\n\tshape,\n\tbody,\n\tdistance\n){\n\tthis.rayFromWorld.copy(rayFromWorld);\n\tthis.rayToWorld.copy(rayToWorld);\n\tthis.hitNormalWorld.copy(hitNormalWorld);\n\tthis.hitPointWorld.copy(hitPointWorld);\n\tthis.shape = shape;\n\tthis.body = body;\n\tthis.distance = distance;\n};\n},{\"../math/Vec3\":30}],11:[function(_dereq_,module,exports){\nvar Shape = _dereq_('../shapes/Shape');\nvar Broadphase = _dereq_('../collision/Broadphase');\n\nmodule.exports = SAPBroadphase;\n\n/**\n * Sweep and prune broadphase along one axis.\n *\n * @class SAPBroadphase\n * @constructor\n * @param {World} [world]\n * @extends Broadphase\n */\nfunction SAPBroadphase(world){\n Broadphase.apply(this);\n\n /**\n * List of bodies currently in the broadphase.\n * @property axisList\n * @type {Array}\n */\n this.axisList = [];\n\n /**\n * The world to search in.\n * @property world\n * @type {World}\n */\n this.world = null;\n\n /**\n * Axis to sort the bodies along. Set to 0 for x axis, and 1 for y axis. For best performance, choose an axis that the bodies are spread out more on.\n * @property axisIndex\n * @type {Number}\n */\n this.axisIndex = 0;\n\n var axisList = this.axisList;\n\n this._addBodyHandler = function(e){\n axisList.push(e.body);\n };\n\n this._removeBodyHandler = function(e){\n var idx = axisList.indexOf(e.body);\n if(idx !== -1){\n axisList.splice(idx,1);\n }\n };\n\n if(world){\n this.setWorld(world);\n }\n}\nSAPBroadphase.prototype = new Broadphase();\n\n/**\n * Change the world\n * @method setWorld\n * @param {World} world\n */\nSAPBroadphase.prototype.setWorld = function(world){\n // Clear the old axis array\n this.axisList.length = 0;\n\n // Add all bodies from the new world\n for(var i=0; i=0;j--) {\n if(a[j].aabb.lowerBound.x <= v.aabb.lowerBound.x){\n break;\n }\n a[j+1] = a[j];\n }\n a[j+1] = v;\n }\n return a;\n};\n\n/**\n * @static\n * @method insertionSortY\n * @param {Array} a\n * @return {Array}\n */\nSAPBroadphase.insertionSortY = function(a) {\n for(var i=1,l=a.length;i=0;j--) {\n if(a[j].aabb.lowerBound.y <= v.aabb.lowerBound.y){\n break;\n }\n a[j+1] = a[j];\n }\n a[j+1] = v;\n }\n return a;\n};\n\n/**\n * @static\n * @method insertionSortZ\n * @param {Array} a\n * @return {Array}\n */\nSAPBroadphase.insertionSortZ = function(a) {\n for(var i=1,l=a.length;i=0;j--) {\n if(a[j].aabb.lowerBound.z <= v.aabb.lowerBound.z){\n break;\n }\n a[j+1] = a[j];\n }\n a[j+1] = v;\n }\n return a;\n};\n\n/**\n * Collect all collision pairs\n * @method collisionPairs\n * @param {World} world\n * @param {Array} p1\n * @param {Array} p2\n */\nSAPBroadphase.prototype.collisionPairs = function(world,p1,p2){\n var bodies = this.axisList,\n N = bodies.length,\n axisIndex = this.axisIndex,\n i, j;\n\n if(this.dirty){\n this.sortList();\n this.dirty = false;\n }\n\n // Look through the list\n for(i=0; i !== N; i++){\n var bi = bodies[i];\n\n for(j=i+1; j < N; j++){\n var bj = bodies[j];\n\n if(!this.needBroadphaseCollision(bi,bj)){\n continue;\n }\n\n if(!SAPBroadphase.checkBounds(bi,bj,axisIndex)){\n break;\n }\n\n this.intersectionTest(bi,bj,p1,p2);\n }\n }\n};\n\nSAPBroadphase.prototype.sortList = function(){\n var axisList = this.axisList;\n var axisIndex = this.axisIndex;\n var N = axisList.length;\n\n // Update AABBs\n for(var i = 0; i!==N; i++){\n var bi = axisList[i];\n if(bi.aabbNeedsUpdate){\n bi.computeAABB();\n }\n }\n\n // Sort the list\n if(axisIndex === 0){\n SAPBroadphase.insertionSortX(axisList);\n } else if(axisIndex === 1){\n SAPBroadphase.insertionSortY(axisList);\n } else if(axisIndex === 2){\n SAPBroadphase.insertionSortZ(axisList);\n }\n};\n\n/**\n * Check if the bounds of two bodies overlap, along the given SAP axis.\n * @static\n * @method checkBounds\n * @param {Body} bi\n * @param {Body} bj\n * @param {Number} axisIndex\n * @return {Boolean}\n */\nSAPBroadphase.checkBounds = function(bi, bj, axisIndex){\n var biPos;\n var bjPos;\n\n if(axisIndex === 0){\n biPos = bi.position.x;\n bjPos = bj.position.x;\n } else if(axisIndex === 1){\n biPos = bi.position.y;\n bjPos = bj.position.y;\n } else if(axisIndex === 2){\n biPos = bi.position.z;\n bjPos = bj.position.z;\n }\n\n var ri = bi.boundingRadius,\n rj = bj.boundingRadius,\n boundA1 = biPos - ri,\n boundA2 = biPos + ri,\n boundB1 = bjPos - rj,\n boundB2 = bjPos + rj;\n\n return boundB1 < boundA2;\n};\n\n/**\n * Computes the variance of the body positions and estimates the best\n * axis to use. Will automatically set property .axisIndex.\n * @method autoDetectAxis\n */\nSAPBroadphase.prototype.autoDetectAxis = function(){\n var sumX=0,\n sumX2=0,\n sumY=0,\n sumY2=0,\n sumZ=0,\n sumZ2=0,\n bodies = this.axisList,\n N = bodies.length,\n invN=1/N;\n\n for(var i=0; i!==N; i++){\n var b = bodies[i];\n\n var centerX = b.position.x;\n sumX += centerX;\n sumX2 += centerX*centerX;\n\n var centerY = b.position.y;\n sumY += centerY;\n sumY2 += centerY*centerY;\n\n var centerZ = b.position.z;\n sumZ += centerZ;\n sumZ2 += centerZ*centerZ;\n }\n\n var varianceX = sumX2 - sumX*sumX*invN,\n varianceY = sumY2 - sumY*sumY*invN,\n varianceZ = sumZ2 - sumZ*sumZ*invN;\n\n if(varianceX > varianceY){\n if(varianceX > varianceZ){\n this.axisIndex = 0;\n } else{\n this.axisIndex = 2;\n }\n } else if(varianceY > varianceZ){\n this.axisIndex = 1;\n } else{\n this.axisIndex = 2;\n }\n};\n\n/**\n * Returns all the bodies within an AABB.\n * @method aabbQuery\n * @param {World} world\n * @param {AABB} aabb\n * @param {array} result An array to store resulting bodies in.\n * @return {array}\n */\nSAPBroadphase.prototype.aabbQuery = function(world, aabb, result){\n result = result || [];\n\n if(this.dirty){\n this.sortList();\n this.dirty = false;\n }\n\n var axisIndex = this.axisIndex, axis = 'x';\n if(axisIndex === 1){ axis = 'y'; }\n if(axisIndex === 2){ axis = 'z'; }\n\n var axisList = this.axisList;\n var lower = aabb.lowerBound[axis];\n var upper = aabb.upperBound[axis];\n for(var i = 0; i < axisList.length; i++){\n var b = axisList[i];\n\n if(b.aabbNeedsUpdate){\n b.computeAABB();\n }\n\n if(b.aabb.overlaps(aabb)){\n result.push(b);\n }\n }\n\n return result;\n};\n},{\"../collision/Broadphase\":5,\"../shapes/Shape\":43}],12:[function(_dereq_,module,exports){\nmodule.exports = ConeTwistConstraint;\n\nvar Constraint = _dereq_('./Constraint');\nvar PointToPointConstraint = _dereq_('./PointToPointConstraint');\nvar ConeEquation = _dereq_('../equations/ConeEquation');\nvar RotationalEquation = _dereq_('../equations/RotationalEquation');\nvar ContactEquation = _dereq_('../equations/ContactEquation');\nvar Vec3 = _dereq_('../math/Vec3');\n\n/**\n * @class ConeTwistConstraint\n * @constructor\n * @author schteppe\n * @param {Body} bodyA\n * @param {Body} bodyB\n * @param {object} [options]\n * @param {Vec3} [options.pivotA]\n * @param {Vec3} [options.pivotB]\n * @param {Vec3} [options.axisA]\n * @param {Vec3} [options.axisB]\n * @param {Number} [options.maxForce=1e6]\n * @extends PointToPointConstraint\n */\nfunction ConeTwistConstraint(bodyA, bodyB, options){\n options = options || {};\n var maxForce = typeof(options.maxForce) !== 'undefined' ? options.maxForce : 1e6;\n\n // Set pivot point in between\n var pivotA = options.pivotA ? options.pivotA.clone() : new Vec3();\n var pivotB = options.pivotB ? options.pivotB.clone() : new Vec3();\n this.axisA = options.axisA ? options.axisA.clone() : new Vec3();\n this.axisB = options.axisB ? options.axisB.clone() : new Vec3();\n\n PointToPointConstraint.call(this, bodyA, pivotA, bodyB, pivotB, maxForce);\n\n this.collideConnected = !!options.collideConnected;\n\n this.angle = typeof(options.angle) !== 'undefined' ? options.angle : 0;\n\n /**\n * @property {ConeEquation} coneEquation\n */\n var c = this.coneEquation = new ConeEquation(bodyA,bodyB,options);\n\n /**\n * @property {RotationalEquation} twistEquation\n */\n var t = this.twistEquation = new RotationalEquation(bodyA,bodyB,options);\n this.twistAngle = typeof(options.twistAngle) !== 'undefined' ? options.twistAngle : 0;\n\n // Make the cone equation push the bodies toward the cone axis, not outward\n c.maxForce = 0;\n c.minForce = -maxForce;\n\n // Make the twist equation add torque toward the initial position\n t.maxForce = 0;\n t.minForce = -maxForce;\n\n this.equations.push(c, t);\n}\nConeTwistConstraint.prototype = new PointToPointConstraint();\nConeTwistConstraint.constructor = ConeTwistConstraint;\n\nvar ConeTwistConstraint_update_tmpVec1 = new Vec3();\nvar ConeTwistConstraint_update_tmpVec2 = new Vec3();\n\nConeTwistConstraint.prototype.update = function(){\n var bodyA = this.bodyA,\n bodyB = this.bodyB,\n cone = this.coneEquation,\n twist = this.twistEquation;\n\n PointToPointConstraint.prototype.update.call(this);\n\n // Update the axes to the cone constraint\n bodyA.vectorToWorldFrame(this.axisA, cone.axisA);\n bodyB.vectorToWorldFrame(this.axisB, cone.axisB);\n\n // Update the world axes in the twist constraint\n this.axisA.tangents(twist.axisA, twist.axisA);\n bodyA.vectorToWorldFrame(twist.axisA, twist.axisA);\n\n this.axisB.tangents(twist.axisB, twist.axisB);\n bodyB.vectorToWorldFrame(twist.axisB, twist.axisB);\n\n cone.angle = this.angle;\n twist.maxAngle = this.twistAngle;\n};\n\n\n},{\"../equations/ConeEquation\":18,\"../equations/ContactEquation\":19,\"../equations/RotationalEquation\":22,\"../math/Vec3\":30,\"./Constraint\":13,\"./PointToPointConstraint\":17}],13:[function(_dereq_,module,exports){\nmodule.exports = Constraint;\n\nvar Utils = _dereq_('../utils/Utils');\n\n/**\n * Constraint base class\n * @class Constraint\n * @author schteppe\n * @constructor\n * @param {Body} bodyA\n * @param {Body} bodyB\n * @param {object} [options]\n * @param {boolean} [options.collideConnected=true]\n * @param {boolean} [options.wakeUpBodies=true]\n */\nfunction Constraint(bodyA, bodyB, options){\n options = Utils.defaults(options,{\n collideConnected : true,\n wakeUpBodies : true,\n });\n\n /**\n * Equations to be solved in this constraint\n * @property equations\n * @type {Array}\n */\n this.equations = [];\n\n /**\n * @property {Body} bodyA\n */\n this.bodyA = bodyA;\n\n /**\n * @property {Body} bodyB\n */\n this.bodyB = bodyB;\n\n /**\n * @property {Number} id\n */\n this.id = Constraint.idCounter++;\n\n /**\n * Set to true if you want the bodies to collide when they are connected.\n * @property collideConnected\n * @type {boolean}\n */\n this.collideConnected = options.collideConnected;\n\n if(options.wakeUpBodies){\n if(bodyA){\n bodyA.wakeUp();\n }\n if(bodyB){\n bodyB.wakeUp();\n }\n }\n}\n\n/**\n * Update all the equations with data.\n * @method update\n */\nConstraint.prototype.update = function(){\n throw new Error(\"method update() not implmemented in this Constraint subclass!\");\n};\n\n/**\n * Enables all equations in the constraint.\n * @method enable\n */\nConstraint.prototype.enable = function(){\n var eqs = this.equations;\n for(var i=0; i\n // G = [0 axisA 0 -axisB]\n\n GA.rotational.copy(axisA);\n axisB.negate(GB.rotational);\n\n var GW = this.computeGW() - this.targetVelocity,\n GiMf = this.computeGiMf();\n\n var B = - GW * b - h * GiMf;\n\n return B;\n};\n\n},{\"../math/Mat3\":27,\"../math/Vec3\":30,\"./Equation\":20}],24:[function(_dereq_,module,exports){\nvar Utils = _dereq_('../utils/Utils');\n\nmodule.exports = ContactMaterial;\n\n/**\n * Defines what happens when two materials meet.\n * @class ContactMaterial\n * @constructor\n * @param {Material} m1\n * @param {Material} m2\n * @param {object} [options]\n * @param {Number} [options.friction=0.3]\n * @param {Number} [options.restitution=0.3]\n * @param {number} [options.contactEquationStiffness=1e7]\n * @param {number} [options.contactEquationRelaxation=3]\n * @param {number} [options.frictionEquationStiffness=1e7]\n * @param {Number} [options.frictionEquationRelaxation=3]\n */\nfunction ContactMaterial(m1, m2, options){\n options = Utils.defaults(options, {\n friction: 0.3,\n restitution: 0.3,\n contactEquationStiffness: 1e7,\n contactEquationRelaxation: 3,\n frictionEquationStiffness: 1e7,\n frictionEquationRelaxation: 3\n });\n\n /**\n * Identifier of this material\n * @property {Number} id\n */\n this.id = ContactMaterial.idCounter++;\n\n /**\n * Participating materials\n * @property {Array} materials\n * @todo Should be .materialA and .materialB instead\n */\n this.materials = [m1, m2];\n\n /**\n * Friction coefficient\n * @property {Number} friction\n */\n this.friction = options.friction;\n\n /**\n * Restitution coefficient\n * @property {Number} restitution\n */\n this.restitution = options.restitution;\n\n /**\n * Stiffness of the produced contact equations\n * @property {Number} contactEquationStiffness\n */\n this.contactEquationStiffness = options.contactEquationStiffness;\n\n /**\n * Relaxation time of the produced contact equations\n * @property {Number} contactEquationRelaxation\n */\n this.contactEquationRelaxation = options.contactEquationRelaxation;\n\n /**\n * Stiffness of the produced friction equations\n * @property {Number} frictionEquationStiffness\n */\n this.frictionEquationStiffness = options.frictionEquationStiffness;\n\n /**\n * Relaxation time of the produced friction equations\n * @property {Number} frictionEquationRelaxation\n */\n this.frictionEquationRelaxation = options.frictionEquationRelaxation;\n}\n\nContactMaterial.idCounter = 0;\n\n},{\"../utils/Utils\":53}],25:[function(_dereq_,module,exports){\nmodule.exports = Material;\n\n/**\n * Defines a physics material.\n * @class Material\n * @constructor\n * @param {object} [options]\n * @author schteppe\n */\nfunction Material(options){\n var name = '';\n options = options || {};\n\n // Backwards compatibility fix\n if(typeof(options) === 'string'){\n name = options;\n options = {};\n } else if(typeof(options) === 'object') {\n name = '';\n }\n\n /**\n * @property name\n * @type {String}\n */\n this.name = name;\n\n /**\n * material id.\n * @property id\n * @type {number}\n */\n this.id = Material.idCounter++;\n\n /**\n * Friction for this material. If non-negative, it will be used instead of the friction given by ContactMaterials. If there's no matching ContactMaterial, the value from .defaultContactMaterial in the World will be used.\n * @property {number} friction\n */\n this.friction = typeof(options.friction) !== 'undefined' ? options.friction : -1;\n\n /**\n * Restitution for this material. If non-negative, it will be used instead of the restitution given by ContactMaterials. If there's no matching ContactMaterial, the value from .defaultContactMaterial in the World will be used.\n * @property {number} restitution\n */\n this.restitution = typeof(options.restitution) !== 'undefined' ? options.restitution : -1;\n}\n\nMaterial.idCounter = 0;\n\n},{}],26:[function(_dereq_,module,exports){\nmodule.exports = JacobianElement;\n\nvar Vec3 = _dereq_('./Vec3');\n\n/**\n * An element containing 6 entries, 3 spatial and 3 rotational degrees of freedom.\n * @class JacobianElement\n * @constructor\n */\nfunction JacobianElement(){\n\n /**\n * @property {Vec3} spatial\n */\n this.spatial = new Vec3();\n\n /**\n * @property {Vec3} rotational\n */\n this.rotational = new Vec3();\n}\n\n/**\n * Multiply with other JacobianElement\n * @method multiplyElement\n * @param {JacobianElement} element\n * @return {Number}\n */\nJacobianElement.prototype.multiplyElement = function(element){\n return element.spatial.dot(this.spatial) + element.rotational.dot(this.rotational);\n};\n\n/**\n * Multiply with two vectors\n * @method multiplyVectors\n * @param {Vec3} spatial\n * @param {Vec3} rotational\n * @return {Number}\n */\nJacobianElement.prototype.multiplyVectors = function(spatial,rotational){\n return spatial.dot(this.spatial) + rotational.dot(this.rotational);\n};\n\n},{\"./Vec3\":30}],27:[function(_dereq_,module,exports){\nmodule.exports = Mat3;\n\nvar Vec3 = _dereq_('./Vec3');\n\n/**\n * A 3x3 matrix.\n * @class Mat3\n * @constructor\n * @param array elements Array of nine elements. Optional.\n * @author schteppe / http://github.com/schteppe\n */\nfunction Mat3(elements){\n /**\n * A vector of length 9, containing all matrix elements\n * @property {Array} elements\n */\n if(elements){\n this.elements = elements;\n } else {\n this.elements = [0,0,0,0,0,0,0,0,0];\n }\n}\n\n/**\n * Sets the matrix to identity\n * @method identity\n * @todo Should perhaps be renamed to setIdentity() to be more clear.\n * @todo Create another function that immediately creates an identity matrix eg. eye()\n */\nMat3.prototype.identity = function(){\n var e = this.elements;\n e[0] = 1;\n e[1] = 0;\n e[2] = 0;\n\n e[3] = 0;\n e[4] = 1;\n e[5] = 0;\n\n e[6] = 0;\n e[7] = 0;\n e[8] = 1;\n};\n\n/**\n * Set all elements to zero\n * @method setZero\n */\nMat3.prototype.setZero = function(){\n var e = this.elements;\n e[0] = 0;\n e[1] = 0;\n e[2] = 0;\n e[3] = 0;\n e[4] = 0;\n e[5] = 0;\n e[6] = 0;\n e[7] = 0;\n e[8] = 0;\n};\n\n/**\n * Sets the matrix diagonal elements from a Vec3\n * @method setTrace\n * @param {Vec3} vec3\n */\nMat3.prototype.setTrace = function(vec3){\n var e = this.elements;\n e[0] = vec3.x;\n e[4] = vec3.y;\n e[8] = vec3.z;\n};\n\n/**\n * Gets the matrix diagonal elements\n * @method getTrace\n * @return {Vec3}\n */\nMat3.prototype.getTrace = function(target){\n var target = target || new Vec3();\n var e = this.elements;\n target.x = e[0];\n target.y = e[4];\n target.z = e[8];\n};\n\n/**\n * Matrix-Vector multiplication\n * @method vmult\n * @param {Vec3} v The vector to multiply with\n * @param {Vec3} target Optional, target to save the result in.\n */\nMat3.prototype.vmult = function(v,target){\n target = target || new Vec3();\n\n var e = this.elements,\n x = v.x,\n y = v.y,\n z = v.z;\n target.x = e[0]*x + e[1]*y + e[2]*z;\n target.y = e[3]*x + e[4]*y + e[5]*z;\n target.z = e[6]*x + e[7]*y + e[8]*z;\n\n return target;\n};\n\n/**\n * Matrix-scalar multiplication\n * @method smult\n * @param {Number} s\n */\nMat3.prototype.smult = function(s){\n for(var i=0; i1 acos and sqrt will produce errors, this cant happen if quaternion is normalised\n var angle = 2 * Math.acos(this.w);\n var s = Math.sqrt(1-this.w*this.w); // assuming quaternion normalised then w is less than 1, so term always positive.\n if (s < 0.001) { // test to avoid divide by zero, s is always positive due to sqrt\n // if s close to zero then direction of axis not important\n targetAxis.x = this.x; // if it is important that axis is normalised then replace with x=1; y=z=0;\n targetAxis.y = this.y;\n targetAxis.z = this.z;\n } else {\n targetAxis.x = this.x / s; // normalise axis\n targetAxis.y = this.y / s;\n targetAxis.z = this.z / s;\n }\n return [targetAxis,angle];\n};\n\nvar sfv_t1 = new Vec3(),\n sfv_t2 = new Vec3();\n\n/**\n * Set the quaternion value given two vectors. The resulting rotation will be the needed rotation to rotate u to v.\n * @method setFromVectors\n * @param {Vec3} u\n * @param {Vec3} v\n */\nQuaternion.prototype.setFromVectors = function(u,v){\n if(u.isAntiparallelTo(v)){\n var t1 = sfv_t1;\n var t2 = sfv_t2;\n\n u.tangents(t1,t2);\n this.setFromAxisAngle(t1,Math.PI);\n } else {\n var a = u.cross(v);\n this.x = a.x;\n this.y = a.y;\n this.z = a.z;\n this.w = Math.sqrt(Math.pow(u.norm(),2) * Math.pow(v.norm(),2)) + u.dot(v);\n this.normalize();\n }\n};\n\n/**\n * Quaternion multiplication\n * @method mult\n * @param {Quaternion} q\n * @param {Quaternion} target Optional.\n * @return {Quaternion}\n */\nvar Quaternion_mult_va = new Vec3();\nvar Quaternion_mult_vb = new Vec3();\nvar Quaternion_mult_vaxvb = new Vec3();\nQuaternion.prototype.mult = function(q,target){\n target = target || new Quaternion();\n var w = this.w,\n va = Quaternion_mult_va,\n vb = Quaternion_mult_vb,\n vaxvb = Quaternion_mult_vaxvb;\n\n va.set(this.x,this.y,this.z);\n vb.set(q.x,q.y,q.z);\n target.w = w*q.w - va.dot(vb);\n va.cross(vb,vaxvb);\n\n target.x = w * vb.x + q.w*va.x + vaxvb.x;\n target.y = w * vb.y + q.w*va.y + vaxvb.y;\n target.z = w * vb.z + q.w*va.z + vaxvb.z;\n\n return target;\n};\n\n/**\n * Get the inverse quaternion rotation.\n * @method inverse\n * @param {Quaternion} target\n * @return {Quaternion}\n */\nQuaternion.prototype.inverse = function(target){\n var x = this.x, y = this.y, z = this.z, w = this.w;\n target = target || new Quaternion();\n\n this.conjugate(target);\n var inorm2 = 1/(x*x + y*y + z*z + w*w);\n target.x *= inorm2;\n target.y *= inorm2;\n target.z *= inorm2;\n target.w *= inorm2;\n\n return target;\n};\n\n/**\n * Get the quaternion conjugate\n * @method conjugate\n * @param {Quaternion} target\n * @return {Quaternion}\n */\nQuaternion.prototype.conjugate = function(target){\n target = target || new Quaternion();\n\n target.x = -this.x;\n target.y = -this.y;\n target.z = -this.z;\n target.w = this.w;\n\n return target;\n};\n\n/**\n * Normalize the quaternion. Note that this changes the values of the quaternion.\n * @method normalize\n */\nQuaternion.prototype.normalize = function(){\n var l = Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);\n if ( l === 0 ) {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n this.w = 0;\n } else {\n l = 1 / l;\n this.x *= l;\n this.y *= l;\n this.z *= l;\n this.w *= l;\n }\n};\n\n/**\n * Approximation of quaternion normalization. Works best when quat is already almost-normalized.\n * @method normalizeFast\n * @see http://jsperf.com/fast-quaternion-normalization\n * @author unphased, https://github.com/unphased\n */\nQuaternion.prototype.normalizeFast = function () {\n var f = (3.0-(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w))/2.0;\n if ( f === 0 ) {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n this.w = 0;\n } else {\n this.x *= f;\n this.y *= f;\n this.z *= f;\n this.w *= f;\n }\n};\n\n/**\n * Multiply the quaternion by a vector\n * @method vmult\n * @param {Vec3} v\n * @param {Vec3} target Optional\n * @return {Vec3}\n */\nQuaternion.prototype.vmult = function(v,target){\n target = target || new Vec3();\n\n var x = v.x,\n y = v.y,\n z = v.z;\n\n var qx = this.x,\n qy = this.y,\n qz = this.z,\n qw = this.w;\n\n // q*v\n var ix = qw * x + qy * z - qz * y,\n iy = qw * y + qz * x - qx * z,\n iz = qw * z + qx * y - qy * x,\n iw = -qx * x - qy * y - qz * z;\n\n target.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n target.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n target.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n\n return target;\n};\n\n/**\n * Copies value of source to this quaternion.\n * @method copy\n * @param {Quaternion} source\n * @return {Quaternion} this\n */\nQuaternion.prototype.copy = function(source){\n this.x = source.x;\n this.y = source.y;\n this.z = source.z;\n this.w = source.w;\n return this;\n};\n\n/**\n * Convert the quaternion to euler angle representation. Order: YZX, as this page describes: http://www.euclideanspace.com/maths/standards/index.htm\n * @method toEuler\n * @param {Vec3} target\n * @param string order Three-character string e.g. \"YZX\", which also is default.\n */\nQuaternion.prototype.toEuler = function(target,order){\n order = order || \"YZX\";\n\n var heading, attitude, bank;\n var x = this.x, y = this.y, z = this.z, w = this.w;\n\n switch(order){\n case \"YZX\":\n var test = x*y + z*w;\n if (test > 0.499) { // singularity at north pole\n heading = 2 * Math.atan2(x,w);\n attitude = Math.PI/2;\n bank = 0;\n }\n if (test < -0.499) { // singularity at south pole\n heading = -2 * Math.atan2(x,w);\n attitude = - Math.PI/2;\n bank = 0;\n }\n if(isNaN(heading)){\n var sqx = x*x;\n var sqy = y*y;\n var sqz = z*z;\n heading = Math.atan2(2*y*w - 2*x*z , 1 - 2*sqy - 2*sqz); // Heading\n attitude = Math.asin(2*test); // attitude\n bank = Math.atan2(2*x*w - 2*y*z , 1 - 2*sqx - 2*sqz); // bank\n }\n break;\n default:\n throw new Error(\"Euler order \"+order+\" not supported yet.\");\n }\n\n target.y = heading;\n target.z = attitude;\n target.x = bank;\n};\n\n/**\n * See http://www.mathworks.com/matlabcentral/fileexchange/20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/content/SpinCalc.m\n * @method setFromEuler\n * @param {Number} x\n * @param {Number} y\n * @param {Number} z\n * @param {String} order The order to apply angles: 'XYZ' or 'YXZ' or any other combination\n */\nQuaternion.prototype.setFromEuler = function ( x, y, z, order ) {\n order = order || \"XYZ\";\n\n var c1 = Math.cos( x / 2 );\n var c2 = Math.cos( y / 2 );\n var c3 = Math.cos( z / 2 );\n var s1 = Math.sin( x / 2 );\n var s2 = Math.sin( y / 2 );\n var s3 = Math.sin( z / 2 );\n\n if ( order === 'XYZ' ) {\n\n this.x = s1 * c2 * c3 + c1 * s2 * s3;\n this.y = c1 * s2 * c3 - s1 * c2 * s3;\n this.z = c1 * c2 * s3 + s1 * s2 * c3;\n this.w = c1 * c2 * c3 - s1 * s2 * s3;\n\n } else if ( order === 'YXZ' ) {\n\n this.x = s1 * c2 * c3 + c1 * s2 * s3;\n this.y = c1 * s2 * c3 - s1 * c2 * s3;\n this.z = c1 * c2 * s3 - s1 * s2 * c3;\n this.w = c1 * c2 * c3 + s1 * s2 * s3;\n\n } else if ( order === 'ZXY' ) {\n\n this.x = s1 * c2 * c3 - c1 * s2 * s3;\n this.y = c1 * s2 * c3 + s1 * c2 * s3;\n this.z = c1 * c2 * s3 + s1 * s2 * c3;\n this.w = c1 * c2 * c3 - s1 * s2 * s3;\n\n } else if ( order === 'ZYX' ) {\n\n this.x = s1 * c2 * c3 - c1 * s2 * s3;\n this.y = c1 * s2 * c3 + s1 * c2 * s3;\n this.z = c1 * c2 * s3 - s1 * s2 * c3;\n this.w = c1 * c2 * c3 + s1 * s2 * s3;\n\n } else if ( order === 'YZX' ) {\n\n this.x = s1 * c2 * c3 + c1 * s2 * s3;\n this.y = c1 * s2 * c3 + s1 * c2 * s3;\n this.z = c1 * c2 * s3 - s1 * s2 * c3;\n this.w = c1 * c2 * c3 - s1 * s2 * s3;\n\n } else if ( order === 'XZY' ) {\n\n this.x = s1 * c2 * c3 - c1 * s2 * s3;\n this.y = c1 * s2 * c3 - s1 * c2 * s3;\n this.z = c1 * c2 * s3 + s1 * s2 * c3;\n this.w = c1 * c2 * c3 + s1 * s2 * s3;\n\n }\n\n return this;\n\n};\n\nQuaternion.prototype.clone = function(){\n return new Quaternion(this.x, this.y, this.z, this.w);\n};\n},{\"./Vec3\":30}],29:[function(_dereq_,module,exports){\nvar Vec3 = _dereq_('./Vec3');\nvar Quaternion = _dereq_('./Quaternion');\n\nmodule.exports = Transform;\n\n/**\n * @class Transform\n * @constructor\n */\nfunction Transform(options) {\n options = options || {};\n\n\t/**\n\t * @property {Vec3} position\n\t */\n\tthis.position = new Vec3();\n if(options.position){\n this.position.copy(options.position);\n }\n\n\t/**\n\t * @property {Quaternion} quaternion\n\t */\n\tthis.quaternion = new Quaternion();\n if(options.quaternion){\n this.quaternion.copy(options.quaternion);\n }\n}\n\nvar tmpQuat = new Quaternion();\n\n/**\n * @static\n * @method pointToLocaFrame\n * @param {Vec3} position\n * @param {Quaternion} quaternion\n * @param {Vec3} worldPoint\n * @param {Vec3} result\n */\nTransform.pointToLocalFrame = function(position, quaternion, worldPoint, result){\n var result = result || new Vec3();\n worldPoint.vsub(position, result);\n quaternion.conjugate(tmpQuat);\n tmpQuat.vmult(result, result);\n return result;\n};\n\n/**\n * Get a global point in local transform coordinates.\n * @method pointToLocal\n * @param {Vec3} point\n * @param {Vec3} result\n * @return {Vec3} The \"result\" vector object\n */\nTransform.prototype.pointToLocal = function(worldPoint, result){\n return Transform.pointToLocalFrame(this.position, this.quaternion, worldPoint, result);\n};\n\n/**\n * @static\n * @method pointToWorldFrame\n * @param {Vec3} position\n * @param {Vec3} quaternion\n * @param {Vec3} localPoint\n * @param {Vec3} result\n */\nTransform.pointToWorldFrame = function(position, quaternion, localPoint, result){\n var result = result || new Vec3();\n quaternion.vmult(localPoint, result);\n result.vadd(position, result);\n return result;\n};\n\n/**\n * Get a local point in global transform coordinates.\n * @method pointToWorld\n * @param {Vec3} point\n * @param {Vec3} result\n * @return {Vec3} The \"result\" vector object\n */\nTransform.prototype.pointToWorld = function(localPoint, result){\n return Transform.pointToWorldFrame(this.position, this.quaternion, localPoint, result);\n};\n\n\nTransform.prototype.vectorToWorldFrame = function(localVector, result){\n var result = result || new Vec3();\n this.quaternion.vmult(localVector, result);\n return result;\n};\n\nTransform.vectorToWorldFrame = function(quaternion, localVector, result){\n quaternion.vmult(localVector, result);\n return result;\n};\n\nTransform.vectorToLocalFrame = function(position, quaternion, worldVector, result){\n var result = result || new Vec3();\n quaternion.w *= -1;\n quaternion.vmult(worldVector, result);\n quaternion.w *= -1;\n return result;\n};\n\n},{\"./Quaternion\":28,\"./Vec3\":30}],30:[function(_dereq_,module,exports){\nmodule.exports = Vec3;\n\nvar Mat3 = _dereq_('./Mat3');\n\n/**\n * 3-dimensional vector\n * @class Vec3\n * @constructor\n * @param {Number} x\n * @param {Number} y\n * @param {Number} z\n * @author schteppe\n * @example\n * var v = new Vec3(1, 2, 3);\n * console.log('x=' + v.x); // x=1\n */\nfunction Vec3(x,y,z){\n /**\n * @property x\n * @type {Number}\n */\n this.x = x||0.0;\n\n /**\n * @property y\n * @type {Number}\n */\n this.y = y||0.0;\n\n /**\n * @property z\n * @type {Number}\n */\n this.z = z||0.0;\n}\n\n/**\n * @static\n * @property {Vec3} ZERO\n */\nVec3.ZERO = new Vec3(0, 0, 0);\n\n/**\n * @static\n * @property {Vec3} UNIT_X\n */\nVec3.UNIT_X = new Vec3(1, 0, 0);\n\n/**\n * @static\n * @property {Vec3} UNIT_Y\n */\nVec3.UNIT_Y = new Vec3(0, 1, 0);\n\n/**\n * @static\n * @property {Vec3} UNIT_Z\n */\nVec3.UNIT_Z = new Vec3(0, 0, 1);\n\n/**\n * Vector cross product\n * @method cross\n * @param {Vec3} v\n * @param {Vec3} target Optional. Target to save in.\n * @return {Vec3}\n */\nVec3.prototype.cross = function(v,target){\n var vx=v.x, vy=v.y, vz=v.z, x=this.x, y=this.y, z=this.z;\n target = target || new Vec3();\n\n target.x = (y * vz) - (z * vy);\n target.y = (z * vx) - (x * vz);\n target.z = (x * vy) - (y * vx);\n\n return target;\n};\n\n/**\n * Set the vectors' 3 elements\n * @method set\n * @param {Number} x\n * @param {Number} y\n * @param {Number} z\n * @return Vec3\n */\nVec3.prototype.set = function(x,y,z){\n this.x = x;\n this.y = y;\n this.z = z;\n return this;\n};\n\n/**\n * Set all components of the vector to zero.\n * @method setZero\n */\nVec3.prototype.setZero = function(){\n this.x = this.y = this.z = 0;\n};\n\n/**\n * Vector addition\n * @method vadd\n * @param {Vec3} v\n * @param {Vec3} target Optional.\n * @return {Vec3}\n */\nVec3.prototype.vadd = function(v,target){\n if(target){\n target.x = v.x + this.x;\n target.y = v.y + this.y;\n target.z = v.z + this.z;\n } else {\n return new Vec3(this.x + v.x,\n this.y + v.y,\n this.z + v.z);\n }\n};\n\n/**\n * Vector subtraction\n * @method vsub\n * @param {Vec3} v\n * @param {Vec3} target Optional. Target to save in.\n * @return {Vec3}\n */\nVec3.prototype.vsub = function(v,target){\n if(target){\n target.x = this.x - v.x;\n target.y = this.y - v.y;\n target.z = this.z - v.z;\n } else {\n return new Vec3(this.x-v.x,\n this.y-v.y,\n this.z-v.z);\n }\n};\n\n/**\n * Get the cross product matrix a_cross from a vector, such that a x b = a_cross * b = c\n * @method crossmat\n * @see http://www8.cs.umu.se/kurser/TDBD24/VT06/lectures/Lecture6.pdf\n * @return {Mat3}\n */\nVec3.prototype.crossmat = function(){\n return new Mat3([ 0, -this.z, this.y,\n this.z, 0, -this.x,\n -this.y, this.x, 0]);\n};\n\n/**\n * Normalize the vector. Note that this changes the values in the vector.\n * @method normalize\n * @return {Number} Returns the norm of the vector\n */\nVec3.prototype.normalize = function(){\n var x=this.x, y=this.y, z=this.z;\n var n = Math.sqrt(x*x + y*y + z*z);\n if(n>0.0){\n var invN = 1/n;\n this.x *= invN;\n this.y *= invN;\n this.z *= invN;\n } else {\n // Make something up\n this.x = 0;\n this.y = 0;\n this.z = 0;\n }\n return n;\n};\n\n/**\n * Get the version of this vector that is of length 1.\n * @method unit\n * @param {Vec3} target Optional target to save in\n * @return {Vec3} Returns the unit vector\n */\nVec3.prototype.unit = function(target){\n target = target || new Vec3();\n var x=this.x, y=this.y, z=this.z;\n var ninv = Math.sqrt(x*x + y*y + z*z);\n if(ninv>0.0){\n ninv = 1.0/ninv;\n target.x = x * ninv;\n target.y = y * ninv;\n target.z = z * ninv;\n } else {\n target.x = 1;\n target.y = 0;\n target.z = 0;\n }\n return target;\n};\n\n/**\n * Get the length of the vector\n * @method norm\n * @return {Number}\n * @deprecated Use .length() instead\n */\nVec3.prototype.norm = function(){\n var x=this.x, y=this.y, z=this.z;\n return Math.sqrt(x*x + y*y + z*z);\n};\n\n/**\n * Get the length of the vector\n * @method length\n * @return {Number}\n */\nVec3.prototype.length = Vec3.prototype.norm;\n\n/**\n * Get the squared length of the vector\n * @method norm2\n * @return {Number}\n * @deprecated Use .lengthSquared() instead.\n */\nVec3.prototype.norm2 = function(){\n return this.dot(this);\n};\n\n/**\n * Get the squared length of the vector.\n * @method lengthSquared\n * @return {Number}\n */\nVec3.prototype.lengthSquared = Vec3.prototype.norm2;\n\n/**\n * Get distance from this point to another point\n * @method distanceTo\n * @param {Vec3} p\n * @return {Number}\n */\nVec3.prototype.distanceTo = function(p){\n var x=this.x, y=this.y, z=this.z;\n var px=p.x, py=p.y, pz=p.z;\n return Math.sqrt((px-x)*(px-x)+\n (py-y)*(py-y)+\n (pz-z)*(pz-z));\n};\n\n/**\n * Get squared distance from this point to another point\n * @method distanceSquared\n * @param {Vec3} p\n * @return {Number}\n */\nVec3.prototype.distanceSquared = function(p){\n var x=this.x, y=this.y, z=this.z;\n var px=p.x, py=p.y, pz=p.z;\n return (px-x)*(px-x) + (py-y)*(py-y) + (pz-z)*(pz-z);\n};\n\n/**\n * Multiply all the components of the vector with a scalar.\n * @deprecated Use .scale instead\n * @method mult\n * @param {Number} scalar\n * @param {Vec3} target The vector to save the result in.\n * @return {Vec3}\n * @deprecated Use .scale() instead\n */\nVec3.prototype.mult = function(scalar,target){\n target = target || new Vec3();\n var x = this.x,\n y = this.y,\n z = this.z;\n target.x = scalar * x;\n target.y = scalar * y;\n target.z = scalar * z;\n return target;\n};\n\n/**\n * Multiply the vector with a scalar.\n * @method scale\n * @param {Number} scalar\n * @param {Vec3} target\n * @return {Vec3}\n */\nVec3.prototype.scale = Vec3.prototype.mult;\n\n/**\n * Calculate dot product\n * @method dot\n * @param {Vec3} v\n * @return {Number}\n */\nVec3.prototype.dot = function(v){\n return this.x * v.x + this.y * v.y + this.z * v.z;\n};\n\n/**\n * @method isZero\n * @return bool\n */\nVec3.prototype.isZero = function(){\n return this.x===0 && this.y===0 && this.z===0;\n};\n\n/**\n * Make the vector point in the opposite direction.\n * @method negate\n * @param {Vec3} target Optional target to save in\n * @return {Vec3}\n */\nVec3.prototype.negate = function(target){\n target = target || new Vec3();\n target.x = -this.x;\n target.y = -this.y;\n target.z = -this.z;\n return target;\n};\n\n/**\n * Compute two artificial tangents to the vector\n * @method tangents\n * @param {Vec3} t1 Vector object to save the first tangent in\n * @param {Vec3} t2 Vector object to save the second tangent in\n */\nvar Vec3_tangents_n = new Vec3();\nvar Vec3_tangents_randVec = new Vec3();\nVec3.prototype.tangents = function(t1,t2){\n var norm = this.norm();\n if(norm>0.0){\n var n = Vec3_tangents_n;\n var inorm = 1/norm;\n n.set(this.x*inorm,this.y*inorm,this.z*inorm);\n var randVec = Vec3_tangents_randVec;\n if(Math.abs(n.x) < 0.9){\n randVec.set(1,0,0);\n n.cross(randVec,t1);\n } else {\n randVec.set(0,1,0);\n n.cross(randVec,t1);\n }\n n.cross(t1,t2);\n } else {\n // The normal length is zero, make something up\n t1.set(1, 0, 0);\n t2.set(0, 1, 0);\n }\n};\n\n/**\n * Converts to a more readable format\n * @method toString\n * @return string\n */\nVec3.prototype.toString = function(){\n return this.x+\",\"+this.y+\",\"+this.z;\n};\n\n/**\n * Converts to an array\n * @method toArray\n * @return Array\n */\nVec3.prototype.toArray = function(){\n return [this.x, this.y, this.z];\n};\n\n/**\n * Copies value of source to this vector.\n * @method copy\n * @param {Vec3} source\n * @return {Vec3} this\n */\nVec3.prototype.copy = function(source){\n this.x = source.x;\n this.y = source.y;\n this.z = source.z;\n return this;\n};\n\n\n/**\n * Do a linear interpolation between two vectors\n * @method lerp\n * @param {Vec3} v\n * @param {Number} t A number between 0 and 1. 0 will make this function return u, and 1 will make it return v. Numbers in between will generate a vector in between them.\n * @param {Vec3} target\n */\nVec3.prototype.lerp = function(v,t,target){\n var x=this.x, y=this.y, z=this.z;\n target.x = x + (v.x-x)*t;\n target.y = y + (v.y-y)*t;\n target.z = z + (v.z-z)*t;\n};\n\n/**\n * Check if a vector equals is almost equal to another one.\n * @method almostEquals\n * @param {Vec3} v\n * @param {Number} precision\n * @return bool\n */\nVec3.prototype.almostEquals = function(v,precision){\n if(precision===undefined){\n precision = 1e-6;\n }\n if( Math.abs(this.x-v.x)>precision ||\n Math.abs(this.y-v.y)>precision ||\n Math.abs(this.z-v.z)>precision){\n return false;\n }\n return true;\n};\n\n/**\n * Check if a vector is almost zero\n * @method almostZero\n * @param {Number} precision\n */\nVec3.prototype.almostZero = function(precision){\n if(precision===undefined){\n precision = 1e-6;\n }\n if( Math.abs(this.x)>precision ||\n Math.abs(this.y)>precision ||\n Math.abs(this.z)>precision){\n return false;\n }\n return true;\n};\n\nvar antip_neg = new Vec3();\n\n/**\n * Check if the vector is anti-parallel to another vector.\n * @method isAntiparallelTo\n * @param {Vec3} v\n * @param {Number} precision Set to zero for exact comparisons\n * @return {Boolean}\n */\nVec3.prototype.isAntiparallelTo = function(v,precision){\n this.negate(antip_neg);\n return antip_neg.almostEquals(v,precision);\n};\n\n/**\n * Clone the vector\n * @method clone\n * @return {Vec3}\n */\nVec3.prototype.clone = function(){\n return new Vec3(this.x, this.y, this.z);\n};\n},{\"./Mat3\":27}],31:[function(_dereq_,module,exports){\nmodule.exports = Body;\n\nvar EventTarget = _dereq_('../utils/EventTarget');\nvar Shape = _dereq_('../shapes/Shape');\nvar Vec3 = _dereq_('../math/Vec3');\nvar Mat3 = _dereq_('../math/Mat3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar Material = _dereq_('../material/Material');\nvar AABB = _dereq_('../collision/AABB');\nvar Box = _dereq_('../shapes/Box');\n\n/**\n * Base class for all body types.\n * @class Body\n * @constructor\n * @extends EventTarget\n * @param {object} [options]\n * @param {Vec3} [options.position]\n * @param {Vec3} [options.velocity]\n * @param {Vec3} [options.angularVelocity]\n * @param {Quaternion} [options.quaternion]\n * @param {number} [options.mass]\n * @param {Material} [options.material]\n * @param {number} [options.type]\n * @param {number} [options.linearDamping=0.01]\n * @param {number} [options.angularDamping=0.01]\n * @param {boolean} [options.allowSleep=true]\n * @param {number} [options.sleepSpeedLimit=0.1]\n * @param {number} [options.sleepTimeLimit=1]\n * @param {number} [options.collisionFilterGroup=1]\n * @param {number} [options.collisionFilterMask=1]\n * @param {boolean} [options.fixedRotation=false]\n * @param {Body} [options.shape]\n * @example\n * var body = new Body({\n * mass: 1\n * });\n * var shape = new Sphere(1);\n * body.addShape(shape);\n * world.add(body);\n */\nfunction Body(options){\n options = options || {};\n\n EventTarget.apply(this);\n\n this.id = Body.idCounter++;\n\n /**\n * Reference to the world the body is living in\n * @property world\n * @type {World}\n */\n this.world = null;\n\n /**\n * Callback function that is used BEFORE stepping the system. Use it to apply forces, for example. Inside the function, \"this\" will refer to this Body object.\n * @property preStep\n * @type {Function}\n * @deprecated Use World events instead\n */\n this.preStep = null;\n\n /**\n * Callback function that is used AFTER stepping the system. Inside the function, \"this\" will refer to this Body object.\n * @property postStep\n * @type {Function}\n * @deprecated Use World events instead\n */\n this.postStep = null;\n\n this.vlambda = new Vec3();\n\n /**\n * @property {Number} collisionFilterGroup\n */\n this.collisionFilterGroup = typeof(options.collisionFilterGroup) === 'number' ? options.collisionFilterGroup : 1;\n\n /**\n * @property {Number} collisionFilterMask\n */\n this.collisionFilterMask = typeof(options.collisionFilterMask) === 'number' ? options.collisionFilterMask : 1;\n\n /**\n * Whether to produce contact forces when in contact with other bodies. Note that contacts will be generated, but they will be disabled.\n * @property {Number} collisionResponse\n */\n\tthis.collisionResponse = true;\n\n /**\n * @property position\n * @type {Vec3}\n */\n this.position = new Vec3();\n\n if(options.position){\n this.position.copy(options.position);\n }\n\n /**\n * @property {Vec3} previousPosition\n */\n this.previousPosition = new Vec3();\n\n /**\n * Initial position of the body\n * @property initPosition\n * @type {Vec3}\n */\n this.initPosition = new Vec3();\n\n /**\n * @property velocity\n * @type {Vec3}\n */\n this.velocity = new Vec3();\n\n if(options.velocity){\n this.velocity.copy(options.velocity);\n }\n\n /**\n * @property initVelocity\n * @type {Vec3}\n */\n this.initVelocity = new Vec3();\n\n /**\n * Linear force on the body\n * @property force\n * @type {Vec3}\n */\n this.force = new Vec3();\n\n var mass = typeof(options.mass) === 'number' ? options.mass : 0;\n\n /**\n * @property mass\n * @type {Number}\n * @default 0\n */\n this.mass = mass;\n\n /**\n * @property invMass\n * @type {Number}\n */\n this.invMass = mass > 0 ? 1.0 / mass : 0;\n\n /**\n * @property material\n * @type {Material}\n */\n this.material = options.material || null;\n\n /**\n * @property linearDamping\n * @type {Number}\n */\n this.linearDamping = typeof(options.linearDamping) === 'number' ? options.linearDamping : 0.01;\n\n /**\n * One of: Body.DYNAMIC, Body.STATIC and Body.KINEMATIC.\n * @property type\n * @type {Number}\n */\n this.type = (mass <= 0.0 ? Body.STATIC : Body.DYNAMIC);\n if(typeof(options.type) === typeof(Body.STATIC)){\n this.type = options.type;\n }\n\n /**\n * If true, the body will automatically fall to sleep.\n * @property allowSleep\n * @type {Boolean}\n * @default true\n */\n this.allowSleep = typeof(options.allowSleep) !== 'undefined' ? options.allowSleep : true;\n\n /**\n * Current sleep state.\n * @property sleepState\n * @type {Number}\n */\n this.sleepState = 0;\n\n /**\n * If the speed (the norm of the velocity) is smaller than this value, the body is considered sleepy.\n * @property sleepSpeedLimit\n * @type {Number}\n * @default 0.1\n */\n this.sleepSpeedLimit = typeof(options.sleepSpeedLimit) !== 'undefined' ? options.sleepSpeedLimit : 0.1;\n\n /**\n * If the body has been sleepy for this sleepTimeLimit seconds, it is considered sleeping.\n * @property sleepTimeLimit\n * @type {Number}\n * @default 1\n */\n this.sleepTimeLimit = typeof(options.sleepTimeLimit) !== 'undefined' ? options.sleepTimeLimit : 1;\n\n this.timeLastSleepy = 0;\n\n this._wakeUpAfterNarrowphase = false;\n\n\n /**\n * Rotational force on the body, around center of mass\n * @property {Vec3} torque\n */\n this.torque = new Vec3();\n\n /**\n * Orientation of the body\n * @property quaternion\n * @type {Quaternion}\n */\n this.quaternion = new Quaternion();\n\n if(options.quaternion){\n this.quaternion.copy(options.quaternion);\n }\n\n /**\n * @property initQuaternion\n * @type {Quaternion}\n */\n this.initQuaternion = new Quaternion();\n\n /**\n * @property angularVelocity\n * @type {Vec3}\n */\n this.angularVelocity = new Vec3();\n\n if(options.angularVelocity){\n this.angularVelocity.copy(options.angularVelocity);\n }\n\n /**\n * @property initAngularVelocity\n * @type {Vec3}\n */\n this.initAngularVelocity = new Vec3();\n\n this.interpolatedPosition = new Vec3();\n this.interpolatedQuaternion = new Quaternion();\n\n /**\n * @property shapes\n * @type {array}\n */\n this.shapes = [];\n\n /**\n * @property shapeOffsets\n * @type {array}\n */\n this.shapeOffsets = [];\n\n /**\n * @property shapeOrientations\n * @type {array}\n */\n this.shapeOrientations = [];\n\n /**\n * @property inertia\n * @type {Vec3}\n */\n this.inertia = new Vec3();\n\n /**\n * @property {Vec3} invInertia\n */\n this.invInertia = new Vec3();\n\n /**\n * @property {Mat3} invInertiaWorld\n */\n this.invInertiaWorld = new Mat3();\n\n this.invMassSolve = 0;\n\n /**\n * @property {Vec3} invInertiaSolve\n */\n this.invInertiaSolve = new Vec3();\n\n /**\n * @property {Mat3} invInertiaWorldSolve\n */\n this.invInertiaWorldSolve = new Mat3();\n\n /**\n * Set to true if you don't want the body to rotate. Make sure to run .updateMassProperties() after changing this.\n * @property {Boolean} fixedRotation\n * @default false\n */\n this.fixedRotation = typeof(options.fixedRotation) !== \"undefined\" ? options.fixedRotation : false;\n\n /**\n * @property {Number} angularDamping\n */\n this.angularDamping = typeof(options.angularDamping) !== 'undefined' ? options.angularDamping : 0.01;\n\n /**\n * @property aabb\n * @type {AABB}\n */\n this.aabb = new AABB();\n\n /**\n * Indicates if the AABB needs to be updated before use.\n * @property aabbNeedsUpdate\n * @type {Boolean}\n */\n this.aabbNeedsUpdate = true;\n\n this.wlambda = new Vec3();\n\n if(options.shape){\n this.addShape(options.shape);\n }\n\n this.updateMassProperties();\n}\nBody.prototype = new EventTarget();\nBody.prototype.constructor = Body;\n\n/**\n * A dynamic body is fully simulated. 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.\n * @static\n * @property DYNAMIC\n * @type {Number}\n */\nBody.DYNAMIC = 1;\n\n/**\n * A static body does not move during simulation and behaves as if it has infinite mass. Static bodies can be moved manually by setting the position of the body. The velocity of a static body is always zero. Static bodies do not collide with other static or kinematic bodies.\n * @static\n * @property STATIC\n * @type {Number}\n */\nBody.STATIC = 2;\n\n/**\n * A kinematic body moves under simulation according to its velocity. They do not respond to forces. They can be moved manually, but normally a kinematic body is moved by setting its velocity. A kinematic body behaves as if it has infinite mass. Kinematic bodies do not collide with other static or kinematic bodies.\n * @static\n * @property KINEMATIC\n * @type {Number}\n */\nBody.KINEMATIC = 4;\n\n\n\n/**\n * @static\n * @property AWAKE\n * @type {number}\n */\nBody.AWAKE = 0;\n\n/**\n * @static\n * @property SLEEPY\n * @type {number}\n */\nBody.SLEEPY = 1;\n\n/**\n * @static\n * @property SLEEPING\n * @type {number}\n */\nBody.SLEEPING = 2;\n\nBody.idCounter = 0;\n\n/**\n * Wake the body up.\n * @method wakeUp\n */\nBody.prototype.wakeUp = function(){\n var s = this.sleepState;\n this.sleepState = 0;\n if(s === Body.SLEEPING){\n this.dispatchEvent({type:\"wakeup\"});\n }\n};\n\n/**\n * Force body sleep\n * @method sleep\n */\nBody.prototype.sleep = function(){\n this.sleepState = Body.SLEEPING;\n this.velocity.set(0,0,0);\n this.angularVelocity.set(0,0,0);\n};\n\nBody.sleepyEvent = {\n type: \"sleepy\"\n};\n\nBody.sleepEvent = {\n type: \"sleep\"\n};\n\n/**\n * Called every timestep to update internal sleep timer and change sleep state if needed.\n * @method sleepTick\n * @param {Number} time The world time in seconds\n */\nBody.prototype.sleepTick = function(time){\n if(this.allowSleep){\n var sleepState = this.sleepState;\n var speedSquared = this.velocity.norm2() + this.angularVelocity.norm2();\n var speedLimitSquared = Math.pow(this.sleepSpeedLimit,2);\n if(sleepState===Body.AWAKE && speedSquared < speedLimitSquared){\n this.sleepState = Body.SLEEPY; // Sleepy\n this.timeLastSleepy = time;\n this.dispatchEvent(Body.sleepyEvent);\n } else if(sleepState===Body.SLEEPY && speedSquared > speedLimitSquared){\n this.wakeUp(); // Wake up\n } else if(sleepState===Body.SLEEPY && (time - this.timeLastSleepy ) > this.sleepTimeLimit){\n this.sleep(); // Sleeping\n this.dispatchEvent(Body.sleepEvent);\n }\n }\n};\n\n/**\n * If the body is sleeping, it should be immovable / have infinite mass during solve. We solve it by having a separate \"solve mass\".\n * @method updateSolveMassProperties\n */\nBody.prototype.updateSolveMassProperties = function(){\n if(this.sleepState === Body.SLEEPING || this.type === Body.KINEMATIC){\n this.invMassSolve = 0;\n this.invInertiaSolve.setZero();\n this.invInertiaWorldSolve.setZero();\n } else {\n this.invMassSolve = this.invMass;\n this.invInertiaSolve.copy(this.invInertia);\n this.invInertiaWorldSolve.copy(this.invInertiaWorld);\n }\n};\n\n/**\n * Convert a world point to local body frame.\n * @method pointToLocalFrame\n * @param {Vec3} worldPoint\n * @param {Vec3} result\n * @return {Vec3}\n */\nBody.prototype.pointToLocalFrame = function(worldPoint,result){\n var result = result || new Vec3();\n worldPoint.vsub(this.position,result);\n this.quaternion.conjugate().vmult(result,result);\n return result;\n};\n\n/**\n * Convert a world vector to local body frame.\n * @method vectorToLocalFrame\n * @param {Vec3} worldPoint\n * @param {Vec3} result\n * @return {Vec3}\n */\nBody.prototype.vectorToLocalFrame = function(worldVector, result){\n var result = result || new Vec3();\n this.quaternion.conjugate().vmult(worldVector,result);\n return result;\n};\n\n/**\n * Convert a local body point to world frame.\n * @method pointToWorldFrame\n * @param {Vec3} localPoint\n * @param {Vec3} result\n * @return {Vec3}\n */\nBody.prototype.pointToWorldFrame = function(localPoint,result){\n var result = result || new Vec3();\n this.quaternion.vmult(localPoint,result);\n result.vadd(this.position,result);\n return result;\n};\n\n/**\n * Convert a local body point to world frame.\n * @method vectorToWorldFrame\n * @param {Vec3} localVector\n * @param {Vec3} result\n * @return {Vec3}\n */\nBody.prototype.vectorToWorldFrame = function(localVector, result){\n var result = result || new Vec3();\n this.quaternion.vmult(localVector, result);\n return result;\n};\n\nvar tmpVec = new Vec3();\nvar tmpQuat = new Quaternion();\n\n/**\n * Add a shape to the body with a local offset and orientation.\n * @method addShape\n * @param {Shape} shape\n * @param {Vec3} offset\n * @param {Quaternion} quaternion\n * @return {Body} The body object, for chainability.\n */\nBody.prototype.addShape = function(shape, _offset, _orientation){\n var offset = new Vec3();\n var orientation = new Quaternion();\n\n if(_offset){\n offset.copy(_offset);\n }\n if(_orientation){\n orientation.copy(_orientation);\n }\n\n this.shapes.push(shape);\n this.shapeOffsets.push(offset);\n this.shapeOrientations.push(orientation);\n this.updateMassProperties();\n this.updateBoundingRadius();\n\n this.aabbNeedsUpdate = true;\n\n return this;\n};\n\n/**\n * Update the bounding radius of the body. Should be done if any of the shapes are changed.\n * @method updateBoundingRadius\n */\nBody.prototype.updateBoundingRadius = function(){\n var shapes = this.shapes,\n shapeOffsets = this.shapeOffsets,\n N = shapes.length,\n radius = 0;\n\n for(var i=0; i!==N; i++){\n var shape = shapes[i];\n shape.updateBoundingSphereRadius();\n var offset = shapeOffsets[i].norm(),\n r = shape.boundingSphereRadius;\n if(offset + r > radius){\n radius = offset + r;\n }\n }\n\n this.boundingRadius = radius;\n};\n\nvar computeAABB_shapeAABB = new AABB();\n\n/**\n * Updates the .aabb\n * @method computeAABB\n * @todo rename to updateAABB()\n */\nBody.prototype.computeAABB = function(){\n var shapes = this.shapes,\n shapeOffsets = this.shapeOffsets,\n shapeOrientations = this.shapeOrientations,\n N = shapes.length,\n offset = tmpVec,\n orientation = tmpQuat,\n bodyQuat = this.quaternion,\n aabb = this.aabb,\n shapeAABB = computeAABB_shapeAABB;\n\n for(var i=0; i!==N; i++){\n var shape = shapes[i];\n\n // Get shape world quaternion\n shapeOrientations[i].mult(bodyQuat, orientation);\n\n // Get shape world position\n orientation.vmult(shapeOffsets[i], offset);\n offset.vadd(this.position, offset);\n\n // vec2.rotate(offset, shapeOffsets[i], bodyAngle);\n // vec2.add(offset, offset, this.position);\n\n // Get shape AABB\n shape.calculateWorldAABB(offset, orientation, shapeAABB.lowerBound, shapeAABB.upperBound);\n\n if(i === 0){\n aabb.copy(shapeAABB);\n } else {\n aabb.extend(shapeAABB);\n }\n }\n\n this.aabbNeedsUpdate = false;\n};\n\nvar uiw_m1 = new Mat3(),\n uiw_m2 = new Mat3(),\n uiw_m3 = new Mat3();\n\n/**\n * Update .inertiaWorld and .invInertiaWorld\n * @method updateInertiaWorld\n */\nBody.prototype.updateInertiaWorld = function(force){\n var I = this.invInertia;\n if (I.x === I.y && I.y === I.z && !force) {\n // If inertia M = s*I, where I is identity and s a scalar, then\n // R*M*R' = R*(s*I)*R' = s*R*I*R' = s*R*R' = s*I = M\n // where R is the rotation matrix.\n // In other words, we don't have to transform the inertia if all\n // inertia diagonal entries are equal.\n } else {\n var m1 = uiw_m1,\n m2 = uiw_m2,\n m3 = uiw_m3;\n m1.setRotationFromQuaternion(this.quaternion);\n m1.transpose(m2);\n m1.scale(I,m1);\n m1.mmult(m2,this.invInertiaWorld);\n //m3.getTrace(this.invInertiaWorld);\n }\n\n /*\n this.quaternion.vmult(this.inertia,this.inertiaWorld);\n this.quaternion.vmult(this.invInertia,this.invInertiaWorld);\n */\n};\n\n/**\n * Apply force to a world point. This could for example be a point on the Body surface. Applying force this way will add to Body.force and Body.torque.\n * @method applyForce\n * @param {Vec3} force The amount of force to add.\n * @param {Vec3} worldPoint A world point to apply the force on.\n */\nvar Body_applyForce_r = new Vec3();\nvar Body_applyForce_rotForce = new Vec3();\nBody.prototype.applyForce = function(force,worldPoint){\n if(this.type !== Body.DYNAMIC){\n return;\n }\n\n // Compute point position relative to the body center\n var r = Body_applyForce_r;\n worldPoint.vsub(this.position,r);\n\n // Compute produced rotational force\n var rotForce = Body_applyForce_rotForce;\n r.cross(force,rotForce);\n\n // Add linear force\n this.force.vadd(force,this.force);\n\n // Add rotational force\n this.torque.vadd(rotForce,this.torque);\n};\n\n/**\n * Apply force to a local point in the body.\n * @method applyLocalForce\n * @param {Vec3} force The force vector to apply, defined locally in the body frame.\n * @param {Vec3} localPoint A local point in the body to apply the force on.\n */\nvar Body_applyLocalForce_worldForce = new Vec3();\nvar Body_applyLocalForce_worldPoint = new Vec3();\nBody.prototype.applyLocalForce = function(localForce, localPoint){\n if(this.type !== Body.DYNAMIC){\n return;\n }\n\n var worldForce = Body_applyLocalForce_worldForce;\n var worldPoint = Body_applyLocalForce_worldPoint;\n\n // Transform the force vector to world space\n this.vectorToWorldFrame(localForce, worldForce);\n this.pointToWorldFrame(localPoint, worldPoint);\n\n this.applyForce(worldForce, worldPoint);\n};\n\n/**\n * Apply impulse to a world point. This could for example be a point on the Body surface. An impulse is a force added to a body during a short period of time (impulse = force * time). Impulses will be added to Body.velocity and Body.angularVelocity.\n * @method applyImpulse\n * @param {Vec3} impulse The amount of impulse to add.\n * @param {Vec3} worldPoint A world point to apply the force on.\n */\nvar Body_applyImpulse_r = new Vec3();\nvar Body_applyImpulse_velo = new Vec3();\nvar Body_applyImpulse_rotVelo = new Vec3();\nBody.prototype.applyImpulse = function(impulse, worldPoint){\n if(this.type !== Body.DYNAMIC){\n return;\n }\n\n // Compute point position relative to the body center\n var r = Body_applyImpulse_r;\n worldPoint.vsub(this.position,r);\n\n // Compute produced central impulse velocity\n var velo = Body_applyImpulse_velo;\n velo.copy(impulse);\n velo.mult(this.invMass,velo);\n\n // Add linear impulse\n this.velocity.vadd(velo, this.velocity);\n\n // Compute produced rotational impulse velocity\n var rotVelo = Body_applyImpulse_rotVelo;\n r.cross(impulse,rotVelo);\n\n /*\n rotVelo.x *= this.invInertia.x;\n rotVelo.y *= this.invInertia.y;\n rotVelo.z *= this.invInertia.z;\n */\n this.invInertiaWorld.vmult(rotVelo,rotVelo);\n\n // Add rotational Impulse\n this.angularVelocity.vadd(rotVelo, this.angularVelocity);\n};\n\n/**\n * Apply locally-defined impulse to a local point in the body.\n * @method applyLocalImpulse\n * @param {Vec3} force The force vector to apply, defined locally in the body frame.\n * @param {Vec3} localPoint A local point in the body to apply the force on.\n */\nvar Body_applyLocalImpulse_worldImpulse = new Vec3();\nvar Body_applyLocalImpulse_worldPoint = new Vec3();\nBody.prototype.applyLocalImpulse = function(localImpulse, localPoint){\n if(this.type !== Body.DYNAMIC){\n return;\n }\n\n var worldImpulse = Body_applyLocalImpulse_worldImpulse;\n var worldPoint = Body_applyLocalImpulse_worldPoint;\n\n // Transform the force vector to world space\n this.vectorToWorldFrame(localImpulse, worldImpulse);\n this.pointToWorldFrame(localPoint, worldPoint);\n\n this.applyImpulse(worldImpulse, worldPoint);\n};\n\nvar Body_updateMassProperties_halfExtents = new Vec3();\n\n/**\n * Should be called whenever you change the body shape or mass.\n * @method updateMassProperties\n */\nBody.prototype.updateMassProperties = function(){\n var halfExtents = Body_updateMassProperties_halfExtents;\n\n this.invMass = this.mass > 0 ? 1.0 / this.mass : 0;\n var I = this.inertia;\n var fixed = this.fixedRotation;\n\n // Approximate with AABB box\n this.computeAABB();\n halfExtents.set(\n (this.aabb.upperBound.x-this.aabb.lowerBound.x) / 2,\n (this.aabb.upperBound.y-this.aabb.lowerBound.y) / 2,\n (this.aabb.upperBound.z-this.aabb.lowerBound.z) / 2\n );\n Box.calculateInertia(halfExtents, this.mass, I);\n\n this.invInertia.set(\n I.x > 0 && !fixed ? 1.0 / I.x : 0,\n I.y > 0 && !fixed ? 1.0 / I.y : 0,\n I.z > 0 && !fixed ? 1.0 / I.z : 0\n );\n this.updateInertiaWorld(true);\n};\n\n/**\n * Get world velocity of a point in the body.\n * @method getVelocityAtWorldPoint\n * @param {Vec3} worldPoint\n * @param {Vec3} result\n * @return {Vec3} The result vector.\n */\nBody.prototype.getVelocityAtWorldPoint = function(worldPoint, result){\n var r = new Vec3();\n worldPoint.vsub(this.position, r);\n this.angularVelocity.cross(r, result);\n this.velocity.vadd(result, result);\n return result;\n};\n\n},{\"../collision/AABB\":3,\"../material/Material\":25,\"../math/Mat3\":27,\"../math/Quaternion\":28,\"../math/Vec3\":30,\"../shapes/Box\":37,\"../shapes/Shape\":43,\"../utils/EventTarget\":49}],32:[function(_dereq_,module,exports){\nvar Body = _dereq_('./Body');\nvar Vec3 = _dereq_('../math/Vec3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar RaycastResult = _dereq_('../collision/RaycastResult');\nvar Ray = _dereq_('../collision/Ray');\nvar WheelInfo = _dereq_('../objects/WheelInfo');\n\nmodule.exports = RaycastVehicle;\n\n/**\n * Vehicle helper class that casts rays from the wheel positions towards the ground and applies forces.\n * @class RaycastVehicle\n * @constructor\n * @param {object} [options]\n * @param {Body} [options.chassisBody] The car chassis body.\n * @param {integer} [options.indexRightAxis] Axis to use for right. x=0, y=1, z=2\n * @param {integer} [options.indexLeftAxis]\n * @param {integer} [options.indexUpAxis]\n */\nfunction RaycastVehicle(options){\n\n /**\n * @property {Body} chassisBody\n */\n this.chassisBody = options.chassisBody;\n\n /**\n * An array of WheelInfo objects.\n * @property {array} wheelInfos\n */\n this.wheelInfos = [];\n\n /**\n * Will be set to true if the car is sliding.\n * @property {boolean} sliding\n */\n this.sliding = false;\n\n /**\n * @property {World} world\n */\n this.world = null;\n\n /**\n * Index of the right axis, 0=x, 1=y, 2=z\n * @property {integer} indexRightAxis\n * @default 1\n */\n this.indexRightAxis = typeof(options.indexRightAxis) !== 'undefined' ? options.indexRightAxis : 1;\n\n /**\n * Index of the forward axis, 0=x, 1=y, 2=z\n * @property {integer} indexForwardAxis\n * @default 0\n */\n this.indexForwardAxis = typeof(options.indexForwardAxis) !== 'undefined' ? options.indexForwardAxis : 0;\n\n /**\n * Index of the up axis, 0=x, 1=y, 2=z\n * @property {integer} indexUpAxis\n * @default 2\n */\n this.indexUpAxis = typeof(options.indexUpAxis) !== 'undefined' ? options.indexUpAxis : 2;\n}\n\nvar tmpVec1 = new Vec3();\nvar tmpVec2 = new Vec3();\nvar tmpVec3 = new Vec3();\nvar tmpVec4 = new Vec3();\nvar tmpVec5 = new Vec3();\nvar tmpVec6 = new Vec3();\nvar tmpRay = new Ray();\n\n/**\n * Add a wheel. For information about the options, see WheelInfo.\n * @method addWheel\n * @param {object} [options]\n */\nRaycastVehicle.prototype.addWheel = function(options){\n options = options || {};\n\n var info = new WheelInfo(options);\n var index = this.wheelInfos.length;\n this.wheelInfos.push(info);\n\n return index;\n};\n\n/**\n * Set the steering value of a wheel.\n * @method setSteeringValue\n * @param {number} value\n * @param {integer} wheelIndex\n */\nRaycastVehicle.prototype.setSteeringValue = function(value, wheelIndex){\n var wheel = this.wheelInfos[wheelIndex];\n wheel.steering = value;\n};\n\nvar torque = new Vec3();\n\n/**\n * Set the wheel force to apply on one of the wheels each time step\n * @method applyEngineForce\n * @param {number} value\n * @param {integer} wheelIndex\n */\nRaycastVehicle.prototype.applyEngineForce = function(value, wheelIndex){\n this.wheelInfos[wheelIndex].engineForce = value;\n};\n\n/**\n * Set the braking force of a wheel\n * @method setBrake\n * @param {number} brake\n * @param {integer} wheelIndex\n */\nRaycastVehicle.prototype.setBrake = function(brake, wheelIndex){\n this.wheelInfos[wheelIndex].brake = brake;\n};\n\n/**\n * Add the vehicle including its constraints to the world.\n * @method addToWorld\n * @param {World} world\n */\nRaycastVehicle.prototype.addToWorld = function(world){\n var constraints = this.constraints;\n world.add(this.chassisBody);\n var that = this;\n this.preStepCallback = function(){\n that.updateVehicle(world.dt);\n };\n world.addEventListener('preStep', this.preStepCallback);\n this.world = world;\n};\n\n/**\n * Get one of the wheel axles, world-oriented.\n * @private\n * @method getVehicleAxisWorld\n * @param {integer} axisIndex\n * @param {Vec3} result\n */\nRaycastVehicle.prototype.getVehicleAxisWorld = function(axisIndex, result){\n result.set(\n axisIndex === 0 ? 1 : 0,\n axisIndex === 1 ? 1 : 0,\n axisIndex === 2 ? 1 : 0\n );\n this.chassisBody.vectorToWorldFrame(result, result);\n};\n\nRaycastVehicle.prototype.updateVehicle = function(timeStep){\n var wheelInfos = this.wheelInfos;\n var numWheels = wheelInfos.length;\n var chassisBody = this.chassisBody;\n\n for (var i = 0; i < numWheels; i++) {\n this.updateWheelTransform(i);\n }\n\n this.currentVehicleSpeedKmHour = 3.6 * chassisBody.velocity.norm();\n\n var forwardWorld = new Vec3();\n this.getVehicleAxisWorld(this.indexForwardAxis, forwardWorld);\n\n if (forwardWorld.dot(chassisBody.velocity) < 0){\n this.currentVehicleSpeedKmHour *= -1;\n }\n\n // simulate suspension\n for (var i = 0; i < numWheels; i++) {\n this.castRay(wheelInfos[i]);\n }\n\n this.updateSuspension(timeStep);\n\n var impulse = new Vec3();\n var relpos = new Vec3();\n for (var i = 0; i < numWheels; i++) {\n //apply suspension force\n var wheel = wheelInfos[i];\n var suspensionForce = wheel.suspensionForce;\n if (suspensionForce > wheel.maxSuspensionForce) {\n suspensionForce = wheel.maxSuspensionForce;\n }\n wheel.raycastResult.hitNormalWorld.scale(suspensionForce * timeStep, impulse);\n\n wheel.raycastResult.hitPointWorld.vsub(chassisBody.position, relpos);\n chassisBody.applyImpulse(impulse, wheel.raycastResult.hitPointWorld/*relpos*/);\n }\n\n this.updateFriction(timeStep);\n\n var hitNormalWorldScaledWithProj = new Vec3();\n var fwd = new Vec3();\n var vel = new Vec3();\n for (i = 0; i < numWheels; i++) {\n var wheel = wheelInfos[i];\n //var relpos = new Vec3();\n //wheel.chassisConnectionPointWorld.vsub(chassisBody.position, relpos);\n chassisBody.getVelocityAtWorldPoint(wheel.chassisConnectionPointWorld, vel);\n\n // Hack to get the rotation in the correct direction\n var m = 1;\n switch(this.indexUpAxis){\n case 1:\n m = -1;\n break;\n }\n\n if (wheel.isInContact) {\n\n this.getVehicleAxisWorld(this.indexForwardAxis, fwd);\n var proj = fwd.dot(wheel.raycastResult.hitNormalWorld);\n wheel.raycastResult.hitNormalWorld.scale(proj, hitNormalWorldScaledWithProj);\n\n fwd.vsub(hitNormalWorldScaledWithProj, fwd);\n\n var proj2 = fwd.dot(vel);\n wheel.deltaRotation = m * proj2 * timeStep / wheel.radius;\n }\n\n if((wheel.sliding || !wheel.isInContact) && wheel.engineForce !== 0 && wheel.useCustomSlidingRotationalSpeed){\n // Apply custom rotation when accelerating and sliding\n wheel.deltaRotation = (wheel.engineForce > 0 ? 1 : -1) * wheel.customSlidingRotationalSpeed * timeStep;\n }\n\n // Lock wheels\n if(Math.abs(wheel.brake) > Math.abs(wheel.engineForce)){\n wheel.deltaRotation = 0;\n }\n\n wheel.rotation += wheel.deltaRotation; // Use the old value\n wheel.deltaRotation *= 0.99; // damping of rotation when not in contact\n }\n};\n\nRaycastVehicle.prototype.updateSuspension = function(deltaTime) {\n var chassisBody = this.chassisBody;\n var chassisMass = chassisBody.mass;\n var wheelInfos = this.wheelInfos;\n var numWheels = wheelInfos.length;\n\n for (var w_it = 0; w_it < numWheels; w_it++){\n var wheel = wheelInfos[w_it];\n\n if (wheel.isInContact){\n var force;\n\n // Spring\n var susp_length = wheel.suspensionRestLength;\n var current_length = wheel.suspensionLength;\n var length_diff = (susp_length - current_length);\n\n force = wheel.suspensionStiffness * length_diff * wheel.clippedInvContactDotSuspension;\n\n // Damper\n var projected_rel_vel = wheel.suspensionRelativeVelocity;\n var susp_damping;\n if (projected_rel_vel < 0) {\n susp_damping = wheel.dampingCompression;\n } else {\n susp_damping = wheel.dampingRelaxation;\n }\n force -= susp_damping * projected_rel_vel;\n\n wheel.suspensionForce = force * chassisMass;\n if (wheel.suspensionForce < 0) {\n wheel.suspensionForce = 0;\n }\n } else {\n wheel.suspensionForce = 0;\n }\n }\n};\n\n/**\n * Remove the vehicle including its constraints from the world.\n * @method removeFromWorld\n * @param {World} world\n */\nRaycastVehicle.prototype.removeFromWorld = function(world){\n var constraints = this.constraints;\n world.remove(this.chassisBody);\n world.removeEventListener('preStep', this.preStepCallback);\n this.world = null;\n};\n\nvar castRay_rayvector = new Vec3();\nvar castRay_target = new Vec3();\nRaycastVehicle.prototype.castRay = function(wheel) {\n var rayvector = castRay_rayvector;\n var target = castRay_target;\n\n this.updateWheelTransformWorld(wheel);\n var chassisBody = this.chassisBody;\n\n var depth = -1;\n\n var raylen = wheel.suspensionRestLength + wheel.radius;\n\n wheel.directionWorld.scale(raylen, rayvector);\n var source = wheel.chassisConnectionPointWorld;\n source.vadd(rayvector, target);\n var raycastResult = wheel.raycastResult;\n\n var param = 0;\n\n raycastResult.reset();\n // Turn off ray collision with the chassis temporarily\n var oldState = chassisBody.collisionResponse;\n chassisBody.collisionResponse = false;\n\n // Cast ray against world\n this.world.rayTest(source, target, raycastResult);\n chassisBody.collisionResponse = oldState;\n\n var object = raycastResult.body;\n\n wheel.raycastResult.groundObject = 0;\n\n if (object) {\n depth = raycastResult.distance;\n wheel.raycastResult.hitNormalWorld = raycastResult.hitNormalWorld;\n wheel.isInContact = true;\n\n var hitDistance = raycastResult.distance;\n wheel.suspensionLength = hitDistance - wheel.radius;\n\n // clamp on max suspension travel\n var minSuspensionLength = wheel.suspensionRestLength - wheel.maxSuspensionTravel;\n var maxSuspensionLength = wheel.suspensionRestLength + wheel.maxSuspensionTravel;\n if (wheel.suspensionLength < minSuspensionLength) {\n wheel.suspensionLength = minSuspensionLength;\n }\n if (wheel.suspensionLength > maxSuspensionLength) {\n wheel.suspensionLength = maxSuspensionLength;\n wheel.raycastResult.reset();\n }\n\n var denominator = wheel.raycastResult.hitNormalWorld.dot(wheel.directionWorld);\n\n var chassis_velocity_at_contactPoint = new Vec3();\n chassisBody.getVelocityAtWorldPoint(wheel.raycastResult.hitPointWorld, chassis_velocity_at_contactPoint);\n\n var projVel = wheel.raycastResult.hitNormalWorld.dot( chassis_velocity_at_contactPoint );\n\n if (denominator >= -0.1) {\n wheel.suspensionRelativeVelocity = 0;\n wheel.clippedInvContactDotSuspension = 1 / 0.1;\n } else {\n var inv = -1 / denominator;\n wheel.suspensionRelativeVelocity = projVel * inv;\n wheel.clippedInvContactDotSuspension = inv;\n }\n\n } else {\n\n //put wheel info as in rest position\n wheel.suspensionLength = wheel.suspensionRestLength + 0 * wheel.maxSuspensionTravel;\n wheel.suspensionRelativeVelocity = 0.0;\n wheel.directionWorld.scale(-1, wheel.raycastResult.hitNormalWorld);\n wheel.clippedInvContactDotSuspension = 1.0;\n }\n\n return depth;\n};\n\nRaycastVehicle.prototype.updateWheelTransformWorld = function(wheel){\n wheel.isInContact = false;\n var chassisBody = this.chassisBody;\n chassisBody.pointToWorldFrame(wheel.chassisConnectionPointLocal, wheel.chassisConnectionPointWorld);\n chassisBody.vectorToWorldFrame(wheel.directionLocal, wheel.directionWorld);\n chassisBody.vectorToWorldFrame(wheel.axleLocal, wheel.axleWorld);\n};\n\n\n/**\n * Update one of the wheel transform.\n * Note when rendering wheels: during each step, wheel transforms are updated BEFORE the chassis; ie. their position becomes invalid after the step. Thus when you render wheels, you must update wheel transforms before rendering them. See raycastVehicle demo for an example.\n * @method updateWheelTransform\n * @param {integer} wheelIndex The wheel index to update.\n */\nRaycastVehicle.prototype.updateWheelTransform = function(wheelIndex){\n var up = tmpVec4;\n var right = tmpVec5;\n var fwd = tmpVec6;\n\n var wheel = this.wheelInfos[wheelIndex];\n this.updateWheelTransformWorld(wheel);\n\n wheel.directionLocal.scale(-1, up);\n right.copy(wheel.axleLocal);\n up.cross(right, fwd);\n fwd.normalize();\n right.normalize();\n\n // Rotate around steering over the wheelAxle\n var steering = wheel.steering;\n var steeringOrn = new Quaternion();\n steeringOrn.setFromAxisAngle(up, steering);\n\n var rotatingOrn = new Quaternion();\n rotatingOrn.setFromAxisAngle(right, wheel.rotation);\n\n // World rotation of the wheel\n var q = wheel.worldTransform.quaternion;\n this.chassisBody.quaternion.mult(steeringOrn, q);\n q.mult(rotatingOrn, q);\n\n q.normalize();\n\n // world position of the wheel\n var p = wheel.worldTransform.position;\n p.copy(wheel.directionWorld);\n p.scale(wheel.suspensionLength, p);\n p.vadd(wheel.chassisConnectionPointWorld, p);\n};\n\nvar directions = [\n new Vec3(1, 0, 0),\n new Vec3(0, 1, 0),\n new Vec3(0, 0, 1)\n];\n\n/**\n * Get the world transform of one of the wheels\n * @method getWheelTransformWorld\n * @param {integer} wheelIndex\n * @return {Transform}\n */\nRaycastVehicle.prototype.getWheelTransformWorld = function(wheelIndex) {\n return this.wheelInfos[wheelIndex].worldTransform;\n};\n\n\nvar updateFriction_surfNormalWS_scaled_proj = new Vec3();\nvar updateFriction_axle = [];\nvar updateFriction_forwardWS = [];\nvar sideFrictionStiffness2 = 1;\nRaycastVehicle.prototype.updateFriction = function(timeStep) {\n var surfNormalWS_scaled_proj = updateFriction_surfNormalWS_scaled_proj;\n\n //calculate the impulse, so that the wheels don't move sidewards\n var wheelInfos = this.wheelInfos;\n var numWheels = wheelInfos.length;\n var chassisBody = this.chassisBody;\n var forwardWS = updateFriction_forwardWS;\n var axle = updateFriction_axle;\n\n var numWheelsOnGround = 0;\n\n for (var i = 0; i < numWheels; i++) {\n var wheel = wheelInfos[i];\n\n var groundObject = wheel.raycastResult.body;\n if (groundObject){\n numWheelsOnGround++;\n }\n\n wheel.sideImpulse = 0;\n wheel.forwardImpulse = 0;\n if(!forwardWS[i]){\n forwardWS[i] = new Vec3();\n }\n if(!axle[i]){\n axle[i] = new Vec3();\n }\n }\n\n for (var i = 0; i < numWheels; i++){\n var wheel = wheelInfos[i];\n\n var groundObject = wheel.raycastResult.body;\n\n if (groundObject) {\n var axlei = axle[i];\n var wheelTrans = this.getWheelTransformWorld(i);\n\n // Get world axle\n wheelTrans.vectorToWorldFrame(directions[this.indexRightAxis], axlei);\n\n var surfNormalWS = wheel.raycastResult.hitNormalWorld;\n var proj = axlei.dot(surfNormalWS);\n surfNormalWS.scale(proj, surfNormalWS_scaled_proj);\n axlei.vsub(surfNormalWS_scaled_proj, axlei);\n axlei.normalize();\n\n surfNormalWS.cross(axlei, forwardWS[i]);\n forwardWS[i].normalize();\n\n wheel.sideImpulse = resolveSingleBilateral(\n chassisBody,\n wheel.raycastResult.hitPointWorld,\n groundObject,\n wheel.raycastResult.hitPointWorld,\n axlei\n );\n\n wheel.sideImpulse *= sideFrictionStiffness2;\n }\n }\n\n var sideFactor = 1;\n var fwdFactor = 0.5;\n\n this.sliding = false;\n for (var i = 0; i < numWheels; i++) {\n var wheel = wheelInfos[i];\n var groundObject = wheel.raycastResult.body;\n\n var rollingFriction = 0;\n\n wheel.slipInfo = 1;\n if (groundObject) {\n var defaultRollingFrictionImpulse = 0;\n var maxImpulse = wheel.brake ? wheel.brake : defaultRollingFrictionImpulse;\n\n // btWheelContactPoint contactPt(chassisBody,groundObject,wheelInfraycastInfo.hitPointWorld,forwardWS[wheel],maxImpulse);\n // rollingFriction = calcRollingFriction(contactPt);\n rollingFriction = calcRollingFriction(chassisBody, groundObject, wheel.raycastResult.hitPointWorld, forwardWS[i], maxImpulse);\n\n rollingFriction += wheel.engineForce * timeStep;\n\n // rollingFriction = 0;\n var factor = maxImpulse / rollingFriction;\n wheel.slipInfo *= factor;\n }\n\n //switch between active rolling (throttle), braking and non-active rolling friction (nthrottle/break)\n\n wheel.forwardImpulse = 0;\n wheel.skidInfo = 1;\n\n if (groundObject) {\n wheel.skidInfo = 1;\n\n var maximp = wheel.suspensionForce * timeStep * wheel.frictionSlip;\n var maximpSide = maximp;\n\n var maximpSquared = maximp * maximpSide;\n\n wheel.forwardImpulse = rollingFriction;//wheelInfo.engineForce* timeStep;\n\n var x = wheel.forwardImpulse * fwdFactor;\n var y = wheel.sideImpulse * sideFactor;\n\n var impulseSquared = x * x + y * y;\n\n wheel.sliding = false;\n if (impulseSquared > maximpSquared) {\n this.sliding = true;\n wheel.sliding = true;\n\n var factor = maximp / Math.sqrt(impulseSquared);\n\n wheel.skidInfo *= factor;\n }\n }\n }\n\n if (this.sliding) {\n for (var i = 0; i < numWheels; i++) {\n var wheel = wheelInfos[i];\n if (wheel.sideImpulse !== 0) {\n if (wheel.skidInfo < 1){\n wheel.forwardImpulse *= wheel.skidInfo;\n wheel.sideImpulse *= wheel.skidInfo;\n }\n }\n }\n }\n\n // apply the impulses\n for (var i = 0; i < numWheels; i++) {\n var wheel = wheelInfos[i];\n\n var rel_pos = new Vec3();\n //wheel.raycastResult.hitPointWorld.vsub(chassisBody.position, rel_pos);\n // cannons applyimpulse is using world coord for the position\n rel_pos.copy(wheel.raycastResult.hitPointWorld);\n\n if (wheel.forwardImpulse !== 0) {\n var impulse = new Vec3();\n forwardWS[i].scale(wheel.forwardImpulse, impulse);\n chassisBody.applyImpulse(impulse, rel_pos);\n }\n\n if (wheel.sideImpulse !== 0){\n var groundObject = wheel.raycastResult.body;\n\n var rel_pos2 = new Vec3();\n //wheel.raycastResult.hitPointWorld.vsub(groundObject.position, rel_pos2);\n rel_pos2.copy(wheel.raycastResult.hitPointWorld);\n var sideImp = new Vec3();\n axle[i].scale(wheel.sideImpulse, sideImp);\n\n // Scale the relative position in the up direction with rollInfluence.\n // If rollInfluence is 1, the impulse will be applied on the hitPoint (easy to roll over), if it is zero it will be applied in the same plane as the center of mass (not easy to roll over).\n chassisBody.pointToLocalFrame(rel_pos, rel_pos);\n rel_pos['xyz'[this.indexUpAxis]] *= wheel.rollInfluence;\n chassisBody.pointToWorldFrame(rel_pos, rel_pos);\n chassisBody.applyImpulse(sideImp, rel_pos);\n\n //apply friction impulse on the ground\n sideImp.scale(-1, sideImp);\n groundObject.applyImpulse(sideImp, rel_pos2);\n }\n }\n};\n\nvar calcRollingFriction_vel1 = new Vec3();\nvar calcRollingFriction_vel2 = new Vec3();\nvar calcRollingFriction_vel = new Vec3();\n\nfunction calcRollingFriction(body0, body1, frictionPosWorld, frictionDirectionWorld, maxImpulse) {\n var j1 = 0;\n var contactPosWorld = frictionPosWorld;\n\n // var rel_pos1 = new Vec3();\n // var rel_pos2 = new Vec3();\n var vel1 = calcRollingFriction_vel1;\n var vel2 = calcRollingFriction_vel2;\n var vel = calcRollingFriction_vel;\n // contactPosWorld.vsub(body0.position, rel_pos1);\n // contactPosWorld.vsub(body1.position, rel_pos2);\n\n body0.getVelocityAtWorldPoint(contactPosWorld, vel1);\n body1.getVelocityAtWorldPoint(contactPosWorld, vel2);\n vel1.vsub(vel2, vel);\n\n var vrel = frictionDirectionWorld.dot(vel);\n\n var denom0 = computeImpulseDenominator(body0, frictionPosWorld, frictionDirectionWorld);\n var denom1 = computeImpulseDenominator(body1, frictionPosWorld, frictionDirectionWorld);\n var relaxation = 1;\n var jacDiagABInv = relaxation / (denom0 + denom1);\n\n // calculate j that moves us to zero relative velocity\n j1 = -vrel * jacDiagABInv;\n\n if (maxImpulse < j1) {\n j1 = maxImpulse;\n }\n if (j1 < -maxImpulse) {\n j1 = -maxImpulse;\n }\n\n return j1;\n}\n\nvar computeImpulseDenominator_r0 = new Vec3();\nvar computeImpulseDenominator_c0 = new Vec3();\nvar computeImpulseDenominator_vec = new Vec3();\nvar computeImpulseDenominator_m = new Vec3();\nfunction computeImpulseDenominator(body, pos, normal) {\n var r0 = computeImpulseDenominator_r0;\n var c0 = computeImpulseDenominator_c0;\n var vec = computeImpulseDenominator_vec;\n var m = computeImpulseDenominator_m;\n\n pos.vsub(body.position, r0);\n r0.cross(normal, c0);\n body.invInertiaWorld.vmult(c0, m);\n m.cross(r0, vec);\n\n return body.invMass + normal.dot(vec);\n}\n\n\nvar resolveSingleBilateral_vel1 = new Vec3();\nvar resolveSingleBilateral_vel2 = new Vec3();\nvar resolveSingleBilateral_vel = new Vec3();\n\n//bilateral constraint between two dynamic objects\nfunction resolveSingleBilateral(body1, pos1, body2, pos2, normal, impulse){\n var normalLenSqr = normal.norm2();\n if (normalLenSqr > 1.1){\n return 0; // no impulse\n }\n // var rel_pos1 = new Vec3();\n // var rel_pos2 = new Vec3();\n // pos1.vsub(body1.position, rel_pos1);\n // pos2.vsub(body2.position, rel_pos2);\n\n var vel1 = resolveSingleBilateral_vel1;\n var vel2 = resolveSingleBilateral_vel2;\n var vel = resolveSingleBilateral_vel;\n body1.getVelocityAtWorldPoint(pos1, vel1);\n body2.getVelocityAtWorldPoint(pos2, vel2);\n\n vel1.vsub(vel2, vel);\n\n var rel_vel = normal.dot(vel);\n\n var contactDamping = 0.2;\n var massTerm = 1 / (body1.invMass + body2.invMass);\n var impulse = - contactDamping * rel_vel * massTerm;\n\n return impulse;\n}\n},{\"../collision/Ray\":9,\"../collision/RaycastResult\":10,\"../math/Quaternion\":28,\"../math/Vec3\":30,\"../objects/WheelInfo\":36,\"./Body\":31}],33:[function(_dereq_,module,exports){\nvar Body = _dereq_('./Body');\nvar Sphere = _dereq_('../shapes/Sphere');\nvar Box = _dereq_('../shapes/Box');\nvar Vec3 = _dereq_('../math/Vec3');\nvar HingeConstraint = _dereq_('../constraints/HingeConstraint');\n\nmodule.exports = RigidVehicle;\n\n/**\n * Simple vehicle helper class with spherical rigid body wheels.\n * @class RigidVehicle\n * @constructor\n * @param {Body} [options.chassisBody]\n */\nfunction RigidVehicle(options){\n this.wheelBodies = [];\n\n /**\n * @property coordinateSystem\n * @type {Vec3}\n */\n this.coordinateSystem = typeof(options.coordinateSystem)==='undefined' ? new Vec3(1, 2, 3) : options.coordinateSystem.clone();\n\n /**\n * @property {Body} chassisBody\n */\n this.chassisBody = options.chassisBody;\n\n if(!this.chassisBody){\n // No chassis body given. Create it!\n var chassisShape = new Box(new Vec3(5, 2, 0.5));\n this.chassisBody = new Body(1, chassisShape);\n }\n\n /**\n * @property constraints\n * @type {Array}\n */\n this.constraints = [];\n\n this.wheelAxes = [];\n this.wheelForces = [];\n}\n\n/**\n * Add a wheel\n * @method addWheel\n * @param {object} options\n * @param {boolean} [options.isFrontWheel]\n * @param {Vec3} [options.position] Position of the wheel, locally in the chassis body.\n * @param {Vec3} [options.direction] Slide direction of the wheel along the suspension.\n * @param {Vec3} [options.axis] Axis of rotation of the wheel, locally defined in the chassis.\n * @param {Body} [options.body] The wheel body.\n */\nRigidVehicle.prototype.addWheel = function(options){\n options = options || {};\n var wheelBody = options.body;\n if(!wheelBody){\n wheelBody = new Body(1, new Sphere(1.2));\n }\n this.wheelBodies.push(wheelBody);\n this.wheelForces.push(0);\n\n // Position constrain wheels\n var zero = new Vec3();\n var position = typeof(options.position) !== 'undefined' ? options.position.clone() : new Vec3();\n\n // Set position locally to the chassis\n var worldPosition = new Vec3();\n this.chassisBody.pointToWorldFrame(position, worldPosition);\n wheelBody.position.set(worldPosition.x, worldPosition.y, worldPosition.z);\n\n // Constrain wheel\n var axis = typeof(options.axis) !== 'undefined' ? options.axis.clone() : new Vec3(0, 1, 0);\n this.wheelAxes.push(axis);\n\n var hingeConstraint = new HingeConstraint(this.chassisBody, wheelBody, {\n pivotA: position,\n axisA: axis,\n pivotB: Vec3.ZERO,\n axisB: axis,\n collideConnected: false\n });\n this.constraints.push(hingeConstraint);\n\n return this.wheelBodies.length - 1;\n};\n\n/**\n * Set the steering value of a wheel.\n * @method setSteeringValue\n * @param {number} value\n * @param {integer} wheelIndex\n * @todo check coordinateSystem\n */\nRigidVehicle.prototype.setSteeringValue = function(value, wheelIndex){\n // Set angle of the hinge axis\n var axis = this.wheelAxes[wheelIndex];\n\n var c = Math.cos(value),\n s = Math.sin(value),\n x = axis.x,\n y = axis.y;\n this.constraints[wheelIndex].axisA.set(\n c*x -s*y,\n s*x +c*y,\n 0\n );\n};\n\n/**\n * Set the target rotational speed of the hinge constraint.\n * @method setMotorSpeed\n * @param {number} value\n * @param {integer} wheelIndex\n */\nRigidVehicle.prototype.setMotorSpeed = function(value, wheelIndex){\n var hingeConstraint = this.constraints[wheelIndex];\n hingeConstraint.enableMotor();\n hingeConstraint.motorTargetVelocity = value;\n};\n\n/**\n * Set the target rotational speed of the hinge constraint.\n * @method disableMotor\n * @param {number} value\n * @param {integer} wheelIndex\n */\nRigidVehicle.prototype.disableMotor = function(wheelIndex){\n var hingeConstraint = this.constraints[wheelIndex];\n hingeConstraint.disableMotor();\n};\n\nvar torque = new Vec3();\n\n/**\n * Set the wheel force to apply on one of the wheels each time step\n * @method setWheelForce\n * @param {number} value\n * @param {integer} wheelIndex\n */\nRigidVehicle.prototype.setWheelForce = function(value, wheelIndex){\n this.wheelForces[wheelIndex] = value;\n};\n\n/**\n * Apply a torque on one of the wheels.\n * @method applyWheelForce\n * @param {number} value\n * @param {integer} wheelIndex\n */\nRigidVehicle.prototype.applyWheelForce = function(value, wheelIndex){\n var axis = this.wheelAxes[wheelIndex];\n var wheelBody = this.wheelBodies[wheelIndex];\n var bodyTorque = wheelBody.torque;\n\n axis.scale(value, torque);\n wheelBody.vectorToWorldFrame(torque, torque);\n bodyTorque.vadd(torque, bodyTorque);\n};\n\n/**\n * Add the vehicle including its constraints to the world.\n * @method addToWorld\n * @param {World} world\n */\nRigidVehicle.prototype.addToWorld = function(world){\n var constraints = this.constraints;\n var bodies = this.wheelBodies.concat([this.chassisBody]);\n\n for (var i = 0; i < bodies.length; i++) {\n world.add(bodies[i]);\n }\n\n for (var i = 0; i < constraints.length; i++) {\n world.addConstraint(constraints[i]);\n }\n\n world.addEventListener('preStep', this._update.bind(this));\n};\n\nRigidVehicle.prototype._update = function(){\n var wheelForces = this.wheelForces;\n for (var i = 0; i < wheelForces.length; i++) {\n this.applyWheelForce(wheelForces[i], i);\n }\n};\n\n/**\n * Remove the vehicle including its constraints from the world.\n * @method removeFromWorld\n * @param {World} world\n */\nRigidVehicle.prototype.removeFromWorld = function(world){\n var constraints = this.constraints;\n var bodies = this.wheelBodies.concat([this.chassisBody]);\n\n for (var i = 0; i < bodies.length; i++) {\n world.remove(bodies[i]);\n }\n\n for (var i = 0; i < constraints.length; i++) {\n world.removeConstraint(constraints[i]);\n }\n};\n\nvar worldAxis = new Vec3();\n\n/**\n * Get current rotational velocity of a wheel\n * @method getWheelSpeed\n * @param {integer} wheelIndex\n */\nRigidVehicle.prototype.getWheelSpeed = function(wheelIndex){\n var axis = this.wheelAxes[wheelIndex];\n var wheelBody = this.wheelBodies[wheelIndex];\n var w = wheelBody.angularVelocity;\n this.chassisBody.vectorToWorldFrame(axis, worldAxis);\n return w.dot(worldAxis);\n};\n\n},{\"../constraints/HingeConstraint\":15,\"../math/Vec3\":30,\"../shapes/Box\":37,\"../shapes/Sphere\":44,\"./Body\":31}],34:[function(_dereq_,module,exports){\nmodule.exports = SPHSystem;\n\nvar Shape = _dereq_('../shapes/Shape');\nvar Vec3 = _dereq_('../math/Vec3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar Particle = _dereq_('../shapes/Particle');\nvar Body = _dereq_('../objects/Body');\nvar Material = _dereq_('../material/Material');\n\n/**\n * Smoothed-particle hydrodynamics system\n * @class SPHSystem\n * @constructor\n */\nfunction SPHSystem(){\n this.particles = [];\n\t\n /**\n * Density of the system (kg/m3).\n * @property {number} density\n */\n this.density = 1;\n\t\n /**\n * Distance below which two particles are considered to be neighbors.\n * It should be adjusted so there are about 15-20 neighbor particles within this radius.\n * @property {number} smoothingRadius\n */\n this.smoothingRadius = 1;\n this.speedOfSound = 1;\n\t\n /**\n * Viscosity of the system.\n * @property {number} viscosity\n */\n this.viscosity = 0.01;\n this.eps = 0.000001;\n\n // Stuff Computed per particle\n this.pressures = [];\n this.densities = [];\n this.neighbors = [];\n}\n\n/**\n * Add a particle to the system.\n * @method add\n * @param {Body} particle\n */\nSPHSystem.prototype.add = function(particle){\n this.particles.push(particle);\n if(this.neighbors.length < this.particles.length){\n this.neighbors.push([]);\n }\n};\n\n/**\n * Remove a particle from the system.\n * @method remove\n * @param {Body} particle\n */\nSPHSystem.prototype.remove = function(particle){\n var idx = this.particles.indexOf(particle);\n if(idx !== -1){\n this.particles.splice(idx,1);\n if(this.neighbors.length > this.particles.length){\n this.neighbors.pop();\n }\n }\n};\n\n/**\n * Get neighbors within smoothing volume, save in the array neighbors\n * @method getNeighbors\n * @param {Body} particle\n * @param {Array} neighbors\n */\nvar SPHSystem_getNeighbors_dist = new Vec3();\nSPHSystem.prototype.getNeighbors = function(particle,neighbors){\n var N = this.particles.length,\n id = particle.id,\n R2 = this.smoothingRadius * this.smoothingRadius,\n dist = SPHSystem_getNeighbors_dist;\n for(var i=0; i!==N; i++){\n var p = this.particles[i];\n p.position.vsub(particle.position,dist);\n if(id!==p.id && dist.norm2() < R2){\n neighbors.push(p);\n }\n }\n};\n\n// Temp vectors for calculation\nvar SPHSystem_update_dist = new Vec3(),\n SPHSystem_update_a_pressure = new Vec3(),\n SPHSystem_update_a_visc = new Vec3(),\n SPHSystem_update_gradW = new Vec3(),\n SPHSystem_update_r_vec = new Vec3(),\n SPHSystem_update_u = new Vec3(); // Relative velocity\nSPHSystem.prototype.update = function(){\n var N = this.particles.length,\n dist = SPHSystem_update_dist,\n cs = this.speedOfSound,\n eps = this.eps;\n\n for(var i=0; i!==N; i++){\n var p = this.particles[i]; // Current particle\n var neighbors = this.neighbors[i];\n\n // Get neighbors\n neighbors.length = 0;\n this.getNeighbors(p,neighbors);\n neighbors.push(this.particles[i]); // Add current too\n var numNeighbors = neighbors.length;\n\n // Accumulate density for the particle\n var sum = 0.0;\n for(var j=0; j!==numNeighbors; j++){\n\n //printf(\"Current particle has position %f %f %f\\n\",objects[id].pos.x(),objects[id].pos.y(),objects[id].pos.z());\n p.position.vsub(neighbors[j].position, dist);\n var len = dist.norm();\n\n var weight = this.w(len);\n sum += neighbors[j].mass * weight;\n }\n\n // Save\n this.densities[i] = sum;\n this.pressures[i] = cs * cs * (this.densities[i] - this.density);\n }\n\n // Add forces\n\n // Sum to these accelerations\n var a_pressure= SPHSystem_update_a_pressure;\n var a_visc = SPHSystem_update_a_visc;\n var gradW = SPHSystem_update_gradW;\n var r_vec = SPHSystem_update_r_vec;\n var u = SPHSystem_update_u;\n\n for(var i=0; i!==N; i++){\n\n var particle = this.particles[i];\n\n a_pressure.set(0,0,0);\n a_visc.set(0,0,0);\n\n // Init vars\n var Pij;\n var nabla;\n var Vij;\n\n // Sum up for all other neighbors\n var neighbors = this.neighbors[i];\n var numNeighbors = neighbors.length;\n\n //printf(\"Neighbors: \");\n for(var j=0; j!==numNeighbors; j++){\n\n var neighbor = neighbors[j];\n //printf(\"%d \",nj);\n\n // Get r once for all..\n particle.position.vsub(neighbor.position,r_vec);\n var r = r_vec.norm();\n\n // Pressure contribution\n Pij = -neighbor.mass * (this.pressures[i] / (this.densities[i]*this.densities[i] + eps) + this.pressures[j] / (this.densities[j]*this.densities[j] + eps));\n this.gradw(r_vec, gradW);\n // Add to pressure acceleration\n gradW.mult(Pij , gradW);\n a_pressure.vadd(gradW, a_pressure);\n\n // Viscosity contribution\n neighbor.velocity.vsub(particle.velocity, u);\n u.mult( 1.0 / (0.0001+this.densities[i] * this.densities[j]) * this.viscosity * neighbor.mass , u );\n nabla = this.nablaw(r);\n u.mult(nabla,u);\n // Add to viscosity acceleration\n a_visc.vadd( u, a_visc );\n }\n\n // Calculate force\n a_visc.mult(particle.mass, a_visc);\n a_pressure.mult(particle.mass, a_pressure);\n\n // Add force to particles\n particle.force.vadd(a_visc, particle.force);\n particle.force.vadd(a_pressure, particle.force);\n }\n};\n\n// Calculate the weight using the W(r) weightfunction\nSPHSystem.prototype.w = function(r){\n // 315\n var h = this.smoothingRadius;\n return 315.0/(64.0*Math.PI*Math.pow(h,9)) * Math.pow(h*h-r*r,3);\n};\n\n// calculate gradient of the weight function\nSPHSystem.prototype.gradw = function(rVec,resultVec){\n var r = rVec.norm(),\n h = this.smoothingRadius;\n rVec.mult(945.0/(32.0*Math.PI*Math.pow(h,9)) * Math.pow((h*h-r*r),2) , resultVec);\n};\n\n// Calculate nabla(W)\nSPHSystem.prototype.nablaw = function(r){\n var h = this.smoothingRadius;\n var nabla = 945.0/(32.0*Math.PI*Math.pow(h,9)) * (h*h-r*r)*(7*r*r - 3*h*h);\n return nabla;\n};\n\n},{\"../material/Material\":25,\"../math/Quaternion\":28,\"../math/Vec3\":30,\"../objects/Body\":31,\"../shapes/Particle\":41,\"../shapes/Shape\":43}],35:[function(_dereq_,module,exports){\nvar Vec3 = _dereq_('../math/Vec3');\n\nmodule.exports = Spring;\n\n/**\n * A spring, connecting two bodies.\n *\n * @class Spring\n * @constructor\n * @param {Body} bodyA\n * @param {Body} bodyB\n * @param {Object} [options]\n * @param {number} [options.restLength] A number > 0. Default: 1\n * @param {number} [options.stiffness] A number >= 0. Default: 100\n * @param {number} [options.damping] A number >= 0. Default: 1\n * @param {Vec3} [options.worldAnchorA] Where to hook the spring to body A, in world coordinates.\n * @param {Vec3} [options.worldAnchorB]\n * @param {Vec3} [options.localAnchorA] Where to hook the spring to body A, in local body coordinates.\n * @param {Vec3} [options.localAnchorB]\n */\nfunction Spring(bodyA,bodyB,options){\n options = options || {};\n\n /**\n * Rest length of the spring.\n * @property restLength\n * @type {number}\n */\n this.restLength = typeof(options.restLength) === \"number\" ? options.restLength : 1;\n\n /**\n * Stiffness of the spring.\n * @property stiffness\n * @type {number}\n */\n this.stiffness = options.stiffness || 100;\n\n /**\n * Damping of the spring.\n * @property damping\n * @type {number}\n */\n this.damping = options.damping || 1;\n\n /**\n * First connected body.\n * @property bodyA\n * @type {Body}\n */\n this.bodyA = bodyA;\n\n /**\n * Second connected body.\n * @property bodyB\n * @type {Body}\n */\n this.bodyB = bodyB;\n\n /**\n * Anchor for bodyA in local bodyA coordinates.\n * @property localAnchorA\n * @type {Vec3}\n */\n this.localAnchorA = new Vec3();\n\n /**\n * Anchor for bodyB in local bodyB coordinates.\n * @property localAnchorB\n * @type {Vec3}\n */\n this.localAnchorB = new Vec3();\n\n if(options.localAnchorA){\n this.localAnchorA.copy(options.localAnchorA);\n }\n if(options.localAnchorB){\n this.localAnchorB.copy(options.localAnchorB);\n }\n if(options.worldAnchorA){\n this.setWorldAnchorA(options.worldAnchorA);\n }\n if(options.worldAnchorB){\n this.setWorldAnchorB(options.worldAnchorB);\n }\n}\n\n/**\n * Set the anchor point on body A, using world coordinates.\n * @method setWorldAnchorA\n * @param {Vec3} worldAnchorA\n */\nSpring.prototype.setWorldAnchorA = function(worldAnchorA){\n this.bodyA.pointToLocalFrame(worldAnchorA,this.localAnchorA);\n};\n\n/**\n * Set the anchor point on body B, using world coordinates.\n * @method setWorldAnchorB\n * @param {Vec3} worldAnchorB\n */\nSpring.prototype.setWorldAnchorB = function(worldAnchorB){\n this.bodyB.pointToLocalFrame(worldAnchorB,this.localAnchorB);\n};\n\n/**\n * Get the anchor point on body A, in world coordinates.\n * @method getWorldAnchorA\n * @param {Vec3} result The vector to store the result in.\n */\nSpring.prototype.getWorldAnchorA = function(result){\n this.bodyA.pointToWorldFrame(this.localAnchorA,result);\n};\n\n/**\n * Get the anchor point on body B, in world coordinates.\n * @method getWorldAnchorB\n * @param {Vec3} result The vector to store the result in.\n */\nSpring.prototype.getWorldAnchorB = function(result){\n this.bodyB.pointToWorldFrame(this.localAnchorB,result);\n};\n\nvar applyForce_r = new Vec3(),\n applyForce_r_unit = new Vec3(),\n applyForce_u = new Vec3(),\n applyForce_f = new Vec3(),\n applyForce_worldAnchorA = new Vec3(),\n applyForce_worldAnchorB = new Vec3(),\n applyForce_ri = new Vec3(),\n applyForce_rj = new Vec3(),\n applyForce_ri_x_f = new Vec3(),\n applyForce_rj_x_f = new Vec3(),\n applyForce_tmp = new Vec3();\n\n/**\n * Apply the spring force to the connected bodies.\n * @method applyForce\n */\nSpring.prototype.applyForce = function(){\n var k = this.stiffness,\n d = this.damping,\n l = this.restLength,\n bodyA = this.bodyA,\n bodyB = this.bodyB,\n r = applyForce_r,\n r_unit = applyForce_r_unit,\n u = applyForce_u,\n f = applyForce_f,\n tmp = applyForce_tmp;\n\n var worldAnchorA = applyForce_worldAnchorA,\n worldAnchorB = applyForce_worldAnchorB,\n ri = applyForce_ri,\n rj = applyForce_rj,\n ri_x_f = applyForce_ri_x_f,\n rj_x_f = applyForce_rj_x_f;\n\n // Get world anchors\n this.getWorldAnchorA(worldAnchorA);\n this.getWorldAnchorB(worldAnchorB);\n\n // Get offset points\n worldAnchorA.vsub(bodyA.position,ri);\n worldAnchorB.vsub(bodyB.position,rj);\n\n // Compute distance vector between world anchor points\n worldAnchorB.vsub(worldAnchorA,r);\n var rlen = r.norm();\n r_unit.copy(r);\n r_unit.normalize();\n\n // Compute relative velocity of the anchor points, u\n bodyB.velocity.vsub(bodyA.velocity,u);\n // Add rotational velocity\n\n bodyB.angularVelocity.cross(rj,tmp);\n u.vadd(tmp,u);\n bodyA.angularVelocity.cross(ri,tmp);\n u.vsub(tmp,u);\n\n // F = - k * ( x - L ) - D * ( u )\n r_unit.mult(-k*(rlen-l) - d*u.dot(r_unit), f);\n\n // Add forces to bodies\n bodyA.force.vsub(f,bodyA.force);\n bodyB.force.vadd(f,bodyB.force);\n\n // Angular force\n ri.cross(f,ri_x_f);\n rj.cross(f,rj_x_f);\n bodyA.torque.vsub(ri_x_f,bodyA.torque);\n bodyB.torque.vadd(rj_x_f,bodyB.torque);\n};\n\n},{\"../math/Vec3\":30}],36:[function(_dereq_,module,exports){\nvar Vec3 = _dereq_('../math/Vec3');\nvar Transform = _dereq_('../math/Transform');\nvar RaycastResult = _dereq_('../collision/RaycastResult');\nvar Utils = _dereq_('../utils/Utils');\n\nmodule.exports = WheelInfo;\n\n/**\n * @class WheelInfo\n * @constructor\n * @param {Object} [options]\n *\n * @param {Vec3} [options.chassisConnectionPointLocal]\n * @param {Vec3} [options.chassisConnectionPointWorld]\n * @param {Vec3} [options.directionLocal]\n * @param {Vec3} [options.directionWorld]\n * @param {Vec3} [options.axleLocal]\n * @param {Vec3} [options.axleWorld]\n * @param {number} [options.suspensionRestLength=1]\n * @param {number} [options.suspensionMaxLength=2]\n * @param {number} [options.radius=1]\n * @param {number} [options.suspensionStiffness=100]\n * @param {number} [options.dampingCompression=10]\n * @param {number} [options.dampingRelaxation=10]\n * @param {number} [options.frictionSlip=10000]\n * @param {number} [options.steering=0]\n * @param {number} [options.rotation=0]\n * @param {number} [options.deltaRotation=0]\n * @param {number} [options.rollInfluence=0.01]\n * @param {number} [options.maxSuspensionForce]\n * @param {boolean} [options.isFrontWheel=true]\n * @param {number} [options.clippedInvContactDotSuspension=1]\n * @param {number} [options.suspensionRelativeVelocity=0]\n * @param {number} [options.suspensionForce=0]\n * @param {number} [options.skidInfo=0]\n * @param {number} [options.suspensionLength=0]\n * @param {number} [options.maxSuspensionTravel=1]\n * @param {boolean} [options.useCustomSlidingRotationalSpeed=false]\n * @param {number} [options.customSlidingRotationalSpeed=-0.1]\n */\nfunction WheelInfo(options){\n options = Utils.defaults(options, {\n chassisConnectionPointLocal: new Vec3(),\n chassisConnectionPointWorld: new Vec3(),\n directionLocal: new Vec3(),\n directionWorld: new Vec3(),\n axleLocal: new Vec3(),\n axleWorld: new Vec3(),\n suspensionRestLength: 1,\n suspensionMaxLength: 2,\n radius: 1,\n suspensionStiffness: 100,\n dampingCompression: 10,\n dampingRelaxation: 10,\n frictionSlip: 10000,\n steering: 0,\n rotation: 0,\n deltaRotation: 0,\n rollInfluence: 0.01,\n maxSuspensionForce: Number.MAX_VALUE,\n isFrontWheel: true,\n clippedInvContactDotSuspension: 1,\n suspensionRelativeVelocity: 0,\n suspensionForce: 0,\n skidInfo: 0,\n suspensionLength: 0,\n maxSuspensionTravel: 1,\n useCustomSlidingRotationalSpeed: false,\n customSlidingRotationalSpeed: -0.1\n });\n\n /**\n * Max travel distance of the suspension, in meters.\n * @property {number} maxSuspensionTravel\n */\n this.maxSuspensionTravel = options.maxSuspensionTravel;\n\n /**\n * Speed to apply to the wheel rotation when the wheel is sliding.\n * @property {number} customSlidingRotationalSpeed\n */\n this.customSlidingRotationalSpeed = options.customSlidingRotationalSpeed;\n\n /**\n * If the customSlidingRotationalSpeed should be used.\n * @property {Boolean} useCustomSlidingRotationalSpeed\n */\n this.useCustomSlidingRotationalSpeed = options.useCustomSlidingRotationalSpeed;\n\n /**\n * @property {Boolean} sliding\n */\n this.sliding = false;\n\n /**\n * Connection point, defined locally in the chassis body frame.\n * @property {Vec3} chassisConnectionPointLocal\n */\n this.chassisConnectionPointLocal = options.chassisConnectionPointLocal.clone();\n\n /**\n * @property {Vec3} chassisConnectionPointWorld\n */\n this.chassisConnectionPointWorld = options.chassisConnectionPointWorld.clone();\n\n /**\n * @property {Vec3} directionLocal\n */\n this.directionLocal = options.directionLocal.clone();\n\n /**\n * @property {Vec3} directionWorld\n */\n this.directionWorld = options.directionWorld.clone();\n\n /**\n * @property {Vec3} axleLocal\n */\n this.axleLocal = options.axleLocal.clone();\n\n /**\n * @property {Vec3} axleWorld\n */\n this.axleWorld = options.axleWorld.clone();\n\n /**\n * @property {number} suspensionRestLength\n */\n this.suspensionRestLength = options.suspensionRestLength;\n\n /**\n * @property {number} suspensionMaxLength\n */\n this.suspensionMaxLength = options.suspensionMaxLength;\n\n /**\n * @property {number} radius\n */\n this.radius = options.radius;\n\n /**\n * @property {number} suspensionStiffness\n */\n this.suspensionStiffness = options.suspensionStiffness;\n\n /**\n * @property {number} dampingCompression\n */\n this.dampingCompression = options.dampingCompression;\n\n /**\n * @property {number} dampingRelaxation\n */\n this.dampingRelaxation = options.dampingRelaxation;\n\n /**\n * @property {number} frictionSlip\n */\n this.frictionSlip = options.frictionSlip;\n\n /**\n * @property {number} steering\n */\n this.steering = 0;\n\n /**\n * Rotation value, in radians.\n * @property {number} rotation\n */\n this.rotation = 0;\n\n /**\n * @property {number} deltaRotation\n */\n this.deltaRotation = 0;\n\n /**\n * @property {number} rollInfluence\n */\n this.rollInfluence = options.rollInfluence;\n\n /**\n * @property {number} maxSuspensionForce\n */\n this.maxSuspensionForce = options.maxSuspensionForce;\n\n /**\n * @property {number} engineForce\n */\n this.engineForce = 0;\n\n /**\n * @property {number} brake\n */\n this.brake = 0;\n\n /**\n * @property {number} isFrontWheel\n */\n this.isFrontWheel = options.isFrontWheel;\n\n /**\n * @property {number} clippedInvContactDotSuspension\n */\n this.clippedInvContactDotSuspension = 1;\n\n /**\n * @property {number} suspensionRelativeVelocity\n */\n this.suspensionRelativeVelocity = 0;\n\n /**\n * @property {number} suspensionForce\n */\n this.suspensionForce = 0;\n\n /**\n * @property {number} skidInfo\n */\n this.skidInfo = 0;\n\n /**\n * @property {number} suspensionLength\n */\n this.suspensionLength = 0;\n\n /**\n * @property {number} sideImpulse\n */\n this.sideImpulse = 0;\n\n /**\n * @property {number} forwardImpulse\n */\n this.forwardImpulse = 0;\n\n /**\n * The result from raycasting\n * @property {RaycastResult} raycastResult\n */\n this.raycastResult = new RaycastResult();\n\n /**\n * Wheel world transform\n * @property {Transform} worldTransform\n */\n this.worldTransform = new Transform();\n\n /**\n * @property {boolean} isInContact\n */\n this.isInContact = false;\n}\n\nvar chassis_velocity_at_contactPoint = new Vec3();\nvar relpos = new Vec3();\nvar chassis_velocity_at_contactPoint = new Vec3();\nWheelInfo.prototype.updateWheel = function(chassis){\n var raycastResult = this.raycastResult;\n\n if (this.isInContact){\n var project= raycastResult.hitNormalWorld.dot(raycastResult.directionWorld);\n raycastResult.hitPointWorld.vsub(chassis.position, relpos);\n chassis.getVelocityAtWorldPoint(relpos, chassis_velocity_at_contactPoint);\n var projVel = raycastResult.hitNormalWorld.dot( chassis_velocity_at_contactPoint );\n if (project >= -0.1) {\n this.suspensionRelativeVelocity = 0.0;\n this.clippedInvContactDotSuspension = 1.0 / 0.1;\n } else {\n var inv = -1 / project;\n this.suspensionRelativeVelocity = projVel * inv;\n this.clippedInvContactDotSuspension = inv;\n }\n\n } else {\n // Not in contact : position wheel in a nice (rest length) position\n raycastResult.suspensionLength = this.suspensionRestLength;\n this.suspensionRelativeVelocity = 0.0;\n raycastResult.directionWorld.scale(-1, raycastResult.hitNormalWorld);\n this.clippedInvContactDotSuspension = 1.0;\n }\n};\n},{\"../collision/RaycastResult\":10,\"../math/Transform\":29,\"../math/Vec3\":30,\"../utils/Utils\":53}],37:[function(_dereq_,module,exports){\nmodule.exports = Box;\n\nvar Shape = _dereq_('./Shape');\nvar Vec3 = _dereq_('../math/Vec3');\nvar ConvexPolyhedron = _dereq_('./ConvexPolyhedron');\n\n/**\n * A 3d box shape.\n * @class Box\n * @constructor\n * @param {Vec3} halfExtents\n * @author schteppe\n * @extends Shape\n */\nfunction Box(halfExtents){\n Shape.call(this);\n\n this.type = Shape.types.BOX;\n\n /**\n * @property halfExtents\n * @type {Vec3}\n */\n this.halfExtents = halfExtents;\n\n /**\n * Used by the contact generator to make contacts with other convex polyhedra for example\n * @property convexPolyhedronRepresentation\n * @type {ConvexPolyhedron}\n */\n this.convexPolyhedronRepresentation = null;\n\n this.updateConvexPolyhedronRepresentation();\n this.updateBoundingSphereRadius();\n}\nBox.prototype = new Shape();\nBox.prototype.constructor = Box;\n\n/**\n * Updates the local convex polyhedron representation used for some collisions.\n * @method updateConvexPolyhedronRepresentation\n */\nBox.prototype.updateConvexPolyhedronRepresentation = function(){\n var sx = this.halfExtents.x;\n var sy = this.halfExtents.y;\n var sz = this.halfExtents.z;\n var V = Vec3;\n\n var vertices = [\n new V(-sx,-sy,-sz),\n new V( sx,-sy,-sz),\n new V( sx, sy,-sz),\n new V(-sx, sy,-sz),\n new V(-sx,-sy, sz),\n new V( sx,-sy, sz),\n new V( sx, sy, sz),\n new V(-sx, sy, sz)\n ];\n\n var indices = [\n [3,2,1,0], // -z\n [4,5,6,7], // +z\n [5,4,0,1], // -y\n [2,3,7,6], // +y\n [0,4,7,3], // -x\n [1,2,6,5], // +x\n ];\n\n var axes = [\n new V(0, 0, 1),\n new V(0, 1, 0),\n new V(1, 0, 0)\n ];\n\n var h = new ConvexPolyhedron(vertices, indices);\n this.convexPolyhedronRepresentation = h;\n h.material = this.material;\n};\n\n/**\n * @method calculateLocalInertia\n * @param {Number} mass\n * @param {Vec3} target\n * @return {Vec3}\n */\nBox.prototype.calculateLocalInertia = function(mass,target){\n target = target || new Vec3();\n Box.calculateInertia(this.halfExtents, mass, target);\n return target;\n};\n\nBox.calculateInertia = function(halfExtents,mass,target){\n var e = halfExtents;\n target.x = 1.0 / 12.0 * mass * ( 2*e.y*2*e.y + 2*e.z*2*e.z );\n target.y = 1.0 / 12.0 * mass * ( 2*e.x*2*e.x + 2*e.z*2*e.z );\n target.z = 1.0 / 12.0 * mass * ( 2*e.y*2*e.y + 2*e.x*2*e.x );\n};\n\n/**\n * Get the box 6 side normals\n * @method getSideNormals\n * @param {array} sixTargetVectors An array of 6 vectors, to store the resulting side normals in.\n * @param {Quaternion} quat Orientation to apply to the normal vectors. If not provided, the vectors will be in respect to the local frame.\n * @return {array}\n */\nBox.prototype.getSideNormals = function(sixTargetVectors,quat){\n var sides = sixTargetVectors;\n var ex = this.halfExtents;\n sides[0].set( ex.x, 0, 0);\n sides[1].set( 0, ex.y, 0);\n sides[2].set( 0, 0, ex.z);\n sides[3].set( -ex.x, 0, 0);\n sides[4].set( 0, -ex.y, 0);\n sides[5].set( 0, 0, -ex.z);\n\n if(quat!==undefined){\n for(var i=0; i!==sides.length; i++){\n quat.vmult(sides[i],sides[i]);\n }\n }\n\n return sides;\n};\n\nBox.prototype.volume = function(){\n return 8.0 * this.halfExtents.x * this.halfExtents.y * this.halfExtents.z;\n};\n\nBox.prototype.updateBoundingSphereRadius = function(){\n this.boundingSphereRadius = this.halfExtents.norm();\n};\n\nvar worldCornerTempPos = new Vec3();\nvar worldCornerTempNeg = new Vec3();\nBox.prototype.forEachWorldCorner = function(pos,quat,callback){\n\n var e = this.halfExtents;\n var corners = [[ e.x, e.y, e.z],\n [ -e.x, e.y, e.z],\n [ -e.x, -e.y, e.z],\n [ -e.x, -e.y, -e.z],\n [ e.x, -e.y, -e.z],\n [ e.x, e.y, -e.z],\n [ -e.x, e.y, -e.z],\n [ e.x, -e.y, e.z]];\n for(var i=0; i max.x){\n max.x = x;\n }\n if(y > max.y){\n max.y = y;\n }\n if(z > max.z){\n max.z = z;\n }\n\n if(x < min.x){\n min.x = x;\n }\n if(y < min.y){\n min.y = y;\n }\n if(z < min.z){\n min.z = z;\n }\n }\n\n // Get each axis max\n // min.set(Infinity,Infinity,Infinity);\n // max.set(-Infinity,-Infinity,-Infinity);\n // this.forEachWorldCorner(pos,quat,function(x,y,z){\n // if(x > max.x){\n // max.x = x;\n // }\n // if(y > max.y){\n // max.y = y;\n // }\n // if(z > max.z){\n // max.z = z;\n // }\n\n // if(x < min.x){\n // min.x = x;\n // }\n // if(y < min.y){\n // min.y = y;\n // }\n // if(z < min.z){\n // min.z = z;\n // }\n // });\n};\n\n},{\"../math/Vec3\":30,\"./ConvexPolyhedron\":38,\"./Shape\":43}],38:[function(_dereq_,module,exports){\nmodule.exports = ConvexPolyhedron;\n\nvar Shape = _dereq_('./Shape');\nvar Vec3 = _dereq_('../math/Vec3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar Transform = _dereq_('../math/Transform');\n\n/**\n * A set of polygons describing a convex shape.\n * @class ConvexPolyhedron\n * @constructor\n * @extends Shape\n * @description The shape MUST be convex for the code to work properly. No polygons may be coplanar (contained\n * in the same 3D plane), instead these should be merged into one polygon.\n *\n * @param {array} points An array of Vec3's\n * @param {array} faces Array of integer arrays, describing which vertices that is included in each face.\n *\n * @author qiao / https://github.com/qiao (original author, see https://github.com/qiao/three.js/commit/85026f0c769e4000148a67d45a9e9b9c5108836f)\n * @author schteppe / https://github.com/schteppe\n * @see http://www.altdevblogaday.com/2011/05/13/contact-generation-between-3d-convex-meshes/\n * @see http://bullet.googlecode.com/svn/trunk/src/BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.cpp\n *\n * @todo Move the clipping functions to ContactGenerator?\n * @todo Automatically merge coplanar polygons in constructor.\n */\nfunction ConvexPolyhedron(points, faces, uniqueAxes) {\n var that = this;\n Shape.call(this);\n this.type = Shape.types.CONVEXPOLYHEDRON;\n\n /**\n * Array of Vec3\n * @property vertices\n * @type {Array}\n */\n this.vertices = points||[];\n\n this.worldVertices = []; // World transformed version of .vertices\n this.worldVerticesNeedsUpdate = true;\n\n /**\n * Array of integer arrays, indicating which vertices each face consists of\n * @property faces\n * @type {Array}\n */\n this.faces = faces||[];\n\n /**\n * Array of Vec3\n * @property faceNormals\n * @type {Array}\n */\n this.faceNormals = [];\n this.computeNormals();\n\n this.worldFaceNormalsNeedsUpdate = true;\n this.worldFaceNormals = []; // World transformed version of .faceNormals\n\n /**\n * Array of Vec3\n * @property uniqueEdges\n * @type {Array}\n */\n this.uniqueEdges = [];\n\n /**\n * If given, these locally defined, normalized axes are the only ones being checked when doing separating axis check.\n * @property {Array} uniqueAxes\n */\n this.uniqueAxes = uniqueAxes ? uniqueAxes.slice() : null;\n\n this.computeEdges();\n this.updateBoundingSphereRadius();\n}\nConvexPolyhedron.prototype = new Shape();\nConvexPolyhedron.prototype.constructor = ConvexPolyhedron;\n\nvar computeEdges_tmpEdge = new Vec3();\n/**\n * Computes uniqueEdges\n * @method computeEdges\n */\nConvexPolyhedron.prototype.computeEdges = function(){\n var faces = this.faces;\n var vertices = this.vertices;\n var nv = vertices.length;\n var edges = this.uniqueEdges;\n\n edges.length = 0;\n\n var edge = computeEdges_tmpEdge;\n\n for(var i=0; i !== faces.length; i++){\n var face = faces[i];\n var numVertices = face.length;\n for(var j = 0; j !== numVertices; j++){\n var k = ( j+1 ) % numVertices;\n vertices[face[j]].vsub(vertices[face[k]], edge);\n edge.normalize();\n var found = false;\n for(var p=0; p !== edges.length; p++){\n if (edges[p].almostEquals(edge) || edges[p].almostEquals(edge)){\n found = true;\n break;\n }\n }\n\n if (!found){\n edges.push(edge.clone());\n }\n }\n }\n};\n\n/**\n * Compute the normals of the faces. Will reuse existing Vec3 objects in the .faceNormals array if they exist.\n * @method computeNormals\n */\nConvexPolyhedron.prototype.computeNormals = function(){\n this.faceNormals.length = this.faces.length;\n\n // Generate normals\n for(var i=0; i dmax){\n dmax = d;\n closestFaceB = face;\n }\n }\n var worldVertsB1 = [];\n var polyB = hullB.faces[closestFaceB];\n var numVertices = polyB.length;\n for(var e0=0; e0=0){\n this.clipFaceAgainstHull(separatingNormal,\n posA,\n quatA,\n worldVertsB1,\n minDist,\n maxDist,\n result);\n }\n};\n\n/**\n * Find the separating axis between this hull and another\n * @method findSeparatingAxis\n * @param {ConvexPolyhedron} hullB\n * @param {Vec3} posA\n * @param {Quaternion} quatA\n * @param {Vec3} posB\n * @param {Quaternion} quatB\n * @param {Vec3} target The target vector to save the axis in\n * @return {bool} Returns false if a separation is found, else true\n */\nvar fsa_faceANormalWS3 = new Vec3(),\n fsa_Worldnormal1 = new Vec3(),\n fsa_deltaC = new Vec3(),\n fsa_worldEdge0 = new Vec3(),\n fsa_worldEdge1 = new Vec3(),\n fsa_Cross = new Vec3();\nConvexPolyhedron.prototype.findSeparatingAxis = function(hullB,posA,quatA,posB,quatB,target, faceListA, faceListB){\n var faceANormalWS3 = fsa_faceANormalWS3,\n Worldnormal1 = fsa_Worldnormal1,\n deltaC = fsa_deltaC,\n worldEdge0 = fsa_worldEdge0,\n worldEdge1 = fsa_worldEdge1,\n Cross = fsa_Cross;\n\n var dmin = Number.MAX_VALUE;\n var hullA = this;\n var curPlaneTests=0;\n\n if(!hullA.uniqueAxes){\n\n var numFacesA = faceListA ? faceListA.length : hullA.faces.length;\n\n // Test face normals from hullA\n for(var i=0; i0.0){\n target.negate(target);\n }\n\n return true;\n};\n\nvar maxminA=[], maxminB=[];\n\n/**\n * Test separating axis against two hulls. Both hulls are projected onto the axis and the overlap size is returned if there is one.\n * @method testSepAxis\n * @param {Vec3} axis\n * @param {ConvexPolyhedron} hullB\n * @param {Vec3} posA\n * @param {Quaternion} quatA\n * @param {Vec3} posB\n * @param {Quaternion} quatB\n * @return {number} The overlap depth, or FALSE if no penetration.\n */\nConvexPolyhedron.prototype.testSepAxis = function(axis, hullB, posA, quatA, posB, quatB){\n var hullA=this;\n ConvexPolyhedron.project(hullA, axis, posA, quatA, maxminA);\n ConvexPolyhedron.project(hullB, axis, posB, quatB, maxminB);\n var maxA = maxminA[0];\n var minA = maxminA[1];\n var maxB = maxminB[0];\n var minB = maxminB[1];\n if(maxA= 0, so output intersection\n var newv = new Vec3();\n firstVertex.lerp(lastVertex,\n n_dot_first / (n_dot_first - n_dot_last),\n newv);\n outVertices.push(newv);\n }\n } else {\n if(n_dot_last<0){\n // Start >= 0, end < 0 so output intersection and end\n var newv = new Vec3();\n firstVertex.lerp(lastVertex,\n n_dot_first / (n_dot_first - n_dot_last),\n newv);\n outVertices.push(newv);\n outVertices.push(lastVertex);\n }\n }\n firstVertex = lastVertex;\n n_dot_first = n_dot_last;\n }\n return outVertices;\n};\n\n// Updates .worldVertices and sets .worldVerticesNeedsUpdate to false.\nConvexPolyhedron.prototype.computeWorldVertices = function(position,quat){\n var N = this.vertices.length;\n while(this.worldVertices.length < N){\n this.worldVertices.push( new Vec3() );\n }\n\n var verts = this.vertices,\n worldVerts = this.worldVertices;\n for(var i=0; i!==N; i++){\n quat.vmult( verts[i] , worldVerts[i] );\n position.vadd( worldVerts[i] , worldVerts[i] );\n }\n\n this.worldVerticesNeedsUpdate = false;\n};\n\nvar computeLocalAABB_worldVert = new Vec3();\nConvexPolyhedron.prototype.computeLocalAABB = function(aabbmin,aabbmax){\n var n = this.vertices.length,\n vertices = this.vertices,\n worldVert = computeLocalAABB_worldVert;\n\n aabbmin.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\n aabbmax.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\n\n for(var i=0; i aabbmax.x){\n aabbmax.x = v.x;\n }\n if (v.y < aabbmin.y){\n aabbmin.y = v.y;\n } else if(v.y > aabbmax.y){\n aabbmax.y = v.y;\n }\n if (v.z < aabbmin.z){\n aabbmin.z = v.z;\n } else if(v.z > aabbmax.z){\n aabbmax.z = v.z;\n }\n }\n};\n\n/**\n * Updates .worldVertices and sets .worldVerticesNeedsUpdate to false.\n * @method computeWorldFaceNormals\n * @param {Quaternion} quat\n */\nConvexPolyhedron.prototype.computeWorldFaceNormals = function(quat){\n var N = this.faceNormals.length;\n while(this.worldFaceNormals.length < N){\n this.worldFaceNormals.push( new Vec3() );\n }\n\n var normals = this.faceNormals,\n worldNormals = this.worldFaceNormals;\n for(var i=0; i!==N; i++){\n quat.vmult( normals[i] , worldNormals[i] );\n }\n\n this.worldFaceNormalsNeedsUpdate = false;\n};\n\n/**\n * @method updateBoundingSphereRadius\n */\nConvexPolyhedron.prototype.updateBoundingSphereRadius = function(){\n // Assume points are distributed with local (0,0,0) as center\n var max2 = 0;\n var verts = this.vertices;\n for(var i=0, N=verts.length; i!==N; i++) {\n var norm2 = verts[i].norm2();\n if(norm2 > max2){\n max2 = norm2;\n }\n }\n this.boundingSphereRadius = Math.sqrt(max2);\n};\n\nvar tempWorldVertex = new Vec3();\n\n/**\n * @method calculateWorldAABB\n * @param {Vec3} pos\n * @param {Quaternion} quat\n * @param {Vec3} min\n * @param {Vec3} max\n */\nConvexPolyhedron.prototype.calculateWorldAABB = function(pos,quat,min,max){\n var n = this.vertices.length, verts = this.vertices;\n var minx,miny,minz,maxx,maxy,maxz;\n for(var i=0; i maxx || maxx===undefined){\n maxx = v.x;\n }\n\n if (v.y < miny || miny===undefined){\n miny = v.y;\n } else if(v.y > maxy || maxy===undefined){\n maxy = v.y;\n }\n\n if (v.z < minz || minz===undefined){\n minz = v.z;\n } else if(v.z > maxz || maxz===undefined){\n maxz = v.z;\n }\n }\n min.set(minx,miny,minz);\n max.set(maxx,maxy,maxz);\n};\n\n/**\n * Get approximate convex volume\n * @method volume\n * @return {Number}\n */\nConvexPolyhedron.prototype.volume = function(){\n return 4.0 * Math.PI * this.boundingSphereRadius / 3.0;\n};\n\n/**\n * Get an average of all the vertices positions\n * @method getAveragePointLocal\n * @param {Vec3} target\n * @return {Vec3}\n */\nConvexPolyhedron.prototype.getAveragePointLocal = function(target){\n target = target || new Vec3();\n var n = this.vertices.length,\n verts = this.vertices;\n for(var i=0; i0) || (r1>0 && r2<0)){\n return false; // Encountered some other sign. Exit.\n } else {\n }\n }\n\n // If we got here, all dot products were of the same sign.\n return positiveResult ? 1 : -1;\n};\n\n/**\n * Get max and min dot product of a convex hull at position (pos,quat) projected onto an axis. Results are saved in the array maxmin.\n * @static\n * @method project\n * @param {ConvexPolyhedron} hull\n * @param {Vec3} axis\n * @param {Vec3} pos\n * @param {Quaternion} quat\n * @param {array} result result[0] and result[1] will be set to maximum and minimum, respectively.\n */\nvar project_worldVertex = new Vec3();\nvar project_localAxis = new Vec3();\nvar project_localOrigin = new Vec3();\nConvexPolyhedron.project = function(hull, axis, pos, quat, result){\n var n = hull.vertices.length,\n worldVertex = project_worldVertex,\n localAxis = project_localAxis,\n max = 0,\n min = 0,\n localOrigin = project_localOrigin,\n vs = hull.vertices;\n\n localOrigin.setZero();\n\n // Transform the axis to local\n Transform.vectorToLocalFrame(pos, quat, axis, localAxis);\n Transform.pointToLocalFrame(pos, quat, localOrigin, localOrigin);\n var add = localOrigin.dot(localAxis);\n\n min = max = vs[0].dot(localAxis);\n\n for(var i = 1; i < n; i++){\n var val = vs[i].dot(localAxis);\n\n if(val > max){\n max = val;\n }\n\n if(val < min){\n min = val;\n }\n }\n\n min -= add;\n max -= add;\n\n if(min > max){\n // Inconsistent - swap\n var temp = min;\n min = max;\n max = temp;\n }\n // Output\n result[0] = max;\n result[1] = min;\n};\n\n},{\"../math/Quaternion\":28,\"../math/Transform\":29,\"../math/Vec3\":30,\"./Shape\":43}],39:[function(_dereq_,module,exports){\nmodule.exports = Cylinder;\n\nvar Shape = _dereq_('./Shape');\nvar Vec3 = _dereq_('../math/Vec3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar ConvexPolyhedron = _dereq_('./ConvexPolyhedron');\n\n/**\n * @class Cylinder\n * @constructor\n * @extends ConvexPolyhedron\n * @author schteppe / https://github.com/schteppe\n * @param {Number} radiusTop\n * @param {Number} radiusBottom\n * @param {Number} height\n * @param {Number} numSegments The number of segments to build the cylinder out of\n */\nfunction Cylinder( radiusTop, radiusBottom, height , numSegments ) {\n var N = numSegments,\n verts = [],\n axes = [],\n faces = [],\n bottomface = [],\n topface = [],\n cos = Math.cos,\n sin = Math.sin;\n\n // First bottom point\n verts.push(new Vec3(radiusBottom*cos(0),\n radiusBottom*sin(0),\n -height*0.5));\n bottomface.push(0);\n\n // First top point\n verts.push(new Vec3(radiusTop*cos(0),\n radiusTop*sin(0),\n height*0.5));\n topface.push(1);\n\n for(var i=0; i { convex: ..., offset: ... }\n // for example:\n // _cachedPillars[\"0_2_1\"]\n this._cachedPillars = {};\n}\nHeightfield.prototype = new Shape();\n\n/**\n * Call whenever you change the data array.\n * @method update\n */\nHeightfield.prototype.update = function(){\n this._cachedPillars = {};\n};\n\n/**\n * Update the .minValue property\n * @method updateMinValue\n */\nHeightfield.prototype.updateMinValue = function(){\n var data = this.data;\n var minValue = data[0][0];\n for(var i=0; i !== data.length; i++){\n for(var j=0; j !== data[i].length; j++){\n var v = data[i][j];\n if(v < minValue){\n minValue = v;\n }\n }\n }\n this.minValue = minValue;\n};\n\n/**\n * Update the .maxValue property\n * @method updateMaxValue\n */\nHeightfield.prototype.updateMaxValue = function(){\n var data = this.data;\n var maxValue = data[0][0];\n for(var i=0; i !== data.length; i++){\n for(var j=0; j !== data[i].length; j++){\n var v = data[i][j];\n if(v > maxValue){\n maxValue = v;\n }\n }\n }\n this.maxValue = maxValue;\n};\n\n/**\n * Set the height value at an index. Don't forget to update maxValue and minValue after you're done.\n * @method setHeightValueAtIndex\n * @param {integer} xi\n * @param {integer} yi\n * @param {number} value\n */\nHeightfield.prototype.setHeightValueAtIndex = function(xi, yi, value){\n var data = this.data;\n data[xi][yi] = value;\n\n // Invalidate cache\n this.clearCachedConvexTrianglePillar(xi, yi, false);\n if(xi > 0){\n this.clearCachedConvexTrianglePillar(xi - 1, yi, true);\n this.clearCachedConvexTrianglePillar(xi - 1, yi, false);\n }\n if(yi > 0){\n this.clearCachedConvexTrianglePillar(xi, yi - 1, true);\n this.clearCachedConvexTrianglePillar(xi, yi - 1, false);\n }\n if(yi > 0 && xi > 0){\n this.clearCachedConvexTrianglePillar(xi - 1, yi - 1, true);\n }\n};\n\n/**\n * Get max/min in a rectangle in the matrix data\n * @method getRectMinMax\n * @param {integer} iMinX\n * @param {integer} iMinY\n * @param {integer} iMaxX\n * @param {integer} iMaxY\n * @param {array} [result] An array to store the results in.\n * @return {array} The result array, if it was passed in. Minimum will be at position 0 and max at 1.\n */\nHeightfield.prototype.getRectMinMax = function (iMinX, iMinY, iMaxX, iMaxY, result) {\n result = result || [];\n\n // Get max and min of the data\n var data = this.data,\n max = this.minValue; // Set first value\n for(var i = iMinX; i <= iMaxX; i++){\n for(var j = iMinY; j <= iMaxY; j++){\n var height = data[i][j];\n if(height > max){\n max = height;\n }\n }\n }\n\n result[0] = this.minValue;\n result[1] = max;\n};\n\n/**\n * Get the index of a local position on the heightfield. The indexes indicate the rectangles, so if your terrain is made of N x N height data points, you will have rectangle indexes ranging from 0 to N-1.\n * @method getIndexOfPosition\n * @param {number} x\n * @param {number} y\n * @param {array} result Two-element array\n * @param {boolean} clamp If the position should be clamped to the heightfield edge.\n * @return {boolean}\n */\nHeightfield.prototype.getIndexOfPosition = function (x, y, result, clamp) {\n\n // Get the index of the data points to test against\n var w = this.elementSize;\n var data = this.data;\n var xi = Math.floor(x / w);\n var yi = Math.floor(y / w);\n\n result[0] = xi;\n result[1] = yi;\n\n if(clamp){\n // Clamp index to edges\n if(xi < 0){ xi = 0; }\n if(yi < 0){ yi = 0; }\n if(xi >= data.length - 1){ xi = data.length - 1; }\n if(yi >= data[0].length - 1){ yi = data[0].length - 1; }\n }\n\n // Bail out if we are out of the terrain\n if(xi < 0 || yi < 0 || xi >= data.length-1 || yi >= data[0].length-1){\n return false;\n }\n\n return true;\n};\n\nHeightfield.prototype.getHeightAt = function(x, y, edgeClamp){\n var idx = [];\n this.getIndexOfPosition(x, y, idx, edgeClamp);\n\n // TODO: get upper or lower triangle, then use barycentric interpolation to get the height in the triangle.\n var minmax = [];\n this.getRectMinMax(idx[0], idx[1] + 1, idx[0], idx[1] + 1, minmax);\n\n return (minmax[0] + minmax[1]) / 2; // average\n};\n\nHeightfield.prototype.getCacheConvexTrianglePillarKey = function(xi, yi, getUpperTriangle){\n return xi + '_' + yi + '_' + (getUpperTriangle ? 1 : 0);\n};\n\nHeightfield.prototype.getCachedConvexTrianglePillar = function(xi, yi, getUpperTriangle){\n return this._cachedPillars[this.getCacheConvexTrianglePillarKey(xi, yi, getUpperTriangle)];\n};\n\nHeightfield.prototype.setCachedConvexTrianglePillar = function(xi, yi, getUpperTriangle, convex, offset){\n this._cachedPillars[this.getCacheConvexTrianglePillarKey(xi, yi, getUpperTriangle)] = {\n convex: convex,\n offset: offset\n };\n};\n\nHeightfield.prototype.clearCachedConvexTrianglePillar = function(xi, yi, getUpperTriangle){\n delete this._cachedPillars[this.getCacheConvexTrianglePillarKey(xi, yi, getUpperTriangle)];\n};\n\n/**\n * Get a triangle in the terrain in the form of a triangular convex shape.\n * @method getConvexTrianglePillar\n * @param {integer} i\n * @param {integer} j\n * @param {boolean} getUpperTriangle\n */\nHeightfield.prototype.getConvexTrianglePillar = function(xi, yi, getUpperTriangle){\n var result = this.pillarConvex;\n var offsetResult = this.pillarOffset;\n\n if(this.cacheEnabled){\n var data = this.getCachedConvexTrianglePillar(xi, yi, getUpperTriangle);\n if(data){\n this.pillarConvex = data.convex;\n this.pillarOffset = data.offset;\n return;\n }\n\n result = new ConvexPolyhedron();\n offsetResult = new Vec3();\n\n this.pillarConvex = result;\n this.pillarOffset = offsetResult;\n }\n\n var data = this.data;\n var elementSize = this.elementSize;\n var faces = result.faces;\n\n // Reuse verts if possible\n result.vertices.length = 6;\n for (var i = 0; i < 6; i++) {\n if(!result.vertices[i]){\n result.vertices[i] = new Vec3();\n }\n }\n\n // Reuse faces if possible\n faces.length = 5;\n for (var i = 0; i < 5; i++) {\n if(!faces[i]){\n faces[i] = [];\n }\n }\n\n var verts = result.vertices;\n\n var h = (Math.min(\n data[xi][yi],\n data[xi+1][yi],\n data[xi][yi+1],\n data[xi+1][yi+1]\n ) - this.minValue ) / 2 + this.minValue;\n\n if (!getUpperTriangle) {\n\n // Center of the triangle pillar - all polygons are given relative to this one\n offsetResult.set(\n (xi + 0.25) * elementSize, // sort of center of a triangle\n (yi + 0.25) * elementSize,\n h // vertical center\n );\n\n // Top triangle verts\n verts[0].set(\n -0.25 * elementSize,\n -0.25 * elementSize,\n data[xi][yi] - h\n );\n verts[1].set(\n 0.75 * elementSize,\n -0.25 * elementSize,\n data[xi + 1][yi] - h\n );\n verts[2].set(\n -0.25 * elementSize,\n 0.75 * elementSize,\n data[xi][yi + 1] - h\n );\n\n // bottom triangle verts\n verts[3].set(\n -0.25 * elementSize,\n -0.25 * elementSize,\n -h-1\n );\n verts[4].set(\n 0.75 * elementSize,\n -0.25 * elementSize,\n -h-1\n );\n verts[5].set(\n -0.25 * elementSize,\n 0.75 * elementSize,\n -h-1\n );\n\n // top triangle\n faces[0][0] = 0;\n faces[0][1] = 1;\n faces[0][2] = 2;\n\n // bottom triangle\n faces[1][0] = 5;\n faces[1][1] = 4;\n faces[1][2] = 3;\n\n // -x facing quad\n faces[2][0] = 0;\n faces[2][1] = 2;\n faces[2][2] = 5;\n faces[2][3] = 3;\n\n // -y facing quad\n faces[3][0] = 1;\n faces[3][1] = 0;\n faces[3][2] = 3;\n faces[3][3] = 4;\n\n // +xy facing quad\n faces[4][0] = 4;\n faces[4][1] = 5;\n faces[4][2] = 2;\n faces[4][3] = 1;\n\n\n } else {\n\n // Center of the triangle pillar - all polygons are given relative to this one\n offsetResult.set(\n (xi + 0.75) * elementSize, // sort of center of a triangle\n (yi + 0.75) * elementSize,\n h // vertical center\n );\n\n // Top triangle verts\n verts[0].set(\n 0.25 * elementSize,\n 0.25 * elementSize,\n data[xi + 1][yi + 1] - h\n );\n verts[1].set(\n -0.75 * elementSize,\n 0.25 * elementSize,\n data[xi][yi + 1] - h\n );\n verts[2].set(\n 0.25 * elementSize,\n -0.75 * elementSize,\n data[xi + 1][yi] - h\n );\n\n // bottom triangle verts\n verts[3].set(\n 0.25 * elementSize,\n 0.25 * elementSize,\n - h-1\n );\n verts[4].set(\n -0.75 * elementSize,\n 0.25 * elementSize,\n - h-1\n );\n verts[5].set(\n 0.25 * elementSize,\n -0.75 * elementSize,\n - h-1\n );\n\n // Top triangle\n faces[0][0] = 0;\n faces[0][1] = 1;\n faces[0][2] = 2;\n\n // bottom triangle\n faces[1][0] = 5;\n faces[1][1] = 4;\n faces[1][2] = 3;\n\n // +x facing quad\n faces[2][0] = 2;\n faces[2][1] = 5;\n faces[2][2] = 3;\n faces[2][3] = 0;\n\n // +y facing quad\n faces[3][0] = 3;\n faces[3][1] = 4;\n faces[3][2] = 1;\n faces[3][3] = 0;\n\n // -xy facing quad\n faces[4][0] = 1;\n faces[4][1] = 4;\n faces[4][2] = 5;\n faces[4][3] = 2;\n }\n\n result.computeNormals();\n result.computeEdges();\n result.updateBoundingSphereRadius();\n\n this.setCachedConvexTrianglePillar(xi, yi, getUpperTriangle, result, offsetResult);\n};\n\nHeightfield.prototype.calculateLocalInertia = function(mass, target){\n target = target || new Vec3();\n target.set(0, 0, 0);\n return target;\n};\n\nHeightfield.prototype.volume = function(){\n return Number.MAX_VALUE; // The terrain is infinite\n};\n\nHeightfield.prototype.calculateWorldAABB = function(pos, quat, min, max){\n // TODO: do it properly\n min.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\n max.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\n};\n\nHeightfield.prototype.updateBoundingSphereRadius = function(){\n // Use the bounding box of the min/max values\n var data = this.data,\n s = this.elementSize;\n this.boundingSphereRadius = new Vec3(data.length * s, data[0].length * s, Math.max(Math.abs(this.maxValue), Math.abs(this.minValue))).norm();\n};\n\n},{\"../math/Vec3\":30,\"../utils/Utils\":53,\"./ConvexPolyhedron\":38,\"./Shape\":43}],41:[function(_dereq_,module,exports){\nmodule.exports = Particle;\n\nvar Shape = _dereq_('./Shape');\nvar Vec3 = _dereq_('../math/Vec3');\n\n/**\n * Particle shape.\n * @class Particle\n * @constructor\n * @author schteppe\n * @extends Shape\n */\nfunction Particle(){\n Shape.call(this);\n\n this.type = Shape.types.PARTICLE;\n}\nParticle.prototype = new Shape();\nParticle.prototype.constructor = Particle;\n\n/**\n * @method calculateLocalInertia\n * @param {Number} mass\n * @param {Vec3} target\n * @return {Vec3}\n */\nParticle.prototype.calculateLocalInertia = function(mass,target){\n target = target || new Vec3();\n target.set(0, 0, 0);\n return target;\n};\n\nParticle.prototype.volume = function(){\n return 0;\n};\n\nParticle.prototype.updateBoundingSphereRadius = function(){\n this.boundingSphereRadius = 0;\n};\n\nParticle.prototype.calculateWorldAABB = function(pos,quat,min,max){\n // Get each axis max\n min.copy(pos);\n max.copy(pos);\n};\n\n},{\"../math/Vec3\":30,\"./Shape\":43}],42:[function(_dereq_,module,exports){\nmodule.exports = Plane;\n\nvar Shape = _dereq_('./Shape');\nvar Vec3 = _dereq_('../math/Vec3');\n\n/**\n * A plane, facing in the Z direction. The plane has its surface at z=0 and everything below z=0 is assumed to be solid plane. To make the plane face in some other direction than z, you must put it inside a RigidBody and rotate that body. See the demos.\n * @class Plane\n * @constructor\n * @extends Shape\n * @author schteppe\n */\nfunction Plane(){\n Shape.call(this);\n this.type = Shape.types.PLANE;\n\n // World oriented normal\n this.worldNormal = new Vec3();\n this.worldNormalNeedsUpdate = true;\n\n this.boundingSphereRadius = Number.MAX_VALUE;\n}\nPlane.prototype = new Shape();\nPlane.prototype.constructor = Plane;\n\nPlane.prototype.computeWorldNormal = function(quat){\n var n = this.worldNormal;\n n.set(0,0,1);\n quat.vmult(n,n);\n this.worldNormalNeedsUpdate = false;\n};\n\nPlane.prototype.calculateLocalInertia = function(mass,target){\n target = target || new Vec3();\n return target;\n};\n\nPlane.prototype.volume = function(){\n return Number.MAX_VALUE; // The plane is infinite...\n};\n\nvar tempNormal = new Vec3();\nPlane.prototype.calculateWorldAABB = function(pos, quat, min, max){\n // The plane AABB is infinite, except if the normal is pointing along any axis\n tempNormal.set(0,0,1); // Default plane normal is z\n quat.vmult(tempNormal,tempNormal);\n var maxVal = Number.MAX_VALUE;\n min.set(-maxVal, -maxVal, -maxVal);\n max.set(maxVal, maxVal, maxVal);\n\n if(tempNormal.x === 1){ max.x = pos.x; }\n if(tempNormal.y === 1){ max.y = pos.y; }\n if(tempNormal.z === 1){ max.z = pos.z; }\n\n if(tempNormal.x === -1){ min.x = pos.x; }\n if(tempNormal.y === -1){ min.y = pos.y; }\n if(tempNormal.z === -1){ min.z = pos.z; }\n};\n\nPlane.prototype.updateBoundingSphereRadius = function(){\n this.boundingSphereRadius = Number.MAX_VALUE;\n};\n},{\"../math/Vec3\":30,\"./Shape\":43}],43:[function(_dereq_,module,exports){\nmodule.exports = Shape;\n\nvar Shape = _dereq_('./Shape');\nvar Vec3 = _dereq_('../math/Vec3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar Material = _dereq_('../material/Material');\n\n/**\n * Base class for shapes\n * @class Shape\n * @constructor\n * @author schteppe\n * @todo Should have a mechanism for caching bounding sphere radius instead of calculating it each time\n */\nfunction Shape(){\n\n /**\n * Identifyer of the Shape.\n * @property {number} id\n */\n this.id = Shape.idCounter++;\n\n /**\n * The type of this shape. Must be set to an int > 0 by subclasses.\n * @property type\n * @type {Number}\n * @see Shape.types\n */\n this.type = 0;\n\n /**\n * The local bounding sphere radius of this shape.\n * @property {Number} boundingSphereRadius\n */\n this.boundingSphereRadius = 0;\n\n /**\n * Whether to produce contact forces when in contact with other bodies. Note that contacts will be generated, but they will be disabled.\n * @property {boolean} collisionResponse\n */\n this.collisionResponse = true;\n\n /**\n * @property {Material} material\n */\n this.material = null;\n}\nShape.prototype.constructor = Shape;\n\n/**\n * Computes the bounding sphere radius. The result is stored in the property .boundingSphereRadius\n * @method updateBoundingSphereRadius\n * @return {Number}\n */\nShape.prototype.updateBoundingSphereRadius = function(){\n throw \"computeBoundingSphereRadius() not implemented for shape type \"+this.type;\n};\n\n/**\n * Get the volume of this shape\n * @method volume\n * @return {Number}\n */\nShape.prototype.volume = function(){\n throw \"volume() not implemented for shape type \"+this.type;\n};\n\n/**\n * Calculates the inertia in the local frame for this shape.\n * @method calculateLocalInertia\n * @return {Vec3}\n * @see http://en.wikipedia.org/wiki/List_of_moments_of_inertia\n */\nShape.prototype.calculateLocalInertia = function(mass,target){\n throw \"calculateLocalInertia() not implemented for shape type \"+this.type;\n};\n\nShape.idCounter = 0;\n\n/**\n * The available shape types.\n * @static\n * @property types\n * @type {Object}\n */\nShape.types = {\n SPHERE:1,\n PLANE:2,\n BOX:4,\n COMPOUND:8,\n CONVEXPOLYHEDRON:16,\n HEIGHTFIELD:32,\n PARTICLE:64,\n CYLINDER:128,\n TRIMESH:256\n};\n\n\n},{\"../material/Material\":25,\"../math/Quaternion\":28,\"../math/Vec3\":30,\"./Shape\":43}],44:[function(_dereq_,module,exports){\nmodule.exports = Sphere;\n\nvar Shape = _dereq_('./Shape');\nvar Vec3 = _dereq_('../math/Vec3');\n\n/**\n * Spherical shape\n * @class Sphere\n * @constructor\n * @extends Shape\n * @param {Number} radius The radius of the sphere, a non-negative number.\n * @author schteppe / http://github.com/schteppe\n */\nfunction Sphere(radius){\n Shape.call(this);\n\n /**\n * @property {Number} radius\n */\n this.radius = radius!==undefined ? Number(radius) : 1.0;\n this.type = Shape.types.SPHERE;\n\n if(this.radius < 0){\n throw new Error('The sphere radius cannot be negative.');\n }\n\n this.updateBoundingSphereRadius();\n}\nSphere.prototype = new Shape();\nSphere.prototype.constructor = Sphere;\n\nSphere.prototype.calculateLocalInertia = function(mass,target){\n target = target || new Vec3();\n var I = 2.0*mass*this.radius*this.radius/5.0;\n target.x = I;\n target.y = I;\n target.z = I;\n return target;\n};\n\nSphere.prototype.volume = function(){\n return 4.0 * Math.PI * this.radius / 3.0;\n};\n\nSphere.prototype.updateBoundingSphereRadius = function(){\n this.boundingSphereRadius = this.radius;\n};\n\nSphere.prototype.calculateWorldAABB = function(pos,quat,min,max){\n var r = this.radius;\n var axes = ['x','y','z'];\n for(var i=0; i u.x){\n u.x = v.x;\n }\n\n if(v.y < l.y){\n l.y = v.y;\n } else if(v.y > u.y){\n u.y = v.y;\n }\n\n if(v.z < l.z){\n l.z = v.z;\n } else if(v.z > u.z){\n u.z = v.z;\n }\n }\n};\n\n\n/**\n * Update the .aabb property\n * @method updateAABB\n */\nTrimesh.prototype.updateAABB = function(){\n this.computeLocalAABB(this.aabb);\n};\n\n/**\n * Will update the .boundingSphereRadius property\n * @method updateBoundingSphereRadius\n */\nTrimesh.prototype.updateBoundingSphereRadius = function(){\n // Assume points are distributed with local (0,0,0) as center\n var max2 = 0;\n var vertices = this.vertices;\n var v = new Vec3();\n for(var i=0, N=vertices.length / 3; i !== N; i++) {\n this.getVertex(i, v);\n var norm2 = v.norm2();\n if(norm2 > max2){\n max2 = norm2;\n }\n }\n this.boundingSphereRadius = Math.sqrt(max2);\n};\n\nvar tempWorldVertex = new Vec3();\nvar calculateWorldAABB_frame = new Transform();\nvar calculateWorldAABB_aabb = new AABB();\n\n/**\n * @method calculateWorldAABB\n * @param {Vec3} pos\n * @param {Quaternion} quat\n * @param {Vec3} min\n * @param {Vec3} max\n */\nTrimesh.prototype.calculateWorldAABB = function(pos,quat,min,max){\n /*\n var n = this.vertices.length / 3,\n verts = this.vertices;\n var minx,miny,minz,maxx,maxy,maxz;\n\n var v = tempWorldVertex;\n for(var i=0; i maxx || maxx===undefined){\n maxx = v.x;\n }\n\n if (v.y < miny || miny===undefined){\n miny = v.y;\n } else if(v.y > maxy || maxy===undefined){\n maxy = v.y;\n }\n\n if (v.z < minz || minz===undefined){\n minz = v.z;\n } else if(v.z > maxz || maxz===undefined){\n maxz = v.z;\n }\n }\n min.set(minx,miny,minz);\n max.set(maxx,maxy,maxz);\n */\n\n // Faster approximation using local AABB\n var frame = calculateWorldAABB_frame;\n var result = calculateWorldAABB_aabb;\n frame.position = pos;\n frame.quaternion = quat;\n this.aabb.toWorldFrame(frame, result);\n min.copy(result.lowerBound);\n max.copy(result.upperBound);\n};\n\n/**\n * Get approximate volume\n * @method volume\n * @return {Number}\n */\nTrimesh.prototype.volume = function(){\n return 4.0 * Math.PI * this.boundingSphereRadius / 3.0;\n};\n\n/**\n * Create a Trimesh instance, shaped as a torus.\n * @static\n * @method createTorus\n * @param {number} [radius=1]\n * @param {number} [tube=0.5]\n * @param {number} [radialSegments=8]\n * @param {number} [tubularSegments=6]\n * @param {number} [arc=6.283185307179586]\n * @return {Trimesh} A torus\n */\nTrimesh.createTorus = function (radius, tube, radialSegments, tubularSegments, arc) {\n radius = radius || 1;\n tube = tube || 0.5;\n radialSegments = radialSegments || 8;\n tubularSegments = tubularSegments || 6;\n arc = arc || Math.PI * 2;\n\n var vertices = [];\n var indices = [];\n\n for ( var j = 0; j <= radialSegments; j ++ ) {\n for ( var i = 0; i <= tubularSegments; i ++ ) {\n var u = i / tubularSegments * arc;\n var v = j / radialSegments * Math.PI * 2;\n\n var x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n var y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n var z = tube * Math.sin( v );\n\n vertices.push( x, y, z );\n }\n }\n\n for ( var j = 1; j <= radialSegments; j ++ ) {\n for ( var i = 1; i <= tubularSegments; i ++ ) {\n var a = ( tubularSegments + 1 ) * j + i - 1;\n var b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n var c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n var d = ( tubularSegments + 1 ) * j + i;\n\n indices.push(a, b, d);\n indices.push(b, c, d);\n }\n }\n\n return new Trimesh(vertices, indices);\n};\n\n},{\"../collision/AABB\":3,\"../math/Quaternion\":28,\"../math/Transform\":29,\"../math/Vec3\":30,\"../utils/Octree\":50,\"./Shape\":43}],46:[function(_dereq_,module,exports){\nmodule.exports = GSSolver;\n\nvar Vec3 = _dereq_('../math/Vec3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar Solver = _dereq_('./Solver');\n\n/**\n * Constraint equation Gauss-Seidel solver.\n * @class GSSolver\n * @constructor\n * @todo The spook parameters should be specified for each constraint, not globally.\n * @author schteppe / https://github.com/schteppe\n * @see https://www8.cs.umu.se/kurser/5DV058/VT09/lectures/spooknotes.pdf\n * @extends Solver\n */\nfunction GSSolver(){\n Solver.call(this);\n\n /**\n * The number of solver iterations determines quality of the constraints in the world. The more iterations, the more correct simulation. More iterations need more computations though. If you have a large gravity force in your world, you will need more iterations.\n * @property iterations\n * @type {Number}\n * @todo write more about solver and iterations in the wiki\n */\n this.iterations = 10;\n\n /**\n * When tolerance is reached, the system is assumed to be converged.\n * @property tolerance\n * @type {Number}\n */\n this.tolerance = 1e-7;\n}\nGSSolver.prototype = new Solver();\n\nvar GSSolver_solve_lambda = []; // Just temporary number holders that we want to reuse each solve.\nvar GSSolver_solve_invCs = [];\nvar GSSolver_solve_Bs = [];\nGSSolver.prototype.solve = function(dt,world){\n var iter = 0,\n maxIter = this.iterations,\n tolSquared = this.tolerance*this.tolerance,\n equations = this.equations,\n Neq = equations.length,\n bodies = world.bodies,\n Nbodies = bodies.length,\n h = dt,\n q, B, invC, deltalambda, deltalambdaTot, GWlambda, lambdaj;\n\n // Update solve mass\n if(Neq !== 0){\n for(var i=0; i!==Nbodies; i++){\n bodies[i].updateSolveMassProperties();\n }\n }\n\n // Things that does not change during iteration can be computed once\n var invCs = GSSolver_solve_invCs,\n Bs = GSSolver_solve_Bs,\n lambda = GSSolver_solve_lambda;\n invCs.length = Neq;\n Bs.length = Neq;\n lambda.length = Neq;\n for(var i=0; i!==Neq; i++){\n var c = equations[i];\n lambda[i] = 0.0;\n Bs[i] = c.computeB(h);\n invCs[i] = 1.0 / c.computeC();\n }\n\n if(Neq !== 0){\n\n // Reset vlambda\n for(var i=0; i!==Nbodies; i++){\n var b=bodies[i],\n vlambda=b.vlambda,\n wlambda=b.wlambda;\n vlambda.set(0,0,0);\n if(wlambda){\n wlambda.set(0,0,0);\n }\n }\n\n // Iterate over equations\n for(iter=0; iter!==maxIter; iter++){\n\n // Accumulate the total error for each iteration.\n deltalambdaTot = 0.0;\n\n for(var j=0; j!==Neq; j++){\n\n var c = equations[j];\n\n // Compute iteration\n B = Bs[j];\n invC = invCs[j];\n lambdaj = lambda[j];\n GWlambda = c.computeGWlambda();\n deltalambda = invC * ( B - GWlambda - c.eps * lambdaj );\n\n // Clamp if we are not within the min/max interval\n if(lambdaj + deltalambda < c.minForce){\n deltalambda = c.minForce - lambdaj;\n } else if(lambdaj + deltalambda > c.maxForce){\n deltalambda = c.maxForce - lambdaj;\n }\n lambda[j] += deltalambda;\n\n deltalambdaTot += deltalambda > 0.0 ? deltalambda : -deltalambda; // abs(deltalambda)\n\n c.addToWlambda(deltalambda);\n }\n\n // If the total error is small enough - stop iterate\n if(deltalambdaTot*deltalambdaTot < tolSquared){\n break;\n }\n }\n\n // Add result to velocity\n for(var i=0; i!==Nbodies; i++){\n var b=bodies[i],\n v=b.velocity,\n w=b.angularVelocity;\n v.vadd(b.vlambda, v);\n if(w){\n w.vadd(b.wlambda, w);\n }\n }\n }\n\n return iter;\n};\n\n},{\"../math/Quaternion\":28,\"../math/Vec3\":30,\"./Solver\":47}],47:[function(_dereq_,module,exports){\nmodule.exports = Solver;\n\n/**\n * Constraint equation solver base class.\n * @class Solver\n * @constructor\n * @author schteppe / https://github.com/schteppe\n */\nfunction Solver(){\n /**\n * All equations to be solved\n * @property {Array} equations\n */\n this.equations = [];\n}\n\n/**\n * Should be implemented in subclasses!\n * @method solve\n * @param {Number} dt\n * @param {World} world\n */\nSolver.prototype.solve = function(dt,world){\n // Should return the number of iterations done!\n return 0;\n};\n\n/**\n * Add an equation\n * @method addEquation\n * @param {Equation} eq\n */\nSolver.prototype.addEquation = function(eq){\n if (eq.enabled) {\n this.equations.push(eq);\n }\n};\n\n/**\n * Remove an equation\n * @method removeEquation\n * @param {Equation} eq\n */\nSolver.prototype.removeEquation = function(eq){\n var eqs = this.equations;\n var i = eqs.indexOf(eq);\n if(i !== -1){\n eqs.splice(i,1);\n }\n};\n\n/**\n * Add all equations\n * @method removeAllEquations\n */\nSolver.prototype.removeAllEquations = function(){\n this.equations.length = 0;\n};\n\n\n},{}],48:[function(_dereq_,module,exports){\nmodule.exports = SplitSolver;\n\nvar Vec3 = _dereq_('../math/Vec3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar Solver = _dereq_('./Solver');\nvar Body = _dereq_('../objects/Body');\n\n/**\n * Splits the equations into islands and solves them independently. Can improve performance.\n * @class SplitSolver\n * @constructor\n * @extends Solver\n * @param {Solver} subsolver\n */\nfunction SplitSolver(subsolver){\n Solver.call(this);\n this.iterations = 10;\n this.tolerance = 1e-7;\n this.subsolver = subsolver;\n this.nodes = [];\n this.nodePool = [];\n\n // Create needed nodes, reuse if possible\n while(this.nodePool.length < 128){\n this.nodePool.push(this.createNode());\n }\n}\nSplitSolver.prototype = new Solver();\n\n// Returns the number of subsystems\nvar SplitSolver_solve_nodes = []; // All allocated node objects\nvar SplitSolver_solve_nodePool = []; // All allocated node objects\nvar SplitSolver_solve_eqs = []; // Temp array\nvar SplitSolver_solve_bds = []; // Temp array\nvar SplitSolver_solve_dummyWorld = {bodies:[]}; // Temp object\n\nvar STATIC = Body.STATIC;\nfunction getUnvisitedNode(nodes){\n var Nnodes = nodes.length;\n for(var i=0; i!==Nnodes; i++){\n var node = nodes[i];\n if(!node.visited && !(node.body.type & STATIC)){\n return node;\n }\n }\n return false;\n}\n\nvar queue = [];\nfunction bfs(root,visitFunc,bds,eqs){\n queue.push(root);\n root.visited = true;\n visitFunc(root,bds,eqs);\n while(queue.length) {\n var node = queue.pop();\n // Loop over unvisited child nodes\n var child;\n while((child = getUnvisitedNode(node.children))) {\n child.visited = true;\n visitFunc(child,bds,eqs);\n queue.push(child);\n }\n }\n}\n\nfunction visitFunc(node,bds,eqs){\n bds.push(node.body);\n var Neqs = node.eqs.length;\n for(var i=0; i!==Neqs; i++){\n var eq = node.eqs[i];\n if(eqs.indexOf(eq) === -1){\n eqs.push(eq);\n }\n }\n}\n\nSplitSolver.prototype.createNode = function(){\n return { body:null, children:[], eqs:[], visited:false };\n};\n\n/**\n * Solve the subsystems\n * @method solve\n * @param {Number} dt\n * @param {World} world\n */\nSplitSolver.prototype.solve = function(dt,world){\n var nodes=SplitSolver_solve_nodes,\n nodePool=this.nodePool,\n bodies=world.bodies,\n equations=this.equations,\n Neq=equations.length,\n Nbodies=bodies.length,\n subsolver=this.subsolver;\n\n // Create needed nodes, reuse if possible\n while(nodePool.length < Nbodies){\n nodePool.push(this.createNode());\n }\n nodes.length = Nbodies;\n for (var i = 0; i < Nbodies; i++) {\n nodes[i] = nodePool[i];\n }\n\n // Reset node values\n for(var i=0; i!==Nbodies; i++){\n var node = nodes[i];\n node.body = bodies[i];\n node.children.length = 0;\n node.eqs.length = 0;\n node.visited = false;\n }\n for(var k=0; k!==Neq; k++){\n var eq=equations[k],\n i=bodies.indexOf(eq.bi),\n j=bodies.indexOf(eq.bj),\n ni=nodes[i],\n nj=nodes[j];\n ni.children.push(nj);\n ni.eqs.push(eq);\n nj.children.push(ni);\n nj.eqs.push(eq);\n }\n\n var child, n=0, eqs=SplitSolver_solve_eqs;\n\n subsolver.tolerance = this.tolerance;\n subsolver.iterations = this.iterations;\n\n var dummyWorld = SplitSolver_solve_dummyWorld;\n while((child = getUnvisitedNode(nodes))){\n eqs.length = 0;\n dummyWorld.bodies.length = 0;\n bfs(child, visitFunc, dummyWorld.bodies, eqs);\n\n var Neqs = eqs.length;\n\n eqs = eqs.sort(sortById);\n\n for(var i=0; i!==Neqs; i++){\n subsolver.addEquation(eqs[i]);\n }\n\n var iter = subsolver.solve(dt,dummyWorld);\n subsolver.removeAllEquations();\n n++;\n }\n\n return n;\n};\n\nfunction sortById(a, b){\n return b.id - a.id;\n}\n},{\"../math/Quaternion\":28,\"../math/Vec3\":30,\"../objects/Body\":31,\"./Solver\":47}],49:[function(_dereq_,module,exports){\n/**\n * Base class for objects that dispatches events.\n * @class EventTarget\n * @constructor\n */\nvar EventTarget = function () {\n\n};\n\nmodule.exports = EventTarget;\n\nEventTarget.prototype = {\n constructor: EventTarget,\n\n /**\n * Add an event listener\n * @method addEventListener\n * @param {String} type\n * @param {Function} listener\n * @return {EventTarget} The self object, for chainability.\n */\n addEventListener: function ( type, listener ) {\n if ( this._listeners === undefined ){ this._listeners = {}; }\n var listeners = this._listeners;\n if ( listeners[ type ] === undefined ) {\n listeners[ type ] = [];\n }\n if ( listeners[ type ].indexOf( listener ) === - 1 ) {\n listeners[ type ].push( listener );\n }\n return this;\n },\n\n /**\n * Check if an event listener is added\n * @method hasEventListener\n * @param {String} type\n * @param {Function} listener\n * @return {Boolean}\n */\n hasEventListener: function ( type, listener ) {\n if ( this._listeners === undefined ){ return false; }\n var listeners = this._listeners;\n if ( listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1 ) {\n return true;\n }\n return false;\n },\n\n /**\n * Remove an event listener\n * @method removeEventListener\n * @param {String} type\n * @param {Function} listener\n * @return {EventTarget} The self object, for chainability.\n */\n removeEventListener: function ( type, listener ) {\n if ( this._listeners === undefined ){ return this; }\n var listeners = this._listeners;\n if ( listeners[type] === undefined ){ return this; }\n var index = listeners[ type ].indexOf( listener );\n if ( index !== - 1 ) {\n listeners[ type ].splice( index, 1 );\n }\n return this;\n },\n\n /**\n * Emit an event.\n * @method dispatchEvent\n * @param {Object} event\n * @param {String} event.type\n * @return {EventTarget} The self object, for chainability.\n */\n dispatchEvent: function ( event ) {\n if ( this._listeners === undefined ){ return this; }\n var listeners = this._listeners;\n var listenerArray = listeners[ event.type ];\n if ( listenerArray !== undefined ) {\n event.target = this;\n for ( var i = 0, l = listenerArray.length; i < l; i ++ ) {\n listenerArray[ i ].call( this, event );\n }\n }\n return this;\n }\n};\n\n},{}],50:[function(_dereq_,module,exports){\nvar AABB = _dereq_('../collision/AABB');\nvar Vec3 = _dereq_('../math/Vec3');\n\nmodule.exports = Octree;\n\n/**\n * @class OctreeNode\n * @param {object} [options]\n * @param {Octree} [options.root]\n * @param {AABB} [options.aabb]\n */\nfunction OctreeNode(options){\n options = options || {};\n\n /**\n * The root node\n * @property {OctreeNode} root\n */\n this.root = options.root || null;\n\n /**\n * Boundary of this node\n * @property {AABB} aabb\n */\n this.aabb = options.aabb ? options.aabb.clone() : new AABB();\n\n /**\n * Contained data at the current node level.\n * @property {Array} data\n */\n this.data = [];\n\n /**\n * Children to this node\n * @property {Array} children\n */\n this.children = [];\n}\n\n/**\n * @class Octree\n * @param {AABB} aabb The total AABB of the tree\n * @param {object} [options]\n * @param {number} [options.maxDepth=8]\n * @extends OctreeNode\n */\nfunction Octree(aabb, options){\n options = options || {};\n options.root = null;\n options.aabb = aabb;\n OctreeNode.call(this, options);\n\n /**\n * Maximum subdivision depth\n * @property {number} maxDepth\n */\n this.maxDepth = typeof(options.maxDepth) !== 'undefined' ? options.maxDepth : 8;\n}\nOctree.prototype = new OctreeNode();\n\nOctreeNode.prototype.reset = function(aabb, options){\n this.children.length = this.data.length = 0;\n};\n\n/**\n * Insert data into this node\n * @method insert\n * @param {AABB} aabb\n * @param {object} elementData\n * @return {boolean} True if successful, otherwise false\n */\nOctreeNode.prototype.insert = function(aabb, elementData, level){\n var nodeData = this.data;\n level = level || 0;\n\n // Ignore objects that do not belong in this node\n if (!this.aabb.contains(aabb)){\n return false; // object cannot be added\n }\n\n var children = this.children;\n\n if(level < (this.maxDepth || this.root.maxDepth)){\n // Subdivide if there are no children yet\n var subdivided = false;\n if (!children.length){\n this.subdivide();\n subdivided = true;\n }\n\n // add to whichever node will accept it\n for (var i = 0; i !== 8; i++) {\n if (children[i].insert(aabb, elementData, level + 1)){\n return true;\n }\n }\n\n if(subdivided){\n // No children accepted! Might as well just remove em since they contain none\n children.length = 0;\n }\n }\n\n // Too deep, or children didnt want it. add it in current node\n nodeData.push(elementData);\n\n return true;\n};\n\nvar halfDiagonal = new Vec3();\n\n/**\n * Create 8 equally sized children nodes and put them in the .children array.\n * @method subdivide\n */\nOctreeNode.prototype.subdivide = function() {\n var aabb = this.aabb;\n var l = aabb.lowerBound;\n var u = aabb.upperBound;\n\n var children = this.children;\n\n children.push(\n new OctreeNode({ aabb: new AABB({ lowerBound: new Vec3(0,0,0) }) }),\n new OctreeNode({ aabb: new AABB({ lowerBound: new Vec3(1,0,0) }) }),\n new OctreeNode({ aabb: new AABB({ lowerBound: new Vec3(1,1,0) }) }),\n new OctreeNode({ aabb: new AABB({ lowerBound: new Vec3(1,1,1) }) }),\n new OctreeNode({ aabb: new AABB({ lowerBound: new Vec3(0,1,1) }) }),\n new OctreeNode({ aabb: new AABB({ lowerBound: new Vec3(0,0,1) }) }),\n new OctreeNode({ aabb: new AABB({ lowerBound: new Vec3(1,0,1) }) }),\n new OctreeNode({ aabb: new AABB({ lowerBound: new Vec3(0,1,0) }) })\n );\n\n u.vsub(l, halfDiagonal);\n halfDiagonal.scale(0.5, halfDiagonal);\n\n var root = this.root || this;\n\n for (var i = 0; i !== 8; i++) {\n var child = children[i];\n\n // Set current node as root\n child.root = root;\n\n // Compute bounds\n var lowerBound = child.aabb.lowerBound;\n lowerBound.x *= halfDiagonal.x;\n lowerBound.y *= halfDiagonal.y;\n lowerBound.z *= halfDiagonal.z;\n\n lowerBound.vadd(l, lowerBound);\n\n // Upper bound is always lower bound + halfDiagonal\n lowerBound.vadd(halfDiagonal, child.aabb.upperBound);\n }\n};\n\n/**\n * Get all data, potentially within an AABB\n * @method aabbQuery\n * @param {AABB} aabb\n * @param {array} result\n * @return {array} The \"result\" object\n */\nOctreeNode.prototype.aabbQuery = function(aabb, result) {\n\n var nodeData = this.data;\n\n // abort if the range does not intersect this node\n // if (!this.aabb.overlaps(aabb)){\n // return result;\n // }\n\n // Add objects at this level\n // Array.prototype.push.apply(result, nodeData);\n\n // Add child data\n // @todo unwrap recursion into a queue / loop, that's faster in JS\n var children = this.children;\n\n\n // for (var i = 0, N = this.children.length; i !== N; i++) {\n // children[i].aabbQuery(aabb, result);\n // }\n\n var queue = [this];\n while (queue.length) {\n var node = queue.pop();\n if (node.aabb.overlaps(aabb)){\n Array.prototype.push.apply(result, node.data);\n }\n Array.prototype.push.apply(queue, node.children);\n }\n\n return result;\n};\n\nvar tmpAABB = new AABB();\n\n/**\n * Get all data, potentially intersected by a ray.\n * @method rayQuery\n * @param {Ray} ray\n * @param {Transform} treeTransform\n * @param {array} result\n * @return {array} The \"result\" object\n */\nOctreeNode.prototype.rayQuery = function(ray, treeTransform, result) {\n\n // Use aabb query for now.\n // @todo implement real ray query which needs less lookups\n ray.getAABB(tmpAABB);\n tmpAABB.toLocalFrame(treeTransform, tmpAABB);\n this.aabbQuery(tmpAABB, result);\n\n return result;\n};\n\n/**\n * @method removeEmptyNodes\n */\nOctreeNode.prototype.removeEmptyNodes = function() {\n var queue = [this];\n while (queue.length) {\n var node = queue.pop();\n for (var i = node.children.length - 1; i >= 0; i--) {\n if(!node.children[i].data.length){\n node.children.splice(i, 1);\n }\n }\n Array.prototype.push.apply(queue, node.children);\n }\n};\n\n},{\"../collision/AABB\":3,\"../math/Vec3\":30}],51:[function(_dereq_,module,exports){\nmodule.exports = Pool;\n\n/**\n * For pooling objects that can be reused.\n * @class Pool\n * @constructor\n */\nfunction Pool(){\n /**\n * The pooled objects\n * @property {Array} objects\n */\n this.objects = [];\n\n /**\n * Constructor of the objects\n * @property {mixed} type\n */\n this.type = Object;\n}\n\n/**\n * Release an object after use\n * @method release\n * @param {Object} obj\n */\nPool.prototype.release = function(){\n var Nargs = arguments.length;\n for(var i=0; i!==Nargs; i++){\n this.objects.push(arguments[i]);\n }\n};\n\n/**\n * Get an object\n * @method get\n * @return {mixed}\n */\nPool.prototype.get = function(){\n if(this.objects.length===0){\n return this.constructObject();\n } else {\n return this.objects.pop();\n }\n};\n\n/**\n * Construct an object. Should be implmented in each subclass.\n * @method constructObject\n * @return {mixed}\n */\nPool.prototype.constructObject = function(){\n throw new Error(\"constructObject() not implemented in this Pool subclass yet!\");\n};\n\n},{}],52:[function(_dereq_,module,exports){\nmodule.exports = TupleDictionary;\n\n/**\n * @class TupleDictionary\n * @constructor\n */\nfunction TupleDictionary() {\n\n /**\n * The data storage\n * @property data\n * @type {Object}\n */\n this.data = { keys:[] };\n}\n\n/**\n * @method get\n * @param {Number} i\n * @param {Number} j\n * @return {Number}\n */\nTupleDictionary.prototype.get = function(i, j) {\n if (i > j) {\n // swap\n var temp = j;\n j = i;\n i = temp;\n }\n return this.data[i+'-'+j];\n};\n\n/**\n * @method set\n * @param {Number} i\n * @param {Number} j\n * @param {Number} value\n */\nTupleDictionary.prototype.set = function(i, j, value) {\n if (i > j) {\n var temp = j;\n j = i;\n i = temp;\n }\n var key = i+'-'+j;\n\n // Check if key already exists\n if(!this.get(i,j)){\n this.data.keys.push(key);\n }\n\n this.data[key] = value;\n};\n\n/**\n * @method reset\n */\nTupleDictionary.prototype.reset = function() {\n var data = this.data,\n keys = data.keys;\n while(keys.length > 0){\n var key = keys.pop();\n delete data[key];\n }\n};\n\n},{}],53:[function(_dereq_,module,exports){\nfunction Utils(){}\n\nmodule.exports = Utils;\n\n/**\n * Extend an options object with default values.\n * @static\n * @method defaults\n * @param {object} options The options object. May be falsy: in this case, a new object is created and returned.\n * @param {object} defaults An object containing default values.\n * @return {object} The modified options object.\n */\nUtils.defaults = function(options, defaults){\n options = options || {};\n\n for(var key in defaults){\n if(!(key in options)){\n options[key] = defaults[key];\n }\n }\n\n return options;\n};\n\n},{}],54:[function(_dereq_,module,exports){\nmodule.exports = Vec3Pool;\n\nvar Vec3 = _dereq_('../math/Vec3');\nvar Pool = _dereq_('./Pool');\n\n/**\n * @class Vec3Pool\n * @constructor\n * @extends Pool\n */\nfunction Vec3Pool(){\n Pool.call(this);\n this.type = Vec3;\n}\nVec3Pool.prototype = new Pool();\n\n/**\n * Construct a vector\n * @method constructObject\n * @return {Vec3}\n */\nVec3Pool.prototype.constructObject = function(){\n return new Vec3();\n};\n\n},{\"../math/Vec3\":30,\"./Pool\":51}],55:[function(_dereq_,module,exports){\nmodule.exports = Narrowphase;\n\nvar AABB = _dereq_('../collision/AABB');\nvar Shape = _dereq_('../shapes/Shape');\nvar Ray = _dereq_('../collision/Ray');\nvar Vec3 = _dereq_('../math/Vec3');\nvar Transform = _dereq_('../math/Transform');\nvar ConvexPolyhedron = _dereq_('../shapes/ConvexPolyhedron');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar Solver = _dereq_('../solver/Solver');\nvar Vec3Pool = _dereq_('../utils/Vec3Pool');\nvar ContactEquation = _dereq_('../equations/ContactEquation');\nvar FrictionEquation = _dereq_('../equations/FrictionEquation');\n\n/**\n * Helper class for the World. Generates ContactEquations.\n * @class Narrowphase\n * @constructor\n * @todo Sphere-ConvexPolyhedron contacts\n * @todo Contact reduction\n * @todo should move methods to prototype\n */\nfunction Narrowphase(world){\n\n /**\n * Internal storage of pooled contact points.\n * @property {Array} contactPointPool\n */\n this.contactPointPool = [];\n\n this.frictionEquationPool = [];\n\n this.result = [];\n this.frictionResult = [];\n\n /**\n * Pooled vectors.\n * @property {Vec3Pool} v3pool\n */\n this.v3pool = new Vec3Pool();\n\n this.world = world;\n this.currentContactMaterial = null;\n\n /**\n * @property {Boolean} enableFrictionReduction\n */\n this.enableFrictionReduction = false;\n}\n\n/**\n * Make a contact object, by using the internal pool or creating a new one.\n * @method createContactEquation\n * @return {ContactEquation}\n */\nNarrowphase.prototype.createContactEquation = function(bi, bj, si, sj, rsi, rsj){\n var c;\n if(this.contactPointPool.length){\n c = this.contactPointPool.pop();\n c.bi = bi;\n c.bj = bj;\n } else {\n c = new ContactEquation(bi, bj);\n }\n\n c.enabled = bi.collisionResponse && bj.collisionResponse && si.collisionResponse && sj.collisionResponse;\n\n var cm = this.currentContactMaterial;\n\n c.restitution = cm.restitution;\n\n c.setSpookParams(\n cm.contactEquationStiffness,\n cm.contactEquationRelaxation,\n this.world.dt\n );\n\n var matA = si.material || bi.material;\n var matB = sj.material || bj.material;\n if(matA && matB && matA.restitution >= 0 && matB.restitution >= 0){\n c.restitution = matA.restitution * matB.restitution;\n }\n\n c.si = rsi || si;\n c.sj = rsj || sj;\n\n return c;\n};\n\nNarrowphase.prototype.createFrictionEquationsFromContact = function(contactEquation, outArray){\n var bodyA = contactEquation.bi;\n var bodyB = contactEquation.bj;\n var shapeA = contactEquation.si;\n var shapeB = contactEquation.sj;\n\n var world = this.world;\n var cm = this.currentContactMaterial;\n\n // If friction or restitution were specified in the material, use them\n var friction = cm.friction;\n var matA = shapeA.material || bodyA.material;\n var matB = shapeB.material || bodyB.material;\n if(matA && matB && matA.friction >= 0 && matB.friction >= 0){\n friction = matA.friction * matB.friction;\n }\n\n if(friction > 0){\n\n // Create 2 tangent equations\n var mug = friction * world.gravity.length();\n var reducedMass = (bodyA.invMass + bodyB.invMass);\n if(reducedMass > 0){\n reducedMass = 1/reducedMass;\n }\n var pool = this.frictionEquationPool;\n var c1 = pool.length ? pool.pop() : new FrictionEquation(bodyA,bodyB,mug*reducedMass);\n var c2 = pool.length ? pool.pop() : new FrictionEquation(bodyA,bodyB,mug*reducedMass);\n\n c1.bi = c2.bi = bodyA;\n c1.bj = c2.bj = bodyB;\n c1.minForce = c2.minForce = -mug*reducedMass;\n c1.maxForce = c2.maxForce = mug*reducedMass;\n\n // Copy over the relative vectors\n c1.ri.copy(contactEquation.ri);\n c1.rj.copy(contactEquation.rj);\n c2.ri.copy(contactEquation.ri);\n c2.rj.copy(contactEquation.rj);\n\n // Construct tangents\n contactEquation.ni.tangents(c1.t, c2.t);\n\n // Set spook params\n c1.setSpookParams(cm.frictionEquationStiffness, cm.frictionEquationRelaxation, world.dt);\n c2.setSpookParams(cm.frictionEquationStiffness, cm.frictionEquationRelaxation, world.dt);\n\n c1.enabled = c2.enabled = contactEquation.enabled;\n\n outArray.push(c1, c2);\n\n return true;\n }\n\n return false;\n};\n\nvar averageNormal = new Vec3();\nvar averageContactPointA = new Vec3();\nvar averageContactPointB = new Vec3();\n\n// Take the average N latest contact point on the plane.\nNarrowphase.prototype.createFrictionFromAverage = function(numContacts){\n // The last contactEquation\n var c = this.result[this.result.length - 1];\n\n // Create the result: two \"average\" friction equations\n if (!this.createFrictionEquationsFromContact(c, this.frictionResult) || numContacts === 1) {\n return;\n }\n\n var f1 = this.frictionResult[this.frictionResult.length - 2];\n var f2 = this.frictionResult[this.frictionResult.length - 1];\n\n averageNormal.setZero();\n averageContactPointA.setZero();\n averageContactPointB.setZero();\n\n var bodyA = c.bi;\n var bodyB = c.bj;\n for(var i=0; i!==numContacts; i++){\n c = this.result[this.result.length - 1 - i];\n if(c.bodyA !== bodyA){\n averageNormal.vadd(c.ni, averageNormal); // vec2.add(eq.t, eq.t, c.normalA);\n averageContactPointA.vadd(c.ri, averageContactPointA); // vec2.add(eq.contactPointA, eq.contactPointA, c.contactPointA);\n averageContactPointB.vadd(c.rj, averageContactPointB);\n } else {\n averageNormal.vsub(c.ni, averageNormal); // vec2.sub(eq.t, eq.t, c.normalA);\n averageContactPointA.vadd(c.rj, averageContactPointA); // vec2.add(eq.contactPointA, eq.contactPointA, c.contactPointA);\n averageContactPointB.vadd(c.ri, averageContactPointB);\n }\n }\n\n var invNumContacts = 1 / numContacts;\n averageContactPointA.scale(invNumContacts, f1.ri); // vec2.scale(eq.contactPointA, eq.contactPointA, invNumContacts);\n averageContactPointB.scale(invNumContacts, f1.rj); // vec2.scale(eq.contactPointB, eq.contactPointB, invNumContacts);\n f2.ri.copy(f1.ri); // Should be the same\n f2.rj.copy(f1.rj);\n averageNormal.normalize();\n averageNormal.tangents(f1.t, f2.t);\n // return eq;\n};\n\n\nvar tmpVec1 = new Vec3();\nvar tmpVec2 = new Vec3();\nvar tmpQuat1 = new Quaternion();\nvar tmpQuat2 = new Quaternion();\n\n/**\n * Generate all contacts between a list of body pairs\n * @method getContacts\n * @param {array} p1 Array of body indices\n * @param {array} p2 Array of body indices\n * @param {World} world\n * @param {array} result Array to store generated contacts\n * @param {array} oldcontacts Optional. Array of reusable contact objects\n */\nNarrowphase.prototype.getContacts = function(p1, p2, world, result, oldcontacts, frictionResult, frictionPool){\n // Save old contact objects\n this.contactPointPool = oldcontacts;\n this.frictionEquationPool = frictionPool;\n this.result = result;\n this.frictionResult = frictionResult;\n\n var qi = tmpQuat1;\n var qj = tmpQuat2;\n var xi = tmpVec1;\n var xj = tmpVec2;\n\n for(var k=0, N=p1.length; k!==N; k++){\n\n // Get current collision bodies\n var bi = p1[k],\n bj = p2[k];\n\n // Get contact material\n var bodyContactMaterial = null;\n if(bi.material && bj.material){\n bodyContactMaterial = world.getContactMaterial(bi.material,bj.material) || null;\n }\n\n for (var i = 0; i < bi.shapes.length; i++) {\n bi.quaternion.mult(bi.shapeOrientations[i], qi);\n bi.quaternion.vmult(bi.shapeOffsets[i], xi);\n xi.vadd(bi.position, xi);\n var si = bi.shapes[i];\n\n for (var j = 0; j < bj.shapes.length; j++) {\n\n // Compute world transform of shapes\n bj.quaternion.mult(bj.shapeOrientations[j], qj);\n bj.quaternion.vmult(bj.shapeOffsets[j], xj);\n xj.vadd(bj.position, xj);\n var sj = bj.shapes[j];\n\n if(xi.distanceTo(xj) > si.boundingSphereRadius + sj.boundingSphereRadius){\n continue;\n }\n\n // Get collision material\n var shapeContactMaterial = null;\n if(si.material && sj.material){\n shapeContactMaterial = world.getContactMaterial(si.material,sj.material) || null;\n }\n\n this.currentContactMaterial = shapeContactMaterial || bodyContactMaterial || world.defaultContactMaterial;\n\n // Get contacts\n var resolver = this[si.type | sj.type];\n if(resolver){\n if (si.type < sj.type) {\n resolver.call(this, si, sj, xi, xj, qi, qj, bi, bj, si, sj);\n } else {\n resolver.call(this, sj, si, xj, xi, qj, qi, bj, bi, si, sj);\n }\n }\n }\n }\n }\n};\n\nvar numWarnings = 0;\nvar maxWarnings = 10;\n\nfunction warn(msg){\n if(numWarnings > maxWarnings){\n return;\n }\n\n numWarnings++;\n\n console.warn(msg);\n}\n\nNarrowphase.prototype[Shape.types.BOX | Shape.types.BOX] =\nNarrowphase.prototype.boxBox = function(si,sj,xi,xj,qi,qj,bi,bj){\n si.convexPolyhedronRepresentation.material = si.material;\n sj.convexPolyhedronRepresentation.material = sj.material;\n si.convexPolyhedronRepresentation.collisionResponse = si.collisionResponse;\n sj.convexPolyhedronRepresentation.collisionResponse = sj.collisionResponse;\n this.convexConvex(si.convexPolyhedronRepresentation,sj.convexPolyhedronRepresentation,xi,xj,qi,qj,bi,bj,si,sj);\n};\n\nNarrowphase.prototype[Shape.types.BOX | Shape.types.CONVEXPOLYHEDRON] =\nNarrowphase.prototype.boxConvex = function(si,sj,xi,xj,qi,qj,bi,bj){\n si.convexPolyhedronRepresentation.material = si.material;\n si.convexPolyhedronRepresentation.collisionResponse = si.collisionResponse;\n this.convexConvex(si.convexPolyhedronRepresentation,sj,xi,xj,qi,qj,bi,bj,si,sj);\n};\n\nNarrowphase.prototype[Shape.types.BOX | Shape.types.PARTICLE] =\nNarrowphase.prototype.boxParticle = function(si,sj,xi,xj,qi,qj,bi,bj){\n si.convexPolyhedronRepresentation.material = si.material;\n si.convexPolyhedronRepresentation.collisionResponse = si.collisionResponse;\n this.convexParticle(si.convexPolyhedronRepresentation,sj,xi,xj,qi,qj,bi,bj,si,sj);\n};\n\n/**\n * @method sphereSphere\n * @param {Shape} si\n * @param {Shape} sj\n * @param {Vec3} xi\n * @param {Vec3} xj\n * @param {Quaternion} qi\n * @param {Quaternion} qj\n * @param {Body} bi\n * @param {Body} bj\n */\nNarrowphase.prototype[Shape.types.SPHERE] =\nNarrowphase.prototype.sphereSphere = function(si,sj,xi,xj,qi,qj,bi,bj){\n // We will have only one contact in this case\n var r = this.createContactEquation(bi,bj,si,sj);\n\n // Contact normal\n xj.vsub(xi, r.ni);\n r.ni.normalize();\n\n // Contact point locations\n r.ri.copy(r.ni);\n r.rj.copy(r.ni);\n r.ri.mult(si.radius, r.ri);\n r.rj.mult(-sj.radius, r.rj);\n\n r.ri.vadd(xi, r.ri);\n r.ri.vsub(bi.position, r.ri);\n\n r.rj.vadd(xj, r.rj);\n r.rj.vsub(bj.position, r.rj);\n\n this.result.push(r);\n\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n};\n\n/**\n * @method planeTrimesh\n * @param {Shape} si\n * @param {Shape} sj\n * @param {Vec3} xi\n * @param {Vec3} xj\n * @param {Quaternion} qi\n * @param {Quaternion} qj\n * @param {Body} bi\n * @param {Body} bj\n */\nvar planeTrimesh_normal = new Vec3();\nvar planeTrimesh_relpos = new Vec3();\nvar planeTrimesh_projected = new Vec3();\nNarrowphase.prototype[Shape.types.PLANE | Shape.types.TRIMESH] =\nNarrowphase.prototype.planeTrimesh = function(\n planeShape,\n trimeshShape,\n planePos,\n trimeshPos,\n planeQuat,\n trimeshQuat,\n planeBody,\n trimeshBody\n){\n // Make contacts!\n var v = new Vec3();\n\n var normal = planeTrimesh_normal;\n normal.set(0,0,1);\n planeQuat.vmult(normal,normal); // Turn normal according to plane\n\n for(var i=0; i 0 && positionAlongEdgeB < 0){\n\n // Now check the orthogonal distance from edge to sphere center\n localSpherePos.vsub(edgeVertexA, tmp);\n\n edgeVectorUnit.copy(edgeVector);\n edgeVectorUnit.normalize();\n positionAlongEdgeA = tmp.dot(edgeVectorUnit);\n\n edgeVectorUnit.scale(positionAlongEdgeA, tmp);\n tmp.vadd(edgeVertexA, tmp);\n\n // tmp is now the sphere center position projected to the edge, defined locally in the trimesh frame\n var dist = tmp.distanceTo(localSpherePos);\n if(dist < sphereShape.radius){\n var r = this.createContactEquation(sphereBody, trimeshBody, sphereShape, trimeshShape);\n\n tmp.vsub(localSpherePos, r.ni);\n r.ni.normalize();\n r.ni.scale(sphereShape.radius, r.ri);\n\n Transform.pointToWorldFrame(trimeshPos, trimeshQuat, tmp, tmp);\n tmp.vsub(trimeshBody.position, r.rj);\n\n Transform.vectorToWorldFrame(trimeshQuat, r.ni, r.ni);\n Transform.vectorToWorldFrame(trimeshQuat, r.ri, r.ri);\n\n this.result.push(r);\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n }\n }\n }\n }\n\n // Triangle faces\n var va = sphereTrimesh_va;\n var vb = sphereTrimesh_vb;\n var vc = sphereTrimesh_vc;\n var normal = sphereTrimesh_normal;\n for(var i=0, N = triangles.length; i !== N; i++){\n trimeshShape.getTriangleVertices(triangles[i], va, vb, vc);\n trimeshShape.getNormal(triangles[i], normal);\n localSpherePos.vsub(va, tmp);\n var dist = tmp.dot(normal);\n normal.scale(dist, tmp);\n localSpherePos.vsub(tmp, tmp);\n\n // tmp is now the sphere position projected to the triangle plane\n dist = tmp.distanceTo(localSpherePos);\n if(Ray.pointInTriangle(tmp, va, vb, vc) && dist < sphereShape.radius){\n var r = this.createContactEquation(sphereBody, trimeshBody, sphereShape, trimeshShape);\n\n tmp.vsub(localSpherePos, r.ni);\n r.ni.normalize();\n r.ni.scale(sphereShape.radius, r.ri);\n\n Transform.pointToWorldFrame(trimeshPos, trimeshQuat, tmp, tmp);\n tmp.vsub(trimeshBody.position, r.rj);\n\n Transform.vectorToWorldFrame(trimeshQuat, r.ni, r.ni);\n Transform.vectorToWorldFrame(trimeshQuat, r.ri, r.ri);\n\n this.result.push(r);\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n }\n }\n\n triangles.length = 0;\n};\n\nvar point_on_plane_to_sphere = new Vec3();\nvar plane_to_sphere_ortho = new Vec3();\n\n/**\n * @method spherePlane\n * @param {Shape} si\n * @param {Shape} sj\n * @param {Vec3} xi\n * @param {Vec3} xj\n * @param {Quaternion} qi\n * @param {Quaternion} qj\n * @param {Body} bi\n * @param {Body} bj\n */\nNarrowphase.prototype[Shape.types.SPHERE | Shape.types.PLANE] =\nNarrowphase.prototype.spherePlane = function(si,sj,xi,xj,qi,qj,bi,bj){\n // We will have one contact in this case\n var r = this.createContactEquation(bi,bj,si,sj);\n\n // Contact normal\n r.ni.set(0,0,1);\n qj.vmult(r.ni, r.ni);\n r.ni.negate(r.ni); // body i is the sphere, flip normal\n r.ni.normalize(); // Needed?\n\n // Vector from sphere center to contact point\n r.ni.mult(si.radius, r.ri);\n\n // Project down sphere on plane\n xi.vsub(xj, point_on_plane_to_sphere);\n r.ni.mult(r.ni.dot(point_on_plane_to_sphere), plane_to_sphere_ortho);\n point_on_plane_to_sphere.vsub(plane_to_sphere_ortho,r.rj); // The sphere position projected to plane\n\n if(-point_on_plane_to_sphere.dot(r.ni) <= si.radius){\n\n // Make it relative to the body\n var ri = r.ri;\n var rj = r.rj;\n ri.vadd(xi, ri);\n ri.vsub(bi.position, ri);\n rj.vadd(xj, rj);\n rj.vsub(bj.position, rj);\n\n this.result.push(r);\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n }\n};\n\n// See http://bulletphysics.com/Bullet/BulletFull/SphereTriangleDetector_8cpp_source.html\nvar pointInPolygon_edge = new Vec3();\nvar pointInPolygon_edge_x_normal = new Vec3();\nvar pointInPolygon_vtp = new Vec3();\nfunction pointInPolygon(verts, normal, p){\n var positiveResult = null;\n var N = verts.length;\n for(var i=0; i!==N; i++){\n var v = verts[i];\n\n // Get edge to the next vertex\n var edge = pointInPolygon_edge;\n verts[(i+1) % (N)].vsub(v,edge);\n\n // Get cross product between polygon normal and the edge\n var edge_x_normal = pointInPolygon_edge_x_normal;\n //var edge_x_normal = new Vec3();\n edge.cross(normal,edge_x_normal);\n\n // Get vector between point and current vertex\n var vertex_to_p = pointInPolygon_vtp;\n p.vsub(v,vertex_to_p);\n\n // This dot product determines which side of the edge the point is\n var r = edge_x_normal.dot(vertex_to_p);\n\n // If all such dot products have same sign, we are inside the polygon.\n if(positiveResult===null || (r>0 && positiveResult===true) || (r<=0 && positiveResult===false)){\n if(positiveResult===null){\n positiveResult = r>0;\n }\n continue;\n } else {\n return false; // Encountered some other sign. Exit.\n }\n }\n\n // If we got here, all dot products were of the same sign.\n return true;\n}\n\nvar box_to_sphere = new Vec3();\nvar sphereBox_ns = new Vec3();\nvar sphereBox_ns1 = new Vec3();\nvar sphereBox_ns2 = new Vec3();\nvar sphereBox_sides = [new Vec3(),new Vec3(),new Vec3(),new Vec3(),new Vec3(),new Vec3()];\nvar sphereBox_sphere_to_corner = new Vec3();\nvar sphereBox_side_ns = new Vec3();\nvar sphereBox_side_ns1 = new Vec3();\nvar sphereBox_side_ns2 = new Vec3();\n\n/**\n * @method sphereBox\n * @param {Shape} si\n * @param {Shape} sj\n * @param {Vec3} xi\n * @param {Vec3} xj\n * @param {Quaternion} qi\n * @param {Quaternion} qj\n * @param {Body} bi\n * @param {Body} bj\n */\nNarrowphase.prototype[Shape.types.SPHERE | Shape.types.BOX] =\nNarrowphase.prototype.sphereBox = function(si,sj,xi,xj,qi,qj,bi,bj){\n var v3pool = this.v3pool;\n\n // we refer to the box as body j\n var sides = sphereBox_sides;\n xi.vsub(xj,box_to_sphere);\n sj.getSideNormals(sides,qj);\n var R = si.radius;\n var penetrating_sides = [];\n\n // Check side (plane) intersections\n var found = false;\n\n // Store the resulting side penetration info\n var side_ns = sphereBox_side_ns;\n var side_ns1 = sphereBox_side_ns1;\n var side_ns2 = sphereBox_side_ns2;\n var side_h = null;\n var side_penetrations = 0;\n var side_dot1 = 0;\n var side_dot2 = 0;\n var side_distance = null;\n for(var idx=0,nsides=sides.length; idx!==nsides && found===false; idx++){\n // Get the plane side normal (ns)\n var ns = sphereBox_ns;\n ns.copy(sides[idx]);\n\n var h = ns.norm();\n ns.normalize();\n\n // The normal/distance dot product tells which side of the plane we are\n var dot = box_to_sphere.dot(ns);\n\n if(dot0){\n // Intersects plane. Now check the other two dimensions\n var ns1 = sphereBox_ns1;\n var ns2 = sphereBox_ns2;\n ns1.copy(sides[(idx+1)%3]);\n ns2.copy(sides[(idx+2)%3]);\n var h1 = ns1.norm();\n var h2 = ns2.norm();\n ns1.normalize();\n ns2.normalize();\n var dot1 = box_to_sphere.dot(ns1);\n var dot2 = box_to_sphere.dot(ns2);\n if(dot1

-h1 && dot2

-h2){\n var dist = Math.abs(dot-h-R);\n if(side_distance===null || dist < side_distance){\n side_distance = dist;\n side_dot1 = dot1;\n side_dot2 = dot2;\n side_h = h;\n side_ns.copy(ns);\n side_ns1.copy(ns1);\n side_ns2.copy(ns2);\n side_penetrations++;\n }\n }\n }\n }\n if(side_penetrations){\n found = true;\n var r = this.createContactEquation(bi,bj,si,sj);\n side_ns.mult(-R,r.ri); // Sphere r\n r.ni.copy(side_ns);\n r.ni.negate(r.ni); // Normal should be out of sphere\n side_ns.mult(side_h,side_ns);\n side_ns1.mult(side_dot1,side_ns1);\n side_ns.vadd(side_ns1,side_ns);\n side_ns2.mult(side_dot2,side_ns2);\n side_ns.vadd(side_ns2,r.rj);\n\n // Make relative to bodies\n r.ri.vadd(xi, r.ri);\n r.ri.vsub(bi.position, r.ri);\n r.rj.vadd(xj, r.rj);\n r.rj.vsub(bj.position, r.rj);\n\n this.result.push(r);\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n }\n\n // Check corners\n var rj = v3pool.get();\n var sphere_to_corner = sphereBox_sphere_to_corner;\n for(var j=0; j!==2 && !found; j++){\n for(var k=0; k!==2 && !found; k++){\n for(var l=0; l!==2 && !found; l++){\n rj.set(0,0,0);\n if(j){\n rj.vadd(sides[0],rj);\n } else {\n rj.vsub(sides[0],rj);\n }\n if(k){\n rj.vadd(sides[1],rj);\n } else {\n rj.vsub(sides[1],rj);\n }\n if(l){\n rj.vadd(sides[2],rj);\n } else {\n rj.vsub(sides[2],rj);\n }\n\n // World position of corner\n xj.vadd(rj,sphere_to_corner);\n sphere_to_corner.vsub(xi,sphere_to_corner);\n\n if(sphere_to_corner.norm2() < R*R){\n found = true;\n var r = this.createContactEquation(bi,bj,si,sj);\n r.ri.copy(sphere_to_corner);\n r.ri.normalize();\n r.ni.copy(r.ri);\n r.ri.mult(R,r.ri);\n r.rj.copy(rj);\n\n // Make relative to bodies\n r.ri.vadd(xi, r.ri);\n r.ri.vsub(bi.position, r.ri);\n r.rj.vadd(xj, r.rj);\n r.rj.vsub(bj.position, r.rj);\n\n this.result.push(r);\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n }\n }\n }\n }\n v3pool.release(rj);\n rj = null;\n\n // Check edges\n var edgeTangent = v3pool.get();\n var edgeCenter = v3pool.get();\n var r = v3pool.get(); // r = edge center to sphere center\n var orthogonal = v3pool.get();\n var dist = v3pool.get();\n var Nsides = sides.length;\n for(var j=0; j!==Nsides && !found; j++){\n for(var k=0; k!==Nsides && !found; k++){\n if(j%3 !== k%3){\n // Get edge tangent\n sides[k].cross(sides[j],edgeTangent);\n edgeTangent.normalize();\n sides[j].vadd(sides[k], edgeCenter);\n r.copy(xi);\n r.vsub(edgeCenter,r);\n r.vsub(xj,r);\n var orthonorm = r.dot(edgeTangent); // distance from edge center to sphere center in the tangent direction\n edgeTangent.mult(orthonorm,orthogonal); // Vector from edge center to sphere center in the tangent direction\n\n // Find the third side orthogonal to this one\n var l = 0;\n while(l===j%3 || l===k%3){\n l++;\n }\n\n // vec from edge center to sphere projected to the plane orthogonal to the edge tangent\n dist.copy(xi);\n dist.vsub(orthogonal,dist);\n dist.vsub(edgeCenter,dist);\n dist.vsub(xj,dist);\n\n // Distances in tangent direction and distance in the plane orthogonal to it\n var tdist = Math.abs(orthonorm);\n var ndist = dist.norm();\n\n if(tdist < sides[l].norm() && ndist si.boundingSphereRadius + sj.boundingSphereRadius){\n // return;\n // }\n\n // Check corners\n for(var i=0; i!==verts.length; i++){\n var v = verts[i];\n\n // World position of corner\n var worldCorner = sphereConvex_worldCorner;\n qj.vmult(v,worldCorner);\n xj.vadd(worldCorner,worldCorner);\n var sphere_to_corner = sphereConvex_sphereToCorner;\n worldCorner.vsub(xi, sphere_to_corner);\n if(sphere_to_corner.norm2() < R * R){\n found = true;\n var r = this.createContactEquation(bi,bj,si,sj);\n r.ri.copy(sphere_to_corner);\n r.ri.normalize();\n r.ni.copy(r.ri);\n r.ri.mult(R,r.ri);\n worldCorner.vsub(xj,r.rj);\n\n // Should be relative to the body.\n r.ri.vadd(xi, r.ri);\n r.ri.vsub(bi.position, r.ri);\n\n // Should be relative to the body.\n r.rj.vadd(xj, r.rj);\n r.rj.vsub(bj.position, r.rj);\n\n this.result.push(r);\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n return;\n }\n }\n\n // Check side (plane) intersections\n var found = false;\n for(var i=0, nfaces=faces.length; i!==nfaces && found===false; i++){\n var normal = normals[i];\n var face = faces[i];\n\n // Get world-transformed normal of the face\n var worldNormal = sphereConvex_worldNormal;\n qj.vmult(normal,worldNormal);\n\n // Get a world vertex from the face\n var worldPoint = sphereConvex_worldPoint;\n qj.vmult(verts[face[0]],worldPoint);\n worldPoint.vadd(xj,worldPoint);\n\n // Get a point on the sphere, closest to the face normal\n var worldSpherePointClosestToPlane = sphereConvex_worldSpherePointClosestToPlane;\n worldNormal.mult(-R, worldSpherePointClosestToPlane);\n xi.vadd(worldSpherePointClosestToPlane, worldSpherePointClosestToPlane);\n\n // Vector from a face point to the closest point on the sphere\n var penetrationVec = sphereConvex_penetrationVec;\n worldSpherePointClosestToPlane.vsub(worldPoint,penetrationVec);\n\n // The penetration. Negative value means overlap.\n var penetration = penetrationVec.dot(worldNormal);\n\n var worldPointToSphere = sphereConvex_sphereToWorldPoint;\n xi.vsub(worldPoint, worldPointToSphere);\n\n if(penetration < 0 && worldPointToSphere.dot(worldNormal)>0){\n // Intersects plane. Now check if the sphere is inside the face polygon\n var faceVerts = []; // Face vertices, in world coords\n for(var j=0, Nverts=face.length; j!==Nverts; j++){\n var worldVertex = v3pool.get();\n qj.vmult(verts[face[j]], worldVertex);\n xj.vadd(worldVertex,worldVertex);\n faceVerts.push(worldVertex);\n }\n\n if(pointInPolygon(faceVerts,worldNormal,xi)){ // Is the sphere center in the face polygon?\n found = true;\n var r = this.createContactEquation(bi,bj,si,sj);\n\n worldNormal.mult(-R, r.ri); // Contact offset, from sphere center to contact\n worldNormal.negate(r.ni); // Normal pointing out of sphere\n\n var penetrationVec2 = v3pool.get();\n worldNormal.mult(-penetration, penetrationVec2);\n var penetrationSpherePoint = v3pool.get();\n worldNormal.mult(-R, penetrationSpherePoint);\n\n //xi.vsub(xj).vadd(penetrationSpherePoint).vadd(penetrationVec2 , r.rj);\n xi.vsub(xj,r.rj);\n r.rj.vadd(penetrationSpherePoint,r.rj);\n r.rj.vadd(penetrationVec2 , r.rj);\n\n // Should be relative to the body.\n r.rj.vadd(xj, r.rj);\n r.rj.vsub(bj.position, r.rj);\n\n // Should be relative to the body.\n r.ri.vadd(xi, r.ri);\n r.ri.vsub(bi.position, r.ri);\n\n v3pool.release(penetrationVec2);\n v3pool.release(penetrationSpherePoint);\n\n this.result.push(r);\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n\n // Release world vertices\n for(var j=0, Nfaceverts=faceVerts.length; j!==Nfaceverts; j++){\n v3pool.release(faceVerts[j]);\n }\n\n return; // We only expect *one* face contact\n } else {\n // Edge?\n for(var j=0; j!==face.length; j++){\n\n // Get two world transformed vertices\n var v1 = v3pool.get();\n var v2 = v3pool.get();\n qj.vmult(verts[face[(j+1)%face.length]], v1);\n qj.vmult(verts[face[(j+2)%face.length]], v2);\n xj.vadd(v1, v1);\n xj.vadd(v2, v2);\n\n // Construct edge vector\n var edge = sphereConvex_edge;\n v2.vsub(v1,edge);\n\n // Construct the same vector, but normalized\n var edgeUnit = sphereConvex_edgeUnit;\n edge.unit(edgeUnit);\n\n // p is xi projected onto the edge\n var p = v3pool.get();\n var v1_to_xi = v3pool.get();\n xi.vsub(v1, v1_to_xi);\n var dot = v1_to_xi.dot(edgeUnit);\n edgeUnit.mult(dot, p);\n p.vadd(v1, p);\n\n // Compute a vector from p to the center of the sphere\n var xi_to_p = v3pool.get();\n p.vsub(xi, xi_to_p);\n\n // Collision if the edge-sphere distance is less than the radius\n // AND if p is in between v1 and v2\n if(dot > 0 && dot*dot si.boundingSphereRadius + sj.boundingSphereRadius){\n return;\n }\n\n if(si.findSeparatingAxis(sj,xi,qi,xj,qj,sepAxis,faceListA,faceListB)){\n var res = [];\n var q = convexConvex_q;\n si.clipAgainstHull(xi,qi,sj,xj,qj,sepAxis,-100,100,res);\n var numContacts = 0;\n for(var j = 0; j !== res.length; j++){\n var r = this.createContactEquation(bi,bj,si,sj,rsi,rsj),\n ri = r.ri,\n rj = r.rj;\n sepAxis.negate(r.ni);\n res[j].normal.negate(q);\n q.mult(res[j].depth, q);\n res[j].point.vadd(q, ri);\n rj.copy(res[j].point);\n\n // Contact points are in world coordinates. Transform back to relative\n ri.vsub(xi,ri);\n rj.vsub(xj,rj);\n\n // Make relative to bodies\n ri.vadd(xi, ri);\n ri.vsub(bi.position, ri);\n rj.vadd(xj, rj);\n rj.vsub(bj.position, rj);\n\n this.result.push(r);\n numContacts++;\n if(!this.enableFrictionReduction){\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n }\n }\n if(this.enableFrictionReduction && numContacts){\n this.createFrictionFromAverage(numContacts);\n }\n }\n};\n\n\n/**\n * @method convexTrimesh\n * @param {Array} result\n * @param {Shape} si\n * @param {Shape} sj\n * @param {Vec3} xi\n * @param {Vec3} xj\n * @param {Quaternion} qi\n * @param {Quaternion} qj\n * @param {Body} bi\n * @param {Body} bj\n */\n// Narrowphase.prototype[Shape.types.CONVEXPOLYHEDRON | Shape.types.TRIMESH] =\n// Narrowphase.prototype.convexTrimesh = function(si,sj,xi,xj,qi,qj,bi,bj,rsi,rsj,faceListA,faceListB){\n// var sepAxis = convexConvex_sepAxis;\n\n// if(xi.distanceTo(xj) > si.boundingSphereRadius + sj.boundingSphereRadius){\n// return;\n// }\n\n// // Construct a temp hull for each triangle\n// var hullB = new ConvexPolyhedron();\n\n// hullB.faces = [[0,1,2]];\n// var va = new Vec3();\n// var vb = new Vec3();\n// var vc = new Vec3();\n// hullB.vertices = [\n// va,\n// vb,\n// vc\n// ];\n\n// for (var i = 0; i < sj.indices.length / 3; i++) {\n\n// var triangleNormal = new Vec3();\n// sj.getNormal(i, triangleNormal);\n// hullB.faceNormals = [triangleNormal];\n\n// sj.getTriangleVertices(i, va, vb, vc);\n\n// var d = si.testSepAxis(triangleNormal, hullB, xi, qi, xj, qj);\n// if(!d){\n// triangleNormal.scale(-1, triangleNormal);\n// d = si.testSepAxis(triangleNormal, hullB, xi, qi, xj, qj);\n\n// if(!d){\n// continue;\n// }\n// }\n\n// var res = [];\n// var q = convexConvex_q;\n// si.clipAgainstHull(xi,qi,hullB,xj,qj,triangleNormal,-100,100,res);\n// for(var j = 0; j !== res.length; j++){\n// var r = this.createContactEquation(bi,bj,si,sj,rsi,rsj),\n// ri = r.ri,\n// rj = r.rj;\n// r.ni.copy(triangleNormal);\n// r.ni.negate(r.ni);\n// res[j].normal.negate(q);\n// q.mult(res[j].depth, q);\n// res[j].point.vadd(q, ri);\n// rj.copy(res[j].point);\n\n// // Contact points are in world coordinates. Transform back to relative\n// ri.vsub(xi,ri);\n// rj.vsub(xj,rj);\n\n// // Make relative to bodies\n// ri.vadd(xi, ri);\n// ri.vsub(bi.position, ri);\n// rj.vadd(xj, rj);\n// rj.vsub(bj.position, rj);\n\n// result.push(r);\n// }\n// }\n// };\n\nvar particlePlane_normal = new Vec3();\nvar particlePlane_relpos = new Vec3();\nvar particlePlane_projected = new Vec3();\n\n/**\n * @method particlePlane\n * @param {Array} result\n * @param {Shape} si\n * @param {Shape} sj\n * @param {Vec3} xi\n * @param {Vec3} xj\n * @param {Quaternion} qi\n * @param {Quaternion} qj\n * @param {Body} bi\n * @param {Body} bj\n */\nNarrowphase.prototype[Shape.types.PLANE | Shape.types.PARTICLE] =\nNarrowphase.prototype.planeParticle = function(sj,si,xj,xi,qj,qi,bj,bi){\n var normal = particlePlane_normal;\n normal.set(0,0,1);\n bj.quaternion.vmult(normal,normal); // Turn normal according to plane orientation\n var relpos = particlePlane_relpos;\n xi.vsub(bj.position,relpos);\n var dot = normal.dot(relpos);\n if(dot <= 0.0){\n var r = this.createContactEquation(bi,bj,si,sj);\n r.ni.copy(normal); // Contact normal is the plane normal\n r.ni.negate(r.ni);\n r.ri.set(0,0,0); // Center of particle\n\n // Get particle position projected on plane\n var projected = particlePlane_projected;\n normal.mult(normal.dot(xi),projected);\n xi.vsub(projected,projected);\n //projected.vadd(bj.position,projected);\n\n // rj is now the projected world position minus plane position\n r.rj.copy(projected);\n this.result.push(r);\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n }\n};\n\nvar particleSphere_normal = new Vec3();\n\n/**\n * @method particleSphere\n * @param {Array} result\n * @param {Shape} si\n * @param {Shape} sj\n * @param {Vec3} xi\n * @param {Vec3} xj\n * @param {Quaternion} qi\n * @param {Quaternion} qj\n * @param {Body} bi\n * @param {Body} bj\n */\nNarrowphase.prototype[Shape.types.PARTICLE | Shape.types.SPHERE] =\nNarrowphase.prototype.sphereParticle = function(sj,si,xj,xi,qj,qi,bj,bi){\n // The normal is the unit vector from sphere center to particle center\n var normal = particleSphere_normal;\n normal.set(0,0,1);\n xi.vsub(xj,normal);\n var lengthSquared = normal.norm2();\n\n if(lengthSquared <= sj.radius * sj.radius){\n var r = this.createContactEquation(bi,bj,si,sj);\n normal.normalize();\n r.rj.copy(normal);\n r.rj.mult(sj.radius,r.rj);\n r.ni.copy(normal); // Contact normal\n r.ni.negate(r.ni);\n r.ri.set(0,0,0); // Center of particle\n this.result.push(r);\n this.createFrictionEquationsFromContact(r, this.frictionResult);\n }\n};\n\n// WIP\nvar cqj = new Quaternion();\nvar convexParticle_local = new Vec3();\nvar convexParticle_normal = new Vec3();\nvar convexParticle_penetratedFaceNormal = new Vec3();\nvar convexParticle_vertexToParticle = new Vec3();\nvar convexParticle_worldPenetrationVec = new Vec3();\n\n/**\n * @method convexParticle\n * @param {Array} result\n * @param {Shape} si\n * @param {Shape} sj\n * @param {Vec3} xi\n * @param {Vec3} xj\n * @param {Quaternion} qi\n * @param {Quaternion} qj\n * @param {Body} bi\n * @param {Body} bj\n */\nNarrowphase.prototype[Shape.types.PARTICLE | Shape.types.CONVEXPOLYHEDRON] =\nNarrowphase.prototype.convexParticle = function(sj,si,xj,xi,qj,qi,bj,bi){\n var penetratedFaceIndex = -1;\n var penetratedFaceNormal = convexParticle_penetratedFaceNormal;\n var worldPenetrationVec = convexParticle_worldPenetrationVec;\n var minPenetration = null;\n var numDetectedFaces = 0;\n\n // Convert particle position xi to local coords in the convex\n var local = convexParticle_local;\n local.copy(xi);\n local.vsub(xj,local); // Convert position to relative the convex origin\n qj.conjugate(cqj);\n cqj.vmult(local,local);\n\n if(sj.pointIsInside(local)){\n\n if(sj.worldVerticesNeedsUpdate){\n sj.computeWorldVertices(xj,qj);\n }\n if(sj.worldFaceNormalsNeedsUpdate){\n sj.computeWorldFaceNormals(qj);\n }\n\n // For each world polygon in the polyhedra\n for(var i=0,nfaces=sj.faces.length; i!==nfaces; i++){\n\n // Construct world face vertices\n var verts = [ sj.worldVertices[ sj.faces[i][0] ] ];\n var normal = sj.worldFaceNormals[i];\n\n // Check how much the particle penetrates the polygon plane.\n xi.vsub(verts[0],convexParticle_vertexToParticle);\n var penetration = -normal.dot(convexParticle_vertexToParticle);\n if(minPenetration===null || Math.abs(penetration) data.length || iMinY > data[0].length){\n return;\n }\n\n // Clamp index to edges\n if(iMinX < 0){ iMinX = 0; }\n if(iMaxX < 0){ iMaxX = 0; }\n if(iMinY < 0){ iMinY = 0; }\n if(iMaxY < 0){ iMaxY = 0; }\n if(iMinX >= data.length){ iMinX = data.length - 1; }\n if(iMaxX >= data.length){ iMaxX = data.length - 1; }\n if(iMaxY >= data[0].length){ iMaxY = data[0].length - 1; }\n if(iMinY >= data[0].length){ iMinY = data[0].length - 1; }\n\n var minMax = [];\n hfShape.getRectMinMax(iMinX, iMinY, iMaxX, iMaxY, minMax);\n var min = minMax[0];\n var max = minMax[1];\n\n // Bail out if we're cant touch the bounding height box\n if(localConvexPos.z - radius > max || localConvexPos.z + radius < min){\n return;\n }\n\n for(var i = iMinX; i < iMaxX; i++){\n for(var j = iMinY; j < iMaxY; j++){\n\n // Lower triangle\n hfShape.getConvexTrianglePillar(i, j, false);\n Transform.pointToWorldFrame(hfPos, hfQuat, hfShape.pillarOffset, worldPillarOffset);\n if (convexPos.distanceTo(worldPillarOffset) < hfShape.pillarConvex.boundingSphereRadius + convexShape.boundingSphereRadius) {\n this.convexConvex(convexShape, hfShape.pillarConvex, convexPos, worldPillarOffset, convexQuat, hfQuat, convexBody, hfBody, null, null, faceList, null);\n }\n\n // Upper triangle\n hfShape.getConvexTrianglePillar(i, j, true);\n Transform.pointToWorldFrame(hfPos, hfQuat, hfShape.pillarOffset, worldPillarOffset);\n if (convexPos.distanceTo(worldPillarOffset) < hfShape.pillarConvex.boundingSphereRadius + convexShape.boundingSphereRadius) {\n this.convexConvex(convexShape, hfShape.pillarConvex, convexPos, worldPillarOffset, convexQuat, hfQuat, convexBody, hfBody, null, null, faceList, null);\n }\n }\n }\n};\n\nvar sphereHeightfield_tmp1 = new Vec3();\nvar sphereHeightfield_tmp2 = new Vec3();\n\n/**\n * @method sphereHeightfield\n */\nNarrowphase.prototype[Shape.types.SPHERE | Shape.types.HEIGHTFIELD] =\nNarrowphase.prototype.sphereHeightfield = function (\n sphereShape,\n hfShape,\n spherePos,\n hfPos,\n sphereQuat,\n hfQuat,\n sphereBody,\n hfBody\n){\n var data = hfShape.data,\n radius = sphereShape.radius,\n w = hfShape.elementSize,\n worldPillarOffset = sphereHeightfield_tmp2;\n\n // Get sphere position to heightfield local!\n var localSpherePos = sphereHeightfield_tmp1;\n Transform.pointToLocalFrame(hfPos, hfQuat, spherePos, localSpherePos);\n\n // Get the index of the data points to test against\n var iMinX = Math.floor((localSpherePos.x - radius) / w) - 1,\n iMaxX = Math.ceil((localSpherePos.x + radius) / w) + 1,\n iMinY = Math.floor((localSpherePos.y - radius) / w) - 1,\n iMaxY = Math.ceil((localSpherePos.y + radius) / w) + 1;\n\n // Bail out if we are out of the terrain\n if(iMaxX < 0 || iMaxY < 0 || iMinX > data.length || iMaxY > data[0].length){\n return;\n }\n\n // Clamp index to edges\n if(iMinX < 0){ iMinX = 0; }\n if(iMaxX < 0){ iMaxX = 0; }\n if(iMinY < 0){ iMinY = 0; }\n if(iMaxY < 0){ iMaxY = 0; }\n if(iMinX >= data.length){ iMinX = data.length - 1; }\n if(iMaxX >= data.length){ iMaxX = data.length - 1; }\n if(iMaxY >= data[0].length){ iMaxY = data[0].length - 1; }\n if(iMinY >= data[0].length){ iMinY = data[0].length - 1; }\n\n var minMax = [];\n hfShape.getRectMinMax(iMinX, iMinY, iMaxX, iMaxY, minMax);\n var min = minMax[0];\n var max = minMax[1];\n\n // Bail out if we're cant touch the bounding height box\n if(localSpherePos.z - radius > max || localSpherePos.z + radius < min){\n return;\n }\n\n var result = this.result;\n for(var i = iMinX; i < iMaxX; i++){\n for(var j = iMinY; j < iMaxY; j++){\n\n var numContactsBefore = result.length;\n\n // Lower triangle\n hfShape.getConvexTrianglePillar(i, j, false);\n Transform.pointToWorldFrame(hfPos, hfQuat, hfShape.pillarOffset, worldPillarOffset);\n if (spherePos.distanceTo(worldPillarOffset) < hfShape.pillarConvex.boundingSphereRadius + sphereShape.boundingSphereRadius) {\n this.sphereConvex(sphereShape, hfShape.pillarConvex, spherePos, worldPillarOffset, sphereQuat, hfQuat, sphereBody, hfBody);\n }\n\n // Upper triangle\n hfShape.getConvexTrianglePillar(i, j, true);\n Transform.pointToWorldFrame(hfPos, hfQuat, hfShape.pillarOffset, worldPillarOffset);\n if (spherePos.distanceTo(worldPillarOffset) < hfShape.pillarConvex.boundingSphereRadius + sphereShape.boundingSphereRadius) {\n this.sphereConvex(sphereShape, hfShape.pillarConvex, spherePos, worldPillarOffset, sphereQuat, hfQuat, sphereBody, hfBody);\n }\n\n var numContacts = result.length - numContactsBefore;\n\n if(numContacts > 2){\n return;\n }\n /*\n // Skip all but 1\n for (var k = 0; k < numContacts - 1; k++) {\n result.pop();\n }\n */\n }\n }\n};\n\n},{\"../collision/AABB\":3,\"../collision/Ray\":9,\"../equations/ContactEquation\":19,\"../equations/FrictionEquation\":21,\"../math/Quaternion\":28,\"../math/Transform\":29,\"../math/Vec3\":30,\"../shapes/ConvexPolyhedron\":38,\"../shapes/Shape\":43,\"../solver/Solver\":47,\"../utils/Vec3Pool\":54}],56:[function(_dereq_,module,exports){\n/* global performance */\n\nmodule.exports = World;\n\nvar Shape = _dereq_('../shapes/Shape');\nvar Vec3 = _dereq_('../math/Vec3');\nvar Quaternion = _dereq_('../math/Quaternion');\nvar GSSolver = _dereq_('../solver/GSSolver');\nvar Vec3Pool = _dereq_('../utils/Vec3Pool');\nvar ContactEquation = _dereq_('../equations/ContactEquation');\nvar FrictionEquation = _dereq_('../equations/FrictionEquation');\nvar Narrowphase = _dereq_('./Narrowphase');\nvar EventTarget = _dereq_('../utils/EventTarget');\nvar ArrayCollisionMatrix = _dereq_('../collision/ArrayCollisionMatrix');\nvar Material = _dereq_('../material/Material');\nvar ContactMaterial = _dereq_('../material/ContactMaterial');\nvar Body = _dereq_('../objects/Body');\nvar TupleDictionary = _dereq_('../utils/TupleDictionary');\nvar RaycastResult = _dereq_('../collision/RaycastResult');\nvar AABB = _dereq_('../collision/AABB');\nvar Ray = _dereq_('../collision/Ray');\nvar NaiveBroadphase = _dereq_('../collision/NaiveBroadphase');\n\n/**\n * The physics world\n * @class World\n * @constructor\n * @extends EventTarget\n */\nfunction World(){\n EventTarget.apply(this);\n\n /**\n * Currently / last used timestep. Is set to -1 if not available. This value is updated before each internal step, which means that it is \"fresh\" inside event callbacks.\n * @property {Number} dt\n */\n this.dt = -1;\n\n /**\n * Makes bodies go to sleep when they've been inactive\n * @property allowSleep\n * @type {Boolean}\n */\n this.allowSleep = false;\n\n /**\n * All the current contacts (instances of ContactEquation) in the world.\n * @property contacts\n * @type {Array}\n */\n this.contacts = [];\n this.frictionEquations = [];\n\n /**\n * How often to normalize quaternions. Set to 0 for every step, 1 for every second etc.. A larger value increases performance. If bodies tend to explode, set to a smaller value (zero to be sure nothing can go wrong).\n * @property quatNormalizeSkip\n * @type {Number}\n */\n this.quatNormalizeSkip = 0;\n\n /**\n * Set to true to use fast quaternion normalization. It is often enough accurate to use. If bodies tend to explode, set to false.\n * @property quatNormalizeFast\n * @type {Boolean}\n * @see Quaternion.normalizeFast\n * @see Quaternion.normalize\n */\n this.quatNormalizeFast = false;\n\n /**\n * The wall-clock time since simulation start\n * @property time\n * @type {Number}\n */\n this.time = 0.0;\n\n /**\n * Number of timesteps taken since start\n * @property stepnumber\n * @type {Number}\n */\n this.stepnumber = 0;\n\n /// Default and last timestep sizes\n this.default_dt = 1/60;\n\n this.nextId = 0;\n /**\n * @property gravity\n * @type {Vec3}\n */\n this.gravity = new Vec3();\n\n /**\n * @property broadphase\n * @type {Broadphase}\n */\n this.broadphase = new NaiveBroadphase();\n\n /**\n * @property bodies\n * @type {Array}\n */\n this.bodies = [];\n\n /**\n * @property solver\n * @type {Solver}\n */\n this.solver = new GSSolver();\n\n /**\n * @property constraints\n * @type {Array}\n */\n this.constraints = [];\n\n /**\n * @property narrowphase\n * @type {Narrowphase}\n */\n this.narrowphase = new Narrowphase(this);\n\n /**\n * @property {ArrayCollisionMatrix} collisionMatrix\n\t * @type {ArrayCollisionMatrix}\n\t */\n\tthis.collisionMatrix = new ArrayCollisionMatrix();\n\n /**\n * CollisionMatrix from the previous step.\n * @property {ArrayCollisionMatrix} collisionMatrixPrevious\n\t * @type {ArrayCollisionMatrix}\n\t */\n\tthis.collisionMatrixPrevious = new ArrayCollisionMatrix();\n\n /**\n * All added materials\n * @property materials\n * @type {Array}\n */\n this.materials = [];\n\n /**\n * @property contactmaterials\n * @type {Array}\n */\n this.contactmaterials = [];\n\n /**\n * Used to look up a ContactMaterial given two instances of Material.\n * @property {TupleDictionary} contactMaterialTable\n */\n this.contactMaterialTable = new TupleDictionary();\n\n this.defaultMaterial = new Material(\"default\");\n\n /**\n * This contact material is used if no suitable contactmaterial is found for a contact.\n * @property defaultContactMaterial\n * @type {ContactMaterial}\n */\n this.defaultContactMaterial = new ContactMaterial(this.defaultMaterial, this.defaultMaterial, { friction: 0.3, restitution: 0.0 });\n\n /**\n * @property doProfiling\n * @type {Boolean}\n */\n this.doProfiling = false;\n\n /**\n * @property profile\n * @type {Object}\n */\n this.profile = {\n solve:0,\n makeContactConstraints:0,\n broadphase:0,\n integrate:0,\n narrowphase:0,\n };\n\n /**\n * @property subsystems\n * @type {Array}\n */\n this.subsystems = [];\n\n this.addBodyEvent = {\n type:\"addBody\",\n body : null,\n };\n\n this.removeBodyEvent = {\n type:\"removeBody\",\n body : null,\n };\n}\nWorld.prototype = new EventTarget();\n\n// Temp stuff\nvar tmpAABB1 = new AABB();\nvar tmpArray1 = [];\nvar tmpRay = new Ray();\n\n/**\n * Get the contact material between materials m1 and m2\n * @method getContactMaterial\n * @param {Material} m1\n * @param {Material} m2\n * @return {ContactMaterial} The contact material if it was found.\n */\nWorld.prototype.getContactMaterial = function(m1,m2){\n return this.contactMaterialTable.get(m1.id,m2.id); //this.contactmaterials[this.mats2cmat[i+j*this.materials.length]];\n};\n\n/**\n * Get number of objects in the world.\n * @method numObjects\n * @return {Number}\n * @deprecated\n */\nWorld.prototype.numObjects = function(){\n return this.bodies.length;\n};\n\n/**\n * Store old collision state info\n * @method collisionMatrixTick\n */\nWorld.prototype.collisionMatrixTick = function(){\n\tvar temp = this.collisionMatrixPrevious;\n\tthis.collisionMatrixPrevious = this.collisionMatrix;\n\tthis.collisionMatrix = temp;\n\tthis.collisionMatrix.reset();\n};\n\n/**\n * Add a rigid body to the simulation.\n * @method add\n * @param {Body} body\n * @todo If the simulation has not yet started, why recrete and copy arrays for each body? Accumulate in dynamic arrays in this case.\n * @todo Adding an array of bodies should be possible. This would save some loops too\n * @deprecated Use .addBody instead\n */\nWorld.prototype.add = World.prototype.addBody = function(body){\n if(this.bodies.indexOf(body) !== -1){\n return;\n }\n body.index = this.bodies.length;\n this.bodies.push(body);\n body.world = this;\n body.initPosition.copy(body.position);\n body.initVelocity.copy(body.velocity);\n body.timeLastSleepy = this.time;\n if(body instanceof Body){\n body.initAngularVelocity.copy(body.angularVelocity);\n body.initQuaternion.copy(body.quaternion);\n }\n\tthis.collisionMatrix.setNumObjects(this.bodies.length);\n this.addBodyEvent.body = body;\n this.dispatchEvent(this.addBodyEvent);\n};\n\n/**\n * Add a constraint to the simulation.\n * @method addConstraint\n * @param {Constraint} c\n */\nWorld.prototype.addConstraint = function(c){\n this.constraints.push(c);\n};\n\n/**\n * Removes a constraint\n * @method removeConstraint\n * @param {Constraint} c\n */\nWorld.prototype.removeConstraint = function(c){\n var idx = this.constraints.indexOf(c);\n if(idx!==-1){\n this.constraints.splice(idx,1);\n }\n};\n\n/**\n * Raycast test\n * @method rayTest\n * @param {Vec3} from\n * @param {Vec3} to\n * @param {Function|RaycastResult} result\n * @deprecated Use .raycastAll, .raycastClosest or .raycastAny instead.\n */\nWorld.prototype.rayTest = function(from, to, result){\n if(result instanceof RaycastResult){\n // Do raycastclosest\n this.raycastClosest(from, to, {\n skipBackfaces: true\n }, result);\n } else {\n // Do raycastAll\n this.raycastAll(from, to, {\n skipBackfaces: true\n }, result);\n }\n};\n\n/**\n * Ray cast against all bodies. The provided callback will be executed for each hit with a RaycastResult as single argument.\n * @method raycastAll\n * @param {Vec3} from\n * @param {Vec3} to\n * @param {Object} options\n * @param {number} [options.collisionFilterMask=-1]\n * @param {number} [options.collisionFilterGroup=-1]\n * @param {boolean} [options.skipBackfaces=false]\n * @param {boolean} [options.checkCollisionResponse=true]\n * @param {Function} callback\n * @return {boolean} True if any body was hit.\n */\nWorld.prototype.raycastAll = function(from, to, options, callback){\n options.mode = Ray.ALL;\n options.from = from;\n options.to = to;\n options.callback = callback;\n return tmpRay.intersectWorld(this, options);\n};\n\n/**\n * Ray cast, and stop at the first result. Note that the order is random - but the method is fast.\n * @method raycastAny\n * @param {Vec3} from\n * @param {Vec3} to\n * @param {Object} options\n * @param {number} [options.collisionFilterMask=-1]\n * @param {number} [options.collisionFilterGroup=-1]\n * @param {boolean} [options.skipBackfaces=false]\n * @param {boolean} [options.checkCollisionResponse=true]\n * @param {RaycastResult} result\n * @return {boolean} True if any body was hit.\n */\nWorld.prototype.raycastAny = function(from, to, options, result){\n options.mode = Ray.ANY;\n options.from = from;\n options.to = to;\n options.result = result;\n return tmpRay.intersectWorld(this, options);\n};\n\n/**\n * Ray cast, and return information of the closest hit.\n * @method raycastClosest\n * @param {Vec3} from\n * @param {Vec3} to\n * @param {Object} options\n * @param {number} [options.collisionFilterMask=-1]\n * @param {number} [options.collisionFilterGroup=-1]\n * @param {boolean} [options.skipBackfaces=false]\n * @param {boolean} [options.checkCollisionResponse=true]\n * @param {RaycastResult} result\n * @return {boolean} True if any body was hit.\n */\nWorld.prototype.raycastClosest = function(from, to, options, result){\n options.mode = Ray.CLOSEST;\n options.from = from;\n options.to = to;\n options.result = result;\n return tmpRay.intersectWorld(this, options);\n};\n\n/**\n * Remove a rigid body from the simulation.\n * @method remove\n * @param {Body} body\n * @deprecated Use .removeBody instead\n */\nWorld.prototype.remove = function(body){\n body.world = null;\n var n = this.bodies.length-1,\n bodies = this.bodies,\n idx = bodies.indexOf(body);\n if(idx !== -1){\n bodies.splice(idx, 1); // Todo: should use a garbage free method\n\n // Recompute index\n for(var i=0; i!==bodies.length; i++){\n bodies[i].index = i;\n }\n\n this.collisionMatrix.setNumObjects(n);\n this.removeBodyEvent.body = body;\n this.dispatchEvent(this.removeBodyEvent);\n }\n};\n\n/**\n * Remove a rigid body from the simulation.\n * @method removeBody\n * @param {Body} body\n */\nWorld.prototype.removeBody = World.prototype.remove;\n\n/**\n * Adds a material to the World.\n * @method addMaterial\n * @param {Material} m\n * @todo Necessary?\n */\nWorld.prototype.addMaterial = function(m){\n this.materials.push(m);\n};\n\n/**\n * Adds a contact material to the World\n * @method addContactMaterial\n * @param {ContactMaterial} cmat\n */\nWorld.prototype.addContactMaterial = function(cmat) {\n\n // Add contact material\n this.contactmaterials.push(cmat);\n\n // Add current contact material to the material table\n this.contactMaterialTable.set(cmat.materials[0].id,cmat.materials[1].id,cmat);\n};\n\n// performance.now()\nif(typeof performance === 'undefined'){\n performance = {};\n}\nif(!performance.now){\n var nowOffset = Date.now();\n if (performance.timing && performance.timing.navigationStart){\n nowOffset = performance.timing.navigationStart;\n }\n performance.now = function(){\n return Date.now() - nowOffset;\n };\n}\n\nvar step_tmp1 = new Vec3();\n\n/**\n * Step the physics world forward in time.\n *\n * There are two modes. The simple mode is fixed timestepping without interpolation. In this case you only use the first argument. The second case uses interpolation. In that you also provide the time since the function was last used, as well as the maximum fixed timesteps to take.\n *\n * @method step\n * @param {Number} dt The fixed time step size to use.\n * @param {Number} [timeSinceLastCalled] The time elapsed since the function was last called.\n * @param {Number} [maxSubSteps=10] Maximum number of fixed steps to take per function call.\n *\n * @example\n * // fixed timestepping without interpolation\n * world.step(1/60);\n *\n * @see http://bulletphysics.org/mediawiki-1.5.8/index.php/Stepping_The_World\n */\nWorld.prototype.step = function(dt, timeSinceLastCalled, maxSubSteps){\n maxSubSteps = maxSubSteps || 10;\n timeSinceLastCalled = timeSinceLastCalled || 0;\n\n if(timeSinceLastCalled === 0){ // Fixed, simple stepping\n\n this.internalStep(dt);\n\n // Increment time\n this.time += dt;\n\n } else {\n\n // Compute the number of fixed steps we should have taken since the last step\n var internalSteps = Math.floor((this.time + timeSinceLastCalled) / dt) - Math.floor(this.time / dt);\n internalSteps = Math.min(internalSteps,maxSubSteps);\n\n // Do some fixed steps to catch up\n var t0 = performance.now();\n for(var i=0; i!==internalSteps; i++){\n this.internalStep(dt);\n if(performance.now() - t0 > dt * 1000){\n // We are slower than real-time. Better bail out.\n break;\n }\n }\n\n // Increment internal clock\n this.time += timeSinceLastCalled;\n\n // Compute \"Left over\" time step\n var h = this.time % dt;\n var h_div_dt = h / dt;\n var interpvelo = step_tmp1;\n var bodies = this.bodies;\n\n for(var j=0; j !== bodies.length; j++){\n var b = bodies[j];\n if(b.type !== Body.STATIC && b.sleepState !== Body.SLEEPING){\n\n // Interpolate\n b.position.vsub(b.previousPosition, interpvelo);\n interpvelo.scale(h_div_dt, interpvelo);\n b.position.vadd(interpvelo, b.interpolatedPosition);\n\n // TODO: interpolate quaternion\n // b.interpolatedAngle = b.angle + (b.angle - b.previousAngle) * h_div_dt;\n\n } else {\n\n // For static bodies, just copy. Who else will do it?\n b.interpolatedPosition.copy(b.position);\n b.interpolatedQuaternion.copy(b.quaternion);\n }\n }\n }\n};\n\n/**\n * Step the simulation\n * @method step\n * @param {Number} dt\n */\nvar World_step_postStepEvent = {type:\"postStep\"}, // Reusable event objects to save memory\n World_step_preStepEvent = {type:\"preStep\"},\n World_step_collideEvent = {type:\"collide\", body:null, contact:null },\n World_step_oldContacts = [], // Pools for unused objects\n World_step_frictionEquationPool = [],\n World_step_p1 = [], // Reusable arrays for collision pairs\n World_step_p2 = [],\n World_step_gvec = new Vec3(), // Temporary vectors and quats\n World_step_vi = new Vec3(),\n World_step_vj = new Vec3(),\n World_step_wi = new Vec3(),\n World_step_wj = new Vec3(),\n World_step_t1 = new Vec3(),\n World_step_t2 = new Vec3(),\n World_step_rixn = new Vec3(),\n World_step_rjxn = new Vec3(),\n World_step_step_q = new Quaternion(),\n World_step_step_w = new Quaternion(),\n World_step_step_wq = new Quaternion(),\n invI_tau_dt = new Vec3();\nWorld.prototype.internalStep = function(dt){\n this.dt = dt;\n\n var world = this,\n that = this,\n contacts = this.contacts,\n p1 = World_step_p1,\n p2 = World_step_p2,\n N = this.numObjects(),\n bodies = this.bodies,\n solver = this.solver,\n gravity = this.gravity,\n doProfiling = this.doProfiling,\n profile = this.profile,\n DYNAMIC = Body.DYNAMIC,\n profilingStart,\n constraints = this.constraints,\n frictionEquationPool = World_step_frictionEquationPool,\n gnorm = gravity.norm(),\n gx = gravity.x,\n gy = gravity.y,\n gz = gravity.z,\n i=0;\n\n if(doProfiling){\n profilingStart = performance.now();\n }\n\n // Add gravity to all objects\n for(i=0; i!==N; i++){\n var bi = bodies[i];\n if(bi.type & DYNAMIC){ // Only for dynamic bodies\n var f = bi.force, m = bi.mass;\n f.x += m*gx;\n f.y += m*gy;\n f.z += m*gz;\n }\n }\n\n // Update subsystems\n for(var i=0, Nsubsystems=this.subsystems.length; i!==Nsubsystems; i++){\n this.subsystems[i].update();\n }\n\n // Collision detection\n if(doProfiling){ profilingStart = performance.now(); }\n p1.length = 0; // Clean up pair arrays from last step\n p2.length = 0;\n this.broadphase.collisionPairs(this,p1,p2);\n if(doProfiling){ profile.broadphase = performance.now() - profilingStart; }\n\n // Remove constrained pairs with collideConnected == false\n var Nconstraints = constraints.length;\n for(i=0; i!==Nconstraints; i++){\n var c = constraints[i];\n if(!c.collideConnected){\n for(var j = p1.length-1; j>=0; j-=1){\n if( (c.bodyA === p1[j] && c.bodyB === p2[j]) ||\n (c.bodyB === p1[j] && c.bodyA === p2[j])){\n p1.splice(j, 1);\n p2.splice(j, 1);\n }\n }\n }\n }\n\n this.collisionMatrixTick();\n\n // Generate contacts\n if(doProfiling){ profilingStart = performance.now(); }\n var oldcontacts = World_step_oldContacts;\n var NoldContacts = contacts.length;\n\n for(i=0; i!==NoldContacts; i++){\n oldcontacts.push(contacts[i]);\n }\n contacts.length = 0;\n\n // Transfer FrictionEquation from current list to the pool for reuse\n var NoldFrictionEquations = this.frictionEquations.length;\n for(i=0; i!==NoldFrictionEquations; i++){\n frictionEquationPool.push(this.frictionEquations[i]);\n }\n this.frictionEquations.length = 0;\n\n this.narrowphase.getContacts(\n p1,\n p2,\n this,\n contacts,\n oldcontacts, // To be reused\n this.frictionEquations,\n frictionEquationPool\n );\n\n if(doProfiling){\n profile.narrowphase = performance.now() - profilingStart;\n }\n\n // Loop over all collisions\n if(doProfiling){\n profilingStart = performance.now();\n }\n\n // Add all friction eqs\n for (var i = 0; i < this.frictionEquations.length; i++) {\n solver.addEquation(this.frictionEquations[i]);\n }\n\n var ncontacts = contacts.length;\n for(var k=0; k!==ncontacts; k++){\n\n // Current contact\n var c = contacts[k];\n\n // Get current collision indeces\n var bi = c.bi,\n bj = c.bj,\n si = c.si,\n sj = c.sj;\n\n // Get collision properties\n var cm;\n if(bi.material && bj.material){\n cm = this.getContactMaterial(bi.material,bj.material) || this.defaultContactMaterial;\n } else {\n cm = this.defaultContactMaterial;\n }\n\n // c.enabled = bi.collisionResponse && bj.collisionResponse && si.collisionResponse && sj.collisionResponse;\n\n var mu = cm.friction;\n // c.restitution = cm.restitution;\n\n // If friction or restitution were specified in the material, use them\n if(bi.material && bj.material){\n if(bi.material.friction >= 0 && bj.material.friction >= 0){\n mu = bi.material.friction * bj.material.friction;\n }\n\n if(bi.material.restitution >= 0 && bj.material.restitution >= 0){\n c.restitution = bi.material.restitution * bj.material.restitution;\n }\n }\n\n\t\t// c.setSpookParams(\n // cm.contactEquationStiffness,\n // cm.contactEquationRelaxation,\n // dt\n // );\n\n\t\tsolver.addEquation(c);\n\n\t\t// // Add friction constraint equation\n\t\t// if(mu > 0){\n\n\t\t// \t// Create 2 tangent equations\n\t\t// \tvar mug = mu * gnorm;\n\t\t// \tvar reducedMass = (bi.invMass + bj.invMass);\n\t\t// \tif(reducedMass > 0){\n\t\t// \t\treducedMass = 1/reducedMass;\n\t\t// \t}\n\t\t// \tvar pool = frictionEquationPool;\n\t\t// \tvar c1 = pool.length ? pool.pop() : new FrictionEquation(bi,bj,mug*reducedMass);\n\t\t// \tvar c2 = pool.length ? pool.pop() : new FrictionEquation(bi,bj,mug*reducedMass);\n\t\t// \tthis.frictionEquations.push(c1, c2);\n\n\t\t// \tc1.bi = c2.bi = bi;\n\t\t// \tc1.bj = c2.bj = bj;\n\t\t// \tc1.minForce = c2.minForce = -mug*reducedMass;\n\t\t// \tc1.maxForce = c2.maxForce = mug*reducedMass;\n\n\t\t// \t// Copy over the relative vectors\n\t\t// \tc1.ri.copy(c.ri);\n\t\t// \tc1.rj.copy(c.rj);\n\t\t// \tc2.ri.copy(c.ri);\n\t\t// \tc2.rj.copy(c.rj);\n\n\t\t// \t// Construct tangents\n\t\t// \tc.ni.tangents(c1.t, c2.t);\n\n // // Set spook params\n // c1.setSpookParams(cm.frictionEquationStiffness, cm.frictionEquationRelaxation, dt);\n // c2.setSpookParams(cm.frictionEquationStiffness, cm.frictionEquationRelaxation, dt);\n\n // c1.enabled = c2.enabled = c.enabled;\n\n\t\t// \t// Add equations to solver\n\t\t// \tsolver.addEquation(c1);\n\t\t// \tsolver.addEquation(c2);\n\t\t// }\n\n if( bi.allowSleep &&\n bi.type === Body.DYNAMIC &&\n bi.sleepState === Body.SLEEPING &&\n bj.sleepState === Body.AWAKE &&\n bj.type !== Body.STATIC\n ){\n var speedSquaredB = bj.velocity.norm2() + bj.angularVelocity.norm2();\n var speedLimitSquaredB = Math.pow(bj.sleepSpeedLimit,2);\n if(speedSquaredB >= speedLimitSquaredB*2){\n bi._wakeUpAfterNarrowphase = true;\n }\n }\n\n if( bj.allowSleep &&\n bj.type === Body.DYNAMIC &&\n bj.sleepState === Body.SLEEPING &&\n bi.sleepState === Body.AWAKE &&\n bi.type !== Body.STATIC\n ){\n var speedSquaredA = bi.velocity.norm2() + bi.angularVelocity.norm2();\n var speedLimitSquaredA = Math.pow(bi.sleepSpeedLimit,2);\n if(speedSquaredA >= speedLimitSquaredA*2){\n bj._wakeUpAfterNarrowphase = true;\n }\n }\n\n // Now we know that i and j are in contact. Set collision matrix state\n\t\tthis.collisionMatrix.set(bi, bj, true);\n\n if (!this.collisionMatrixPrevious.get(bi, bj)) {\n // First contact!\n // We reuse the collideEvent object, otherwise we will end up creating new objects for each new contact, even if there's no event listener attached.\n World_step_collideEvent.body = bj;\n World_step_collideEvent.contact = c;\n bi.dispatchEvent(World_step_collideEvent);\n\n World_step_collideEvent.body = bi;\n bj.dispatchEvent(World_step_collideEvent);\n }\n }\n if(doProfiling){\n profile.makeContactConstraints = performance.now() - profilingStart;\n profilingStart = performance.now();\n }\n\n // Wake up bodies\n for(i=0; i!==N; i++){\n var bi = bodies[i];\n if(bi._wakeUpAfterNarrowphase){\n bi.wakeUp();\n bi._wakeUpAfterNarrowphase = false;\n }\n }\n\n // Add user-added constraints\n var Nconstraints = constraints.length;\n for(i=0; i!==Nconstraints; i++){\n var c = constraints[i];\n c.update();\n for(var j=0, Neq=c.equations.length; j!==Neq; j++){\n var eq = c.equations[j];\n solver.addEquation(eq);\n }\n }\n\n // Solve the constrained system\n solver.solve(dt,this);\n\n if(doProfiling){\n profile.solve = performance.now() - profilingStart;\n }\n\n // Remove all contacts from solver\n solver.removeAllEquations();\n\n // Apply damping, see http://code.google.com/p/bullet/issues/detail?id=74 for details\n var pow = Math.pow;\n for(i=0; i!==N; i++){\n var bi = bodies[i];\n if(bi.type & DYNAMIC){ // Only for dynamic bodies\n var ld = pow(1.0 - bi.linearDamping,dt);\n var v = bi.velocity;\n v.mult(ld,v);\n var av = bi.angularVelocity;\n if(av){\n var ad = pow(1.0 - bi.angularDamping,dt);\n av.mult(ad,av);\n }\n }\n }\n\n this.dispatchEvent(World_step_preStepEvent);\n\n // Invoke pre-step callbacks\n for(i=0; i!==N; i++){\n var bi = bodies[i];\n if(bi.preStep){\n bi.preStep.call(bi);\n }\n }\n\n // Leap frog\n // vnew = v + h*f/m\n // xnew = x + h*vnew\n if(doProfiling){\n profilingStart = performance.now();\n }\n var q = World_step_step_q;\n var w = World_step_step_w;\n var wq = World_step_step_wq;\n var stepnumber = this.stepnumber;\n var DYNAMIC_OR_KINEMATIC = Body.DYNAMIC | Body.KINEMATIC;\n var quatNormalize = stepnumber % (this.quatNormalizeSkip+1) === 0;\n var quatNormalizeFast = this.quatNormalizeFast;\n var half_dt = dt * 0.5;\n var PLANE = Shape.types.PLANE,\n CONVEX = Shape.types.CONVEXPOLYHEDRON;\n\n for(i=0; i!==N; i++){\n var b = bodies[i],\n force = b.force,\n tau = b.torque;\n if((b.type & DYNAMIC_OR_KINEMATIC) && b.sleepState !== Body.SLEEPING){ // Only for dynamic\n var velo = b.velocity,\n angularVelo = b.angularVelocity,\n pos = b.position,\n quat = b.quaternion,\n invMass = b.invMass,\n invInertia = b.invInertiaWorld;\n\n velo.x += force.x * invMass * dt;\n velo.y += force.y * invMass * dt;\n velo.z += force.z * invMass * dt;\n\n if(b.angularVelocity){\n invInertia.vmult(tau,invI_tau_dt);\n invI_tau_dt.mult(dt,invI_tau_dt);\n invI_tau_dt.vadd(angularVelo,angularVelo);\n }\n\n // Use new velocity - leap frog\n pos.x += velo.x * dt;\n pos.y += velo.y * dt;\n pos.z += velo.z * dt;\n\n if(b.angularVelocity){\n w.set(angularVelo.x, angularVelo.y, angularVelo.z, 0);\n w.mult(quat,wq);\n quat.x += half_dt * wq.x;\n quat.y += half_dt * wq.y;\n quat.z += half_dt * wq.z;\n quat.w += half_dt * wq.w;\n if(quatNormalize){\n if(quatNormalizeFast){\n quat.normalizeFast();\n } else {\n quat.normalize();\n }\n }\n }\n\n if(b.aabb){\n b.aabbNeedsUpdate = true;\n }\n\n // Update world inertia\n if(b.updateInertiaWorld){\n b.updateInertiaWorld();\n }\n }\n }\n this.clearForces();\n\n this.broadphase.dirty = true;\n\n if(doProfiling){\n profile.integrate = performance.now() - profilingStart;\n }\n\n // Update world time\n this.time += dt;\n this.stepnumber += 1;\n\n this.dispatchEvent(World_step_postStepEvent);\n\n // Invoke post-step callbacks\n for(i=0; i!==N; i++){\n var bi = bodies[i];\n var postStep = bi.postStep;\n if(postStep){\n postStep.call(bi);\n }\n }\n\n // Sleeping update\n if(this.allowSleep){\n for(i=0; i!==N; i++){\n bodies[i].sleepTick(this.time);\n }\n }\n};\n\n/**\n * Sets all body forces in the world to zero.\n * @method clearForces\n */\nWorld.prototype.clearForces = function(){\n var bodies = this.bodies;\n var N = bodies.length;\n for(var i=0; i !== N; i++){\n var b = bodies[i],\n force = b.force,\n tau = b.torque;\n\n b.force.set(0,0,0);\n b.torque.set(0,0,0);\n }\n};\n\n},{\"../collision/AABB\":3,\"../collision/ArrayCollisionMatrix\":4,\"../collision/NaiveBroadphase\":7,\"../collision/Ray\":9,\"../collision/RaycastResult\":10,\"../equations/ContactEquation\":19,\"../equations/FrictionEquation\":21,\"../material/ContactMaterial\":24,\"../material/Material\":25,\"../math/Quaternion\":28,\"../math/Vec3\":30,\"../objects/Body\":31,\"../shapes/Shape\":43,\"../solver/GSSolver\":46,\"../utils/EventTarget\":49,\"../utils/TupleDictionary\":52,\"../utils/Vec3Pool\":54,\"./Narrowphase\":55}]},{},[2])\n(2)\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/cannon/build/cannon.js\n// module id = 8\n// module chunks = 0","import { ClientEngine } from \"@rtsdk/lance-topia\";\nimport WiggleRenderer from \"../client/WiggleRenderer\";\n\nexport default class WiggleClientEngine extends ClientEngine {\n constructor(gameEngine, options) {\n super(gameEngine, options, WiggleRenderer);\n\n const params = new Proxy(new URLSearchParams(window.location.search), {\n get: (searchParams, prop) => searchParams.get(prop),\n });\n const assetId = params[\"assetId\"];\n const urlSlug = params[\"urlSlug\"];\n this.roomName = `${urlSlug}_${assetId}`;\n\n // show try-again button\n gameEngine.on(\"objectDestroyed\", (obj) => {\n if (obj.playerId === gameEngine.playerId) {\n document.body.classList.add(\"lostGame\");\n document.querySelector(\"#tryAgain\").disabled = false;\n document.querySelector(\"#tryAgain\").className = \"show\";\n }\n });\n\n // restart game\n document.querySelector(\"#tryAgain\").addEventListener(\"click\", (clickEvent) => {\n this.socket.emit(\"requestRestart\");\n clickEvent.currentTarget.disabled = true;\n document.querySelector(\"#tryAgain\").className = \"hidden\";\n document.body.classList.remove(\"lostGame\");\n });\n\n this.mouseX = null;\n this.mouseY = null;\n\n document.addEventListener(\"mousemove\", this.updateMouseXY.bind(this), false);\n document.addEventListener(\"mouseenter\", this.updateMouseXY.bind(this), false);\n document.addEventListener(\"touchmove\", this.updateMouseXY.bind(this), false);\n document.addEventListener(\"touchenter\", this.updateMouseXY.bind(this), false);\n this.gameEngine.on(\"client__preStep\", this.sendMouseAngle.bind(this));\n }\n\n updateMouseXY(e) {\n e.preventDefault();\n if (e.touches) e = e.touches.item(0);\n this.mouseX = e.pageX;\n this.mouseY = e.pageY;\n }\n\n sendMouseAngle() {\n let player = this.gameEngine.world.queryObject({ playerId: this.gameEngine.playerId });\n if (this.mouseY === null || player === null) return;\n\n let mouseX = (this.mouseX - document.body.clientWidth / 2) / this.zoom;\n let mouseY = (this.mouseY - document.body.clientHeight / 2) / this.zoom;\n let dx = mouseY - player.position.y;\n let dy = mouseX - player.position.x;\n if (Math.sqrt(dx * dx + dy * dy) < 0.5) {\n this.sendInput(this.gameEngine.directionStop, { movement: true });\n return;\n }\n\n let angle = Math.atan2(dx, dy);\n this.sendInput(angle, { movement: true });\n }\n\n connect() {\n return super.connect().then(() => {\n this.socket.on(\"spectating\", () => {\n console.log(\"spectating\");\n document.querySelector(\"#spectating\").className = \"show\";\n });\n\n this.socket.on(\"inzone\", () => {\n document.querySelector(\"#spectating\").className = \"hidden\";\n document.querySelector(\"#joinGame\").className = \"show\";\n document.querySelector(\"#joinGame\").addEventListener(\"click\", (clickEvent) => {\n this.socket.emit(\"requestRestart\");\n document.querySelector(\"#joinGame\").className = \"hidden\";\n document.querySelector(\"#instructions\").className = \"hidden\";\n clickEvent.currentTarget.disabled = true;\n });\n });\n\n this.socket.on(\"error\", (e) => {\n console.error(\"error\", e);\n if (e?.message) document.querySelector(\"#error\").innerHTML = e.message;\n });\n\n this.socket.on(\"connection_error\", (e) => {\n console.error(\"Socket connection error\", e);\n });\n\n this.socket.on(\"disconnect\", (e) => {\n console.log(\"disconnected\");\n document.body.classList.add(\"disconnected\");\n document.body.classList.remove(\"gameActive\");\n });\n });\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/client/WiggleClientEngine.js","import { Renderer, TwoVector } from \"@rtsdk/lance-topia\";\nimport Wiggle from \"../common/Wiggle\";\nimport Food from \"../common/Food\";\n\nlet ctx = null;\nlet canvas = null;\nlet game = null;\n\nexport default class WiggleRenderer extends Renderer {\n constructor(gameEngine, clientEngine) {\n super(gameEngine, clientEngine);\n game = gameEngine;\n canvas = document.createElement(\"canvas\");\n canvas.width = window.innerWidth;\n canvas.height = window.innerHeight;\n document.body.insertBefore(canvas, document.getElementById(\"logo\"));\n game.w = canvas.width;\n game.h = canvas.height;\n clientEngine.zoom = game.h / game.spaceHeight;\n if (game.w / game.spaceWidth < clientEngine.zoom) clientEngine.zoom = game.w / game.spaceWidth;\n ctx = canvas.getContext(\"2d\");\n ctx.lineWidth = 2 / clientEngine.zoom;\n ctx.strokeStyle = ctx.fillStyle = \"white\";\n }\n\n draw(t, dt) {\n super.draw(t, dt);\n\n // Clear the canvas\n ctx.clearRect(0, 0, game.w, game.h);\n\n // Transform the canvas\n // Note that we need to flip the y axis since Canvas pixel coordinates\n // goes from top to bottom, while physics does the opposite.\n ctx.save();\n ctx.translate(game.w / 2, game.h / 2); // Translate to the center\n ctx.scale(this.clientEngine.zoom, this.clientEngine.zoom); // Zoom in and flip y axis\n\n // Draw all things\n game.world.forEachObject((id, obj) => {\n if (obj instanceof Wiggle) this.drawWiggle(obj, t);\n else if (obj instanceof Food) this.drawFood(obj);\n });\n\n ctx.restore();\n }\n\n drawWiggle(w, time) {\n const playerColor = \"#39FF14\";\n const nonPlayerColor = \"#2121DE\";\n\n // draw head and body\n let isPlayer = w.playerId === this.gameEngine.playerId;\n let x = w.position.x;\n let y = w.position.y;\n if (isPlayer) ctx.fillStyle = playerColor;\n else ctx.fillStyle = nonPlayerColor;\n this.drawCircle(x, y, game.headRadius, true);\n for (let i = 0; i < w.bodyParts.length; i++) {\n let nextPos = w.bodyParts[i];\n if (isPlayer) ctx.fillStyle = playerColor;\n else ctx.fillStyle = nonPlayerColor;\n this.drawCircle(nextPos.x, nextPos.y, game.bodyRadius, true);\n }\n\n // draw eyes\n let angle = +w.direction;\n if (w.direction === game.directionStop) {\n angle = -Math.PI / 2;\n }\n let eye1 = new TwoVector(Math.cos(angle + game.eyeAngle), Math.sin(angle + game.eyeAngle));\n let eye2 = new TwoVector(Math.cos(angle - game.eyeAngle), Math.sin(angle - game.eyeAngle));\n eye1.multiplyScalar(game.eyeDist).add(w.position);\n eye2.multiplyScalar(game.eyeDist).add(w.position);\n ctx.fillStyle = \"black\";\n this.drawCircle(eye1.x, eye1.y, game.eyeRadius, true);\n this.drawCircle(eye2.x, eye2.y, game.eyeRadius, true);\n\n ctx.fillStyle = \"white\";\n const fontSize = 0.4;\n ctx.font = `${fontSize}px Arial`;\n var textToFill = w.name;\n ctx.fillText(textToFill, x - textToFill.length / (4 / fontSize), y - 0.2);\n ctx.fillStyle = \"white\";\n\n // update status\n const timeInt = parseInt(time);\n // Only update DOM on every 18th or so draw\n if (isPlayer && timeInt % 18 === 0) {\n document.getElementById(\"wiggle-length\").innerHTML = \"Your Length: \" + w.bodyParts.length;\n document.getElementById(\"score\").innerHTML = \"Your Score: \" + w.score;\n }\n }\n\n drawFood(f) {\n ctx.strokeStyle = ctx.fillStyle = \"#FD0000\";\n\n this.drawCircle(f.position.x, f.position.y, game.foodRadius, true);\n ctx.strokeStyle = ctx.fillStyle = \"White\";\n }\n\n drawCircle(x, y, radius, fill) {\n ctx.beginPath();\n ctx.arc(x, y, radius, 0, 2 * Math.PI);\n fill ? ctx.fill() : ctx.stroke();\n ctx.closePath();\n }\n\n drawBounds() {\n ctx.beginPath();\n ctx.moveTo(-game.spaceWidth / 2, -game.spaceHeight / 2);\n ctx.lineTo(-game.spaceWidth / 2, game.spaceHeight / 2);\n ctx.lineTo(game.spaceWidth / 2, game.spaceHeight / 2);\n ctx.lineTo(game.spaceWidth / 2, -game.spaceHeight / 2);\n ctx.lineTo(-game.spaceWidth / 2, -game.spaceHeight / 2);\n ctx.closePath();\n ctx.stroke();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/client/WiggleRenderer.js","\"use strict\";\n\nimport { GameEngine, SimplePhysicsEngine, TwoVector } from \"@rtsdk/lance-topia\";\nimport Wiggle from \"./Wiggle\";\nimport Food from \"./Food\";\n\nexport default class WiggleGameEngine extends GameEngine {\n constructor(options) {\n super(options);\n this.physicsEngine = new SimplePhysicsEngine({\n gameEngine: this,\n collisions: { autoResolve: false },\n });\n this.on(\"preStep\", this.moveAll.bind(this));\n\n // game variables\n Object.assign(this, {\n foodRadius: 0.13,\n headRadius: 0.1,\n bodyRadius: 0.2,\n eyeDist: 0.12,\n eyeRadius: 0.05,\n eyeAngle: 0.8,\n spaceWidth: 8,\n spaceHeight: 20,\n moveDist: 0.035,\n foodCount: 25,\n eatDistance: 0.3,\n collideDistance: 0.2,\n startBodyLength: 15,\n aiCount: 1,\n directionStop: 100,\n hungerTick: 0.01,\n xpPerBlock: 100,\n xpPerFood: 1,\n xpLevelConstant: 0.04,\n error: \"\",\n });\n }\n\n registerClasses(serializer) {\n serializer.registerClass(Wiggle);\n serializer.registerClass(Food);\n }\n\n start() {\n super.start();\n }\n\n randPos() {\n let x = (Math.random() - 0.5) * this.spaceWidth;\n let y = (Math.random() - 0.5) * this.spaceHeight;\n return new TwoVector(x, y);\n }\n\n moveAll(stepInfo) {\n if (stepInfo.isReenact) return;\n\n this.world.forEachObject((id, obj) => {\n if (obj instanceof Wiggle) {\n // if the position changed, add a body part and trim the length\n let pos = obj.position.clone();\n if (obj.bodyParts.length === 0 || pos.subtract(obj.bodyParts[obj.bodyParts.length - 1]).length() > 0.05) {\n obj.bodyParts.push(obj.position.clone());\n while (obj.bodyLength < obj.bodyParts.length) obj.bodyParts.shift();\n }\n\n // if not stopped, move along\n if (obj.direction === this.directionStop) return;\n let move = new TwoVector(Math.cos(obj.direction), Math.sin(obj.direction));\n move.multiplyScalar(this.moveDist);\n obj.position.add(move);\n obj.position.y = Math.min(obj.position.y, this.spaceHeight / 2);\n obj.position.y = Math.max(obj.position.y, -this.spaceHeight / 2);\n obj.position.x = Math.min(obj.position.x, this.spaceWidth / 2);\n obj.position.x = Math.max(obj.position.x, -this.spaceWidth / 2);\n }\n });\n }\n\n processInput(inputData, playerId) {\n super.processInput(inputData, playerId);\n\n // get the player's primary object\n let player = this.world.queryObject({ playerId });\n if (player) {\n player.direction = inputData.input;\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/common/WiggleGameEngine.js"],"sourceRoot":""} \ No newline at end of file diff --git a/src/client/WiggleClientEngine.js b/src/client/WiggleClientEngine.js index 9a39bce..b25feab 100644 --- a/src/client/WiggleClientEngine.js +++ b/src/client/WiggleClientEngine.js @@ -8,7 +8,9 @@ export default class WiggleClientEngine extends ClientEngine { const params = new Proxy(new URLSearchParams(window.location.search), { get: (searchParams, prop) => searchParams.get(prop), }); - this.roomName = params["assetId"]; + const assetId = params["assetId"]; + const urlSlug = params["urlSlug"]; + this.roomName = `${urlSlug}_${assetId}`; // show try-again button gameEngine.on("objectDestroyed", (obj) => { diff --git a/src/server/WiggleServerEngine.js b/src/server/WiggleServerEngine.js index d4794c1..48c1faa 100644 --- a/src/server/WiggleServerEngine.js +++ b/src/server/WiggleServerEngine.js @@ -88,7 +88,7 @@ export default class WiggleServerEngine extends ServerEngine { const query = parts.query; const req = { body: query }; // Used for interactive assets const { assetId, displayName, identityId, urlSlug } = query; - const roomName = assetId; + const roomName = `${urlSlug}_${assetId}`; this.urlSlug = urlSlug; if (!roomName) return;