@rpgjs/common 4.2.1 → 5.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Physic.d.ts +619 -0
- package/dist/Player.d.ts +198 -0
- package/{lib → dist}/Utils.d.ts +19 -2
- package/dist/database/Item.d.ts +10 -0
- package/dist/database/index.d.ts +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +16741 -0
- package/dist/index.js.map +1 -0
- package/dist/modules.d.ts +92 -0
- package/dist/movement/MovementManager.d.ts +84 -0
- package/dist/movement/MovementStrategy.d.ts +39 -0
- package/dist/movement/index.d.ts +12 -0
- package/dist/movement/strategies/CompositeMovement.d.ts +76 -0
- package/dist/movement/strategies/Dash.d.ts +52 -0
- package/dist/movement/strategies/IceMovement.d.ts +87 -0
- package/dist/movement/strategies/Knockback.d.ts +50 -0
- package/dist/movement/strategies/LinearMove.d.ts +43 -0
- package/dist/movement/strategies/LinearRepulsion.d.ts +55 -0
- package/dist/movement/strategies/Oscillate.d.ts +60 -0
- package/dist/movement/strategies/PathFollow.d.ts +78 -0
- package/dist/movement/strategies/ProjectileMovement.d.ts +138 -0
- package/dist/movement/strategies/SeekAvoid.d.ts +27 -0
- package/dist/rooms/Map.d.ts +109 -0
- package/dist/services/updateMap.d.ts +7 -0
- package/package.json +17 -17
- package/src/Physic.ts +1644 -0
- package/src/Player.ts +262 -26
- package/src/{gui/PrebuiltGui.ts → PrebuiltGui.ts} +1 -1
- package/src/Utils.ts +184 -123
- package/src/database/Item.ts +19 -0
- package/src/database/index.ts +1 -0
- package/src/index.ts +9 -25
- package/src/modules.ts +230 -0
- package/src/movement/MovementManager.ts +142 -0
- package/src/movement/MovementStrategy.ts +42 -0
- package/src/movement/index.ts +15 -0
- package/src/movement/strategies/CompositeMovement.ts +173 -0
- package/src/movement/strategies/Dash.ts +82 -0
- package/src/movement/strategies/IceMovement.ts +158 -0
- package/src/movement/strategies/Knockback.ts +81 -0
- package/src/movement/strategies/LinearMove.ts +58 -0
- package/src/movement/strategies/LinearRepulsion.ts +128 -0
- package/src/movement/strategies/Oscillate.ts +144 -0
- package/src/movement/strategies/PathFollow.ts +156 -0
- package/src/movement/strategies/ProjectileMovement.ts +322 -0
- package/src/movement/strategies/SeekAvoid.ts +123 -0
- package/src/rooms/Map.ts +272 -0
- package/src/services/updateMap.ts +9 -0
- package/tests/physic.spec.ts +454 -0
- package/tsconfig.json +8 -3
- package/vite.config.ts +21 -0
- package/CHANGELOG.md +0 -152
- package/LICENSE +0 -19
- package/browser/manifest.json +0 -7
- package/browser/rpg.common.js +0 -11357
- package/browser/rpg.common.umd.cjs +0 -11358
- package/lib/AbstractObject.d.ts +0 -322
- package/lib/AbstractObject.js +0 -872
- package/lib/AbstractObject.js.map +0 -1
- package/lib/Color.d.ts +0 -1
- package/lib/Color.js +0 -25
- package/lib/Color.js.map +0 -1
- package/lib/DefaultInput.d.ts +0 -2
- package/lib/DefaultInput.js +0 -26
- package/lib/DefaultInput.js.map +0 -1
- package/lib/Event.d.ts +0 -3
- package/lib/Event.js +0 -4
- package/lib/Event.js.map +0 -1
- package/lib/EventEmitter.d.ts +0 -10
- package/lib/EventEmitter.js +0 -61
- package/lib/EventEmitter.js.map +0 -1
- package/lib/Game.d.ts +0 -28
- package/lib/Game.js +0 -127
- package/lib/Game.js.map +0 -1
- package/lib/Hit.d.ts +0 -16
- package/lib/Hit.js +0 -65
- package/lib/Hit.js.map +0 -1
- package/lib/Inject.d.ts +0 -9
- package/lib/Inject.js +0 -17
- package/lib/Inject.js.map +0 -1
- package/lib/Logger.d.ts +0 -2
- package/lib/Logger.js +0 -7
- package/lib/Logger.js.map +0 -1
- package/lib/Map.d.ts +0 -174
- package/lib/Map.js +0 -263
- package/lib/Map.js.map +0 -1
- package/lib/Module.d.ts +0 -16
- package/lib/Module.js +0 -139
- package/lib/Module.js.map +0 -1
- package/lib/Player.d.ts +0 -26
- package/lib/Player.js +0 -19
- package/lib/Player.js.map +0 -1
- package/lib/Plugin.d.ts +0 -67
- package/lib/Plugin.js +0 -92
- package/lib/Plugin.js.map +0 -1
- package/lib/Scheduler.d.ts +0 -26
- package/lib/Scheduler.js +0 -90
- package/lib/Scheduler.js.map +0 -1
- package/lib/Shape.d.ts +0 -127
- package/lib/Shape.js +0 -261
- package/lib/Shape.js.map +0 -1
- package/lib/Utils.js +0 -181
- package/lib/Utils.js.map +0 -1
- package/lib/Vector2d.d.ts +0 -20
- package/lib/Vector2d.js +0 -63
- package/lib/Vector2d.js.map +0 -1
- package/lib/VirtualGrid.d.ts +0 -26
- package/lib/VirtualGrid.js +0 -68
- package/lib/VirtualGrid.js.map +0 -1
- package/lib/Worker.d.ts +0 -7
- package/lib/Worker.js +0 -13
- package/lib/Worker.js.map +0 -1
- package/lib/WorldMaps.d.ts +0 -105
- package/lib/WorldMaps.js +0 -184
- package/lib/WorldMaps.js.map +0 -1
- package/lib/gui/PrebuiltGui.js +0 -29
- package/lib/gui/PrebuiltGui.js.map +0 -1
- package/lib/index.d.ts +0 -25
- package/lib/index.js +0 -26
- package/lib/index.js.map +0 -1
- package/lib/transports/io.d.ts +0 -22
- package/lib/transports/io.js +0 -82
- package/lib/transports/io.js.map +0 -1
- package/lib/workers/move.d.ts +0 -1
- package/lib/workers/move.js +0 -57
- package/lib/workers/move.js.map +0 -1
- package/rpg.toml +0 -11
- package/src/AbstractObject.ts +0 -973
- package/src/Color.ts +0 -29
- package/src/DefaultInput.ts +0 -26
- package/src/Event.ts +0 -3
- package/src/EventEmitter.ts +0 -65
- package/src/Game.ts +0 -159
- package/src/Hit.ts +0 -70
- package/src/Inject.ts +0 -22
- package/src/Logger.ts +0 -7
- package/src/Map.ts +0 -335
- package/src/Module.ts +0 -144
- package/src/Plugin.ts +0 -100
- package/src/Scheduler.ts +0 -95
- package/src/Shape.ts +0 -302
- package/src/Vector2d.ts +0 -70
- package/src/VirtualGrid.ts +0 -78
- package/src/Worker.ts +0 -17
- package/src/WorldMaps.ts +0 -204
- package/src/transports/io.ts +0 -91
- package/src/workers/move.ts +0 -61
- /package/{lib/gui → dist}/PrebuiltGui.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isFunction.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Subscription.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/config.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/noop.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/errorContext.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Subscriber.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/symbol/observable.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/identity.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/pipe.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Observable.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/lift.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/ObjectUnsubscribedError.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Subject.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/BehaviorSubject.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isScheduler.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/args.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isPromise.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/symbol/iterator.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isIterable.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/observeOn.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleObservable.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/schedulePromise.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleReadableStreamLike.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/from.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/map.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/mapOneOrManyArgs.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/argsArgArrayOrObject.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/createObject.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/combineLatest.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/filter.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/scanInternals.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/reduce.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/toArray.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/finalize.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/share.js","../../../node_modules/.pnpm/@signe+reactive@2.3.1/node_modules/@signe/reactive/dist/index.js","../../../node_modules/.pnpm/@signe+sync@2.3.1/node_modules/@signe/sync/dist/chunk-7QVYU63E.js","../../../node_modules/.pnpm/@signe+sync@2.3.1/node_modules/@signe/sync/dist/index.js","../src/database/Item.ts","../src/Player.ts","../../../node_modules/.pnpm/matter-js@0.20.0/node_modules/matter-js/build/matter.js","../src/Physic.ts","../src/movement/MovementManager.ts","../src/movement/strategies/LinearMove.ts","../src/movement/strategies/Dash.ts","../src/movement/strategies/Knockback.ts","../src/movement/strategies/PathFollow.ts","../src/movement/strategies/Oscillate.ts","../src/movement/strategies/CompositeMovement.ts","../src/movement/strategies/SeekAvoid.ts","../src/movement/strategies/LinearRepulsion.ts","../src/movement/strategies/IceMovement.ts","../src/movement/strategies/ProjectileMovement.ts","../src/rooms/Map.ts","../src/modules.ts","../src/services/updateMap.ts","../src/Utils.ts","../src/PrebuiltGui.ts"],"sourcesContent":["/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","export function isFunction(value) {\n return typeof value === 'function';\n}\n//# sourceMappingURL=isFunction.js.map","export function createErrorClass(createImpl) {\n var _super = function (instance) {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n var ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n//# sourceMappingURL=createErrorClass.js.map","import { createErrorClass } from './createErrorClass';\nexport var UnsubscriptionError = createErrorClass(function (_super) {\n return function UnsubscriptionErrorImpl(errors) {\n _super(this);\n this.message = errors\n ? errors.length + \" errors occurred during unsubscription:\\n\" + errors.map(function (err, i) { return i + 1 + \") \" + err.toString(); }).join('\\n ')\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n };\n});\n//# sourceMappingURL=UnsubscriptionError.js.map","export function arrRemove(arr, item) {\n if (arr) {\n var index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n//# sourceMappingURL=arrRemove.js.map","import { __read, __spreadArray, __values } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { arrRemove } from './util/arrRemove';\nvar Subscription = (function () {\n function Subscription(initialTeardown) {\n this.initialTeardown = initialTeardown;\n this.closed = false;\n this._parentage = null;\n this._finalizers = null;\n }\n Subscription.prototype.unsubscribe = function () {\n var e_1, _a, e_2, _b;\n var errors;\n if (!this.closed) {\n this.closed = true;\n var _parentage = this._parentage;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n try {\n for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) {\n var parent_1 = _parentage_1_1.value;\n parent_1.remove(this);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n else {\n _parentage.remove(this);\n }\n }\n var initialFinalizer = this.initialTeardown;\n if (isFunction(initialFinalizer)) {\n try {\n initialFinalizer();\n }\n catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n var _finalizers = this._finalizers;\n if (_finalizers) {\n this._finalizers = null;\n try {\n for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) {\n var finalizer = _finalizers_1_1.value;\n try {\n execFinalizer(finalizer);\n }\n catch (err) {\n errors = errors !== null && errors !== void 0 ? errors : [];\n if (err instanceof UnsubscriptionError) {\n errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors));\n }\n else {\n errors.push(err);\n }\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n };\n Subscription.prototype.add = function (teardown) {\n var _a;\n if (teardown && teardown !== this) {\n if (this.closed) {\n execFinalizer(teardown);\n }\n else {\n if (teardown instanceof Subscription) {\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);\n }\n }\n };\n Subscription.prototype._hasParent = function (parent) {\n var _parentage = this._parentage;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n };\n Subscription.prototype._addParent = function (parent) {\n var _parentage = this._parentage;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n };\n Subscription.prototype._removeParent = function (parent) {\n var _parentage = this._parentage;\n if (_parentage === parent) {\n this._parentage = null;\n }\n else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n };\n Subscription.prototype.remove = function (teardown) {\n var _finalizers = this._finalizers;\n _finalizers && arrRemove(_finalizers, teardown);\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n };\n Subscription.EMPTY = (function () {\n var empty = new Subscription();\n empty.closed = true;\n return empty;\n })();\n return Subscription;\n}());\nexport { Subscription };\nexport var EMPTY_SUBSCRIPTION = Subscription.EMPTY;\nexport function isSubscription(value) {\n return (value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe)));\n}\nfunction execFinalizer(finalizer) {\n if (isFunction(finalizer)) {\n finalizer();\n }\n else {\n finalizer.unsubscribe();\n }\n}\n//# sourceMappingURL=Subscription.js.map","export var config = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n//# sourceMappingURL=config.js.map","import { __read, __spreadArray } from \"tslib\";\nexport var timeoutProvider = {\n setTimeout: function (handler, timeout) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var delegate = timeoutProvider.delegate;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {\n return delegate.setTimeout.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n }\n return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n },\n clearTimeout: function (handle) {\n var delegate = timeoutProvider.delegate;\n return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);\n },\n delegate: undefined,\n};\n//# sourceMappingURL=timeoutProvider.js.map","import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\nexport function reportUnhandledError(err) {\n timeoutProvider.setTimeout(function () {\n var onUnhandledError = config.onUnhandledError;\n if (onUnhandledError) {\n onUnhandledError(err);\n }\n else {\n throw err;\n }\n });\n}\n//# sourceMappingURL=reportUnhandledError.js.map","export function noop() { }\n//# sourceMappingURL=noop.js.map","import { config } from '../config';\nvar context = null;\nexport function errorContext(cb) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n var isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n var _a = context, errorThrown = _a.errorThrown, error = _a.error;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n }\n else {\n cb();\n }\n}\nexport function captureError(err) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n//# sourceMappingURL=errorContext.js.map","import { __extends } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\nvar Subscriber = (function (_super) {\n __extends(Subscriber, _super);\n function Subscriber(destination) {\n var _this = _super.call(this) || this;\n _this.isStopped = false;\n if (destination) {\n _this.destination = destination;\n if (isSubscription(destination)) {\n destination.add(_this);\n }\n }\n else {\n _this.destination = EMPTY_OBSERVER;\n }\n return _this;\n }\n Subscriber.create = function (next, error, complete) {\n return new SafeSubscriber(next, error, complete);\n };\n Subscriber.prototype.next = function (value) {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n }\n else {\n this._next(value);\n }\n };\n Subscriber.prototype.error = function (err) {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n }\n else {\n this.isStopped = true;\n this._error(err);\n }\n };\n Subscriber.prototype.complete = function () {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n }\n else {\n this.isStopped = true;\n this._complete();\n }\n };\n Subscriber.prototype.unsubscribe = function () {\n if (!this.closed) {\n this.isStopped = true;\n _super.prototype.unsubscribe.call(this);\n this.destination = null;\n }\n };\n Subscriber.prototype._next = function (value) {\n this.destination.next(value);\n };\n Subscriber.prototype._error = function (err) {\n try {\n this.destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n };\n Subscriber.prototype._complete = function () {\n try {\n this.destination.complete();\n }\n finally {\n this.unsubscribe();\n }\n };\n return Subscriber;\n}(Subscription));\nexport { Subscriber };\nvar _bind = Function.prototype.bind;\nfunction bind(fn, thisArg) {\n return _bind.call(fn, thisArg);\n}\nvar ConsumerObserver = (function () {\n function ConsumerObserver(partialObserver) {\n this.partialObserver = partialObserver;\n }\n ConsumerObserver.prototype.next = function (value) {\n var partialObserver = this.partialObserver;\n if (partialObserver.next) {\n try {\n partialObserver.next(value);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n ConsumerObserver.prototype.error = function (err) {\n var partialObserver = this.partialObserver;\n if (partialObserver.error) {\n try {\n partialObserver.error(err);\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n else {\n handleUnhandledError(err);\n }\n };\n ConsumerObserver.prototype.complete = function () {\n var partialObserver = this.partialObserver;\n if (partialObserver.complete) {\n try {\n partialObserver.complete();\n }\n catch (error) {\n handleUnhandledError(error);\n }\n }\n };\n return ConsumerObserver;\n}());\nvar SafeSubscriber = (function (_super) {\n __extends(SafeSubscriber, _super);\n function SafeSubscriber(observerOrNext, error, complete) {\n var _this = _super.call(this) || this;\n var partialObserver;\n if (isFunction(observerOrNext) || !observerOrNext) {\n partialObserver = {\n next: (observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : undefined),\n error: error !== null && error !== void 0 ? error : undefined,\n complete: complete !== null && complete !== void 0 ? complete : undefined,\n };\n }\n else {\n var context_1;\n if (_this && config.useDeprecatedNextContext) {\n context_1 = Object.create(observerOrNext);\n context_1.unsubscribe = function () { return _this.unsubscribe(); };\n partialObserver = {\n next: observerOrNext.next && bind(observerOrNext.next, context_1),\n error: observerOrNext.error && bind(observerOrNext.error, context_1),\n complete: observerOrNext.complete && bind(observerOrNext.complete, context_1),\n };\n }\n else {\n partialObserver = observerOrNext;\n }\n }\n _this.destination = new ConsumerObserver(partialObserver);\n return _this;\n }\n return SafeSubscriber;\n}(Subscriber));\nexport { SafeSubscriber };\nfunction handleUnhandledError(error) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(error);\n }\n else {\n reportUnhandledError(error);\n }\n}\nfunction defaultErrorHandler(err) {\n throw err;\n}\nfunction handleStoppedNotification(notification, subscriber) {\n var onStoppedNotification = config.onStoppedNotification;\n onStoppedNotification && timeoutProvider.setTimeout(function () { return onStoppedNotification(notification, subscriber); });\n}\nexport var EMPTY_OBSERVER = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n//# sourceMappingURL=Subscriber.js.map","export var observable = (function () { return (typeof Symbol === 'function' && Symbol.observable) || '@@observable'; })();\n//# sourceMappingURL=observable.js.map","export function identity(x) {\n return x;\n}\n//# sourceMappingURL=identity.js.map","import { identity } from './identity';\nexport function pipe() {\n var fns = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fns[_i] = arguments[_i];\n }\n return pipeFromArray(fns);\n}\nexport function pipeFromArray(fns) {\n if (fns.length === 0) {\n return identity;\n }\n if (fns.length === 1) {\n return fns[0];\n }\n return function piped(input) {\n return fns.reduce(function (prev, fn) { return fn(prev); }, input);\n };\n}\n//# sourceMappingURL=pipe.js.map","import { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription } from './Subscription';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\nvar Observable = (function () {\n function Observable(subscribe) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n Observable.prototype.lift = function (operator) {\n var observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n };\n Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n var _this = this;\n var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n errorContext(function () {\n var _a = _this, operator = _a.operator, source = _a.source;\n subscriber.add(operator\n ?\n operator.call(subscriber, source)\n : source\n ?\n _this._subscribe(subscriber)\n :\n _this._trySubscribe(subscriber));\n });\n return subscriber;\n };\n Observable.prototype._trySubscribe = function (sink) {\n try {\n return this._subscribe(sink);\n }\n catch (err) {\n sink.error(err);\n }\n };\n Observable.prototype.forEach = function (next, promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var subscriber = new SafeSubscriber({\n next: function (value) {\n try {\n next(value);\n }\n catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n _this.subscribe(subscriber);\n });\n };\n Observable.prototype._subscribe = function (subscriber) {\n var _a;\n return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);\n };\n Observable.prototype[Symbol_observable] = function () {\n return this;\n };\n Observable.prototype.pipe = function () {\n var operations = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n operations[_i] = arguments[_i];\n }\n return pipeFromArray(operations)(this);\n };\n Observable.prototype.toPromise = function (promiseCtor) {\n var _this = this;\n promiseCtor = getPromiseCtor(promiseCtor);\n return new promiseCtor(function (resolve, reject) {\n var value;\n _this.subscribe(function (x) { return (value = x); }, function (err) { return reject(err); }, function () { return resolve(value); });\n });\n };\n Observable.create = function (subscribe) {\n return new Observable(subscribe);\n };\n return Observable;\n}());\nexport { Observable };\nfunction getPromiseCtor(promiseCtor) {\n var _a;\n return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;\n}\nfunction isObserver(value) {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\nfunction isSubscriber(value) {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n//# sourceMappingURL=Observable.js.map","import { isFunction } from './isFunction';\nexport function hasLift(source) {\n return isFunction(source === null || source === void 0 ? void 0 : source.lift);\n}\nexport function operate(init) {\n return function (source) {\n if (hasLift(source)) {\n return source.lift(function (liftedSource) {\n try {\n return init(liftedSource, this);\n }\n catch (err) {\n this.error(err);\n }\n });\n }\n throw new TypeError('Unable to lift unknown Observable type');\n };\n}\n//# sourceMappingURL=lift.js.map","import { __extends } from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {\n return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\nvar OperatorSubscriber = (function (_super) {\n __extends(OperatorSubscriber, _super);\n function OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {\n var _this = _super.call(this, destination) || this;\n _this.onFinalize = onFinalize;\n _this.shouldUnsubscribe = shouldUnsubscribe;\n _this._next = onNext\n ? function (value) {\n try {\n onNext(value);\n }\n catch (err) {\n destination.error(err);\n }\n }\n : _super.prototype._next;\n _this._error = onError\n ? function (err) {\n try {\n onError(err);\n }\n catch (err) {\n destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n : _super.prototype._error;\n _this._complete = onComplete\n ? function () {\n try {\n onComplete();\n }\n catch (err) {\n destination.error(err);\n }\n finally {\n this.unsubscribe();\n }\n }\n : _super.prototype._complete;\n return _this;\n }\n OperatorSubscriber.prototype.unsubscribe = function () {\n var _a;\n if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n var closed_1 = this.closed;\n _super.prototype.unsubscribe.call(this);\n !closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this));\n }\n };\n return OperatorSubscriber;\n}(Subscriber));\nexport { OperatorSubscriber };\n//# sourceMappingURL=OperatorSubscriber.js.map","import { createErrorClass } from './createErrorClass';\nexport var ObjectUnsubscribedError = createErrorClass(function (_super) {\n return function ObjectUnsubscribedErrorImpl() {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n };\n});\n//# sourceMappingURL=ObjectUnsubscribedError.js.map","import { __extends, __values } from \"tslib\";\nimport { Observable } from './Observable';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\nvar Subject = (function (_super) {\n __extends(Subject, _super);\n function Subject() {\n var _this = _super.call(this) || this;\n _this.closed = false;\n _this.currentObservers = null;\n _this.observers = [];\n _this.isStopped = false;\n _this.hasError = false;\n _this.thrownError = null;\n return _this;\n }\n Subject.prototype.lift = function (operator) {\n var subject = new AnonymousSubject(this, this);\n subject.operator = operator;\n return subject;\n };\n Subject.prototype._throwIfClosed = function () {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n };\n Subject.prototype.next = function (value) {\n var _this = this;\n errorContext(function () {\n var e_1, _a;\n _this._throwIfClosed();\n if (!_this.isStopped) {\n if (!_this.currentObservers) {\n _this.currentObservers = Array.from(_this.observers);\n }\n try {\n for (var _b = __values(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) {\n var observer = _c.value;\n observer.next(value);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n });\n };\n Subject.prototype.error = function (err) {\n var _this = this;\n errorContext(function () {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.hasError = _this.isStopped = true;\n _this.thrownError = err;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().error(err);\n }\n }\n });\n };\n Subject.prototype.complete = function () {\n var _this = this;\n errorContext(function () {\n _this._throwIfClosed();\n if (!_this.isStopped) {\n _this.isStopped = true;\n var observers = _this.observers;\n while (observers.length) {\n observers.shift().complete();\n }\n }\n });\n };\n Subject.prototype.unsubscribe = function () {\n this.isStopped = this.closed = true;\n this.observers = this.currentObservers = null;\n };\n Object.defineProperty(Subject.prototype, \"observed\", {\n get: function () {\n var _a;\n return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;\n },\n enumerable: false,\n configurable: true\n });\n Subject.prototype._trySubscribe = function (subscriber) {\n this._throwIfClosed();\n return _super.prototype._trySubscribe.call(this, subscriber);\n };\n Subject.prototype._subscribe = function (subscriber) {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n };\n Subject.prototype._innerSubscribe = function (subscriber) {\n var _this = this;\n var _a = this, hasError = _a.hasError, isStopped = _a.isStopped, observers = _a.observers;\n if (hasError || isStopped) {\n return EMPTY_SUBSCRIPTION;\n }\n this.currentObservers = null;\n observers.push(subscriber);\n return new Subscription(function () {\n _this.currentObservers = null;\n arrRemove(observers, subscriber);\n });\n };\n Subject.prototype._checkFinalizedStatuses = function (subscriber) {\n var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, isStopped = _a.isStopped;\n if (hasError) {\n subscriber.error(thrownError);\n }\n else if (isStopped) {\n subscriber.complete();\n }\n };\n Subject.prototype.asObservable = function () {\n var observable = new Observable();\n observable.source = this;\n return observable;\n };\n Subject.create = function (destination, source) {\n return new AnonymousSubject(destination, source);\n };\n return Subject;\n}(Observable));\nexport { Subject };\nvar AnonymousSubject = (function (_super) {\n __extends(AnonymousSubject, _super);\n function AnonymousSubject(destination, source) {\n var _this = _super.call(this) || this;\n _this.destination = destination;\n _this.source = source;\n return _this;\n }\n AnonymousSubject.prototype.next = function (value) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);\n };\n AnonymousSubject.prototype.error = function (err) {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);\n };\n AnonymousSubject.prototype.complete = function () {\n var _a, _b;\n (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n AnonymousSubject.prototype._subscribe = function (subscriber) {\n var _a, _b;\n return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION;\n };\n return AnonymousSubject;\n}(Subject));\nexport { AnonymousSubject };\n//# sourceMappingURL=Subject.js.map","import { __extends } from \"tslib\";\nimport { Subject } from './Subject';\nvar BehaviorSubject = (function (_super) {\n __extends(BehaviorSubject, _super);\n function BehaviorSubject(_value) {\n var _this = _super.call(this) || this;\n _this._value = _value;\n return _this;\n }\n Object.defineProperty(BehaviorSubject.prototype, \"value\", {\n get: function () {\n return this.getValue();\n },\n enumerable: false,\n configurable: true\n });\n BehaviorSubject.prototype._subscribe = function (subscriber) {\n var subscription = _super.prototype._subscribe.call(this, subscriber);\n !subscription.closed && subscriber.next(this._value);\n return subscription;\n };\n BehaviorSubject.prototype.getValue = function () {\n var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, _value = _a._value;\n if (hasError) {\n throw thrownError;\n }\n this._throwIfClosed();\n return _value;\n };\n BehaviorSubject.prototype.next = function (value) {\n _super.prototype.next.call(this, (this._value = value));\n };\n return BehaviorSubject;\n}(Subject));\nexport { BehaviorSubject };\n//# sourceMappingURL=BehaviorSubject.js.map","import { isFunction } from './isFunction';\nexport function isScheduler(value) {\n return value && isFunction(value.schedule);\n}\n//# sourceMappingURL=isScheduler.js.map","import { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\nfunction last(arr) {\n return arr[arr.length - 1];\n}\nexport function popResultSelector(args) {\n return isFunction(last(args)) ? args.pop() : undefined;\n}\nexport function popScheduler(args) {\n return isScheduler(last(args)) ? args.pop() : undefined;\n}\nexport function popNumber(args, defaultValue) {\n return typeof last(args) === 'number' ? args.pop() : defaultValue;\n}\n//# sourceMappingURL=args.js.map","export var isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; });\n//# sourceMappingURL=isArrayLike.js.map","import { isFunction } from \"./isFunction\";\nexport function isPromise(value) {\n return isFunction(value === null || value === void 0 ? void 0 : value.then);\n}\n//# sourceMappingURL=isPromise.js.map","import { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\nexport function isInteropObservable(input) {\n return isFunction(input[Symbol_observable]);\n}\n//# sourceMappingURL=isInteropObservable.js.map","import { isFunction } from './isFunction';\nexport function isAsyncIterable(obj) {\n return Symbol.asyncIterator && isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]);\n}\n//# sourceMappingURL=isAsyncIterable.js.map","export function createInvalidObservableTypeError(input) {\n return new TypeError(\"You provided \" + (input !== null && typeof input === 'object' ? 'an invalid object' : \"'\" + input + \"'\") + \" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.\");\n}\n//# sourceMappingURL=throwUnobservableError.js.map","export function getSymbolIterator() {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator';\n }\n return Symbol.iterator;\n}\nexport var iterator = getSymbolIterator();\n//# sourceMappingURL=iterator.js.map","import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\nexport function isIterable(input) {\n return isFunction(input === null || input === void 0 ? void 0 : input[Symbol_iterator]);\n}\n//# sourceMappingURL=isIterable.js.map","import { __asyncGenerator, __await, __generator } from \"tslib\";\nimport { isFunction } from './isFunction';\nexport function readableStreamLikeToAsyncGenerator(readableStream) {\n return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() {\n var reader, _a, value, done;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n reader = readableStream.getReader();\n _b.label = 1;\n case 1:\n _b.trys.push([1, , 9, 10]);\n _b.label = 2;\n case 2:\n if (!true) return [3, 8];\n return [4, __await(reader.read())];\n case 3:\n _a = _b.sent(), value = _a.value, done = _a.done;\n if (!done) return [3, 5];\n return [4, __await(void 0)];\n case 4: return [2, _b.sent()];\n case 5: return [4, __await(value)];\n case 6: return [4, _b.sent()];\n case 7:\n _b.sent();\n return [3, 2];\n case 8: return [3, 10];\n case 9:\n reader.releaseLock();\n return [7];\n case 10: return [2];\n }\n });\n });\n}\nexport function isReadableStreamLike(obj) {\n return isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader);\n}\n//# sourceMappingURL=isReadableStreamLike.js.map","import { __asyncValues, __awaiter, __generator, __values } from \"tslib\";\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isPromise } from '../util/isPromise';\nimport { Observable } from '../Observable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isIterable } from '../util/isIterable';\nimport { isReadableStreamLike, readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nimport { isFunction } from '../util/isFunction';\nimport { reportUnhandledError } from '../util/reportUnhandledError';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport function innerFrom(input) {\n if (input instanceof Observable) {\n return input;\n }\n if (input != null) {\n if (isInteropObservable(input)) {\n return fromInteropObservable(input);\n }\n if (isArrayLike(input)) {\n return fromArrayLike(input);\n }\n if (isPromise(input)) {\n return fromPromise(input);\n }\n if (isAsyncIterable(input)) {\n return fromAsyncIterable(input);\n }\n if (isIterable(input)) {\n return fromIterable(input);\n }\n if (isReadableStreamLike(input)) {\n return fromReadableStreamLike(input);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\nexport function fromInteropObservable(obj) {\n return new Observable(function (subscriber) {\n var obs = obj[Symbol_observable]();\n if (isFunction(obs.subscribe)) {\n return obs.subscribe(subscriber);\n }\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n });\n}\nexport function fromArrayLike(array) {\n return new Observable(function (subscriber) {\n for (var i = 0; i < array.length && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n });\n}\nexport function fromPromise(promise) {\n return new Observable(function (subscriber) {\n promise\n .then(function (value) {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n }, function (err) { return subscriber.error(err); })\n .then(null, reportUnhandledError);\n });\n}\nexport function fromIterable(iterable) {\n return new Observable(function (subscriber) {\n var e_1, _a;\n try {\n for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) {\n var value = iterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return)) _a.call(iterable_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n subscriber.complete();\n });\n}\nexport function fromAsyncIterable(asyncIterable) {\n return new Observable(function (subscriber) {\n process(asyncIterable, subscriber).catch(function (err) { return subscriber.error(err); });\n });\n}\nexport function fromReadableStreamLike(readableStream) {\n return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));\n}\nfunction process(asyncIterable, subscriber) {\n var asyncIterable_1, asyncIterable_1_1;\n var e_2, _a;\n return __awaiter(this, void 0, void 0, function () {\n var value, e_2_1;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 5, 6, 11]);\n asyncIterable_1 = __asyncValues(asyncIterable);\n _b.label = 1;\n case 1: return [4, asyncIterable_1.next()];\n case 2:\n if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done)) return [3, 4];\n value = asyncIterable_1_1.value;\n subscriber.next(value);\n if (subscriber.closed) {\n return [2];\n }\n _b.label = 3;\n case 3: return [3, 1];\n case 4: return [3, 11];\n case 5:\n e_2_1 = _b.sent();\n e_2 = { error: e_2_1 };\n return [3, 11];\n case 6:\n _b.trys.push([6, , 9, 10]);\n if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return))) return [3, 8];\n return [4, _a.call(asyncIterable_1)];\n case 7:\n _b.sent();\n _b.label = 8;\n case 8: return [3, 10];\n case 9:\n if (e_2) throw e_2.error;\n return [7];\n case 10: return [7];\n case 11:\n subscriber.complete();\n return [2];\n }\n });\n });\n}\n//# sourceMappingURL=innerFrom.js.map","export function executeSchedule(parentSubscription, scheduler, work, delay, repeat) {\n if (delay === void 0) { delay = 0; }\n if (repeat === void 0) { repeat = false; }\n var scheduleSubscription = scheduler.schedule(function () {\n work();\n if (repeat) {\n parentSubscription.add(this.schedule(null, delay));\n }\n else {\n this.unsubscribe();\n }\n }, delay);\n parentSubscription.add(scheduleSubscription);\n if (!repeat) {\n return scheduleSubscription;\n }\n}\n//# sourceMappingURL=executeSchedule.js.map","import { executeSchedule } from '../util/executeSchedule';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function observeOn(scheduler, delay) {\n if (delay === void 0) { delay = 0; }\n return operate(function (source, subscriber) {\n source.subscribe(createOperatorSubscriber(subscriber, function (value) { return executeSchedule(subscriber, scheduler, function () { return subscriber.next(value); }, delay); }, function () { return executeSchedule(subscriber, scheduler, function () { return subscriber.complete(); }, delay); }, function (err) { return executeSchedule(subscriber, scheduler, function () { return subscriber.error(err); }, delay); }));\n });\n}\n//# sourceMappingURL=observeOn.js.map","import { operate } from '../util/lift';\nexport function subscribeOn(scheduler, delay) {\n if (delay === void 0) { delay = 0; }\n return operate(function (source, subscriber) {\n subscriber.add(scheduler.schedule(function () { return source.subscribe(subscriber); }, delay));\n });\n}\n//# sourceMappingURL=subscribeOn.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function scheduleObservable(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n//# sourceMappingURL=scheduleObservable.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function schedulePromise(input, scheduler) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n//# sourceMappingURL=schedulePromise.js.map","import { Observable } from '../Observable';\nexport function scheduleArray(input, scheduler) {\n return new Observable(function (subscriber) {\n var i = 0;\n return scheduler.schedule(function () {\n if (i === input.length) {\n subscriber.complete();\n }\n else {\n subscriber.next(input[i++]);\n if (!subscriber.closed) {\n this.schedule();\n }\n }\n });\n });\n}\n//# sourceMappingURL=scheduleArray.js.map","import { Observable } from '../Observable';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from '../util/isFunction';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleIterable(input, scheduler) {\n return new Observable(function (subscriber) {\n var iterator;\n executeSchedule(subscriber, scheduler, function () {\n iterator = input[Symbol_iterator]();\n executeSchedule(subscriber, scheduler, function () {\n var _a;\n var value;\n var done;\n try {\n (_a = iterator.next(), value = _a.value, done = _a.done);\n }\n catch (err) {\n subscriber.error(err);\n return;\n }\n if (done) {\n subscriber.complete();\n }\n else {\n subscriber.next(value);\n }\n }, 0, true);\n });\n return function () { return isFunction(iterator === null || iterator === void 0 ? void 0 : iterator.return) && iterator.return(); };\n });\n}\n//# sourceMappingURL=scheduleIterable.js.map","import { Observable } from '../Observable';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleAsyncIterable(input, scheduler) {\n if (!input) {\n throw new Error('Iterable cannot be null');\n }\n return new Observable(function (subscriber) {\n executeSchedule(subscriber, scheduler, function () {\n var iterator = input[Symbol.asyncIterator]();\n executeSchedule(subscriber, scheduler, function () {\n iterator.next().then(function (result) {\n if (result.done) {\n subscriber.complete();\n }\n else {\n subscriber.next(result.value);\n }\n });\n }, 0, true);\n });\n });\n}\n//# sourceMappingURL=scheduleAsyncIterable.js.map","import { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nexport function scheduleReadableStreamLike(input, scheduler) {\n return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);\n}\n//# sourceMappingURL=scheduleReadableStreamLike.js.map","import { scheduleObservable } from './scheduleObservable';\nimport { schedulePromise } from './schedulePromise';\nimport { scheduleArray } from './scheduleArray';\nimport { scheduleIterable } from './scheduleIterable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isPromise } from '../util/isPromise';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isIterable } from '../util/isIterable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isReadableStreamLike } from '../util/isReadableStreamLike';\nimport { scheduleReadableStreamLike } from './scheduleReadableStreamLike';\nexport function scheduled(input, scheduler) {\n if (input != null) {\n if (isInteropObservable(input)) {\n return scheduleObservable(input, scheduler);\n }\n if (isArrayLike(input)) {\n return scheduleArray(input, scheduler);\n }\n if (isPromise(input)) {\n return schedulePromise(input, scheduler);\n }\n if (isAsyncIterable(input)) {\n return scheduleAsyncIterable(input, scheduler);\n }\n if (isIterable(input)) {\n return scheduleIterable(input, scheduler);\n }\n if (isReadableStreamLike(input)) {\n return scheduleReadableStreamLike(input, scheduler);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\n//# sourceMappingURL=scheduled.js.map","import { scheduled } from '../scheduled/scheduled';\nimport { innerFrom } from './innerFrom';\nexport function from(input, scheduler) {\n return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n//# sourceMappingURL=from.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function map(project, thisArg) {\n return operate(function (source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n subscriber.next(project.call(thisArg, value, index++));\n }));\n });\n}\n//# sourceMappingURL=map.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { map } from \"../operators/map\";\nvar isArray = Array.isArray;\nfunction callOrApply(fn, args) {\n return isArray(args) ? fn.apply(void 0, __spreadArray([], __read(args))) : fn(args);\n}\nexport function mapOneOrManyArgs(fn) {\n return map(function (args) { return callOrApply(fn, args); });\n}\n//# sourceMappingURL=mapOneOrManyArgs.js.map","var isArray = Array.isArray;\nvar getPrototypeOf = Object.getPrototypeOf, objectProto = Object.prototype, getKeys = Object.keys;\nexport function argsArgArrayOrObject(args) {\n if (args.length === 1) {\n var first_1 = args[0];\n if (isArray(first_1)) {\n return { args: first_1, keys: null };\n }\n if (isPOJO(first_1)) {\n var keys = getKeys(first_1);\n return {\n args: keys.map(function (key) { return first_1[key]; }),\n keys: keys,\n };\n }\n }\n return { args: args, keys: null };\n}\nfunction isPOJO(obj) {\n return obj && typeof obj === 'object' && getPrototypeOf(obj) === objectProto;\n}\n//# sourceMappingURL=argsArgArrayOrObject.js.map","export function createObject(keys, values) {\n return keys.reduce(function (result, key, i) { return ((result[key] = values[i]), result); }, {});\n}\n//# sourceMappingURL=createObject.js.map","import { Observable } from '../Observable';\nimport { argsArgArrayOrObject } from '../util/argsArgArrayOrObject';\nimport { from } from './from';\nimport { identity } from '../util/identity';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { popResultSelector, popScheduler } from '../util/args';\nimport { createObject } from '../util/createObject';\nimport { createOperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function combineLatest() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var scheduler = popScheduler(args);\n var resultSelector = popResultSelector(args);\n var _a = argsArgArrayOrObject(args), observables = _a.args, keys = _a.keys;\n if (observables.length === 0) {\n return from([], scheduler);\n }\n var result = new Observable(combineLatestInit(observables, scheduler, keys\n ?\n function (values) { return createObject(keys, values); }\n :\n identity));\n return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result;\n}\nexport function combineLatestInit(observables, scheduler, valueTransform) {\n if (valueTransform === void 0) { valueTransform = identity; }\n return function (subscriber) {\n maybeSchedule(scheduler, function () {\n var length = observables.length;\n var values = new Array(length);\n var active = length;\n var remainingFirstValues = length;\n var _loop_1 = function (i) {\n maybeSchedule(scheduler, function () {\n var source = from(observables[i], scheduler);\n var hasFirstValue = false;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n values[i] = value;\n if (!hasFirstValue) {\n hasFirstValue = true;\n remainingFirstValues--;\n }\n if (!remainingFirstValues) {\n subscriber.next(valueTransform(values.slice()));\n }\n }, function () {\n if (!--active) {\n subscriber.complete();\n }\n }));\n }, subscriber);\n };\n for (var i = 0; i < length; i++) {\n _loop_1(i);\n }\n }, subscriber);\n };\n}\nfunction maybeSchedule(scheduler, execute, subscription) {\n if (scheduler) {\n executeSchedule(subscription, scheduler, execute);\n }\n else {\n execute();\n }\n}\n//# sourceMappingURL=combineLatest.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {\n var buffer = [];\n var active = 0;\n var index = 0;\n var isComplete = false;\n var checkComplete = function () {\n if (isComplete && !buffer.length && !active) {\n subscriber.complete();\n }\n };\n var outerNext = function (value) { return (active < concurrent ? doInnerSub(value) : buffer.push(value)); };\n var doInnerSub = function (value) {\n expand && subscriber.next(value);\n active++;\n var innerComplete = false;\n innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, function (innerValue) {\n onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);\n if (expand) {\n outerNext(innerValue);\n }\n else {\n subscriber.next(innerValue);\n }\n }, function () {\n innerComplete = true;\n }, undefined, function () {\n if (innerComplete) {\n try {\n active--;\n var _loop_1 = function () {\n var bufferedValue = buffer.shift();\n if (innerSubScheduler) {\n executeSchedule(subscriber, innerSubScheduler, function () { return doInnerSub(bufferedValue); });\n }\n else {\n doInnerSub(bufferedValue);\n }\n };\n while (buffer.length && active < concurrent) {\n _loop_1();\n }\n checkComplete();\n }\n catch (err) {\n subscriber.error(err);\n }\n }\n }));\n };\n source.subscribe(createOperatorSubscriber(subscriber, outerNext, function () {\n isComplete = true;\n checkComplete();\n }));\n return function () {\n additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();\n };\n}\n//# sourceMappingURL=mergeInternals.js.map","import { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\nimport { isFunction } from '../util/isFunction';\nexport function mergeMap(project, resultSelector, concurrent) {\n if (concurrent === void 0) { concurrent = Infinity; }\n if (isFunction(resultSelector)) {\n return mergeMap(function (a, i) { return map(function (b, ii) { return resultSelector(a, b, i, ii); })(innerFrom(project(a, i))); }, concurrent);\n }\n else if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n }\n return operate(function (source, subscriber) { return mergeInternals(source, subscriber, project, concurrent); });\n}\n//# sourceMappingURL=mergeMap.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function filter(predicate, thisArg) {\n return operate(function (source, subscriber) {\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) { return predicate.call(thisArg, value, index++) && subscriber.next(value); }));\n });\n}\n//# sourceMappingURL=filter.js.map","import { createOperatorSubscriber } from './OperatorSubscriber';\nexport function scanInternals(accumulator, seed, hasSeed, emitOnNext, emitBeforeComplete) {\n return function (source, subscriber) {\n var hasState = hasSeed;\n var state = seed;\n var index = 0;\n source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n var i = index++;\n state = hasState\n ?\n accumulator(state, value, i)\n :\n ((hasState = true), value);\n emitOnNext && subscriber.next(state);\n }, emitBeforeComplete &&\n (function () {\n hasState && subscriber.next(state);\n subscriber.complete();\n })));\n };\n}\n//# sourceMappingURL=scanInternals.js.map","import { scanInternals } from './scanInternals';\nimport { operate } from '../util/lift';\nexport function reduce(accumulator, seed) {\n return operate(scanInternals(accumulator, seed, arguments.length >= 2, false, true));\n}\n//# sourceMappingURL=reduce.js.map","import { reduce } from './reduce';\nimport { operate } from '../util/lift';\nvar arrReducer = function (arr, value) { return (arr.push(value), arr); };\nexport function toArray() {\n return operate(function (source, subscriber) {\n reduce(arrReducer, [])(source).subscribe(subscriber);\n });\n}\n//# sourceMappingURL=toArray.js.map","import { operate } from '../util/lift';\nexport function finalize(callback) {\n return operate(function (source, subscriber) {\n try {\n source.subscribe(subscriber);\n }\n finally {\n subscriber.add(callback);\n }\n });\n}\n//# sourceMappingURL=finalize.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { innerFrom } from '../observable/innerFrom';\nimport { Subject } from '../Subject';\nimport { SafeSubscriber } from '../Subscriber';\nimport { operate } from '../util/lift';\nexport function share(options) {\n if (options === void 0) { options = {}; }\n var _a = options.connector, connector = _a === void 0 ? function () { return new Subject(); } : _a, _b = options.resetOnError, resetOnError = _b === void 0 ? true : _b, _c = options.resetOnComplete, resetOnComplete = _c === void 0 ? true : _c, _d = options.resetOnRefCountZero, resetOnRefCountZero = _d === void 0 ? true : _d;\n return function (wrapperSource) {\n var connection;\n var resetConnection;\n var subject;\n var refCount = 0;\n var hasCompleted = false;\n var hasErrored = false;\n var cancelReset = function () {\n resetConnection === null || resetConnection === void 0 ? void 0 : resetConnection.unsubscribe();\n resetConnection = undefined;\n };\n var reset = function () {\n cancelReset();\n connection = subject = undefined;\n hasCompleted = hasErrored = false;\n };\n var resetAndUnsubscribe = function () {\n var conn = connection;\n reset();\n conn === null || conn === void 0 ? void 0 : conn.unsubscribe();\n };\n return operate(function (source, subscriber) {\n refCount++;\n if (!hasErrored && !hasCompleted) {\n cancelReset();\n }\n var dest = (subject = subject !== null && subject !== void 0 ? subject : connector());\n subscriber.add(function () {\n refCount--;\n if (refCount === 0 && !hasErrored && !hasCompleted) {\n resetConnection = handleReset(resetAndUnsubscribe, resetOnRefCountZero);\n }\n });\n dest.subscribe(subscriber);\n if (!connection &&\n refCount > 0) {\n connection = new SafeSubscriber({\n next: function (value) { return dest.next(value); },\n error: function (err) {\n hasErrored = true;\n cancelReset();\n resetConnection = handleReset(reset, resetOnError, err);\n dest.error(err);\n },\n complete: function () {\n hasCompleted = true;\n cancelReset();\n resetConnection = handleReset(reset, resetOnComplete);\n dest.complete();\n },\n });\n innerFrom(source).subscribe(connection);\n }\n })(wrapperSource);\n };\n}\nfunction handleReset(reset, on) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n if (on === true) {\n reset();\n return;\n }\n if (on === false) {\n return;\n }\n var onSubscriber = new SafeSubscriber({\n next: function () {\n onSubscriber.unsubscribe();\n reset();\n },\n });\n return innerFrom(on.apply(void 0, __spreadArray([], __read(args)))).subscribe(onSubscriber);\n}\n//# sourceMappingURL=share.js.map","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/ArraySubject.ts\nimport { BehaviorSubject } from \"rxjs\";\nvar ArraySubject = class extends BehaviorSubject {\n static {\n __name(this, \"ArraySubject\");\n }\n _items = [];\n constructor(items = []) {\n super({\n type: \"init\",\n items\n });\n this.createProxy(items);\n }\n createProxy(items) {\n this._items = new Proxy(items, {\n get: /* @__PURE__ */ __name((target, prop, receiver) => {\n const origMethod = target[prop];\n if (typeof origMethod === \"function\") {\n return (...args) => {\n let changeType = \"update\";\n let index = void 0;\n let isMutateFn = false;\n let itemsToEmit = [];\n let changeSplice = true;\n switch (prop) {\n case \"push\":\n index = target.length;\n changeType = \"add\";\n isMutateFn = true;\n break;\n case \"pop\":\n index = target.length - 1;\n changeType = \"remove\";\n isMutateFn = true;\n break;\n case \"unshift\":\n index = 0;\n changeType = \"add\";\n isMutateFn = true;\n break;\n case \"shift\":\n index = 0;\n changeType = \"remove\";\n isMutateFn = true;\n break;\n case \"splice\":\n index = args[0];\n const deleteCount = args[1];\n const newItems = args.slice(2);\n itemsToEmit = newItems;\n if (deleteCount > 0 && newItems.length === 0) {\n changeType = \"remove\";\n } else if (deleteCount === 0 && newItems.length > 0) {\n changeType = \"add\";\n } else if (deleteCount === 0 && newItems.length === 0) {\n changeSplice = false;\n } else {\n changeType = \"update\";\n }\n isMutateFn = true;\n break;\n }\n const result = origMethod.apply(target, args);\n if (isMutateFn && changeSplice) {\n if (prop === \"splice\") {\n this.next({\n type: changeType,\n index,\n items: itemsToEmit\n });\n } else {\n this.next({\n type: changeType,\n index,\n items: args\n });\n }\n }\n return result;\n };\n }\n return Reflect.get(target, prop, receiver);\n }, \"get\"),\n set: /* @__PURE__ */ __name((target, prop, value) => {\n const index = !isNaN(Number(prop)) ? Number(prop) : void 0;\n target[prop] = value;\n this.next({\n type: \"update\",\n index,\n items: [\n value\n ]\n });\n return true;\n }, \"set\")\n });\n }\n get items() {\n return this._items;\n }\n set items(newItems) {\n this.createProxy(newItems);\n this.next({\n type: \"reset\",\n items: newItems\n });\n }\n};\nvar isArraySubject = /* @__PURE__ */ __name((value) => {\n return \"_items\" in value;\n}, \"isArraySubject\");\n\n// src/ObjectSubject.ts\nimport { BehaviorSubject as BehaviorSubject2 } from \"rxjs\";\nvar ObjectSubject = class extends BehaviorSubject2 {\n static {\n __name(this, \"ObjectSubject\");\n }\n _obj;\n constructor(obj = {}) {\n super({\n type: \"init\",\n value: obj\n });\n this.createProxy(obj);\n }\n createProxy(obj) {\n this._obj = new Proxy(obj, {\n get: /* @__PURE__ */ __name((target, prop, receiver) => {\n return Reflect.get(target, prop, receiver);\n }, \"get\"),\n set: /* @__PURE__ */ __name((target, prop, value, receiver) => {\n const key = prop;\n const changeType = key in target ? \"update\" : \"add\";\n target[key] = value;\n this.next({\n type: changeType,\n key,\n value\n });\n return true;\n }, \"set\"),\n deleteProperty: /* @__PURE__ */ __name((target, prop) => {\n const key = prop;\n if (key in target) {\n const value = target[key];\n delete target[key];\n this.next({\n type: \"remove\",\n key,\n value\n });\n return true;\n }\n return false;\n }, \"deleteProperty\")\n });\n }\n get obj() {\n return this._obj;\n }\n set obj(newObj) {\n this.createProxy(newObj);\n this.next({\n type: \"reset\",\n value: newObj\n });\n }\n};\nvar isObjectSubject = /* @__PURE__ */ __name((value) => {\n return \"_obj\" in value;\n}, \"isObjectSubject\");\n\n// src/signal.ts\nimport { BehaviorSubject as BehaviorSubject3, combineLatest, filter, finalize, map } from \"rxjs\";\nvar getGlobalReactiveStore = /* @__PURE__ */ __name(() => {\n const globalKey = \"__REACTIVE_STORE__\";\n if (typeof globalThis !== \"undefined\") {\n if (!globalThis[globalKey]) {\n globalThis[globalKey] = {\n currentDependencyTracker: null,\n currentSubscriptionsTracker: null\n };\n }\n return globalThis[globalKey];\n }\n let globalObj;\n if (typeof window !== \"undefined\") {\n globalObj = window;\n } else if (typeof process !== \"undefined\" && process.versions && process.versions.node) {\n globalObj = Function(\"return this\")();\n } else if (typeof self !== \"undefined\") {\n globalObj = self;\n } else {\n console.warn(\"Unable to find global object, using local instance\");\n return {\n currentDependencyTracker: null,\n currentSubscriptionsTracker: null\n };\n }\n if (!globalObj[globalKey]) {\n globalObj[globalKey] = {\n currentDependencyTracker: null,\n currentSubscriptionsTracker: null\n };\n }\n return globalObj[globalKey];\n}, \"getGlobalReactiveStore\");\nvar reactiveStore = getGlobalReactiveStore();\nvar trackDependency = /* @__PURE__ */ __name((signal2) => {\n if (reactiveStore.currentDependencyTracker) {\n reactiveStore.currentDependencyTracker(signal2);\n }\n}, \"trackDependency\");\nfunction signal(defaultValue) {\n let subject;\n if (Array.isArray(defaultValue)) {\n subject = new ArraySubject(defaultValue);\n } else if (typeof defaultValue === \"object\" && defaultValue !== null) {\n subject = new ObjectSubject(defaultValue);\n } else {\n subject = new BehaviorSubject3(defaultValue);\n }\n const getValue = /* @__PURE__ */ __name(() => {\n if (subject instanceof ArraySubject) {\n return subject.items;\n } else if (subject instanceof ObjectSubject) {\n return subject.obj;\n }\n return subject.value;\n }, \"getValue\");\n const fn = /* @__PURE__ */ __name(function() {\n trackDependency(fn);\n return getValue();\n }, \"fn\");\n fn.set = (value) => {\n if (subject instanceof ArraySubject) {\n subject.items = value;\n } else if (subject instanceof ObjectSubject) {\n subject.obj = value;\n } else {\n subject.next(value);\n }\n };\n fn._isFrozen = false;\n fn.freeze = () => {\n fn._isFrozen = true;\n };\n fn.unfreeze = () => {\n fn._isFrozen = false;\n if (subject instanceof ArraySubject) {\n subject.next({\n type: \"init\",\n items: subject.items\n });\n } else if (subject instanceof ObjectSubject) {\n subject.next({\n type: \"init\",\n value: subject.obj\n });\n } else {\n subject.next(subject.value);\n }\n };\n fn.mutate = (mutateFn) => {\n const value = getValue();\n mutateFn(value);\n };\n fn.update = (updateFn) => {\n const updatedValue = updateFn(getValue());\n fn.set(updatedValue);\n };\n fn.observable = subject.asObservable().pipe(filter(() => !fn._isFrozen));\n fn._subject = subject;\n return fn;\n}\n__name(signal, \"signal\");\nfunction isSignal(value) {\n return !!(value && value.observable);\n}\n__name(isSignal, \"isSignal\");\nfunction isComputed(value) {\n return isSignal(value) && !!value.dependencies;\n}\n__name(isComputed, \"isComputed\");\nfunction computed(computeFunction, disposableFn) {\n const dependencies = /* @__PURE__ */ new Set();\n let init = true;\n let lastComputedValue;\n const previousTracker = reactiveStore.currentDependencyTracker;\n reactiveStore.currentDependencyTracker = (signal2) => {\n dependencies.add(signal2);\n };\n lastComputedValue = computeFunction();\n if (computeFunction[\"isEffect\"]) {\n disposableFn = lastComputedValue;\n }\n reactiveStore.currentDependencyTracker = previousTracker;\n const computedObservable = combineLatest([\n ...dependencies\n ].map((signal2) => signal2.observable)).pipe(filter(() => !init), map(() => computeFunction()), finalize(() => disposableFn?.()));\n const fn = /* @__PURE__ */ __name(function() {\n trackDependency(fn);\n return lastComputedValue;\n }, \"fn\");\n fn.observable = computedObservable;\n fn.subscription = computedObservable.subscribe((value) => {\n lastComputedValue = value;\n });\n fn.dependencies = dependencies;\n reactiveStore.currentSubscriptionsTracker?.(fn.subscription);\n init = false;\n return fn;\n}\n__name(computed, \"computed\");\n\n// src/effect.ts\nfunction effect(fn) {\n fn[\"isEffect\"] = true;\n return computed(fn);\n}\n__name(effect, \"effect\");\nexport {\n ArraySubject,\n ObjectSubject,\n computed,\n effect,\n isArraySubject,\n isComputed,\n isObjectSubject,\n isSignal,\n signal\n};\n//# sourceMappingURL=index.js.map","var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\nexport {\n __name\n};\n//# sourceMappingURL=chunk-7QVYU63E.js.map","import {\n __name\n} from \"./chunk-7QVYU63E.js\";\n\n// src/core.ts\nimport { isArraySubject, isObjectSubject, isSignal, isComputed } from \"@signe/reactive\";\n\n// src/utils.ts\nfunction isFunction(val) {\n return {}.toString.call(val) === \"[object Function]\";\n}\n__name(isFunction, \"isFunction\");\nfunction isClass(obj) {\n return typeof obj === \"function\" && obj.prototype && obj.prototype.constructor === obj;\n}\n__name(isClass, \"isClass\");\nvar isObject = /* @__PURE__ */ __name((item) => item && typeof item === \"object\" && !Array.isArray(item) && item !== null, \"isObject\");\nfunction isInstanceOfClass(value) {\n if (value === null || typeof value !== \"object\" || value === void 0 || Array.isArray(value)) {\n return false;\n }\n return Object.getPrototypeOf(value) !== Object.prototype;\n}\n__name(isInstanceOfClass, \"isInstanceOfClass\");\nfunction generateShortUUID() {\n const chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n let uuid = \"\";\n for (let i = 0; i < 8; i++) {\n const randomIndex = Math.floor(Math.random() * chars.length);\n uuid += chars[randomIndex];\n }\n return uuid;\n}\n__name(generateShortUUID, \"generateShortUUID\");\n\n// src/core.ts\nvar DELETE_TOKEN = \"$delete\";\nvar syncClass = /* @__PURE__ */ __name((instance, options = {}) => {\n const cacheSync = /* @__PURE__ */ new Map();\n const cachePersist = /* @__PURE__ */ new Map();\n instance.$valuesChanges = {\n set: /* @__PURE__ */ __name((path, value) => {\n cacheSync.set(path, value);\n options.onSync?.(cacheSync);\n }, \"set\"),\n setPersist: /* @__PURE__ */ __name((path, value) => {\n if (path == \"\") path = \".\";\n cachePersist.set(path, value);\n options.onPersist?.(cachePersist);\n }, \"setPersist\"),\n has: /* @__PURE__ */ __name((path) => {\n return cacheSync.has(path);\n }, \"has\"),\n get: /* @__PURE__ */ __name((path) => {\n return cacheSync.get(path);\n }, \"get\")\n };\n createSyncClass(instance);\n}, \"syncClass\");\nfunction createStatesSnapshot(instance) {\n let persistObject = {};\n if (instance?.$snapshot) {\n for (const key of instance.$snapshot.keys()) {\n const signal = instance.$snapshot.get(key);\n const persist2 = signal.options.persist ?? true;\n let value = signal();\n if (isObject(value) || Array.isArray(value)) {\n continue;\n }\n if (persist2) {\n persistObject[key] = value;\n }\n }\n }\n return persistObject;\n}\n__name(createStatesSnapshot, \"createStatesSnapshot\");\nfunction setMetadata(target, key, value) {\n const meta = target.constructor._propertyMetadata;\n const propId = meta?.get(key);\n if (propId) {\n if (isSignal(target[propId])) {\n target[propId].set(value);\n } else {\n target[propId] = value;\n }\n }\n}\n__name(setMetadata, \"setMetadata\");\nvar createSyncClass = /* @__PURE__ */ __name((currentClass, parentKey = null, parentClass = null, path = \"\") => {\n currentClass.$path = path;\n if (parentClass) {\n currentClass.$valuesChanges = parentClass.$valuesChanges;\n }\n if (parentKey) {\n setMetadata(currentClass, \"id\", parentKey);\n }\n if (currentClass.$snapshot) {\n for (const key of currentClass.$snapshot.keys()) {\n const signal = currentClass.$snapshot.get(key);\n const syncToClient = signal.options?.syncToClient ?? true;\n const persist2 = signal.options?.persist ?? true;\n let signalValue = signal();\n if (isObject(signalValue) || Array.isArray(signalValue)) {\n signalValue = {\n ...signalValue\n };\n }\n const newPath = (path ? path + \".\" : \"\") + key;\n if (syncToClient) {\n currentClass.$valuesChanges.set(newPath, signalValue);\n }\n if (persist2) {\n if (parentClass) currentClass.$valuesChanges.setPersist(path, signalValue);\n }\n if (isComputed(signal)) {\n signal.observable.subscribe((newValue) => {\n if (syncToClient) {\n currentClass.$valuesChanges.set(newPath, newValue);\n }\n });\n }\n }\n }\n}, \"createSyncClass\");\nvar type = /* @__PURE__ */ __name((_signal, path, options = {}, currentInstance) => {\n const { syncToClient = true, persist: persist2 = true } = options;\n let init = true;\n const handleObjectSubject = /* @__PURE__ */ __name((value, propPath) => {\n const newPath = `${propPath}${value.key ? `.${value.key}` : \"\"}`;\n if ([\n \"add\",\n \"reset\",\n \"update\"\n ].includes(value.type)) {\n if (isInstanceOfClass(value.value)) {\n createSyncClass(value.value, value.key, currentInstance, newPath);\n } else if (value.type === \"update\" && (isObject(value.value) || Array.isArray(value.value))) {\n createSyncClass(value.value, value.key, currentInstance, newPath);\n } else {\n savePath(newPath, value.value);\n }\n } else if (value.type === \"remove\") {\n savePath(newPath, DELETE_TOKEN);\n }\n }, \"handleObjectSubject\");\n const handleArraySubject = /* @__PURE__ */ __name((value, propPath) => {\n if (value.type === \"reset\" && Array.isArray(value.items)) {\n value.items.forEach((item, index) => {\n const newPath2 = `${propPath}.${index}`;\n if (isInstanceOfClass(item)) {\n createSyncClass(item, value.key, currentInstance, newPath2);\n } else {\n savePath(newPath2, item);\n }\n });\n return;\n }\n const newPath = `${propPath}.${value.index}`;\n const firstItem = value.items?.[0];\n if ([\n \"add\",\n \"update\"\n ].includes(value.type) && firstItem !== void 0) {\n if (isInstanceOfClass(firstItem)) {\n createSyncClass(firstItem, value.key, currentInstance, newPath);\n } else if (value.type === \"update\" && (isObject(firstItem) || Array.isArray(firstItem))) {\n createSyncClass(firstItem, value.key, currentInstance, newPath);\n } else {\n savePath(newPath, firstItem);\n }\n } else if (value.type === \"remove\") {\n savePath(newPath, DELETE_TOKEN);\n }\n }, \"handleArraySubject\");\n const savePath = /* @__PURE__ */ __name((propPath, value) => {\n if (syncToClient) {\n currentInstance.$valuesChanges.set(propPath, value);\n }\n if (persist2 && currentInstance.$path !== void 0) {\n currentInstance.$valuesChanges.setPersist(value == DELETE_TOKEN ? propPath : currentInstance.$path, value);\n }\n }, \"savePath\");\n const setupSubscription = /* @__PURE__ */ __name((signal, signalPath) => {\n if (!isSignal(signal)) return;\n if (syncToClient && currentInstance.$valuesChanges) {\n const initialValue = signal();\n currentInstance.$valuesChanges.set(signalPath, initialValue);\n }\n signal.options = options;\n signal.observable.subscribe((value) => {\n if (init) return;\n if (currentInstance.$path !== void 0) {\n const fullPath = `${currentInstance.$path ? currentInstance.$path + \".\" : \"\"}${signalPath}`;\n if (isComputed(signal)) {\n savePath(fullPath, value);\n } else if (isObjectSubject(signal._subject)) {\n handleObjectSubject(value, fullPath);\n } else if (isArraySubject(signal._subject)) {\n handleArraySubject(value, fullPath);\n } else {\n savePath(fullPath, value);\n }\n }\n });\n if (!currentInstance.$snapshot) {\n currentInstance.$snapshot = /* @__PURE__ */ new Map();\n }\n currentInstance.$snapshot.set(path, signal);\n }, \"setupSubscription\");\n if (!isSignal(_signal)) {\n if (_signal && typeof _signal === \"object\" && !Array.isArray(_signal)) {\n for (const key in _signal) {\n if (Object.prototype.hasOwnProperty.call(_signal, key)) {\n const value = _signal[key];\n const propertyPath = `${path}.${key}`;\n if (isSignal(value)) {\n setupSubscription(value, propertyPath);\n } else if (value && typeof value === \"object\" && !Array.isArray(value)) {\n type(value, propertyPath, options, currentInstance);\n }\n }\n }\n init = false;\n }\n return _signal;\n }\n setupSubscription(_signal, path);\n init = false;\n return _signal;\n}, \"type\");\n\n// src/decorators.ts\nfunction sync(options) {\n let classType;\n let persist2 = true;\n let syncToClient = true;\n if (typeof options === \"function\") {\n classType = options;\n } else if (typeof options === \"object\") {\n classType = options.classType;\n if (options.hasOwnProperty(\"persist\")) {\n persist2 = options.persist;\n }\n if (options.hasOwnProperty(\"syncToClient\")) {\n syncToClient = options.syncToClient;\n }\n }\n return function(target, propertyKey) {\n const privatePropertyKey = `__${propertyKey}`;\n const getter = /* @__PURE__ */ __name(function() {\n return this[privatePropertyKey];\n }, \"getter\");\n const setter = /* @__PURE__ */ __name(function(newVal) {\n this[privatePropertyKey] = type(newVal, propertyKey, {\n classType,\n persist: persist2,\n syncToClient\n }, this);\n }, \"setter\");\n Object.defineProperty(target, propertyKey, {\n get: getter,\n set: setter,\n enumerable: true,\n configurable: true\n });\n };\n}\n__name(sync, \"sync\");\nfunction id() {\n return function(target, propertyKey) {\n if (!target.constructor._propertyMetadata) {\n target.constructor._propertyMetadata = /* @__PURE__ */ new Map();\n }\n target.constructor._propertyMetadata.set(\"id\", propertyKey);\n };\n}\n__name(id, \"id\");\nfunction users(options) {\n return function(target, propertyKey) {\n if (!target.constructor._propertyMetadata) {\n target.constructor._propertyMetadata = /* @__PURE__ */ new Map();\n }\n target.constructor._propertyMetadata.set(\"users\", propertyKey);\n sync(options)(target, propertyKey);\n };\n}\n__name(users, \"users\");\nfunction persist() {\n return sync({\n persist: true,\n syncToClient: false\n });\n}\n__name(persist, \"persist\");\nfunction connected() {\n return function(target, propertyKey) {\n if (!target.constructor._propertyMetadata) {\n target.constructor._propertyMetadata = /* @__PURE__ */ new Map();\n }\n target.constructor._propertyMetadata.set(\"connected\", propertyKey);\n sync({\n persist: false\n })(target, propertyKey);\n };\n}\n__name(connected, \"connected\");\n\n// src/load.ts\nimport { isSignal as isSignal2 } from \"@signe/reactive\";\nfunction load(rootInstance, values, valueIsObject) {\n if (valueIsObject) {\n loadFromObject(rootInstance, values);\n } else {\n loadFromPaths(rootInstance, values);\n }\n}\n__name(load, \"load\");\nfunction loadFromPaths(rootInstance, values) {\n for (const [path, value] of Object.entries(values)) {\n const parts = path.split(\".\");\n loadValue(rootInstance, parts, value);\n }\n}\n__name(loadFromPaths, \"loadFromPaths\");\nfunction loadFromObject(rootInstance, values, currentPath = \"\") {\n for (let key in values) {\n const value = values[key];\n const newPath = currentPath ? `${currentPath}.${key}` : key;\n if (typeof value === \"object\" && !Array.isArray(value) && value !== null) {\n loadFromObject(rootInstance, value, newPath);\n } else {\n const parts = newPath.split(\".\");\n loadValue(rootInstance, parts, value);\n }\n }\n}\n__name(loadFromObject, \"loadFromObject\");\nfunction loadValue(rootInstance, parts, value) {\n let current = rootInstance;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (i === parts.length - 1) {\n if (value == DELETE_TOKEN) {\n if (isSignal2(current)) {\n current = current();\n }\n Reflect.deleteProperty(current, part);\n } else if (current[part]?._subject) {\n current[part].set(value);\n } else {\n current[part] = value;\n }\n } else {\n if (isSignal2(current)) {\n current = current();\n }\n const currentValue = current[part];\n if (currentValue === void 0) {\n const parentInstance = getByPath(rootInstance, parts.slice(0, i).join(\".\"));\n const classType = parentInstance?.options?.classType;\n if (classType) {\n current[part] = !isClass(classType) ? classType(part) : new classType();\n setMetadata(current[part], \"id\", part);\n } else {\n current[part] = {};\n }\n }\n current = current[part];\n }\n }\n}\n__name(loadValue, \"loadValue\");\nfunction getByPath(root, path) {\n const parts = path.split(\".\");\n let current = root;\n for (const part of parts) {\n if (isSignal2(current)) {\n current = current();\n }\n if (current[part]) {\n current = current[part];\n } else {\n return void 0;\n }\n }\n return current;\n}\n__name(getByPath, \"getByPath\");\nexport {\n DELETE_TOKEN,\n connected,\n createStatesSnapshot,\n createSyncClass,\n generateShortUUID,\n getByPath,\n id,\n isClass,\n isFunction,\n isInstanceOfClass,\n isObject,\n load,\n persist,\n setMetadata,\n sync,\n syncClass,\n type,\n users\n};\n//# sourceMappingURL=index.js.map","import { signal } from \"@signe/reactive\";\nimport { id, sync } from \"@signe/sync\";\nimport { RpgCommonPlayer } from \"../Player\";\n\nexport class Item {\n @id() id = signal('');\n @sync() name = signal('');\n @sync() description = signal('');\n @sync() price = signal(0);\n @sync() quantity = signal(1);\n\n onAdd: (player: RpgCommonPlayer) => void = () => {};\n\n constructor(data: any) {\n this.description.set(data.description);\n this.price.set(data.price);\n this.onAdd = data.onAdd?.bind(this) ?? (() => {});\n }\n}\n","import { signal } from \"@signe/reactive\";\nimport { id, sync, users } from \"@signe/sync\";\nimport * as Matter from 'matter-js';\nimport { MovementManager } from \"./movement\";\nimport { Item } from \"./database\";\nimport { Observable } from \"rxjs\";\n\nexport enum Direction {\n Up = 'up',\n Down = 'down',\n Left = 'left',\n Right = 'right'\n}\n\nexport enum Animation {\n Stand = 'stand',\n Walk = 'walk',\n Attack = 'attack',\n Defense = 'defense',\n Skill = 'skill'\n}\n\nexport interface Hitbox {\n w: number;\n h: number;\n}\n\nexport interface ShowAnimationParams {\n graphic?: string | string[];\n animationName: string;\n loop?: boolean;\n}\n\nexport interface AttachShapeOptions {\n /** Width of the shape in pixels */\n width: number;\n /** Height of the shape in pixels */\n height: number;\n /** Circle radius in pixels (for zone shapes) */\n radius?: number;\n /** Vision aperture in degrees. 360 = full circle, <360 = cone */\n angle?: number;\n /** Facing direction used when angle < 360 */\n direction?: Direction;\n /** If true, walls (static hitboxes) stop vision */\n limitedByWalls?: boolean;\n /** Indicate where the shape is placed relative to the player */\n positioning?: 'center' | 'top' | 'bottom' | 'left' | 'right';\n /** The name of the shape */\n name?: string;\n /** An object to retrieve information when interacting with the shape */\n properties?: object;\n}\n\nexport class RpgCommonPlayer {\n @id() id: string;\n @sync() x = signal(0);\n @sync() y = signal(0);\n @sync() z = signal(0);\n @sync() tint = signal('white');\n @sync() direction = signal(Direction.Down);\n @sync() speed = signal(4);\n @sync() graphics = signal<any>([]);\n @sync() canMove = signal(true);\n @sync() hitbox = signal<Hitbox>({\n w: 32,\n h: 32\n });\n @sync() _gold = signal(0);\n @sync() animationName = signal('stand');\n @sync() _hp = signal(0);\n @sync() _sp = signal(0);\n @sync() _exp = signal(0);\n @sync() _level = signal(0);\n @sync() _class = signal({});\n @sync(Item) items = signal<Item[]>([]);\n @sync() equipments = signal<any[]>([]);\n @sync() states = signal<any[]>([]);\n @sync() skills = signal<any[]>([]);\n @sync() _effects = signal<any[]>([]);\n @sync() _through = signal(false);\n @sync() _throughOtherPlayer = signal(true);\n @sync() _throughEvent = signal(false);\n @sync() _frequency = signal(0);\n\n // Store intended movement direction (not synced, only used locally)\n private _intendedDirection: Direction | null = null;\n\n /**\n * Change the player's facing direction\n * \n * Updates the direction the player is facing, which affects animations\n * and directional abilities. This should be called when the player\n * intends to move in a specific direction, not when they are pushed\n * by physics or sliding.\n * \n * @param direction - The new direction to face\n * \n * @example\n * ```ts\n * // Player presses right arrow key\n * player.changeDirection(Direction.Right);\n * ```\n */\n changeDirection(direction: Direction) {\n this.direction.set(direction);\n }\n\n /**\n * Get the current facing direction\n * \n * @returns Current direction the player is facing\n * \n * @example\n * ```ts\n * const currentDirection = player.getDirection();\n * if (currentDirection === Direction.Up) {\n * // Player is facing up\n * }\n * ```\n */\n getDirection() {\n return this.direction();\n }\n\n /**\n * Set the intended movement direction\n * \n * This should be called when the player intends to move in a direction,\n * typically from input handling. This direction will be used to update\n * the player's facing direction regardless of physics interactions.\n * \n * @param direction - The intended movement direction, or null if not moving\n * \n * @example\n * ```ts\n * // Player presses down arrow key\n * player.setIntendedDirection(Direction.Down);\n * \n * // Player releases all movement keys\n * player.setIntendedDirection(null);\n * ```\n */\n setIntendedDirection(direction: Direction | null) {\n this._intendedDirection = direction;\n // Update facing direction immediately when player intends to move\n if (direction !== null) {\n this.changeDirection(direction);\n }\n }\n\n /**\n * Get the intended movement direction\n * \n * @returns The direction the player intends to move, or null if not moving\n * \n * @example\n * ```ts\n * const intended = player.getIntendedDirection();\n * if (intended === Direction.Left) {\n * // Player is trying to move left\n * }\n * ```\n */\n getIntendedDirection(): Direction | null {\n return this._intendedDirection;\n }\n\n /**\n * Apply physics body position to player coordinates\n * \n * Synchronizes the player's position with their physics body after\n * physics calculations. This method no longer automatically changes\n * the player's direction based on position changes, as direction\n * should be controlled by intended movement instead.\n * \n * @param body - The Matter.js physics body\n * \n * @example\n * ```ts\n * // Called automatically by physics system\n * player.applyPhysic(body);\n * ```\n */\n applyPhysic(body: Matter.Body) {\n // Convert body center position to top-left corner for consistency\n const width = body.bounds.max.x - body.bounds.min.x;\n const height = body.bounds.max.y - body.bounds.min.y;\n const topLeftX = body.position.x - width / 2;\n const topLeftY = body.position.y - height / 2;\n \n const posChanged = Math.round(this.x()) !== Math.round(topLeftX) || Math.round(this.y()) !== Math.round(topLeftY);\n if (posChanged) {\n // Only update position, do not change direction based on physics movement\n // Direction should be controlled by intended movement via setIntendedDirection()\n this.x.set(topLeftX);\n this.y.set(topLeftY);\n }\n }\n\n _showAnimation(params: ShowAnimationParams) {\n const { graphic, animationName, loop } = params;\n if (graphic) {\n if (Array.isArray(graphic)) {\n this.graphics.set(graphic);\n }\n else {\n this.graphics.set([graphic]);\n }\n }\n }\n\n /**\n * Create a temporary and moving hitbox relative to the player's position\n * \n * Creates a temporary hitbox that moves through multiple positions sequentially,\n * with all coordinates being relative to the player's current position.\n * For example, you can use it for player attacks, spells, or area effects\n * that should follow the player's position.\n * \n * The method creates a zone sensor that moves through the specified hitbox positions\n * at the given speed, detecting collisions with other players and events at each step.\n * \n * @param hitboxes - Array of hitbox positions relative to player position\n * @param options - Configuration options for the movement\n * @param map - Reference to the map instance for physics access\n * @returns Observable that emits arrays of hit entities and completes when movement is finished\n * \n * @example\n * ```ts\n * // Create a forward attack relative to player position\n * player.createMovingHitbox([\n * { x: 0, y: -32, width: 32, height: 32 }, // In front of player\n * { x: 0, y: -64, width: 32, height: 32 } // Further in front\n * ], { speed: 2 }, map).subscribe({\n * next(hits) {\n * // hits contains other RpgPlayer or RpgEvent objects that were hit\n * console.log('Hit entities:', hits);\n * },\n * complete() {\n * console.log('Attack finished');\n * }\n * });\n * ```\n */\n createMovingHitbox(\n hitboxes: Array<{ x: number; y: number; width: number; height: number }>,\n options: { speed?: number } = {},\n ): Observable<any[]> {\n // Convert relative positions to absolute positions based on player's current position\n const absoluteHitboxes = hitboxes.map(hitbox => ({\n x: this.x() + hitbox.x,\n y: this.y() + hitbox.y,\n width: hitbox.width,\n height: hitbox.height\n }));\n\n // Delegate to the map's createMovingHitbox method with absolute positions\n return this.getCurrentMap().createMovingHitbox(absoluteHitboxes, options);\n }\n\n getCurrentMap() {\n return this['map'];\n }\n\n}\n","/*!\n * matter-js 0.20.0 by @liabru\n * http://brm.io/matter-js/\n * License MIT\n * \n * The MIT License (MIT)\n * \n * Copyright (c) Liam Brummitt and contributors.\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Matter\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Matter\"] = factory();\n\telse\n\t\troot[\"Matter\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \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, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\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/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 20);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\n/**\n* The `Matter.Common` module contains utility functions that are common to all modules.\n*\n* @class Common\n*/\n\nvar Common = {};\n\nmodule.exports = Common;\n\n(function() {\n\n Common._baseDelta = 1000 / 60;\n Common._nextId = 0;\n Common._seed = 0;\n Common._nowStartTime = +(new Date());\n Common._warnedOnce = {};\n Common._decomp = null;\n \n /**\n * Extends the object in the first argument using the object in the second argument.\n * @method extend\n * @param {} obj\n * @param {boolean} deep\n * @return {} obj extended\n */\n Common.extend = function(obj, deep) {\n var argsStart,\n args,\n deepClone;\n\n if (typeof deep === 'boolean') {\n argsStart = 2;\n deepClone = deep;\n } else {\n argsStart = 1;\n deepClone = true;\n }\n\n for (var i = argsStart; i < arguments.length; i++) {\n var source = arguments[i];\n\n if (source) {\n for (var prop in source) {\n if (deepClone && source[prop] && source[prop].constructor === Object) {\n if (!obj[prop] || obj[prop].constructor === Object) {\n obj[prop] = obj[prop] || {};\n Common.extend(obj[prop], deepClone, source[prop]);\n } else {\n obj[prop] = source[prop];\n }\n } else {\n obj[prop] = source[prop];\n }\n }\n }\n }\n \n return obj;\n };\n\n /**\n * Creates a new clone of the object, if deep is true references will also be cloned.\n * @method clone\n * @param {} obj\n * @param {bool} deep\n * @return {} obj cloned\n */\n Common.clone = function(obj, deep) {\n return Common.extend({}, deep, obj);\n };\n\n /**\n * Returns the list of keys for the given object.\n * @method keys\n * @param {} obj\n * @return {string[]} keys\n */\n Common.keys = function(obj) {\n if (Object.keys)\n return Object.keys(obj);\n\n // avoid hasOwnProperty for performance\n var keys = [];\n for (var key in obj)\n keys.push(key);\n return keys;\n };\n\n /**\n * Returns the list of values for the given object.\n * @method values\n * @param {} obj\n * @return {array} Array of the objects property values\n */\n Common.values = function(obj) {\n var values = [];\n \n if (Object.keys) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n values.push(obj[keys[i]]);\n }\n return values;\n }\n \n // avoid hasOwnProperty for performance\n for (var key in obj)\n values.push(obj[key]);\n return values;\n };\n\n /**\n * Gets a value from `base` relative to the `path` string.\n * @method get\n * @param {} obj The base object\n * @param {string} path The path relative to `base`, e.g. 'Foo.Bar.baz'\n * @param {number} [begin] Path slice begin\n * @param {number} [end] Path slice end\n * @return {} The object at the given path\n */\n Common.get = function(obj, path, begin, end) {\n path = path.split('.').slice(begin, end);\n\n for (var i = 0; i < path.length; i += 1) {\n obj = obj[path[i]];\n }\n\n return obj;\n };\n\n /**\n * Sets a value on `base` relative to the given `path` string.\n * @method set\n * @param {} obj The base object\n * @param {string} path The path relative to `base`, e.g. 'Foo.Bar.baz'\n * @param {} val The value to set\n * @param {number} [begin] Path slice begin\n * @param {number} [end] Path slice end\n * @return {} Pass through `val` for chaining\n */\n Common.set = function(obj, path, val, begin, end) {\n var parts = path.split('.').slice(begin, end);\n Common.get(obj, path, 0, -1)[parts[parts.length - 1]] = val;\n return val;\n };\n\n /**\n * Shuffles the given array in-place.\n * The function uses a seeded random generator.\n * @method shuffle\n * @param {array} array\n * @return {array} array shuffled randomly\n */\n Common.shuffle = function(array) {\n for (var i = array.length - 1; i > 0; i--) {\n var j = Math.floor(Common.random() * (i + 1));\n var temp = array[i];\n array[i] = array[j];\n array[j] = temp;\n }\n return array;\n };\n\n /**\n * Randomly chooses a value from a list with equal probability.\n * The function uses a seeded random generator.\n * @method choose\n * @param {array} choices\n * @return {object} A random choice object from the array\n */\n Common.choose = function(choices) {\n return choices[Math.floor(Common.random() * choices.length)];\n };\n\n /**\n * Returns true if the object is a HTMLElement, otherwise false.\n * @method isElement\n * @param {object} obj\n * @return {boolean} True if the object is a HTMLElement, otherwise false\n */\n Common.isElement = function(obj) {\n if (typeof HTMLElement !== 'undefined') {\n return obj instanceof HTMLElement;\n }\n\n return !!(obj && obj.nodeType && obj.nodeName);\n };\n\n /**\n * Returns true if the object is an array.\n * @method isArray\n * @param {object} obj\n * @return {boolean} True if the object is an array, otherwise false\n */\n Common.isArray = function(obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n\n /**\n * Returns true if the object is a function.\n * @method isFunction\n * @param {object} obj\n * @return {boolean} True if the object is a function, otherwise false\n */\n Common.isFunction = function(obj) {\n return typeof obj === \"function\";\n };\n\n /**\n * Returns true if the object is a plain object.\n * @method isPlainObject\n * @param {object} obj\n * @return {boolean} True if the object is a plain object, otherwise false\n */\n Common.isPlainObject = function(obj) {\n return typeof obj === 'object' && obj.constructor === Object;\n };\n\n /**\n * Returns true if the object is a string.\n * @method isString\n * @param {object} obj\n * @return {boolean} True if the object is a string, otherwise false\n */\n Common.isString = function(obj) {\n return toString.call(obj) === '[object String]';\n };\n \n /**\n * Returns the given value clamped between a minimum and maximum value.\n * @method clamp\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @return {number} The value clamped between min and max inclusive\n */\n Common.clamp = function(value, min, max) {\n if (value < min)\n return min;\n if (value > max)\n return max;\n return value;\n };\n \n /**\n * Returns the sign of the given value.\n * @method sign\n * @param {number} value\n * @return {number} -1 if negative, +1 if 0 or positive\n */\n Common.sign = function(value) {\n return value < 0 ? -1 : 1;\n };\n \n /**\n * Returns the current timestamp since the time origin (e.g. from page load).\n * The result is in milliseconds and will use high-resolution timing if available.\n * @method now\n * @return {number} the current timestamp in milliseconds\n */\n Common.now = function() {\n if (typeof window !== 'undefined' && window.performance) {\n if (window.performance.now) {\n return window.performance.now();\n } else if (window.performance.webkitNow) {\n return window.performance.webkitNow();\n }\n }\n\n if (Date.now) {\n return Date.now();\n }\n\n return (new Date()) - Common._nowStartTime;\n };\n \n /**\n * Returns a random value between a minimum and a maximum value inclusive.\n * The function uses a seeded random generator.\n * @method random\n * @param {number} min\n * @param {number} max\n * @return {number} A random number between min and max inclusive\n */\n Common.random = function(min, max) {\n min = (typeof min !== \"undefined\") ? min : 0;\n max = (typeof max !== \"undefined\") ? max : 1;\n return min + _seededRandom() * (max - min);\n };\n\n var _seededRandom = function() {\n // https://en.wikipedia.org/wiki/Linear_congruential_generator\n Common._seed = (Common._seed * 9301 + 49297) % 233280;\n return Common._seed / 233280;\n };\n\n /**\n * Converts a CSS hex colour string into an integer.\n * @method colorToNumber\n * @param {string} colorString\n * @return {number} An integer representing the CSS hex string\n */\n Common.colorToNumber = function(colorString) {\n colorString = colorString.replace('#','');\n\n if (colorString.length == 3) {\n colorString = colorString.charAt(0) + colorString.charAt(0)\n + colorString.charAt(1) + colorString.charAt(1)\n + colorString.charAt(2) + colorString.charAt(2);\n }\n\n return parseInt(colorString, 16);\n };\n\n /**\n * The console logging level to use, where each level includes all levels above and excludes the levels below.\n * The default level is 'debug' which shows all console messages. \n *\n * Possible level values are:\n * - 0 = None\n * - 1 = Debug\n * - 2 = Info\n * - 3 = Warn\n * - 4 = Error\n * @static\n * @property logLevel\n * @type {Number}\n * @default 1\n */\n Common.logLevel = 1;\n\n /**\n * Shows a `console.log` message only if the current `Common.logLevel` allows it.\n * The message will be prefixed with 'matter-js' to make it easily identifiable.\n * @method log\n * @param ...objs {} The objects to log.\n */\n Common.log = function() {\n if (console && Common.logLevel > 0 && Common.logLevel <= 3) {\n console.log.apply(console, ['matter-js:'].concat(Array.prototype.slice.call(arguments)));\n }\n };\n\n /**\n * Shows a `console.info` message only if the current `Common.logLevel` allows it.\n * The message will be prefixed with 'matter-js' to make it easily identifiable.\n * @method info\n * @param ...objs {} The objects to log.\n */\n Common.info = function() {\n if (console && Common.logLevel > 0 && Common.logLevel <= 2) {\n console.info.apply(console, ['matter-js:'].concat(Array.prototype.slice.call(arguments)));\n }\n };\n\n /**\n * Shows a `console.warn` message only if the current `Common.logLevel` allows it.\n * The message will be prefixed with 'matter-js' to make it easily identifiable.\n * @method warn\n * @param ...objs {} The objects to log.\n */\n Common.warn = function() {\n if (console && Common.logLevel > 0 && Common.logLevel <= 3) {\n console.warn.apply(console, ['matter-js:'].concat(Array.prototype.slice.call(arguments)));\n }\n };\n\n /**\n * Uses `Common.warn` to log the given message one time only.\n * @method warnOnce\n * @param ...objs {} The objects to log.\n */\n Common.warnOnce = function() {\n var message = Array.prototype.slice.call(arguments).join(' ');\n\n if (!Common._warnedOnce[message]) {\n Common.warn(message);\n Common._warnedOnce[message] = true;\n }\n };\n\n /**\n * Shows a deprecated console warning when the function on the given object is called.\n * The target function will be replaced with a new function that first shows the warning\n * and then calls the original function.\n * @method deprecated\n * @param {object} obj The object or module\n * @param {string} name The property name of the function on obj\n * @param {string} warning The one-time message to show if the function is called\n */\n Common.deprecated = function(obj, prop, warning) {\n obj[prop] = Common.chain(function() {\n Common.warnOnce('🔅 deprecated 🔅', warning);\n }, obj[prop]);\n };\n\n /**\n * Returns the next unique sequential ID.\n * @method nextId\n * @return {Number} Unique sequential ID\n */\n Common.nextId = function() {\n return Common._nextId++;\n };\n\n /**\n * A cross browser compatible indexOf implementation.\n * @method indexOf\n * @param {array} haystack\n * @param {object} needle\n * @return {number} The position of needle in haystack, otherwise -1.\n */\n Common.indexOf = function(haystack, needle) {\n if (haystack.indexOf)\n return haystack.indexOf(needle);\n\n for (var i = 0; i < haystack.length; i++) {\n if (haystack[i] === needle)\n return i;\n }\n\n return -1;\n };\n\n /**\n * A cross browser compatible array map implementation.\n * @method map\n * @param {array} list\n * @param {function} func\n * @return {array} Values from list transformed by func.\n */\n Common.map = function(list, func) {\n if (list.map) {\n return list.map(func);\n }\n\n var mapped = [];\n\n for (var i = 0; i < list.length; i += 1) {\n mapped.push(func(list[i]));\n }\n\n return mapped;\n };\n\n /**\n * Takes a directed graph and returns the partially ordered set of vertices in topological order.\n * Circular dependencies are allowed.\n * @method topologicalSort\n * @param {object} graph\n * @return {array} Partially ordered set of vertices in topological order.\n */\n Common.topologicalSort = function(graph) {\n // https://github.com/mgechev/javascript-algorithms\n // Copyright (c) Minko Gechev (MIT license)\n // Modifications: tidy formatting and naming\n var result = [],\n visited = [],\n temp = [];\n\n for (var node in graph) {\n if (!visited[node] && !temp[node]) {\n Common._topologicalSort(node, visited, temp, graph, result);\n }\n }\n\n return result;\n };\n\n Common._topologicalSort = function(node, visited, temp, graph, result) {\n var neighbors = graph[node] || [];\n temp[node] = true;\n\n for (var i = 0; i < neighbors.length; i += 1) {\n var neighbor = neighbors[i];\n\n if (temp[neighbor]) {\n // skip circular dependencies\n continue;\n }\n\n if (!visited[neighbor]) {\n Common._topologicalSort(neighbor, visited, temp, graph, result);\n }\n }\n\n temp[node] = false;\n visited[node] = true;\n\n result.push(node);\n };\n\n /**\n * Takes _n_ functions as arguments and returns a new function that calls them in order.\n * The arguments applied when calling the new function will also be applied to every function passed.\n * The value of `this` refers to the last value returned in the chain that was not `undefined`.\n * Therefore if a passed function does not return a value, the previously returned value is maintained.\n * After all passed functions have been called the new function returns the last returned value (if any).\n * If any of the passed functions are a chain, then the chain will be flattened.\n * @method chain\n * @param ...funcs {function} The functions to chain.\n * @return {function} A new function that calls the passed functions in order.\n */\n Common.chain = function() {\n var funcs = [];\n\n for (var i = 0; i < arguments.length; i += 1) {\n var func = arguments[i];\n\n if (func._chained) {\n // flatten already chained functions\n funcs.push.apply(funcs, func._chained);\n } else {\n funcs.push(func);\n }\n }\n\n var chain = function() {\n // https://github.com/GoogleChrome/devtools-docs/issues/53#issuecomment-51941358\n var lastResult,\n args = new Array(arguments.length);\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n args[i] = arguments[i];\n }\n\n for (i = 0; i < funcs.length; i += 1) {\n var result = funcs[i].apply(lastResult, args);\n\n if (typeof result !== 'undefined') {\n lastResult = result;\n }\n }\n\n return lastResult;\n };\n\n chain._chained = funcs;\n\n return chain;\n };\n\n /**\n * Chains a function to excute before the original function on the given `path` relative to `base`.\n * See also docs for `Common.chain`.\n * @method chainPathBefore\n * @param {} base The base object\n * @param {string} path The path relative to `base`\n * @param {function} func The function to chain before the original\n * @return {function} The chained function that replaced the original\n */\n Common.chainPathBefore = function(base, path, func) {\n return Common.set(base, path, Common.chain(\n func,\n Common.get(base, path)\n ));\n };\n\n /**\n * Chains a function to excute after the original function on the given `path` relative to `base`.\n * See also docs for `Common.chain`.\n * @method chainPathAfter\n * @param {} base The base object\n * @param {string} path The path relative to `base`\n * @param {function} func The function to chain after the original\n * @return {function} The chained function that replaced the original\n */\n Common.chainPathAfter = function(base, path, func) {\n return Common.set(base, path, Common.chain(\n Common.get(base, path),\n func\n ));\n };\n\n /**\n * Provide the [poly-decomp](https://github.com/schteppe/poly-decomp.js) library module to enable\n * concave vertex decomposition support when using `Bodies.fromVertices` e.g. `Common.setDecomp(require('poly-decomp'))`.\n * @method setDecomp\n * @param {} decomp The [poly-decomp](https://github.com/schteppe/poly-decomp.js) library module.\n */\n Common.setDecomp = function(decomp) {\n Common._decomp = decomp;\n };\n\n /**\n * Returns the [poly-decomp](https://github.com/schteppe/poly-decomp.js) library module provided through `Common.setDecomp`,\n * otherwise returns the global `decomp` if set.\n * @method getDecomp\n * @return {} The [poly-decomp](https://github.com/schteppe/poly-decomp.js) library module if provided.\n */\n Common.getDecomp = function() {\n // get user provided decomp if set\n var decomp = Common._decomp;\n\n try {\n // otherwise from window global\n if (!decomp && typeof window !== 'undefined') {\n decomp = window.decomp;\n }\n \n // otherwise from node global\n if (!decomp && typeof global !== 'undefined') {\n decomp = global.decomp;\n }\n } catch (e) {\n // decomp not available\n decomp = null;\n }\n\n return decomp;\n };\n})();\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\n/**\n* The `Matter.Bounds` module contains methods for creating and manipulating axis-aligned bounding boxes (AABB).\n*\n* @class Bounds\n*/\n\nvar Bounds = {};\n\nmodule.exports = Bounds;\n\n(function() {\n\n /**\n * Creates a new axis-aligned bounding box (AABB) for the given vertices.\n * @method create\n * @param {vertices} vertices\n * @return {bounds} A new bounds object\n */\n Bounds.create = function(vertices) {\n var bounds = { \n min: { x: 0, y: 0 }, \n max: { x: 0, y: 0 }\n };\n\n if (vertices)\n Bounds.update(bounds, vertices);\n \n return bounds;\n };\n\n /**\n * Updates bounds using the given vertices and extends the bounds given a velocity.\n * @method update\n * @param {bounds} bounds\n * @param {vertices} vertices\n * @param {vector} velocity\n */\n Bounds.update = function(bounds, vertices, velocity) {\n bounds.min.x = Infinity;\n bounds.max.x = -Infinity;\n bounds.min.y = Infinity;\n bounds.max.y = -Infinity;\n\n for (var i = 0; i < vertices.length; i++) {\n var vertex = vertices[i];\n if (vertex.x > bounds.max.x) bounds.max.x = vertex.x;\n if (vertex.x < bounds.min.x) bounds.min.x = vertex.x;\n if (vertex.y > bounds.max.y) bounds.max.y = vertex.y;\n if (vertex.y < bounds.min.y) bounds.min.y = vertex.y;\n }\n \n if (velocity) {\n if (velocity.x > 0) {\n bounds.max.x += velocity.x;\n } else {\n bounds.min.x += velocity.x;\n }\n \n if (velocity.y > 0) {\n bounds.max.y += velocity.y;\n } else {\n bounds.min.y += velocity.y;\n }\n }\n };\n\n /**\n * Returns true if the bounds contains the given point.\n * @method contains\n * @param {bounds} bounds\n * @param {vector} point\n * @return {boolean} True if the bounds contain the point, otherwise false\n */\n Bounds.contains = function(bounds, point) {\n return point.x >= bounds.min.x && point.x <= bounds.max.x \n && point.y >= bounds.min.y && point.y <= bounds.max.y;\n };\n\n /**\n * Returns true if the two bounds intersect.\n * @method overlaps\n * @param {bounds} boundsA\n * @param {bounds} boundsB\n * @return {boolean} True if the bounds overlap, otherwise false\n */\n Bounds.overlaps = function(boundsA, boundsB) {\n return (boundsA.min.x <= boundsB.max.x && boundsA.max.x >= boundsB.min.x\n && boundsA.max.y >= boundsB.min.y && boundsA.min.y <= boundsB.max.y);\n };\n\n /**\n * Translates the bounds by the given vector.\n * @method translate\n * @param {bounds} bounds\n * @param {vector} vector\n */\n Bounds.translate = function(bounds, vector) {\n bounds.min.x += vector.x;\n bounds.max.x += vector.x;\n bounds.min.y += vector.y;\n bounds.max.y += vector.y;\n };\n\n /**\n * Shifts the bounds to the given position.\n * @method shift\n * @param {bounds} bounds\n * @param {vector} position\n */\n Bounds.shift = function(bounds, position) {\n var deltaX = bounds.max.x - bounds.min.x,\n deltaY = bounds.max.y - bounds.min.y;\n \n bounds.min.x = position.x;\n bounds.max.x = position.x + deltaX;\n bounds.min.y = position.y;\n bounds.max.y = position.y + deltaY;\n };\n \n})();\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n/**\n* The `Matter.Vector` module contains methods for creating and manipulating vectors.\n* Vectors are the basis of all the geometry related operations in the engine.\n* A `Matter.Vector` object is of the form `{ x: 0, y: 0 }`.\n*\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\n*\n* @class Vector\n*/\n\n// TODO: consider params for reusing vector objects\n\nvar Vector = {};\n\nmodule.exports = Vector;\n\n(function() {\n\n /**\n * Creates a new vector.\n * @method create\n * @param {number} x\n * @param {number} y\n * @return {vector} A new vector\n */\n Vector.create = function(x, y) {\n return { x: x || 0, y: y || 0 };\n };\n\n /**\n * Returns a new vector with `x` and `y` copied from the given `vector`.\n * @method clone\n * @param {vector} vector\n * @return {vector} A new cloned vector\n */\n Vector.clone = function(vector) {\n return { x: vector.x, y: vector.y };\n };\n\n /**\n * Returns the magnitude (length) of a vector.\n * @method magnitude\n * @param {vector} vector\n * @return {number} The magnitude of the vector\n */\n Vector.magnitude = function(vector) {\n return Math.sqrt((vector.x * vector.x) + (vector.y * vector.y));\n };\n\n /**\n * Returns the magnitude (length) of a vector (therefore saving a `sqrt` operation).\n * @method magnitudeSquared\n * @param {vector} vector\n * @return {number} The squared magnitude of the vector\n */\n Vector.magnitudeSquared = function(vector) {\n return (vector.x * vector.x) + (vector.y * vector.y);\n };\n\n /**\n * Rotates the vector about (0, 0) by specified angle.\n * @method rotate\n * @param {vector} vector\n * @param {number} angle\n * @param {vector} [output]\n * @return {vector} The vector rotated about (0, 0)\n */\n Vector.rotate = function(vector, angle, output) {\n var cos = Math.cos(angle), sin = Math.sin(angle);\n if (!output) output = {};\n var x = vector.x * cos - vector.y * sin;\n output.y = vector.x * sin + vector.y * cos;\n output.x = x;\n return output;\n };\n\n /**\n * Rotates the vector about a specified point by specified angle.\n * @method rotateAbout\n * @param {vector} vector\n * @param {number} angle\n * @param {vector} point\n * @param {vector} [output]\n * @return {vector} A new vector rotated about the point\n */\n Vector.rotateAbout = function(vector, angle, point, output) {\n var cos = Math.cos(angle), sin = Math.sin(angle);\n if (!output) output = {};\n var x = point.x + ((vector.x - point.x) * cos - (vector.y - point.y) * sin);\n output.y = point.y + ((vector.x - point.x) * sin + (vector.y - point.y) * cos);\n output.x = x;\n return output;\n };\n\n /**\n * Normalises a vector (such that its magnitude is `1`).\n * @method normalise\n * @param {vector} vector\n * @return {vector} A new vector normalised\n */\n Vector.normalise = function(vector) {\n var magnitude = Vector.magnitude(vector);\n if (magnitude === 0)\n return { x: 0, y: 0 };\n return { x: vector.x / magnitude, y: vector.y / magnitude };\n };\n\n /**\n * Returns the dot-product of two vectors.\n * @method dot\n * @param {vector} vectorA\n * @param {vector} vectorB\n * @return {number} The dot product of the two vectors\n */\n Vector.dot = function(vectorA, vectorB) {\n return (vectorA.x * vectorB.x) + (vectorA.y * vectorB.y);\n };\n\n /**\n * Returns the cross-product of two vectors.\n * @method cross\n * @param {vector} vectorA\n * @param {vector} vectorB\n * @return {number} The cross product of the two vectors\n */\n Vector.cross = function(vectorA, vectorB) {\n return (vectorA.x * vectorB.y) - (vectorA.y * vectorB.x);\n };\n\n /**\n * Returns the cross-product of three vectors.\n * @method cross3\n * @param {vector} vectorA\n * @param {vector} vectorB\n * @param {vector} vectorC\n * @return {number} The cross product of the three vectors\n */\n Vector.cross3 = function(vectorA, vectorB, vectorC) {\n return (vectorB.x - vectorA.x) * (vectorC.y - vectorA.y) - (vectorB.y - vectorA.y) * (vectorC.x - vectorA.x);\n };\n\n /**\n * Adds the two vectors.\n * @method add\n * @param {vector} vectorA\n * @param {vector} vectorB\n * @param {vector} [output]\n * @return {vector} A new vector of vectorA and vectorB added\n */\n Vector.add = function(vectorA, vectorB, output) {\n if (!output) output = {};\n output.x = vectorA.x + vectorB.x;\n output.y = vectorA.y + vectorB.y;\n return output;\n };\n\n /**\n * Subtracts the two vectors.\n * @method sub\n * @param {vector} vectorA\n * @param {vector} vectorB\n * @param {vector} [output]\n * @return {vector} A new vector of vectorA and vectorB subtracted\n */\n Vector.sub = function(vectorA, vectorB, output) {\n if (!output) output = {};\n output.x = vectorA.x - vectorB.x;\n output.y = vectorA.y - vectorB.y;\n return output;\n };\n\n /**\n * Multiplies a vector and a scalar.\n * @method mult\n * @param {vector} vector\n * @param {number} scalar\n * @return {vector} A new vector multiplied by scalar\n */\n Vector.mult = function(vector, scalar) {\n return { x: vector.x * scalar, y: vector.y * scalar };\n };\n\n /**\n * Divides a vector and a scalar.\n * @method div\n * @param {vector} vector\n * @param {number} scalar\n * @return {vector} A new vector divided by scalar\n */\n Vector.div = function(vector, scalar) {\n return { x: vector.x / scalar, y: vector.y / scalar };\n };\n\n /**\n * Returns the perpendicular vector. Set `negate` to true for the perpendicular in the opposite direction.\n * @method perp\n * @param {vector} vector\n * @param {bool} [negate=false]\n * @return {vector} The perpendicular vector\n */\n Vector.perp = function(vector, negate) {\n negate = negate === true ? -1 : 1;\n return { x: negate * -vector.y, y: negate * vector.x };\n };\n\n /**\n * Negates both components of a vector such that it points in the opposite direction.\n * @method neg\n * @param {vector} vector\n * @return {vector} The negated vector\n */\n Vector.neg = function(vector) {\n return { x: -vector.x, y: -vector.y };\n };\n\n /**\n * Returns the angle between the vector `vectorB - vectorA` and the x-axis in radians.\n * @method angle\n * @param {vector} vectorA\n * @param {vector} vectorB\n * @return {number} The angle in radians\n */\n Vector.angle = function(vectorA, vectorB) {\n return Math.atan2(vectorB.y - vectorA.y, vectorB.x - vectorA.x);\n };\n\n /**\n * Temporary vector pool (not thread-safe).\n * @property _temp\n * @type {vector[]}\n * @private\n */\n Vector._temp = [\n Vector.create(), Vector.create(), \n Vector.create(), Vector.create(), \n Vector.create(), Vector.create()\n ];\n\n})();\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.Vertices` module contains methods for creating and manipulating sets of vertices.\n* A set of vertices is an array of `Matter.Vector` with additional indexing properties inserted by `Vertices.create`.\n* A `Matter.Body` maintains a set of vertices to represent the shape of the object (its convex hull).\n*\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\n*\n* @class Vertices\n*/\n\nvar Vertices = {};\n\nmodule.exports = Vertices;\n\nvar Vector = __webpack_require__(2);\nvar Common = __webpack_require__(0);\n\n(function() {\n\n /**\n * Creates a new set of `Matter.Body` compatible vertices.\n * The `points` argument accepts an array of `Matter.Vector` points orientated around the origin `(0, 0)`, for example:\n *\n * [{ x: 0, y: 0 }, { x: 25, y: 50 }, { x: 50, y: 0 }]\n *\n * The `Vertices.create` method returns a new array of vertices, which are similar to Matter.Vector objects,\n * but with some additional references required for efficient collision detection routines.\n *\n * Vertices must be specified in clockwise order.\n *\n * Note that the `body` argument is not optional, a `Matter.Body` reference must be provided.\n *\n * @method create\n * @param {vector[]} points\n * @param {body} body\n */\n Vertices.create = function(points, body) {\n var vertices = [];\n\n for (var i = 0; i < points.length; i++) {\n var point = points[i],\n vertex = {\n x: point.x,\n y: point.y,\n index: i,\n body: body,\n isInternal: false\n };\n\n vertices.push(vertex);\n }\n\n return vertices;\n };\n\n /**\n * Parses a string containing ordered x y pairs separated by spaces (and optionally commas), \n * into a `Matter.Vertices` object for the given `Matter.Body`.\n * For parsing SVG paths, see `Svg.pathToVertices`.\n * @method fromPath\n * @param {string} path\n * @param {body} body\n * @return {vertices} vertices\n */\n Vertices.fromPath = function(path, body) {\n var pathPattern = /L?\\s*([-\\d.e]+)[\\s,]*([-\\d.e]+)*/ig,\n points = [];\n\n path.replace(pathPattern, function(match, x, y) {\n points.push({ x: parseFloat(x), y: parseFloat(y) });\n });\n\n return Vertices.create(points, body);\n };\n\n /**\n * Returns the centre (centroid) of the set of vertices.\n * @method centre\n * @param {vertices} vertices\n * @return {vector} The centre point\n */\n Vertices.centre = function(vertices) {\n var area = Vertices.area(vertices, true),\n centre = { x: 0, y: 0 },\n cross,\n temp,\n j;\n\n for (var i = 0; i < vertices.length; i++) {\n j = (i + 1) % vertices.length;\n cross = Vector.cross(vertices[i], vertices[j]);\n temp = Vector.mult(Vector.add(vertices[i], vertices[j]), cross);\n centre = Vector.add(centre, temp);\n }\n\n return Vector.div(centre, 6 * area);\n };\n\n /**\n * Returns the average (mean) of the set of vertices.\n * @method mean\n * @param {vertices} vertices\n * @return {vector} The average point\n */\n Vertices.mean = function(vertices) {\n var average = { x: 0, y: 0 };\n\n for (var i = 0; i < vertices.length; i++) {\n average.x += vertices[i].x;\n average.y += vertices[i].y;\n }\n\n return Vector.div(average, vertices.length);\n };\n\n /**\n * Returns the area of the set of vertices.\n * @method area\n * @param {vertices} vertices\n * @param {bool} signed\n * @return {number} The area\n */\n Vertices.area = function(vertices, signed) {\n var area = 0,\n j = vertices.length - 1;\n\n for (var i = 0; i < vertices.length; i++) {\n area += (vertices[j].x - vertices[i].x) * (vertices[j].y + vertices[i].y);\n j = i;\n }\n\n if (signed)\n return area / 2;\n\n return Math.abs(area) / 2;\n };\n\n /**\n * Returns the moment of inertia (second moment of area) of the set of vertices given the total mass.\n * @method inertia\n * @param {vertices} vertices\n * @param {number} mass\n * @return {number} The polygon's moment of inertia\n */\n Vertices.inertia = function(vertices, mass) {\n var numerator = 0,\n denominator = 0,\n v = vertices,\n cross,\n j;\n\n // find the polygon's moment of inertia, using second moment of area\n // from equations at http://www.physicsforums.com/showthread.php?t=25293\n for (var n = 0; n < v.length; n++) {\n j = (n + 1) % v.length;\n cross = Math.abs(Vector.cross(v[j], v[n]));\n numerator += cross * (Vector.dot(v[j], v[j]) + Vector.dot(v[j], v[n]) + Vector.dot(v[n], v[n]));\n denominator += cross;\n }\n\n return (mass / 6) * (numerator / denominator);\n };\n\n /**\n * Translates the set of vertices in-place.\n * @method translate\n * @param {vertices} vertices\n * @param {vector} vector\n * @param {number} scalar\n */\n Vertices.translate = function(vertices, vector, scalar) {\n scalar = typeof scalar !== 'undefined' ? scalar : 1;\n\n var verticesLength = vertices.length,\n translateX = vector.x * scalar,\n translateY = vector.y * scalar,\n i;\n \n for (i = 0; i < verticesLength; i++) {\n vertices[i].x += translateX;\n vertices[i].y += translateY;\n }\n\n return vertices;\n };\n\n /**\n * Rotates the set of vertices in-place.\n * @method rotate\n * @param {vertices} vertices\n * @param {number} angle\n * @param {vector} point\n */\n Vertices.rotate = function(vertices, angle, point) {\n if (angle === 0)\n return;\n\n var cos = Math.cos(angle),\n sin = Math.sin(angle),\n pointX = point.x,\n pointY = point.y,\n verticesLength = vertices.length,\n vertex,\n dx,\n dy,\n i;\n\n for (i = 0; i < verticesLength; i++) {\n vertex = vertices[i];\n dx = vertex.x - pointX;\n dy = vertex.y - pointY;\n vertex.x = pointX + (dx * cos - dy * sin);\n vertex.y = pointY + (dx * sin + dy * cos);\n }\n\n return vertices;\n };\n\n /**\n * Returns `true` if the `point` is inside the set of `vertices`.\n * @method contains\n * @param {vertices} vertices\n * @param {vector} point\n * @return {boolean} True if the vertices contains point, otherwise false\n */\n Vertices.contains = function(vertices, point) {\n var pointX = point.x,\n pointY = point.y,\n verticesLength = vertices.length,\n vertex = vertices[verticesLength - 1],\n nextVertex;\n\n for (var i = 0; i < verticesLength; i++) {\n nextVertex = vertices[i];\n\n if ((pointX - vertex.x) * (nextVertex.y - vertex.y) \n + (pointY - vertex.y) * (vertex.x - nextVertex.x) > 0) {\n return false;\n }\n\n vertex = nextVertex;\n }\n\n return true;\n };\n\n /**\n * Scales the vertices from a point (default is centre) in-place.\n * @method scale\n * @param {vertices} vertices\n * @param {number} scaleX\n * @param {number} scaleY\n * @param {vector} point\n */\n Vertices.scale = function(vertices, scaleX, scaleY, point) {\n if (scaleX === 1 && scaleY === 1)\n return vertices;\n\n point = point || Vertices.centre(vertices);\n\n var vertex,\n delta;\n\n for (var i = 0; i < vertices.length; i++) {\n vertex = vertices[i];\n delta = Vector.sub(vertex, point);\n vertices[i].x = point.x + delta.x * scaleX;\n vertices[i].y = point.y + delta.y * scaleY;\n }\n\n return vertices;\n };\n\n /**\n * Chamfers a set of vertices by giving them rounded corners, returns a new set of vertices.\n * The radius parameter is a single number or an array to specify the radius for each vertex.\n * @method chamfer\n * @param {vertices} vertices\n * @param {number[]} radius\n * @param {number} quality\n * @param {number} qualityMin\n * @param {number} qualityMax\n */\n Vertices.chamfer = function(vertices, radius, quality, qualityMin, qualityMax) {\n if (typeof radius === 'number') {\n radius = [radius];\n } else {\n radius = radius || [8];\n }\n\n // quality defaults to -1, which is auto\n quality = (typeof quality !== 'undefined') ? quality : -1;\n qualityMin = qualityMin || 2;\n qualityMax = qualityMax || 14;\n\n var newVertices = [];\n\n for (var i = 0; i < vertices.length; i++) {\n var prevVertex = vertices[i - 1 >= 0 ? i - 1 : vertices.length - 1],\n vertex = vertices[i],\n nextVertex = vertices[(i + 1) % vertices.length],\n currentRadius = radius[i < radius.length ? i : radius.length - 1];\n\n if (currentRadius === 0) {\n newVertices.push(vertex);\n continue;\n }\n\n var prevNormal = Vector.normalise({ \n x: vertex.y - prevVertex.y, \n y: prevVertex.x - vertex.x\n });\n\n var nextNormal = Vector.normalise({ \n x: nextVertex.y - vertex.y, \n y: vertex.x - nextVertex.x\n });\n\n var diagonalRadius = Math.sqrt(2 * Math.pow(currentRadius, 2)),\n radiusVector = Vector.mult(Common.clone(prevNormal), currentRadius),\n midNormal = Vector.normalise(Vector.mult(Vector.add(prevNormal, nextNormal), 0.5)),\n scaledVertex = Vector.sub(vertex, Vector.mult(midNormal, diagonalRadius));\n\n var precision = quality;\n\n if (quality === -1) {\n // automatically decide precision\n precision = Math.pow(currentRadius, 0.32) * 1.75;\n }\n\n precision = Common.clamp(precision, qualityMin, qualityMax);\n\n // use an even value for precision, more likely to reduce axes by using symmetry\n if (precision % 2 === 1)\n precision += 1;\n\n var alpha = Math.acos(Vector.dot(prevNormal, nextNormal)),\n theta = alpha / precision;\n\n for (var j = 0; j < precision; j++) {\n newVertices.push(Vector.add(Vector.rotate(radiusVector, theta * j), scaledVertex));\n }\n }\n\n return newVertices;\n };\n\n /**\n * Sorts the input vertices into clockwise order in place.\n * @method clockwiseSort\n * @param {vertices} vertices\n * @return {vertices} vertices\n */\n Vertices.clockwiseSort = function(vertices) {\n var centre = Vertices.mean(vertices);\n\n vertices.sort(function(vertexA, vertexB) {\n return Vector.angle(centre, vertexA) - Vector.angle(centre, vertexB);\n });\n\n return vertices;\n };\n\n /**\n * Returns true if the vertices form a convex shape (vertices must be in clockwise order).\n * @method isConvex\n * @param {vertices} vertices\n * @return {bool} `true` if the `vertices` are convex, `false` if not (or `null` if not computable).\n */\n Vertices.isConvex = function(vertices) {\n // http://paulbourke.net/geometry/polygonmesh/\n // Copyright (c) Paul Bourke (use permitted)\n\n var flag = 0,\n n = vertices.length,\n i,\n j,\n k,\n z;\n\n if (n < 3)\n return null;\n\n for (i = 0; i < n; i++) {\n j = (i + 1) % n;\n k = (i + 2) % n;\n z = (vertices[j].x - vertices[i].x) * (vertices[k].y - vertices[j].y);\n z -= (vertices[j].y - vertices[i].y) * (vertices[k].x - vertices[j].x);\n\n if (z < 0) {\n flag |= 1;\n } else if (z > 0) {\n flag |= 2;\n }\n\n if (flag === 3) {\n return false;\n }\n }\n\n if (flag !== 0){\n return true;\n } else {\n return null;\n }\n };\n\n /**\n * Returns the convex hull of the input vertices as a new array of points.\n * @method hull\n * @param {vertices} vertices\n * @return [vertex] vertices\n */\n Vertices.hull = function(vertices) {\n // http://geomalgorithms.com/a10-_hull-1.html\n\n var upper = [],\n lower = [], \n vertex,\n i;\n\n // sort vertices on x-axis (y-axis for ties)\n vertices = vertices.slice(0);\n vertices.sort(function(vertexA, vertexB) {\n var dx = vertexA.x - vertexB.x;\n return dx !== 0 ? dx : vertexA.y - vertexB.y;\n });\n\n // build lower hull\n for (i = 0; i < vertices.length; i += 1) {\n vertex = vertices[i];\n\n while (lower.length >= 2 \n && Vector.cross3(lower[lower.length - 2], lower[lower.length - 1], vertex) <= 0) {\n lower.pop();\n }\n\n lower.push(vertex);\n }\n\n // build upper hull\n for (i = vertices.length - 1; i >= 0; i -= 1) {\n vertex = vertices[i];\n\n while (upper.length >= 2 \n && Vector.cross3(upper[upper.length - 2], upper[upper.length - 1], vertex) <= 0) {\n upper.pop();\n }\n\n upper.push(vertex);\n }\n\n // concatenation of the lower and upper hulls gives the convex hull\n // omit last points because they are repeated at the beginning of the other list\n upper.pop();\n lower.pop();\n\n return upper.concat(lower);\n };\n\n})();\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.Body` module contains methods for creating and manipulating rigid bodies.\n* For creating bodies with common configurations such as rectangles, circles and other polygons see the module `Matter.Bodies`.\n*\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\n\n* @class Body\n*/\n\nvar Body = {};\n\nmodule.exports = Body;\n\nvar Vertices = __webpack_require__(3);\nvar Vector = __webpack_require__(2);\nvar Sleeping = __webpack_require__(7);\nvar Common = __webpack_require__(0);\nvar Bounds = __webpack_require__(1);\nvar Axes = __webpack_require__(11);\n\n(function() {\n\n Body._timeCorrection = true;\n Body._inertiaScale = 4;\n Body._nextCollidingGroupId = 1;\n Body._nextNonCollidingGroupId = -1;\n Body._nextCategory = 0x0001;\n Body._baseDelta = 1000 / 60;\n\n /**\n * Creates a new rigid body model. The options parameter is an object that specifies any properties you wish to override the defaults.\n * All properties have default values, and many are pre-calculated automatically based on other properties.\n * Vertices must be specified in clockwise order.\n * See the properties section below for detailed information on what you can pass via the `options` object.\n * @method create\n * @param {} options\n * @return {body} body\n */\n Body.create = function(options) {\n var defaults = {\n id: Common.nextId(),\n type: 'body',\n label: 'Body',\n parts: [],\n plugin: {},\n angle: 0,\n vertices: Vertices.fromPath('L 0 0 L 40 0 L 40 40 L 0 40'),\n position: { x: 0, y: 0 },\n force: { x: 0, y: 0 },\n torque: 0,\n positionImpulse: { x: 0, y: 0 },\n constraintImpulse: { x: 0, y: 0, angle: 0 },\n totalContacts: 0,\n speed: 0,\n angularSpeed: 0,\n velocity: { x: 0, y: 0 },\n angularVelocity: 0,\n isSensor: false,\n isStatic: false,\n isSleeping: false,\n motion: 0,\n sleepThreshold: 60,\n density: 0.001,\n restitution: 0,\n friction: 0.1,\n frictionStatic: 0.5,\n frictionAir: 0.01,\n collisionFilter: {\n category: 0x0001,\n mask: 0xFFFFFFFF,\n group: 0\n },\n slop: 0.05,\n timeScale: 1,\n render: {\n visible: true,\n opacity: 1,\n strokeStyle: null,\n fillStyle: null,\n lineWidth: null,\n sprite: {\n xScale: 1,\n yScale: 1,\n xOffset: 0,\n yOffset: 0\n }\n },\n events: null,\n bounds: null,\n chamfer: null,\n circleRadius: 0,\n positionPrev: null,\n anglePrev: 0,\n parent: null,\n axes: null,\n area: 0,\n mass: 0,\n inertia: 0,\n deltaTime: 1000 / 60,\n _original: null\n };\n\n var body = Common.extend(defaults, options);\n\n _initProperties(body, options);\n\n return body;\n };\n\n /**\n * Returns the next unique group index for which bodies will collide.\n * If `isNonColliding` is `true`, returns the next unique group index for which bodies will _not_ collide.\n * See `body.collisionFilter` for more information.\n * @method nextGroup\n * @param {bool} [isNonColliding=false]\n * @return {Number} Unique group index\n */\n Body.nextGroup = function(isNonColliding) {\n if (isNonColliding)\n return Body._nextNonCollidingGroupId--;\n\n return Body._nextCollidingGroupId++;\n };\n\n /**\n * Returns the next unique category bitfield (starting after the initial default category `0x0001`).\n * There are 32 available. See `body.collisionFilter` for more information.\n * @method nextCategory\n * @return {Number} Unique category bitfield\n */\n Body.nextCategory = function() {\n Body._nextCategory = Body._nextCategory << 1;\n return Body._nextCategory;\n };\n\n /**\n * Initialises body properties.\n * @method _initProperties\n * @private\n * @param {body} body\n * @param {} [options]\n */\n var _initProperties = function(body, options) {\n options = options || {};\n\n // init required properties (order is important)\n Body.set(body, {\n bounds: body.bounds || Bounds.create(body.vertices),\n positionPrev: body.positionPrev || Vector.clone(body.position),\n anglePrev: body.anglePrev || body.angle,\n vertices: body.vertices,\n parts: body.parts || [body],\n isStatic: body.isStatic,\n isSleeping: body.isSleeping,\n parent: body.parent || body\n });\n\n Vertices.rotate(body.vertices, body.angle, body.position);\n Axes.rotate(body.axes, body.angle);\n Bounds.update(body.bounds, body.vertices, body.velocity);\n\n // allow options to override the automatically calculated properties\n Body.set(body, {\n axes: options.axes || body.axes,\n area: options.area || body.area,\n mass: options.mass || body.mass,\n inertia: options.inertia || body.inertia\n });\n\n // render properties\n var defaultFillStyle = (body.isStatic ? '#14151f' : Common.choose(['#f19648', '#f5d259', '#f55a3c', '#063e7b', '#ececd1'])),\n defaultStrokeStyle = body.isStatic ? '#555' : '#ccc',\n defaultLineWidth = body.isStatic && body.render.fillStyle === null ? 1 : 0;\n body.render.fillStyle = body.render.fillStyle || defaultFillStyle;\n body.render.strokeStyle = body.render.strokeStyle || defaultStrokeStyle;\n body.render.lineWidth = body.render.lineWidth || defaultLineWidth;\n body.render.sprite.xOffset += -(body.bounds.min.x - body.position.x) / (body.bounds.max.x - body.bounds.min.x);\n body.render.sprite.yOffset += -(body.bounds.min.y - body.position.y) / (body.bounds.max.y - body.bounds.min.y);\n };\n\n /**\n * Given a property and a value (or map of), sets the property(s) on the body, using the appropriate setter functions if they exist.\n * Prefer to use the actual setter functions in performance critical situations.\n * @method set\n * @param {body} body\n * @param {} settings A property name (or map of properties and values) to set on the body.\n * @param {} value The value to set if `settings` is a single property name.\n */\n Body.set = function(body, settings, value) {\n var property;\n\n if (typeof settings === 'string') {\n property = settings;\n settings = {};\n settings[property] = value;\n }\n\n for (property in settings) {\n if (!Object.prototype.hasOwnProperty.call(settings, property))\n continue;\n\n value = settings[property];\n switch (property) {\n\n case 'isStatic':\n Body.setStatic(body, value);\n break;\n case 'isSleeping':\n Sleeping.set(body, value);\n break;\n case 'mass':\n Body.setMass(body, value);\n break;\n case 'density':\n Body.setDensity(body, value);\n break;\n case 'inertia':\n Body.setInertia(body, value);\n break;\n case 'vertices':\n Body.setVertices(body, value);\n break;\n case 'position':\n Body.setPosition(body, value);\n break;\n case 'angle':\n Body.setAngle(body, value);\n break;\n case 'velocity':\n Body.setVelocity(body, value);\n break;\n case 'angularVelocity':\n Body.setAngularVelocity(body, value);\n break;\n case 'speed':\n Body.setSpeed(body, value);\n break;\n case 'angularSpeed':\n Body.setAngularSpeed(body, value);\n break;\n case 'parts':\n Body.setParts(body, value);\n break;\n case 'centre':\n Body.setCentre(body, value);\n break;\n default:\n body[property] = value;\n\n }\n }\n };\n\n /**\n * Sets the body as static, including isStatic flag and setting mass and inertia to Infinity.\n * @method setStatic\n * @param {body} body\n * @param {bool} isStatic\n */\n Body.setStatic = function(body, isStatic) {\n for (var i = 0; i < body.parts.length; i++) {\n var part = body.parts[i];\n\n if (isStatic) {\n if (!part.isStatic) {\n part._original = {\n restitution: part.restitution,\n friction: part.friction,\n mass: part.mass,\n inertia: part.inertia,\n density: part.density,\n inverseMass: part.inverseMass,\n inverseInertia: part.inverseInertia\n };\n }\n\n part.restitution = 0;\n part.friction = 1;\n part.mass = part.inertia = part.density = Infinity;\n part.inverseMass = part.inverseInertia = 0;\n\n part.positionPrev.x = part.position.x;\n part.positionPrev.y = part.position.y;\n part.anglePrev = part.angle;\n part.angularVelocity = 0;\n part.speed = 0;\n part.angularSpeed = 0;\n part.motion = 0;\n } else if (part._original) {\n part.restitution = part._original.restitution;\n part.friction = part._original.friction;\n part.mass = part._original.mass;\n part.inertia = part._original.inertia;\n part.density = part._original.density;\n part.inverseMass = part._original.inverseMass;\n part.inverseInertia = part._original.inverseInertia;\n\n part._original = null;\n }\n\n part.isStatic = isStatic;\n }\n };\n\n /**\n * Sets the mass of the body. Inverse mass, density and inertia are automatically updated to reflect the change.\n * @method setMass\n * @param {body} body\n * @param {number} mass\n */\n Body.setMass = function(body, mass) {\n var moment = body.inertia / (body.mass / 6);\n body.inertia = moment * (mass / 6);\n body.inverseInertia = 1 / body.inertia;\n\n body.mass = mass;\n body.inverseMass = 1 / body.mass;\n body.density = body.mass / body.area;\n };\n\n /**\n * Sets the density of the body. Mass and inertia are automatically updated to reflect the change.\n * @method setDensity\n * @param {body} body\n * @param {number} density\n */\n Body.setDensity = function(body, density) {\n Body.setMass(body, density * body.area);\n body.density = density;\n };\n\n /**\n * Sets the moment of inertia of the body. This is the second moment of area in two dimensions.\n * Inverse inertia is automatically updated to reflect the change. Mass is not changed.\n * @method setInertia\n * @param {body} body\n * @param {number} inertia\n */\n Body.setInertia = function(body, inertia) {\n body.inertia = inertia;\n body.inverseInertia = 1 / body.inertia;\n };\n\n /**\n * Sets the body's vertices and updates body properties accordingly, including inertia, area and mass (with respect to `body.density`).\n * Vertices will be automatically transformed to be orientated around their centre of mass as the origin.\n * They are then automatically translated to world space based on `body.position`.\n *\n * The `vertices` argument should be passed as an array of `Matter.Vector` points (or a `Matter.Vertices` array).\n * Vertices must form a convex hull. Concave vertices must be decomposed into convex parts.\n * \n * @method setVertices\n * @param {body} body\n * @param {vector[]} vertices\n */\n Body.setVertices = function(body, vertices) {\n // change vertices\n if (vertices[0].body === body) {\n body.vertices = vertices;\n } else {\n body.vertices = Vertices.create(vertices, body);\n }\n\n // update properties\n body.axes = Axes.fromVertices(body.vertices);\n body.area = Vertices.area(body.vertices);\n Body.setMass(body, body.density * body.area);\n\n // orient vertices around the centre of mass at origin (0, 0)\n var centre = Vertices.centre(body.vertices);\n Vertices.translate(body.vertices, centre, -1);\n\n // update inertia while vertices are at origin (0, 0)\n Body.setInertia(body, Body._inertiaScale * Vertices.inertia(body.vertices, body.mass));\n\n // update geometry\n Vertices.translate(body.vertices, body.position);\n Bounds.update(body.bounds, body.vertices, body.velocity);\n };\n\n /**\n * Sets the parts of the `body`. \n * \n * See `body.parts` for details and requirements on how parts are used.\n * \n * See Bodies.fromVertices for a related utility.\n * \n * This function updates `body` mass, inertia and centroid based on the parts geometry. \n * Sets each `part.parent` to be this `body`. \n * \n * The convex hull is computed and set on this `body` (unless `autoHull` is `false`). \n * Automatically ensures that the first part in `body.parts` is the `body`.\n * @method setParts\n * @param {body} body\n * @param {body[]} parts\n * @param {bool} [autoHull=true]\n */\n Body.setParts = function(body, parts, autoHull) {\n var i;\n\n // add all the parts, ensuring that the first part is always the parent body\n parts = parts.slice(0);\n body.parts.length = 0;\n body.parts.push(body);\n body.parent = body;\n\n for (i = 0; i < parts.length; i++) {\n var part = parts[i];\n if (part !== body) {\n part.parent = body;\n body.parts.push(part);\n }\n }\n\n if (body.parts.length === 1)\n return;\n\n autoHull = typeof autoHull !== 'undefined' ? autoHull : true;\n\n // find the convex hull of all parts to set on the parent body\n if (autoHull) {\n var vertices = [];\n for (i = 0; i < parts.length; i++) {\n vertices = vertices.concat(parts[i].vertices);\n }\n\n Vertices.clockwiseSort(vertices);\n\n var hull = Vertices.hull(vertices),\n hullCentre = Vertices.centre(hull);\n\n Body.setVertices(body, hull);\n Vertices.translate(body.vertices, hullCentre);\n }\n\n // sum the properties of all compound parts of the parent body\n var total = Body._totalProperties(body);\n\n body.area = total.area;\n body.parent = body;\n body.position.x = total.centre.x;\n body.position.y = total.centre.y;\n body.positionPrev.x = total.centre.x;\n body.positionPrev.y = total.centre.y;\n\n Body.setMass(body, total.mass);\n Body.setInertia(body, total.inertia);\n Body.setPosition(body, total.centre);\n };\n\n /**\n * Set the centre of mass of the body. \n * The `centre` is a vector in world-space unless `relative` is set, in which case it is a translation.\n * The centre of mass is the point the body rotates about and can be used to simulate non-uniform density.\n * This is equal to moving `body.position` but not the `body.vertices`.\n * Invalid if the `centre` falls outside the body's convex hull.\n * @method setCentre\n * @param {body} body\n * @param {vector} centre\n * @param {bool} relative\n */\n Body.setCentre = function(body, centre, relative) {\n if (!relative) {\n body.positionPrev.x = centre.x - (body.position.x - body.positionPrev.x);\n body.positionPrev.y = centre.y - (body.position.y - body.positionPrev.y);\n body.position.x = centre.x;\n body.position.y = centre.y;\n } else {\n body.positionPrev.x += centre.x;\n body.positionPrev.y += centre.y;\n body.position.x += centre.x;\n body.position.y += centre.y;\n }\n };\n\n /**\n * Sets the position of the body. By default velocity is unchanged.\n * If `updateVelocity` is `true` then velocity is inferred from the change in position.\n * @method setPosition\n * @param {body} body\n * @param {vector} position\n * @param {boolean} [updateVelocity=false]\n */\n Body.setPosition = function(body, position, updateVelocity) {\n var delta = Vector.sub(position, body.position);\n\n if (updateVelocity) {\n body.positionPrev.x = body.position.x;\n body.positionPrev.y = body.position.y;\n body.velocity.x = delta.x;\n body.velocity.y = delta.y;\n body.speed = Vector.magnitude(delta);\n } else {\n body.positionPrev.x += delta.x;\n body.positionPrev.y += delta.y;\n }\n\n for (var i = 0; i < body.parts.length; i++) {\n var part = body.parts[i];\n part.position.x += delta.x;\n part.position.y += delta.y;\n Vertices.translate(part.vertices, delta);\n Bounds.update(part.bounds, part.vertices, body.velocity);\n }\n };\n\n /**\n * Sets the angle of the body. By default angular velocity is unchanged.\n * If `updateVelocity` is `true` then angular velocity is inferred from the change in angle.\n * @method setAngle\n * @param {body} body\n * @param {number} angle\n * @param {boolean} [updateVelocity=false]\n */\n Body.setAngle = function(body, angle, updateVelocity) {\n var delta = angle - body.angle;\n \n if (updateVelocity) {\n body.anglePrev = body.angle;\n body.angularVelocity = delta;\n body.angularSpeed = Math.abs(delta);\n } else {\n body.anglePrev += delta;\n }\n\n for (var i = 0; i < body.parts.length; i++) {\n var part = body.parts[i];\n part.angle += delta;\n Vertices.rotate(part.vertices, delta, body.position);\n Axes.rotate(part.axes, delta);\n Bounds.update(part.bounds, part.vertices, body.velocity);\n if (i > 0) {\n Vector.rotateAbout(part.position, delta, body.position, part.position);\n }\n }\n };\n\n /**\n * Sets the current linear velocity of the body. \n * Affects body speed.\n * @method setVelocity\n * @param {body} body\n * @param {vector} velocity\n */\n Body.setVelocity = function(body, velocity) {\n var timeScale = body.deltaTime / Body._baseDelta;\n body.positionPrev.x = body.position.x - velocity.x * timeScale;\n body.positionPrev.y = body.position.y - velocity.y * timeScale;\n body.velocity.x = (body.position.x - body.positionPrev.x) / timeScale;\n body.velocity.y = (body.position.y - body.positionPrev.y) / timeScale;\n body.speed = Vector.magnitude(body.velocity);\n };\n\n /**\n * Gets the current linear velocity of the body.\n * @method getVelocity\n * @param {body} body\n * @return {vector} velocity\n */\n Body.getVelocity = function(body) {\n var timeScale = Body._baseDelta / body.deltaTime;\n\n return {\n x: (body.position.x - body.positionPrev.x) * timeScale,\n y: (body.position.y - body.positionPrev.y) * timeScale\n };\n };\n\n /**\n * Gets the current linear speed of the body. \n * Equivalent to the magnitude of its velocity.\n * @method getSpeed\n * @param {body} body\n * @return {number} speed\n */\n Body.getSpeed = function(body) {\n return Vector.magnitude(Body.getVelocity(body));\n };\n\n /**\n * Sets the current linear speed of the body. \n * Direction is maintained. Affects body velocity.\n * @method setSpeed\n * @param {body} body\n * @param {number} speed\n */\n Body.setSpeed = function(body, speed) {\n Body.setVelocity(body, Vector.mult(Vector.normalise(Body.getVelocity(body)), speed));\n };\n\n /**\n * Sets the current rotational velocity of the body. \n * Affects body angular speed.\n * @method setAngularVelocity\n * @param {body} body\n * @param {number} velocity\n */\n Body.setAngularVelocity = function(body, velocity) {\n var timeScale = body.deltaTime / Body._baseDelta;\n body.anglePrev = body.angle - velocity * timeScale;\n body.angularVelocity = (body.angle - body.anglePrev) / timeScale;\n body.angularSpeed = Math.abs(body.angularVelocity);\n };\n\n /**\n * Gets the current rotational velocity of the body.\n * @method getAngularVelocity\n * @param {body} body\n * @return {number} angular velocity\n */\n Body.getAngularVelocity = function(body) {\n return (body.angle - body.anglePrev) * Body._baseDelta / body.deltaTime;\n };\n\n /**\n * Gets the current rotational speed of the body. \n * Equivalent to the magnitude of its angular velocity.\n * @method getAngularSpeed\n * @param {body} body\n * @return {number} angular speed\n */\n Body.getAngularSpeed = function(body) {\n return Math.abs(Body.getAngularVelocity(body));\n };\n\n /**\n * Sets the current rotational speed of the body. \n * Direction is maintained. Affects body angular velocity.\n * @method setAngularSpeed\n * @param {body} body\n * @param {number} speed\n */\n Body.setAngularSpeed = function(body, speed) {\n Body.setAngularVelocity(body, Common.sign(Body.getAngularVelocity(body)) * speed);\n };\n\n /**\n * Moves a body by a given vector relative to its current position. By default velocity is unchanged.\n * If `updateVelocity` is `true` then velocity is inferred from the change in position.\n * @method translate\n * @param {body} body\n * @param {vector} translation\n * @param {boolean} [updateVelocity=false]\n */\n Body.translate = function(body, translation, updateVelocity) {\n Body.setPosition(body, Vector.add(body.position, translation), updateVelocity);\n };\n\n /**\n * Rotates a body by a given angle relative to its current angle. By default angular velocity is unchanged.\n * If `updateVelocity` is `true` then angular velocity is inferred from the change in angle.\n * @method rotate\n * @param {body} body\n * @param {number} rotation\n * @param {vector} [point]\n * @param {boolean} [updateVelocity=false]\n */\n Body.rotate = function(body, rotation, point, updateVelocity) {\n if (!point) {\n Body.setAngle(body, body.angle + rotation, updateVelocity);\n } else {\n var cos = Math.cos(rotation),\n sin = Math.sin(rotation),\n dx = body.position.x - point.x,\n dy = body.position.y - point.y;\n \n Body.setPosition(body, {\n x: point.x + (dx * cos - dy * sin),\n y: point.y + (dx * sin + dy * cos)\n }, updateVelocity);\n\n Body.setAngle(body, body.angle + rotation, updateVelocity);\n }\n };\n\n /**\n * Scales the body, including updating physical properties (mass, area, axes, inertia), from a world-space point (default is body centre).\n * @method scale\n * @param {body} body\n * @param {number} scaleX\n * @param {number} scaleY\n * @param {vector} [point]\n */\n Body.scale = function(body, scaleX, scaleY, point) {\n var totalArea = 0,\n totalInertia = 0;\n\n point = point || body.position;\n\n for (var i = 0; i < body.parts.length; i++) {\n var part = body.parts[i];\n\n // scale vertices\n Vertices.scale(part.vertices, scaleX, scaleY, point);\n\n // update properties\n part.axes = Axes.fromVertices(part.vertices);\n part.area = Vertices.area(part.vertices);\n Body.setMass(part, body.density * part.area);\n\n // update inertia (requires vertices to be at origin)\n Vertices.translate(part.vertices, { x: -part.position.x, y: -part.position.y });\n Body.setInertia(part, Body._inertiaScale * Vertices.inertia(part.vertices, part.mass));\n Vertices.translate(part.vertices, { x: part.position.x, y: part.position.y });\n\n if (i > 0) {\n totalArea += part.area;\n totalInertia += part.inertia;\n }\n\n // scale position\n part.position.x = point.x + (part.position.x - point.x) * scaleX;\n part.position.y = point.y + (part.position.y - point.y) * scaleY;\n\n // update bounds\n Bounds.update(part.bounds, part.vertices, body.velocity);\n }\n\n // handle parent body\n if (body.parts.length > 1) {\n body.area = totalArea;\n\n if (!body.isStatic) {\n Body.setMass(body, body.density * totalArea);\n Body.setInertia(body, totalInertia);\n }\n }\n\n // handle circles\n if (body.circleRadius) { \n if (scaleX === scaleY) {\n body.circleRadius *= scaleX;\n } else {\n // body is no longer a circle\n body.circleRadius = null;\n }\n }\n };\n\n /**\n * Performs an update by integrating the equations of motion on the `body`.\n * This is applied every update by `Matter.Engine` automatically.\n * @method update\n * @param {body} body\n * @param {number} [deltaTime=16.666]\n */\n Body.update = function(body, deltaTime) {\n deltaTime = (typeof deltaTime !== 'undefined' ? deltaTime : (1000 / 60)) * body.timeScale;\n\n var deltaTimeSquared = deltaTime * deltaTime,\n correction = Body._timeCorrection ? deltaTime / (body.deltaTime || deltaTime) : 1;\n\n // from the previous step\n var frictionAir = 1 - body.frictionAir * (deltaTime / Common._baseDelta),\n velocityPrevX = (body.position.x - body.positionPrev.x) * correction,\n velocityPrevY = (body.position.y - body.positionPrev.y) * correction;\n\n // update velocity with Verlet integration\n body.velocity.x = (velocityPrevX * frictionAir) + (body.force.x / body.mass) * deltaTimeSquared;\n body.velocity.y = (velocityPrevY * frictionAir) + (body.force.y / body.mass) * deltaTimeSquared;\n\n body.positionPrev.x = body.position.x;\n body.positionPrev.y = body.position.y;\n body.position.x += body.velocity.x;\n body.position.y += body.velocity.y;\n body.deltaTime = deltaTime;\n\n // update angular velocity with Verlet integration\n body.angularVelocity = ((body.angle - body.anglePrev) * frictionAir * correction) + (body.torque / body.inertia) * deltaTimeSquared;\n body.anglePrev = body.angle;\n body.angle += body.angularVelocity;\n\n // transform the body geometry\n for (var i = 0; i < body.parts.length; i++) {\n var part = body.parts[i];\n\n Vertices.translate(part.vertices, body.velocity);\n \n if (i > 0) {\n part.position.x += body.velocity.x;\n part.position.y += body.velocity.y;\n }\n\n if (body.angularVelocity !== 0) {\n Vertices.rotate(part.vertices, body.angularVelocity, body.position);\n Axes.rotate(part.axes, body.angularVelocity);\n if (i > 0) {\n Vector.rotateAbout(part.position, body.angularVelocity, body.position, part.position);\n }\n }\n\n Bounds.update(part.bounds, part.vertices, body.velocity);\n }\n };\n\n /**\n * Updates properties `body.velocity`, `body.speed`, `body.angularVelocity` and `body.angularSpeed` which are normalised in relation to `Body._baseDelta`.\n * @method updateVelocities\n * @param {body} body\n */\n Body.updateVelocities = function(body) {\n var timeScale = Body._baseDelta / body.deltaTime,\n bodyVelocity = body.velocity;\n\n bodyVelocity.x = (body.position.x - body.positionPrev.x) * timeScale;\n bodyVelocity.y = (body.position.y - body.positionPrev.y) * timeScale;\n body.speed = Math.sqrt((bodyVelocity.x * bodyVelocity.x) + (bodyVelocity.y * bodyVelocity.y));\n\n body.angularVelocity = (body.angle - body.anglePrev) * timeScale;\n body.angularSpeed = Math.abs(body.angularVelocity);\n };\n\n /**\n * Applies the `force` to the `body` from the force origin `position` in world-space, over a single timestep, including applying any resulting angular torque.\n * \n * Forces are useful for effects like gravity, wind or rocket thrust, but can be difficult in practice when precise control is needed. In these cases see `Body.setVelocity` and `Body.setPosition` as an alternative.\n * \n * The force from this function is only applied once for the duration of a single timestep, in other words the duration depends directly on the current engine update `delta` and the rate of calls to this function.\n * \n * Therefore to account for time, you should apply the force constantly over as many engine updates as equivalent to the intended duration.\n * \n * If all or part of the force duration is some fraction of a timestep, first multiply the force by `duration / timestep`.\n * \n * The force origin `position` in world-space must also be specified. Passing `body.position` will result in zero angular effect as the force origin would be at the centre of mass.\n * \n * The `body` will take time to accelerate under a force, the resulting effect depends on duration of the force, the body mass and other forces on the body including friction combined.\n * @method applyForce\n * @param {body} body\n * @param {vector} position The force origin in world-space. Pass `body.position` to avoid angular torque.\n * @param {vector} force\n */\n Body.applyForce = function(body, position, force) {\n var offset = { x: position.x - body.position.x, y: position.y - body.position.y };\n body.force.x += force.x;\n body.force.y += force.y;\n body.torque += offset.x * force.y - offset.y * force.x;\n };\n\n /**\n * Returns the sums of the properties of all compound parts of the parent body.\n * @method _totalProperties\n * @private\n * @param {body} body\n * @return {}\n */\n Body._totalProperties = function(body) {\n // from equations at:\n // https://ecourses.ou.edu/cgi-bin/ebook.cgi?doc=&topic=st&chap_sec=07.2&page=theory\n // http://output.to/sideway/default.asp?qno=121100087\n\n var properties = {\n mass: 0,\n area: 0,\n inertia: 0,\n centre: { x: 0, y: 0 }\n };\n\n // sum the properties of all compound parts of the parent body\n for (var i = body.parts.length === 1 ? 0 : 1; i < body.parts.length; i++) {\n var part = body.parts[i],\n mass = part.mass !== Infinity ? part.mass : 1;\n\n properties.mass += mass;\n properties.area += part.area;\n properties.inertia += part.inertia;\n properties.centre = Vector.add(properties.centre, Vector.mult(part.position, mass));\n }\n\n properties.centre = Vector.div(properties.centre, properties.mass);\n\n return properties;\n };\n\n /*\n *\n * Events Documentation\n *\n */\n\n /**\n * Fired when a body starts sleeping (where `this` is the body).\n *\n * @event sleepStart\n * @this {body} The body that has started sleeping\n * @param {} event An event object\n * @param {} event.source The source object of the event\n * @param {} event.name The name of the event\n */\n\n /**\n * Fired when a body ends sleeping (where `this` is the body).\n *\n * @event sleepEnd\n * @this {body} The body that has ended sleeping\n * @param {} event An event object\n * @param {} event.source The source object of the event\n * @param {} event.name The name of the event\n */\n\n /*\n *\n * Properties Documentation\n *\n */\n\n /**\n * An integer `Number` uniquely identifying number generated in `Body.create` by `Common.nextId`.\n *\n * @property id\n * @type number\n */\n\n /**\n * _Read only_. Set by `Body.create`.\n * \n * A `String` denoting the type of object.\n *\n * @readOnly\n * @property type\n * @type string\n * @default \"body\"\n */\n\n /**\n * An arbitrary `String` name to help the user identify and manage bodies.\n *\n * @property label\n * @type string\n * @default \"Body\"\n */\n\n /**\n * _Read only_. Use `Body.setParts` to set. \n * \n * See `Bodies.fromVertices` for a related utility.\n * \n * An array of bodies (the 'parts') that make up this body (the 'parent'). The first body in this array must always be a self-reference to this `body`. \n * \n * The parts are fixed together and therefore perform as a single unified rigid body.\n * \n * Parts in relation to each other are allowed to overlap, as well as form gaps or holes, so can be used to create complex concave bodies unlike when using a single part. \n * \n * Use properties and functions on the parent `body` rather than on parts.\n * \n * Outside of their geometry, most properties on parts are not considered or updated. \n * As such 'per-part' material properties among others are not currently considered.\n * \n * Parts should be created specifically for their parent body. \n * Parts should not be shared or reused between bodies, only one parent is supported. \n * Parts should not have their own parts, they are not handled recursively. \n * Parts should not be added to the world directly or any other composite. \n * Parts own vertices must be convex and in clockwise order. \n * \n * A body with more than one part is sometimes referred to as a 'compound' body. \n * \n * Use `Body.setParts` when setting parts to ensure correct updates of all properties. \n *\n * @readOnly\n * @property parts\n * @type body[]\n */\n\n /**\n * An object reserved for storing plugin-specific properties.\n *\n * @property plugin\n * @type {}\n */\n\n /**\n * _Read only_. Updated by `Body.setParts`.\n * \n * A reference to the body that this is a part of. See `body.parts`.\n * This is a self reference if the body is not a part of another body.\n *\n * @readOnly\n * @property parent\n * @type body\n */\n\n /**\n * A `Number` specifying the angle of the body, in radians.\n *\n * @property angle\n * @type number\n * @default 0\n */\n\n /**\n * _Read only_. Use `Body.setVertices` or `Body.setParts` to set. See also `Bodies.fromVertices`.\n * \n * An array of `Vector` objects that specify the convex hull of the rigid body.\n * These should be provided about the origin `(0, 0)`. E.g.\n *\n * `[{ x: 0, y: 0 }, { x: 25, y: 50 }, { x: 50, y: 0 }]`\n * \n * Vertices must always be convex, in clockwise order and must not contain any duplicate points.\n * \n * Concave vertices should be decomposed into convex `parts`, see `Bodies.fromVertices` and `Body.setParts`.\n *\n * When set the vertices are translated such that `body.position` is at the centre of mass.\n * Many other body properties are automatically calculated from these vertices when set including `density`, `area` and `inertia`.\n * \n * The module `Matter.Vertices` contains useful methods for working with vertices.\n *\n * @readOnly\n * @property vertices\n * @type vector[]\n */\n\n /**\n * _Read only_. Use `Body.setPosition` to set. \n * \n * A `Vector` that specifies the current world-space position of the body.\n * \n * @readOnly\n * @property position\n * @type vector\n * @default { x: 0, y: 0 }\n */\n\n /**\n * A `Vector` that accumulates the total force applied to the body for a single update.\n * Force is zeroed after every `Engine.update`, so constant forces should be applied for every update they are needed. See also `Body.applyForce`.\n * \n * @property force\n * @type vector\n * @default { x: 0, y: 0 }\n */\n\n /**\n * A `Number` that accumulates the total torque (turning force) applied to the body for a single update. See also `Body.applyForce`.\n * Torque is zeroed after every `Engine.update`, so constant torques should be applied for every update they are needed.\n *\n * Torques result in angular acceleration on every update, which depends on body inertia and the engine update delta.\n * \n * @property torque\n * @type number\n * @default 0\n */\n\n /**\n * _Read only_. Use `Body.setSpeed` to set. \n * \n * See `Body.getSpeed` for details.\n * \n * Equivalent to the magnitude of `body.velocity` (always positive).\n * \n * @readOnly\n * @property speed\n * @type number\n * @default 0\n */\n\n /**\n * _Read only_. Use `Body.setVelocity` to set. \n * \n * See `Body.getVelocity` for details.\n * \n * Equivalent to the magnitude of `body.angularVelocity` (always positive).\n * \n * @readOnly\n * @property velocity\n * @type vector\n * @default { x: 0, y: 0 }\n */\n\n /**\n * _Read only_. Use `Body.setAngularSpeed` to set. \n * \n * See `Body.getAngularSpeed` for details.\n * \n * \n * @readOnly\n * @property angularSpeed\n * @type number\n * @default 0\n */\n\n /**\n * _Read only_. Use `Body.setAngularVelocity` to set. \n * \n * See `Body.getAngularVelocity` for details.\n * \n *\n * @readOnly\n * @property angularVelocity\n * @type number\n * @default 0\n */\n\n /**\n * _Read only_. Use `Body.setStatic` to set. \n * \n * A flag that indicates whether a body is considered static. A static body can never change position or angle and is completely fixed.\n *\n * @readOnly\n * @property isStatic\n * @type boolean\n * @default false\n */\n\n /**\n * A flag that indicates whether a body is a sensor. Sensor triggers collision events, but doesn't react with colliding body physically.\n *\n * @property isSensor\n * @type boolean\n * @default false\n */\n\n /**\n * _Read only_. Use `Sleeping.set` to set. \n * \n * A flag that indicates whether the body is considered sleeping. A sleeping body acts similar to a static body, except it is only temporary and can be awoken.\n *\n * @readOnly\n * @property isSleeping\n * @type boolean\n * @default false\n */\n\n /**\n * _Read only_. Calculated during engine update only when sleeping is enabled.\n * \n * A `Number` that loosely measures the amount of movement a body currently has.\n *\n * Derived from `body.speed^2 + body.angularSpeed^2`. See `Sleeping.update`.\n * \n * @readOnly\n * @property motion\n * @type number\n * @default 0\n */\n\n /**\n * A `Number` that defines the length of time during which this body must have near-zero velocity before it is set as sleeping by the `Matter.Sleeping` module (if sleeping is enabled by the engine).\n * \n * @property sleepThreshold\n * @type number\n * @default 60\n */\n\n /**\n * _Read only_. Use `Body.setDensity` to set. \n * \n * A `Number` that defines the density of the body (mass per unit area).\n * \n * Mass will also be updated when set.\n *\n * @readOnly\n * @property density\n * @type number\n * @default 0.001\n */\n\n /**\n * _Read only_. Use `Body.setMass` to set. \n * \n * A `Number` that defines the mass of the body.\n * \n * Density will also be updated when set.\n * \n * @readOnly\n * @property mass\n * @type number\n */\n\n /**\n * _Read only_. Use `Body.setMass` to set. \n * \n * A `Number` that defines the inverse mass of the body (`1 / mass`).\n *\n * @readOnly\n * @property inverseMass\n * @type number\n */\n\n /**\n * _Read only_. Automatically calculated when vertices, mass or density are set or set through `Body.setInertia`.\n * \n * A `Number` that defines the moment of inertia of the body. This is the second moment of area in two dimensions.\n * \n * Can be manually set to `Infinity` to prevent rotation of the body. See `Body.setInertia`.\n * \n * @readOnly\n * @property inertia\n * @type number\n */\n\n /**\n * _Read only_. Automatically calculated when vertices, mass or density are set or calculated by `Body.setInertia`.\n * \n * A `Number` that defines the inverse moment of inertia of the body (`1 / inertia`).\n * \n * @readOnly\n * @property inverseInertia\n * @type number\n */\n\n /**\n * A `Number` that defines the restitution (elasticity) of the body. The value is always positive and is in the range `(0, 1)`.\n * A value of `0` means collisions may be perfectly inelastic and no bouncing may occur. \n * A value of `0.8` means the body may bounce back with approximately 80% of its kinetic energy.\n * Note that collision response is based on _pairs_ of bodies, and that `restitution` values are _combined_ with the following formula:\n *\n * `Math.max(bodyA.restitution, bodyB.restitution)`\n *\n * @property restitution\n * @type number\n * @default 0\n */\n\n /**\n * A `Number` that defines the friction of the body. The value is always positive and is in the range `(0, 1)`.\n * A value of `0` means that the body may slide indefinitely.\n * A value of `1` means the body may come to a stop almost instantly after a force is applied.\n *\n * The effects of the value may be non-linear. \n * High values may be unstable depending on the body.\n * The engine uses a Coulomb friction model including static and kinetic friction.\n * Note that collision response is based on _pairs_ of bodies, and that `friction` values are _combined_ with the following formula:\n *\n * `Math.min(bodyA.friction, bodyB.friction)`\n *\n * @property friction\n * @type number\n * @default 0.1\n */\n\n /**\n * A `Number` that defines the static friction of the body (in the Coulomb friction model). \n * A value of `0` means the body will never 'stick' when it is nearly stationary and only dynamic `friction` is used.\n * The higher the value (e.g. `10`), the more force it will take to initially get the body moving when nearly stationary.\n * This value is multiplied with the `friction` property to make it easier to change `friction` and maintain an appropriate amount of static friction.\n *\n * @property frictionStatic\n * @type number\n * @default 0.5\n */\n\n /**\n * A `Number` that defines the air friction of the body (air resistance). \n * A value of `0` means the body will never slow as it moves through space.\n * The higher the value, the faster a body slows when moving through space.\n * The effects of the value are non-linear. \n *\n * @property frictionAir\n * @type number\n * @default 0.01\n */\n\n /**\n * An `Object` that specifies the collision filtering properties of this body.\n *\n * Collisions between two bodies will obey the following rules:\n * - If the two bodies have the same non-zero value of `collisionFilter.group`,\n * they will always collide if the value is positive, and they will never collide\n * if the value is negative.\n * - If the two bodies have different values of `collisionFilter.group` or if one\n * (or both) of the bodies has a value of 0, then the category/mask rules apply as follows:\n *\n * Each body belongs to a collision category, given by `collisionFilter.category`. This\n * value is used as a bit field and the category should have only one bit set, meaning that\n * the value of this property is a power of two in the range [1, 2^31]. Thus, there are 32\n * different collision categories available.\n *\n * Each body also defines a collision bitmask, given by `collisionFilter.mask` which specifies\n * the categories it collides with (the value is the bitwise AND value of all these categories).\n *\n * Using the category/mask rules, two bodies `A` and `B` collide if each includes the other's\n * category in its mask, i.e. `(categoryA & maskB) !== 0` and `(categoryB & maskA) !== 0`\n * are both true.\n *\n * @property collisionFilter\n * @type object\n */\n\n /**\n * An Integer `Number`, that specifies the collision group this body belongs to.\n * See `body.collisionFilter` for more information.\n *\n * @property collisionFilter.group\n * @type object\n * @default 0\n */\n\n /**\n * A bit field that specifies the collision category this body belongs to.\n * The category value should have only one bit set, for example `0x0001`.\n * This means there are up to 32 unique collision categories available.\n * See `body.collisionFilter` for more information.\n *\n * @property collisionFilter.category\n * @type object\n * @default 1\n */\n\n /**\n * A bit mask that specifies the collision categories this body may collide with.\n * See `body.collisionFilter` for more information.\n *\n * @property collisionFilter.mask\n * @type object\n * @default -1\n */\n\n /**\n * A `Number` that specifies a thin boundary around the body where it is allowed to slightly sink into other bodies.\n * \n * This is required for proper collision response, including friction and restitution effects.\n * \n * The default should generally suffice in most cases. You may need to decrease this value for very small bodies that are nearing the default value in scale.\n *\n * @property slop\n * @type number\n * @default 0.05\n */\n\n /**\n * A `Number` that specifies per-body time scaling.\n *\n * @property timeScale\n * @type number\n * @default 1\n */\n\n /**\n * _Read only_. Updated during engine update.\n * \n * A `Number` that records the last delta time value used to update this body.\n * Used to calculate speed and velocity.\n *\n * @readOnly\n * @property deltaTime\n * @type number\n * @default 1000 / 60\n */\n\n /**\n * An `Object` that defines the rendering properties to be consumed by the module `Matter.Render`.\n *\n * @property render\n * @type object\n */\n\n /**\n * A flag that indicates if the body should be rendered.\n *\n * @property render.visible\n * @type boolean\n * @default true\n */\n\n /**\n * Sets the opacity to use when rendering.\n *\n * @property render.opacity\n * @type number\n * @default 1\n */\n\n /**\n * An `Object` that defines the sprite properties to use when rendering, if any.\n *\n * @property render.sprite\n * @type object\n */\n\n /**\n * An `String` that defines the path to the image to use as the sprite texture, if any.\n *\n * @property render.sprite.texture\n * @type string\n */\n \n /**\n * A `Number` that defines the scaling in the x-axis for the sprite, if any.\n *\n * @property render.sprite.xScale\n * @type number\n * @default 1\n */\n\n /**\n * A `Number` that defines the scaling in the y-axis for the sprite, if any.\n *\n * @property render.sprite.yScale\n * @type number\n * @default 1\n */\n\n /**\n * A `Number` that defines the offset in the x-axis for the sprite (normalised by texture width).\n *\n * @property render.sprite.xOffset\n * @type number\n * @default 0\n */\n\n /**\n * A `Number` that defines the offset in the y-axis for the sprite (normalised by texture height).\n *\n * @property render.sprite.yOffset\n * @type number\n * @default 0\n */\n\n /**\n * A `Number` that defines the line width to use when rendering the body outline (if a sprite is not defined).\n * A value of `0` means no outline will be rendered.\n *\n * @property render.lineWidth\n * @type number\n * @default 0\n */\n\n /**\n * A `String` that defines the fill style to use when rendering the body (if a sprite is not defined).\n * It is the same as when using a canvas, so it accepts CSS style property values.\n *\n * @property render.fillStyle\n * @type string\n * @default a random colour\n */\n\n /**\n * A `String` that defines the stroke style to use when rendering the body outline (if a sprite is not defined).\n * It is the same as when using a canvas, so it accepts CSS style property values.\n *\n * @property render.strokeStyle\n * @type string\n * @default a random colour\n */\n\n /**\n * _Read only_. Calculated automatically when vertices are set.\n * \n * An array of unique axis vectors (edge normals) used for collision detection.\n * These are automatically calculated when vertices are set.\n * They are constantly updated by `Body.update` during the simulation.\n *\n * @readOnly\n * @property axes\n * @type vector[]\n */\n \n /**\n * _Read only_. Calculated automatically when vertices are set.\n * \n * A `Number` that measures the area of the body's convex hull.\n * \n * @readOnly\n * @property area\n * @type string\n * @default \n */\n\n /**\n * A `Bounds` object that defines the AABB region for the body.\n * It is automatically calculated when vertices are set and constantly updated by `Body.update` during simulation.\n * \n * @property bounds\n * @type bounds\n */\n\n /**\n * Temporarily may hold parameters to be passed to `Vertices.chamfer` where supported by external functions.\n * \n * See `Vertices.chamfer` for possible parameters this object may hold.\n * \n * Currently only functions inside `Matter.Bodies` provide a utility using this property as a vertices pre-processing option.\n * \n * Alternatively consider using `Vertices.chamfer` directly on vertices before passing them to a body creation function.\n * \n * @property chamfer\n * @type object|null|undefined\n */\n\n})();\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.Events` module contains methods to fire and listen to events on other objects.\n*\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\n*\n* @class Events\n*/\n\nvar Events = {};\n\nmodule.exports = Events;\n\nvar Common = __webpack_require__(0);\n\n(function() {\n\n /**\n * Subscribes a callback function to the given object's `eventName`.\n * @method on\n * @param {} object\n * @param {string} eventNames\n * @param {function} callback\n */\n Events.on = function(object, eventNames, callback) {\n var names = eventNames.split(' '),\n name;\n\n for (var i = 0; i < names.length; i++) {\n name = names[i];\n object.events = object.events || {};\n object.events[name] = object.events[name] || [];\n object.events[name].push(callback);\n }\n\n return callback;\n };\n\n /**\n * Removes the given event callback. If no callback, clears all callbacks in `eventNames`. If no `eventNames`, clears all events.\n * @method off\n * @param {} object\n * @param {string} eventNames\n * @param {function} callback\n */\n Events.off = function(object, eventNames, callback) {\n if (!eventNames) {\n object.events = {};\n return;\n }\n\n // handle Events.off(object, callback)\n if (typeof eventNames === 'function') {\n callback = eventNames;\n eventNames = Common.keys(object.events).join(' ');\n }\n\n var names = eventNames.split(' ');\n\n for (var i = 0; i < names.length; i++) {\n var callbacks = object.events[names[i]],\n newCallbacks = [];\n\n if (callback && callbacks) {\n for (var j = 0; j < callbacks.length; j++) {\n if (callbacks[j] !== callback)\n newCallbacks.push(callbacks[j]);\n }\n }\n\n object.events[names[i]] = newCallbacks;\n }\n };\n\n /**\n * Fires all the callbacks subscribed to the given object's `eventName`, in the order they subscribed, if any.\n * @method trigger\n * @param {} object\n * @param {string} eventNames\n * @param {} event\n */\n Events.trigger = function(object, eventNames, event) {\n var names,\n name,\n callbacks,\n eventClone;\n\n var events = object.events;\n \n if (events && Common.keys(events).length > 0) {\n if (!event)\n event = {};\n\n names = eventNames.split(' ');\n\n for (var i = 0; i < names.length; i++) {\n name = names[i];\n callbacks = events[name];\n\n if (callbacks) {\n eventClone = Common.clone(event, false);\n eventClone.name = name;\n eventClone.source = object;\n\n for (var j = 0; j < callbacks.length; j++) {\n callbacks[j].apply(object, [eventClone]);\n }\n }\n }\n }\n };\n\n})();\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* A composite is a collection of `Matter.Body`, `Matter.Constraint` and other `Matter.Composite` objects.\n*\n* They are a container that can represent complex objects made of multiple parts, even if they are not physically connected.\n* A composite could contain anything from a single body all the way up to a whole world.\n* \n* When making any changes to composites, use the included functions rather than changing their properties directly.\n*\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\n*\n* @class Composite\n*/\n\nvar Composite = {};\n\nmodule.exports = Composite;\n\nvar Events = __webpack_require__(5);\nvar Common = __webpack_require__(0);\nvar Bounds = __webpack_require__(1);\nvar Body = __webpack_require__(4);\n\n(function() {\n\n /**\n * Creates a new composite. The options parameter is an object that specifies any properties you wish to override the defaults.\n * See the properites section below for detailed information on what you can pass via the `options` object.\n * @method create\n * @param {} [options]\n * @return {composite} A new composite\n */\n Composite.create = function(options) {\n return Common.extend({ \n id: Common.nextId(),\n type: 'composite',\n parent: null,\n isModified: false,\n bodies: [], \n constraints: [], \n composites: [],\n label: 'Composite',\n plugin: {},\n cache: {\n allBodies: null,\n allConstraints: null,\n allComposites: null\n }\n }, options);\n };\n\n /**\n * Sets the composite's `isModified` flag. \n * If `updateParents` is true, all parents will be set (default: false).\n * If `updateChildren` is true, all children will be set (default: false).\n * @private\n * @method setModified\n * @param {composite} composite\n * @param {boolean} isModified\n * @param {boolean} [updateParents=false]\n * @param {boolean} [updateChildren=false]\n */\n Composite.setModified = function(composite, isModified, updateParents, updateChildren) {\n composite.isModified = isModified;\n\n if (isModified && composite.cache) {\n composite.cache.allBodies = null;\n composite.cache.allConstraints = null;\n composite.cache.allComposites = null;\n }\n\n if (updateParents && composite.parent) {\n Composite.setModified(composite.parent, isModified, updateParents, updateChildren);\n }\n\n if (updateChildren) {\n for (var i = 0; i < composite.composites.length; i++) {\n var childComposite = composite.composites[i];\n Composite.setModified(childComposite, isModified, updateParents, updateChildren);\n }\n }\n };\n\n /**\n * Generic single or multi-add function. Adds a single or an array of body(s), constraint(s) or composite(s) to the given composite.\n * Triggers `beforeAdd` and `afterAdd` events on the `composite`.\n * @method add\n * @param {composite} composite\n * @param {object|array} object A single or an array of body(s), constraint(s) or composite(s)\n * @return {composite} The original composite with the objects added\n */\n Composite.add = function(composite, object) {\n var objects = [].concat(object);\n\n Events.trigger(composite, 'beforeAdd', { object: object });\n\n for (var i = 0; i < objects.length; i++) {\n var obj = objects[i];\n\n switch (obj.type) {\n\n case 'body':\n // skip adding compound parts\n if (obj.parent !== obj) {\n Common.warn('Composite.add: skipped adding a compound body part (you must add its parent instead)');\n break;\n }\n\n Composite.addBody(composite, obj);\n break;\n case 'constraint':\n Composite.addConstraint(composite, obj);\n break;\n case 'composite':\n Composite.addComposite(composite, obj);\n break;\n case 'mouseConstraint':\n Composite.addConstraint(composite, obj.constraint);\n break;\n\n }\n }\n\n Events.trigger(composite, 'afterAdd', { object: object });\n\n return composite;\n };\n\n /**\n * Generic remove function. Removes one or many body(s), constraint(s) or a composite(s) to the given composite.\n * Optionally searching its children recursively.\n * Triggers `beforeRemove` and `afterRemove` events on the `composite`.\n * @method remove\n * @param {composite} composite\n * @param {object|array} object\n * @param {boolean} [deep=false]\n * @return {composite} The original composite with the objects removed\n */\n Composite.remove = function(composite, object, deep) {\n var objects = [].concat(object);\n\n Events.trigger(composite, 'beforeRemove', { object: object });\n\n for (var i = 0; i < objects.length; i++) {\n var obj = objects[i];\n\n switch (obj.type) {\n\n case 'body':\n Composite.removeBody(composite, obj, deep);\n break;\n case 'constraint':\n Composite.removeConstraint(composite, obj, deep);\n break;\n case 'composite':\n Composite.removeComposite(composite, obj, deep);\n break;\n case 'mouseConstraint':\n Composite.removeConstraint(composite, obj.constraint);\n break;\n\n }\n }\n\n Events.trigger(composite, 'afterRemove', { object: object });\n\n return composite;\n };\n\n /**\n * Adds a composite to the given composite.\n * @private\n * @method addComposite\n * @param {composite} compositeA\n * @param {composite} compositeB\n * @return {composite} The original compositeA with the objects from compositeB added\n */\n Composite.addComposite = function(compositeA, compositeB) {\n compositeA.composites.push(compositeB);\n compositeB.parent = compositeA;\n Composite.setModified(compositeA, true, true, false);\n return compositeA;\n };\n\n /**\n * Removes a composite from the given composite, and optionally searching its children recursively.\n * @private\n * @method removeComposite\n * @param {composite} compositeA\n * @param {composite} compositeB\n * @param {boolean} [deep=false]\n * @return {composite} The original compositeA with the composite removed\n */\n Composite.removeComposite = function(compositeA, compositeB, deep) {\n var position = Common.indexOf(compositeA.composites, compositeB);\n\n if (position !== -1) {\n var bodies = Composite.allBodies(compositeB);\n\n Composite.removeCompositeAt(compositeA, position);\n\n for (var i = 0; i < bodies.length; i++) {\n bodies[i].sleepCounter = 0;\n }\n }\n\n if (deep) {\n for (var i = 0; i < compositeA.composites.length; i++){\n Composite.removeComposite(compositeA.composites[i], compositeB, true);\n }\n }\n\n return compositeA;\n };\n\n /**\n * Removes a composite from the given composite.\n * @private\n * @method removeCompositeAt\n * @param {composite} composite\n * @param {number} position\n * @return {composite} The original composite with the composite removed\n */\n Composite.removeCompositeAt = function(composite, position) {\n composite.composites.splice(position, 1);\n Composite.setModified(composite, true, true, false);\n return composite;\n };\n\n /**\n * Adds a body to the given composite.\n * @private\n * @method addBody\n * @param {composite} composite\n * @param {body} body\n * @return {composite} The original composite with the body added\n */\n Composite.addBody = function(composite, body) {\n composite.bodies.push(body);\n Composite.setModified(composite, true, true, false);\n return composite;\n };\n\n /**\n * Removes a body from the given composite, and optionally searching its children recursively.\n * @private\n * @method removeBody\n * @param {composite} composite\n * @param {body} body\n * @param {boolean} [deep=false]\n * @return {composite} The original composite with the body removed\n */\n Composite.removeBody = function(composite, body, deep) {\n var position = Common.indexOf(composite.bodies, body);\n\n if (position !== -1) {\n Composite.removeBodyAt(composite, position);\n body.sleepCounter = 0;\n }\n\n if (deep) {\n for (var i = 0; i < composite.composites.length; i++){\n Composite.removeBody(composite.composites[i], body, true);\n }\n }\n\n return composite;\n };\n\n /**\n * Removes a body from the given composite.\n * @private\n * @method removeBodyAt\n * @param {composite} composite\n * @param {number} position\n * @return {composite} The original composite with the body removed\n */\n Composite.removeBodyAt = function(composite, position) {\n composite.bodies.splice(position, 1);\n Composite.setModified(composite, true, true, false);\n return composite;\n };\n\n /**\n * Adds a constraint to the given composite.\n * @private\n * @method addConstraint\n * @param {composite} composite\n * @param {constraint} constraint\n * @return {composite} The original composite with the constraint added\n */\n Composite.addConstraint = function(composite, constraint) {\n composite.constraints.push(constraint);\n Composite.setModified(composite, true, true, false);\n return composite;\n };\n\n /**\n * Removes a constraint from the given composite, and optionally searching its children recursively.\n * @private\n * @method removeConstraint\n * @param {composite} composite\n * @param {constraint} constraint\n * @param {boolean} [deep=false]\n * @return {composite} The original composite with the constraint removed\n */\n Composite.removeConstraint = function(composite, constraint, deep) {\n var position = Common.indexOf(composite.constraints, constraint);\n \n if (position !== -1) {\n Composite.removeConstraintAt(composite, position);\n }\n\n if (deep) {\n for (var i = 0; i < composite.composites.length; i++){\n Composite.removeConstraint(composite.composites[i], constraint, true);\n }\n }\n\n return composite;\n };\n\n /**\n * Removes a body from the given composite.\n * @private\n * @method removeConstraintAt\n * @param {composite} composite\n * @param {number} position\n * @return {composite} The original composite with the constraint removed\n */\n Composite.removeConstraintAt = function(composite, position) {\n composite.constraints.splice(position, 1);\n Composite.setModified(composite, true, true, false);\n return composite;\n };\n\n /**\n * Removes all bodies, constraints and composites from the given composite.\n * Optionally clearing its children recursively.\n * @method clear\n * @param {composite} composite\n * @param {boolean} keepStatic\n * @param {boolean} [deep=false]\n */\n Composite.clear = function(composite, keepStatic, deep) {\n if (deep) {\n for (var i = 0; i < composite.composites.length; i++){\n Composite.clear(composite.composites[i], keepStatic, true);\n }\n }\n \n if (keepStatic) {\n composite.bodies = composite.bodies.filter(function(body) { return body.isStatic; });\n } else {\n composite.bodies.length = 0;\n }\n\n composite.constraints.length = 0;\n composite.composites.length = 0;\n\n Composite.setModified(composite, true, true, false);\n\n return composite;\n };\n\n /**\n * Returns all bodies in the given composite, including all bodies in its children, recursively.\n * @method allBodies\n * @param {composite} composite\n * @return {body[]} All the bodies\n */\n Composite.allBodies = function(composite) {\n if (composite.cache && composite.cache.allBodies) {\n return composite.cache.allBodies;\n }\n\n var bodies = [].concat(composite.bodies);\n\n for (var i = 0; i < composite.composites.length; i++)\n bodies = bodies.concat(Composite.allBodies(composite.composites[i]));\n\n if (composite.cache) {\n composite.cache.allBodies = bodies;\n }\n\n return bodies;\n };\n\n /**\n * Returns all constraints in the given composite, including all constraints in its children, recursively.\n * @method allConstraints\n * @param {composite} composite\n * @return {constraint[]} All the constraints\n */\n Composite.allConstraints = function(composite) {\n if (composite.cache && composite.cache.allConstraints) {\n return composite.cache.allConstraints;\n }\n\n var constraints = [].concat(composite.constraints);\n\n for (var i = 0; i < composite.composites.length; i++)\n constraints = constraints.concat(Composite.allConstraints(composite.composites[i]));\n\n if (composite.cache) {\n composite.cache.allConstraints = constraints;\n }\n\n return constraints;\n };\n\n /**\n * Returns all composites in the given composite, including all composites in its children, recursively.\n * @method allComposites\n * @param {composite} composite\n * @return {composite[]} All the composites\n */\n Composite.allComposites = function(composite) {\n if (composite.cache && composite.cache.allComposites) {\n return composite.cache.allComposites;\n }\n\n var composites = [].concat(composite.composites);\n\n for (var i = 0; i < composite.composites.length; i++)\n composites = composites.concat(Composite.allComposites(composite.composites[i]));\n\n if (composite.cache) {\n composite.cache.allComposites = composites;\n }\n\n return composites;\n };\n\n /**\n * Searches the composite recursively for an object matching the type and id supplied, null if not found.\n * @method get\n * @param {composite} composite\n * @param {number} id\n * @param {string} type\n * @return {object} The requested object, if found\n */\n Composite.get = function(composite, id, type) {\n var objects,\n object;\n\n switch (type) {\n case 'body':\n objects = Composite.allBodies(composite);\n break;\n case 'constraint':\n objects = Composite.allConstraints(composite);\n break;\n case 'composite':\n objects = Composite.allComposites(composite).concat(composite);\n break;\n }\n\n if (!objects)\n return null;\n\n object = objects.filter(function(object) { \n return object.id.toString() === id.toString(); \n });\n\n return object.length === 0 ? null : object[0];\n };\n\n /**\n * Moves the given object(s) from compositeA to compositeB (equal to a remove followed by an add).\n * @method move\n * @param {compositeA} compositeA\n * @param {object[]} objects\n * @param {compositeB} compositeB\n * @return {composite} Returns compositeA\n */\n Composite.move = function(compositeA, objects, compositeB) {\n Composite.remove(compositeA, objects);\n Composite.add(compositeB, objects);\n return compositeA;\n };\n\n /**\n * Assigns new ids for all objects in the composite, recursively.\n * @method rebase\n * @param {composite} composite\n * @return {composite} Returns composite\n */\n Composite.rebase = function(composite) {\n var objects = Composite.allBodies(composite)\n .concat(Composite.allConstraints(composite))\n .concat(Composite.allComposites(composite));\n\n for (var i = 0; i < objects.length; i++) {\n objects[i].id = Common.nextId();\n }\n\n return composite;\n };\n\n /**\n * Translates all children in the composite by a given vector relative to their current positions, \n * without imparting any velocity.\n * @method translate\n * @param {composite} composite\n * @param {vector} translation\n * @param {bool} [recursive=true]\n */\n Composite.translate = function(composite, translation, recursive) {\n var bodies = recursive ? Composite.allBodies(composite) : composite.bodies;\n\n for (var i = 0; i < bodies.length; i++) {\n Body.translate(bodies[i], translation);\n }\n\n return composite;\n };\n\n /**\n * Rotates all children in the composite by a given angle about the given point, without imparting any angular velocity.\n * @method rotate\n * @param {composite} composite\n * @param {number} rotation\n * @param {vector} point\n * @param {bool} [recursive=true]\n */\n Composite.rotate = function(composite, rotation, point, recursive) {\n var cos = Math.cos(rotation),\n sin = Math.sin(rotation),\n bodies = recursive ? Composite.allBodies(composite) : composite.bodies;\n\n for (var i = 0; i < bodies.length; i++) {\n var body = bodies[i],\n dx = body.position.x - point.x,\n dy = body.position.y - point.y;\n \n Body.setPosition(body, {\n x: point.x + (dx * cos - dy * sin),\n y: point.y + (dx * sin + dy * cos)\n });\n\n Body.rotate(body, rotation);\n }\n\n return composite;\n };\n\n /**\n * Scales all children in the composite, including updating physical properties (mass, area, axes, inertia), from a world-space point.\n * @method scale\n * @param {composite} composite\n * @param {number} scaleX\n * @param {number} scaleY\n * @param {vector} point\n * @param {bool} [recursive=true]\n */\n Composite.scale = function(composite, scaleX, scaleY, point, recursive) {\n var bodies = recursive ? Composite.allBodies(composite) : composite.bodies;\n\n for (var i = 0; i < bodies.length; i++) {\n var body = bodies[i],\n dx = body.position.x - point.x,\n dy = body.position.y - point.y;\n \n Body.setPosition(body, {\n x: point.x + dx * scaleX,\n y: point.y + dy * scaleY\n });\n\n Body.scale(body, scaleX, scaleY);\n }\n\n return composite;\n };\n\n /**\n * Returns the union of the bounds of all of the composite's bodies.\n * @method bounds\n * @param {composite} composite The composite.\n * @returns {bounds} The composite bounds.\n */\n Composite.bounds = function(composite) {\n var bodies = Composite.allBodies(composite),\n vertices = [];\n\n for (var i = 0; i < bodies.length; i += 1) {\n var body = bodies[i];\n vertices.push(body.bounds.min, body.bounds.max);\n }\n\n return Bounds.create(vertices);\n };\n\n /*\n *\n * Events Documentation\n *\n */\n\n /**\n * Fired when a call to `Composite.add` is made, before objects have been added.\n *\n * @event beforeAdd\n * @param {} event An event object\n * @param {} event.object The object(s) to be added (may be a single body, constraint, composite or a mixed array of these)\n * @param {} event.source The source object of the event\n * @param {} event.name The name of the event\n */\n\n /**\n * Fired when a call to `Composite.add` is made, after objects have been added.\n *\n * @event afterAdd\n * @param {} event An event object\n * @param {} event.object The object(s) that have been added (may be a single body, constraint, composite or a mixed array of these)\n * @param {} event.source The source object of the event\n * @param {} event.name The name of the event\n */\n\n /**\n * Fired when a call to `Composite.remove` is made, before objects have been removed.\n *\n * @event beforeRemove\n * @param {} event An event object\n * @param {} event.object The object(s) to be removed (may be a single body, constraint, composite or a mixed array of these)\n * @param {} event.source The source object of the event\n * @param {} event.name The name of the event\n */\n\n /**\n * Fired when a call to `Composite.remove` is made, after objects have been removed.\n *\n * @event afterRemove\n * @param {} event An event object\n * @param {} event.object The object(s) that have been removed (may be a single body, constraint, composite or a mixed array of these)\n * @param {} event.source The source object of the event\n * @param {} event.name The name of the event\n */\n\n /*\n *\n * Properties Documentation\n *\n */\n\n /**\n * An integer `Number` uniquely identifying number generated in `Composite.create` by `Common.nextId`.\n *\n * @property id\n * @type number\n */\n\n /**\n * A `String` denoting the type of object.\n *\n * @property type\n * @type string\n * @default \"composite\"\n * @readOnly\n */\n\n /**\n * An arbitrary `String` name to help the user identify and manage composites.\n *\n * @property label\n * @type string\n * @default \"Composite\"\n */\n\n /**\n * A flag that specifies whether the composite has been modified during the current step.\n * This is automatically managed when bodies, constraints or composites are added or removed.\n *\n * @property isModified\n * @type boolean\n * @default false\n */\n\n /**\n * The `Composite` that is the parent of this composite. It is automatically managed by the `Matter.Composite` methods.\n *\n * @property parent\n * @type composite\n * @default null\n */\n\n /**\n * An array of `Body` that are _direct_ children of this composite.\n * To add or remove bodies you should use `Composite.add` and `Composite.remove` methods rather than directly modifying this property.\n * If you wish to recursively find all descendants, you should use the `Composite.allBodies` method.\n *\n * @property bodies\n * @type body[]\n * @default []\n */\n\n /**\n * An array of `Constraint` that are _direct_ children of this composite.\n * To add or remove constraints you should use `Composite.add` and `Composite.remove` methods rather than directly modifying this property.\n * If you wish to recursively find all descendants, you should use the `Composite.allConstraints` method.\n *\n * @property constraints\n * @type constraint[]\n * @default []\n */\n\n /**\n * An array of `Composite` that are _direct_ children of this composite.\n * To add or remove composites you should use `Composite.add` and `Composite.remove` methods rather than directly modifying this property.\n * If you wish to recursively find all descendants, you should use the `Composite.allComposites` method.\n *\n * @property composites\n * @type composite[]\n * @default []\n */\n\n /**\n * An object reserved for storing plugin-specific properties.\n *\n * @property plugin\n * @type {}\n */\n\n /**\n * An object used for storing cached results for performance reasons.\n * This is used internally only and is automatically managed.\n *\n * @private\n * @property cache\n * @type {}\n */\n\n})();\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.Sleeping` module contains methods to manage the sleeping state of bodies.\n*\n* @class Sleeping\n*/\n\nvar Sleeping = {};\n\nmodule.exports = Sleeping;\n\nvar Body = __webpack_require__(4);\nvar Events = __webpack_require__(5);\nvar Common = __webpack_require__(0);\n\n(function() {\n\n Sleeping._motionWakeThreshold = 0.18;\n Sleeping._motionSleepThreshold = 0.08;\n Sleeping._minBias = 0.9;\n\n /**\n * Puts bodies to sleep or wakes them up depending on their motion.\n * @method update\n * @param {body[]} bodies\n * @param {number} delta\n */\n Sleeping.update = function(bodies, delta) {\n var timeScale = delta / Common._baseDelta,\n motionSleepThreshold = Sleeping._motionSleepThreshold;\n \n // update bodies sleeping status\n for (var i = 0; i < bodies.length; i++) {\n var body = bodies[i],\n speed = Body.getSpeed(body),\n angularSpeed = Body.getAngularSpeed(body),\n motion = speed * speed + angularSpeed * angularSpeed;\n\n // wake up bodies if they have a force applied\n if (body.force.x !== 0 || body.force.y !== 0) {\n Sleeping.set(body, false);\n continue;\n }\n\n var minMotion = Math.min(body.motion, motion),\n maxMotion = Math.max(body.motion, motion);\n \n // biased average motion estimation between frames\n body.motion = Sleeping._minBias * minMotion + (1 - Sleeping._minBias) * maxMotion;\n\n if (body.sleepThreshold > 0 && body.motion < motionSleepThreshold) {\n body.sleepCounter += 1;\n \n if (body.sleepCounter >= body.sleepThreshold / timeScale) {\n Sleeping.set(body, true);\n }\n } else if (body.sleepCounter > 0) {\n body.sleepCounter -= 1;\n }\n }\n };\n\n /**\n * Given a set of colliding pairs, wakes the sleeping bodies involved.\n * @method afterCollisions\n * @param {pair[]} pairs\n */\n Sleeping.afterCollisions = function(pairs) {\n var motionSleepThreshold = Sleeping._motionSleepThreshold;\n\n // wake up bodies involved in collisions\n for (var i = 0; i < pairs.length; i++) {\n var pair = pairs[i];\n \n // don't wake inactive pairs\n if (!pair.isActive)\n continue;\n\n var collision = pair.collision,\n bodyA = collision.bodyA.parent, \n bodyB = collision.bodyB.parent;\n \n // don't wake if at least one body is static\n if ((bodyA.isSleeping && bodyB.isSleeping) || bodyA.isStatic || bodyB.isStatic)\n continue;\n \n if (bodyA.isSleeping || bodyB.isSleeping) {\n var sleepingBody = (bodyA.isSleeping && !bodyA.isStatic) ? bodyA : bodyB,\n movingBody = sleepingBody === bodyA ? bodyB : bodyA;\n\n if (!sleepingBody.isStatic && movingBody.motion > motionSleepThreshold) {\n Sleeping.set(sleepingBody, false);\n }\n }\n }\n };\n \n /**\n * Set a body as sleeping or awake.\n * @method set\n * @param {body} body\n * @param {boolean} isSleeping\n */\n Sleeping.set = function(body, isSleeping) {\n var wasSleeping = body.isSleeping;\n\n if (isSleeping) {\n body.isSleeping = true;\n body.sleepCounter = body.sleepThreshold;\n\n body.positionImpulse.x = 0;\n body.positionImpulse.y = 0;\n\n body.positionPrev.x = body.position.x;\n body.positionPrev.y = body.position.y;\n\n body.anglePrev = body.angle;\n body.speed = 0;\n body.angularSpeed = 0;\n body.motion = 0;\n\n if (!wasSleeping) {\n Events.trigger(body, 'sleepStart');\n }\n } else {\n body.isSleeping = false;\n body.sleepCounter = 0;\n\n if (wasSleeping) {\n Events.trigger(body, 'sleepEnd');\n }\n }\n };\n\n})();\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.Collision` module contains methods for detecting collisions between a given pair of bodies.\n*\n* For efficient detection between a list of bodies, see `Matter.Detector` and `Matter.Query`.\n*\n* See `Matter.Engine` for collision events.\n*\n* @class Collision\n*/\n\nvar Collision = {};\n\nmodule.exports = Collision;\n\nvar Vertices = __webpack_require__(3);\nvar Pair = __webpack_require__(9);\n\n(function() {\n var _supports = [];\n\n var _overlapAB = {\n overlap: 0,\n axis: null\n };\n\n var _overlapBA = {\n overlap: 0,\n axis: null\n };\n\n /**\n * Creates a new collision record.\n * @method create\n * @param {body} bodyA The first body part represented by the collision record\n * @param {body} bodyB The second body part represented by the collision record\n * @return {collision} A new collision record\n */\n Collision.create = function(bodyA, bodyB) {\n return { \n pair: null,\n collided: false,\n bodyA: bodyA,\n bodyB: bodyB,\n parentA: bodyA.parent,\n parentB: bodyB.parent,\n depth: 0,\n normal: { x: 0, y: 0 },\n tangent: { x: 0, y: 0 },\n penetration: { x: 0, y: 0 },\n supports: [null, null],\n supportCount: 0\n };\n };\n\n /**\n * Detect collision between two bodies.\n * @method collides\n * @param {body} bodyA\n * @param {body} bodyB\n * @param {pairs} [pairs] Optionally reuse collision records from existing pairs.\n * @return {collision|null} A collision record if detected, otherwise null\n */\n Collision.collides = function(bodyA, bodyB, pairs) {\n Collision._overlapAxes(_overlapAB, bodyA.vertices, bodyB.vertices, bodyA.axes);\n\n if (_overlapAB.overlap <= 0) {\n return null;\n }\n\n Collision._overlapAxes(_overlapBA, bodyB.vertices, bodyA.vertices, bodyB.axes);\n\n if (_overlapBA.overlap <= 0) {\n return null;\n }\n\n // reuse collision records for gc efficiency\n var pair = pairs && pairs.table[Pair.id(bodyA, bodyB)],\n collision;\n\n if (!pair) {\n collision = Collision.create(bodyA, bodyB);\n collision.collided = true;\n collision.bodyA = bodyA.id < bodyB.id ? bodyA : bodyB;\n collision.bodyB = bodyA.id < bodyB.id ? bodyB : bodyA;\n collision.parentA = collision.bodyA.parent;\n collision.parentB = collision.bodyB.parent;\n } else {\n collision = pair.collision;\n }\n\n bodyA = collision.bodyA;\n bodyB = collision.bodyB;\n\n var minOverlap;\n\n if (_overlapAB.overlap < _overlapBA.overlap) {\n minOverlap = _overlapAB;\n } else {\n minOverlap = _overlapBA;\n }\n\n var normal = collision.normal,\n tangent = collision.tangent,\n penetration = collision.penetration,\n supports = collision.supports,\n depth = minOverlap.overlap,\n minAxis = minOverlap.axis,\n normalX = minAxis.x,\n normalY = minAxis.y,\n deltaX = bodyB.position.x - bodyA.position.x,\n deltaY = bodyB.position.y - bodyA.position.y;\n\n // ensure normal is facing away from bodyA\n if (normalX * deltaX + normalY * deltaY >= 0) {\n normalX = -normalX;\n normalY = -normalY;\n }\n\n normal.x = normalX;\n normal.y = normalY;\n \n tangent.x = -normalY;\n tangent.y = normalX;\n\n penetration.x = normalX * depth;\n penetration.y = normalY * depth;\n\n collision.depth = depth;\n\n // find support points, there is always either exactly one or two\n var supportsB = Collision._findSupports(bodyA, bodyB, normal, 1),\n supportCount = 0;\n\n // find the supports from bodyB that are inside bodyA\n if (Vertices.contains(bodyA.vertices, supportsB[0])) {\n supports[supportCount++] = supportsB[0];\n }\n\n if (Vertices.contains(bodyA.vertices, supportsB[1])) {\n supports[supportCount++] = supportsB[1];\n }\n\n // find the supports from bodyA that are inside bodyB\n if (supportCount < 2) {\n var supportsA = Collision._findSupports(bodyB, bodyA, normal, -1);\n\n if (Vertices.contains(bodyB.vertices, supportsA[0])) {\n supports[supportCount++] = supportsA[0];\n }\n\n if (supportCount < 2 && Vertices.contains(bodyB.vertices, supportsA[1])) {\n supports[supportCount++] = supportsA[1];\n }\n }\n\n // account for the edge case of overlapping but no vertex containment\n if (supportCount === 0) {\n supports[supportCount++] = supportsB[0];\n }\n\n // update support count\n collision.supportCount = supportCount;\n\n return collision;\n };\n\n /**\n * Find the overlap between two sets of vertices.\n * @method _overlapAxes\n * @private\n * @param {object} result\n * @param {vertices} verticesA\n * @param {vertices} verticesB\n * @param {axes} axes\n */\n Collision._overlapAxes = function(result, verticesA, verticesB, axes) {\n var verticesALength = verticesA.length,\n verticesBLength = verticesB.length,\n verticesAX = verticesA[0].x,\n verticesAY = verticesA[0].y,\n verticesBX = verticesB[0].x,\n verticesBY = verticesB[0].y,\n axesLength = axes.length,\n overlapMin = Number.MAX_VALUE,\n overlapAxisNumber = 0,\n overlap,\n overlapAB,\n overlapBA,\n dot,\n i,\n j;\n\n for (i = 0; i < axesLength; i++) {\n var axis = axes[i],\n axisX = axis.x,\n axisY = axis.y,\n minA = verticesAX * axisX + verticesAY * axisY,\n minB = verticesBX * axisX + verticesBY * axisY,\n maxA = minA,\n maxB = minB;\n \n for (j = 1; j < verticesALength; j += 1) {\n dot = verticesA[j].x * axisX + verticesA[j].y * axisY;\n\n if (dot > maxA) { \n maxA = dot;\n } else if (dot < minA) { \n minA = dot;\n }\n }\n\n for (j = 1; j < verticesBLength; j += 1) {\n dot = verticesB[j].x * axisX + verticesB[j].y * axisY;\n\n if (dot > maxB) { \n maxB = dot;\n } else if (dot < minB) { \n minB = dot;\n }\n }\n\n overlapAB = maxA - minB;\n overlapBA = maxB - minA;\n overlap = overlapAB < overlapBA ? overlapAB : overlapBA;\n\n if (overlap < overlapMin) {\n overlapMin = overlap;\n overlapAxisNumber = i;\n\n if (overlap <= 0) {\n // can not be intersecting\n break;\n }\n } \n }\n\n result.axis = axes[overlapAxisNumber];\n result.overlap = overlapMin;\n };\n\n /**\n * Finds supporting vertices given two bodies along a given direction using hill-climbing.\n * @method _findSupports\n * @private\n * @param {body} bodyA\n * @param {body} bodyB\n * @param {vector} normal\n * @param {number} direction\n * @return [vector]\n */\n Collision._findSupports = function(bodyA, bodyB, normal, direction) {\n var vertices = bodyB.vertices,\n verticesLength = vertices.length,\n bodyAPositionX = bodyA.position.x,\n bodyAPositionY = bodyA.position.y,\n normalX = normal.x * direction,\n normalY = normal.y * direction,\n vertexA = vertices[0],\n vertexB = vertexA,\n nearestDistance = normalX * (bodyAPositionX - vertexB.x) + normalY * (bodyAPositionY - vertexB.y),\n vertexC,\n distance,\n j;\n\n // find deepest vertex relative to the axis\n for (j = 1; j < verticesLength; j += 1) {\n vertexB = vertices[j];\n distance = normalX * (bodyAPositionX - vertexB.x) + normalY * (bodyAPositionY - vertexB.y);\n\n // convex hill-climbing\n if (distance < nearestDistance) {\n nearestDistance = distance;\n vertexA = vertexB;\n }\n }\n\n // measure next vertex\n vertexC = vertices[(verticesLength + vertexA.index - 1) % verticesLength];\n nearestDistance = normalX * (bodyAPositionX - vertexC.x) + normalY * (bodyAPositionY - vertexC.y);\n\n // compare with previous vertex\n vertexB = vertices[(vertexA.index + 1) % verticesLength];\n if (normalX * (bodyAPositionX - vertexB.x) + normalY * (bodyAPositionY - vertexB.y) < nearestDistance) {\n _supports[0] = vertexA;\n _supports[1] = vertexB;\n\n return _supports;\n }\n\n _supports[0] = vertexA;\n _supports[1] = vertexC;\n\n return _supports;\n };\n\n /*\n *\n * Properties Documentation\n *\n */\n\n /**\n * A reference to the pair using this collision record, if there is one.\n *\n * @property pair\n * @type {pair|null}\n * @default null\n */\n\n /**\n * A flag that indicates if the bodies were colliding when the collision was last updated.\n * \n * @property collided\n * @type boolean\n * @default false\n */\n\n /**\n * The first body part represented by the collision (see also `collision.parentA`).\n * \n * @property bodyA\n * @type body\n */\n\n /**\n * The second body part represented by the collision (see also `collision.parentB`).\n * \n * @property bodyB\n * @type body\n */\n\n /**\n * The first body represented by the collision (i.e. `collision.bodyA.parent`).\n * \n * @property parentA\n * @type body\n */\n\n /**\n * The second body represented by the collision (i.e. `collision.bodyB.parent`).\n * \n * @property parentB\n * @type body\n */\n\n /**\n * A `Number` that represents the minimum separating distance between the bodies along the collision normal.\n *\n * @readOnly\n * @property depth\n * @type number\n * @default 0\n */\n\n /**\n * A normalised `Vector` that represents the direction between the bodies that provides the minimum separating distance.\n *\n * @property normal\n * @type vector\n * @default { x: 0, y: 0 }\n */\n\n /**\n * A normalised `Vector` that is the tangent direction to the collision normal.\n *\n * @property tangent\n * @type vector\n * @default { x: 0, y: 0 }\n */\n\n /**\n * A `Vector` that represents the direction and depth of the collision.\n *\n * @property penetration\n * @type vector\n * @default { x: 0, y: 0 }\n */\n\n /**\n * An array of body vertices that represent the support points in the collision.\n * \n * _Note:_ Only the first `collision.supportCount` items of `collision.supports` are active.\n * Therefore use `collision.supportCount` instead of `collision.supports.length` when iterating the active supports.\n * \n * These are the deepest vertices (along the collision normal) of each body that are contained by the other body's vertices.\n *\n * @property supports\n * @type vector[]\n * @default []\n */\n\n /**\n * The number of active supports for this collision found in `collision.supports`.\n * \n * _Note:_ Only the first `collision.supportCount` items of `collision.supports` are active.\n * Therefore use `collision.supportCount` instead of `collision.supports.length` when iterating the active supports.\n *\n * @property supportCount\n * @type number\n * @default 0\n */\n\n})();\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.Pair` module contains methods for creating and manipulating collision pairs.\n*\n* @class Pair\n*/\n\nvar Pair = {};\n\nmodule.exports = Pair;\n\nvar Contact = __webpack_require__(16);\n\n(function() {\n \n /**\n * Creates a pair.\n * @method create\n * @param {collision} collision\n * @param {number} timestamp\n * @return {pair} A new pair\n */\n Pair.create = function(collision, timestamp) {\n var bodyA = collision.bodyA,\n bodyB = collision.bodyB;\n\n var pair = {\n id: Pair.id(bodyA, bodyB),\n bodyA: bodyA,\n bodyB: bodyB,\n collision: collision,\n contacts: [Contact.create(), Contact.create()],\n contactCount: 0,\n separation: 0,\n isActive: true,\n isSensor: bodyA.isSensor || bodyB.isSensor,\n timeCreated: timestamp,\n timeUpdated: timestamp,\n inverseMass: 0,\n friction: 0,\n frictionStatic: 0,\n restitution: 0,\n slop: 0\n };\n\n Pair.update(pair, collision, timestamp);\n\n return pair;\n };\n\n /**\n * Updates a pair given a collision.\n * @method update\n * @param {pair} pair\n * @param {collision} collision\n * @param {number} timestamp\n */\n Pair.update = function(pair, collision, timestamp) {\n var supports = collision.supports,\n supportCount = collision.supportCount,\n contacts = pair.contacts,\n parentA = collision.parentA,\n parentB = collision.parentB;\n \n pair.isActive = true;\n pair.timeUpdated = timestamp;\n pair.collision = collision;\n pair.separation = collision.depth;\n pair.inverseMass = parentA.inverseMass + parentB.inverseMass;\n pair.friction = parentA.friction < parentB.friction ? parentA.friction : parentB.friction;\n pair.frictionStatic = parentA.frictionStatic > parentB.frictionStatic ? parentA.frictionStatic : parentB.frictionStatic;\n pair.restitution = parentA.restitution > parentB.restitution ? parentA.restitution : parentB.restitution;\n pair.slop = parentA.slop > parentB.slop ? parentA.slop : parentB.slop;\n\n pair.contactCount = supportCount;\n collision.pair = pair;\n\n var supportA = supports[0],\n contactA = contacts[0],\n supportB = supports[1],\n contactB = contacts[1];\n\n // match contacts to supports\n if (contactB.vertex === supportA || contactA.vertex === supportB) {\n contacts[1] = contactA;\n contacts[0] = contactA = contactB;\n contactB = contacts[1];\n }\n\n // update contacts\n contactA.vertex = supportA;\n contactB.vertex = supportB;\n };\n \n /**\n * Set a pair as active or inactive.\n * @method setActive\n * @param {pair} pair\n * @param {bool} isActive\n * @param {number} timestamp\n */\n Pair.setActive = function(pair, isActive, timestamp) {\n if (isActive) {\n pair.isActive = true;\n pair.timeUpdated = timestamp;\n } else {\n pair.isActive = false;\n pair.contactCount = 0;\n }\n };\n\n /**\n * Get the id for the given pair.\n * @method id\n * @param {body} bodyA\n * @param {body} bodyB\n * @return {string} Unique pairId\n */\n Pair.id = function(bodyA, bodyB) {\n return bodyA.id < bodyB.id ? bodyA.id.toString(36) + ':' + bodyB.id.toString(36) \n : bodyB.id.toString(36) + ':' + bodyA.id.toString(36);\n };\n\n})();\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.Constraint` module contains methods for creating and manipulating constraints.\n* Constraints are used for specifying that a fixed distance must be maintained between two bodies (or a body and a fixed world-space position).\n* The stiffness of constraints can be modified to create springs or elastic.\n*\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\n*\n* @class Constraint\n*/\n\nvar Constraint = {};\n\nmodule.exports = Constraint;\n\nvar Vertices = __webpack_require__(3);\nvar Vector = __webpack_require__(2);\nvar Sleeping = __webpack_require__(7);\nvar Bounds = __webpack_require__(1);\nvar Axes = __webpack_require__(11);\nvar Common = __webpack_require__(0);\n\n(function() {\n\n Constraint._warming = 0.4;\n Constraint._torqueDampen = 1;\n Constraint._minLength = 0.000001;\n\n /**\n * Creates a new constraint.\n * All properties have default values, and many are pre-calculated automatically based on other properties.\n * To simulate a revolute constraint (or pin joint) set `length: 0` and a high `stiffness` value (e.g. `0.7` or above).\n * If the constraint is unstable, try lowering the `stiffness` value and / or increasing `engine.constraintIterations`.\n * For compound bodies, constraints must be applied to the parent body (not one of its parts).\n * See the properties section below for detailed information on what you can pass via the `options` object.\n * @method create\n * @param {} options\n * @return {constraint} constraint\n */\n Constraint.create = function(options) {\n var constraint = options;\n\n // if bodies defined but no points, use body centre\n if (constraint.bodyA && !constraint.pointA)\n constraint.pointA = { x: 0, y: 0 };\n if (constraint.bodyB && !constraint.pointB)\n constraint.pointB = { x: 0, y: 0 };\n\n // calculate static length using initial world space points\n var initialPointA = constraint.bodyA ? Vector.add(constraint.bodyA.position, constraint.pointA) : constraint.pointA,\n initialPointB = constraint.bodyB ? Vector.add(constraint.bodyB.position, constraint.pointB) : constraint.pointB,\n length = Vector.magnitude(Vector.sub(initialPointA, initialPointB));\n \n constraint.length = typeof constraint.length !== 'undefined' ? constraint.length : length;\n\n // option defaults\n constraint.id = constraint.id || Common.nextId();\n constraint.label = constraint.label || 'Constraint';\n constraint.type = 'constraint';\n constraint.stiffness = constraint.stiffness || (constraint.length > 0 ? 1 : 0.7);\n constraint.damping = constraint.damping || 0;\n constraint.angularStiffness = constraint.angularStiffness || 0;\n constraint.angleA = constraint.bodyA ? constraint.bodyA.angle : constraint.angleA;\n constraint.angleB = constraint.bodyB ? constraint.bodyB.angle : constraint.angleB;\n constraint.plugin = {};\n\n // render\n var render = {\n visible: true,\n lineWidth: 2,\n strokeStyle: '#ffffff',\n type: 'line',\n anchors: true\n };\n\n if (constraint.length === 0 && constraint.stiffness > 0.1) {\n render.type = 'pin';\n render.anchors = false;\n } else if (constraint.stiffness < 0.9) {\n render.type = 'spring';\n }\n\n constraint.render = Common.extend(render, constraint.render);\n\n return constraint;\n };\n\n /**\n * Prepares for solving by constraint warming.\n * @private\n * @method preSolveAll\n * @param {body[]} bodies\n */\n Constraint.preSolveAll = function(bodies) {\n for (var i = 0; i < bodies.length; i += 1) {\n var body = bodies[i],\n impulse = body.constraintImpulse;\n\n if (body.isStatic || (impulse.x === 0 && impulse.y === 0 && impulse.angle === 0)) {\n continue;\n }\n\n body.position.x += impulse.x;\n body.position.y += impulse.y;\n body.angle += impulse.angle;\n }\n };\n\n /**\n * Solves all constraints in a list of collisions.\n * @private\n * @method solveAll\n * @param {constraint[]} constraints\n * @param {number} delta\n */\n Constraint.solveAll = function(constraints, delta) {\n var timeScale = Common.clamp(delta / Common._baseDelta, 0, 1);\n\n // Solve fixed constraints first.\n for (var i = 0; i < constraints.length; i += 1) {\n var constraint = constraints[i],\n fixedA = !constraint.bodyA || (constraint.bodyA && constraint.bodyA.isStatic),\n fixedB = !constraint.bodyB || (constraint.bodyB && constraint.bodyB.isStatic);\n\n if (fixedA || fixedB) {\n Constraint.solve(constraints[i], timeScale);\n }\n }\n\n // Solve free constraints last.\n for (i = 0; i < constraints.length; i += 1) {\n constraint = constraints[i];\n fixedA = !constraint.bodyA || (constraint.bodyA && constraint.bodyA.isStatic);\n fixedB = !constraint.bodyB || (constraint.bodyB && constraint.bodyB.isStatic);\n\n if (!fixedA && !fixedB) {\n Constraint.solve(constraints[i], timeScale);\n }\n }\n };\n\n /**\n * Solves a distance constraint with Gauss-Siedel method.\n * @private\n * @method solve\n * @param {constraint} constraint\n * @param {number} timeScale\n */\n Constraint.solve = function(constraint, timeScale) {\n var bodyA = constraint.bodyA,\n bodyB = constraint.bodyB,\n pointA = constraint.pointA,\n pointB = constraint.pointB;\n\n if (!bodyA && !bodyB)\n return;\n\n // update reference angle\n if (bodyA && !bodyA.isStatic) {\n Vector.rotate(pointA, bodyA.angle - constraint.angleA, pointA);\n constraint.angleA = bodyA.angle;\n }\n \n // update reference angle\n if (bodyB && !bodyB.isStatic) {\n Vector.rotate(pointB, bodyB.angle - constraint.angleB, pointB);\n constraint.angleB = bodyB.angle;\n }\n\n var pointAWorld = pointA,\n pointBWorld = pointB;\n\n if (bodyA) pointAWorld = Vector.add(bodyA.position, pointA);\n if (bodyB) pointBWorld = Vector.add(bodyB.position, pointB);\n\n if (!pointAWorld || !pointBWorld)\n return;\n\n var delta = Vector.sub(pointAWorld, pointBWorld),\n currentLength = Vector.magnitude(delta);\n\n // prevent singularity\n if (currentLength < Constraint._minLength) {\n currentLength = Constraint._minLength;\n }\n\n // solve distance constraint with Gauss-Siedel method\n var difference = (currentLength - constraint.length) / currentLength,\n isRigid = constraint.stiffness >= 1 || constraint.length === 0,\n stiffness = isRigid ? constraint.stiffness * timeScale \n : constraint.stiffness * timeScale * timeScale,\n damping = constraint.damping * timeScale,\n force = Vector.mult(delta, difference * stiffness),\n massTotal = (bodyA ? bodyA.inverseMass : 0) + (bodyB ? bodyB.inverseMass : 0),\n inertiaTotal = (bodyA ? bodyA.inverseInertia : 0) + (bodyB ? bodyB.inverseInertia : 0),\n resistanceTotal = massTotal + inertiaTotal,\n torque,\n share,\n normal,\n normalVelocity,\n relativeVelocity;\n \n if (damping > 0) {\n var zero = Vector.create();\n normal = Vector.div(delta, currentLength);\n\n relativeVelocity = Vector.sub(\n bodyB && Vector.sub(bodyB.position, bodyB.positionPrev) || zero,\n bodyA && Vector.sub(bodyA.position, bodyA.positionPrev) || zero\n );\n\n normalVelocity = Vector.dot(normal, relativeVelocity);\n }\n\n if (bodyA && !bodyA.isStatic) {\n share = bodyA.inverseMass / massTotal;\n\n // keep track of applied impulses for post solving\n bodyA.constraintImpulse.x -= force.x * share;\n bodyA.constraintImpulse.y -= force.y * share;\n\n // apply forces\n bodyA.position.x -= force.x * share;\n bodyA.position.y -= force.y * share;\n\n // apply damping\n if (damping > 0) {\n bodyA.positionPrev.x -= damping * normal.x * normalVelocity * share;\n bodyA.positionPrev.y -= damping * normal.y * normalVelocity * share;\n }\n\n // apply torque\n torque = (Vector.cross(pointA, force) / resistanceTotal) * Constraint._torqueDampen * bodyA.inverseInertia * (1 - constraint.angularStiffness);\n bodyA.constraintImpulse.angle -= torque;\n bodyA.angle -= torque;\n }\n\n if (bodyB && !bodyB.isStatic) {\n share = bodyB.inverseMass / massTotal;\n\n // keep track of applied impulses for post solving\n bodyB.constraintImpulse.x += force.x * share;\n bodyB.constraintImpulse.y += force.y * share;\n \n // apply forces\n bodyB.position.x += force.x * share;\n bodyB.position.y += force.y * share;\n\n // apply damping\n if (damping > 0) {\n bodyB.positionPrev.x += damping * normal.x * normalVelocity * share;\n bodyB.positionPrev.y += damping * normal.y * normalVelocity * share;\n }\n\n // apply torque\n torque = (Vector.cross(pointB, force) / resistanceTotal) * Constraint._torqueDampen * bodyB.inverseInertia * (1 - constraint.angularStiffness);\n bodyB.constraintImpulse.angle += torque;\n bodyB.angle += torque;\n }\n\n };\n\n /**\n * Performs body updates required after solving constraints.\n * @private\n * @method postSolveAll\n * @param {body[]} bodies\n */\n Constraint.postSolveAll = function(bodies) {\n for (var i = 0; i < bodies.length; i++) {\n var body = bodies[i],\n impulse = body.constraintImpulse;\n\n if (body.isStatic || (impulse.x === 0 && impulse.y === 0 && impulse.angle === 0)) {\n continue;\n }\n\n Sleeping.set(body, false);\n\n // update geometry and reset\n for (var j = 0; j < body.parts.length; j++) {\n var part = body.parts[j];\n \n Vertices.translate(part.vertices, impulse);\n\n if (j > 0) {\n part.position.x += impulse.x;\n part.position.y += impulse.y;\n }\n\n if (impulse.angle !== 0) {\n Vertices.rotate(part.vertices, impulse.angle, body.position);\n Axes.rotate(part.axes, impulse.angle);\n if (j > 0) {\n Vector.rotateAbout(part.position, impulse.angle, body.position, part.position);\n }\n }\n\n Bounds.update(part.bounds, part.vertices, body.velocity);\n }\n\n // dampen the cached impulse for warming next step\n impulse.angle *= Constraint._warming;\n impulse.x *= Constraint._warming;\n impulse.y *= Constraint._warming;\n }\n };\n\n /**\n * Returns the world-space position of `constraint.pointA`, accounting for `constraint.bodyA`.\n * @method pointAWorld\n * @param {constraint} constraint\n * @returns {vector} the world-space position\n */\n Constraint.pointAWorld = function(constraint) {\n return {\n x: (constraint.bodyA ? constraint.bodyA.position.x : 0) \n + (constraint.pointA ? constraint.pointA.x : 0),\n y: (constraint.bodyA ? constraint.bodyA.position.y : 0) \n + (constraint.pointA ? constraint.pointA.y : 0)\n };\n };\n\n /**\n * Returns the world-space position of `constraint.pointB`, accounting for `constraint.bodyB`.\n * @method pointBWorld\n * @param {constraint} constraint\n * @returns {vector} the world-space position\n */\n Constraint.pointBWorld = function(constraint) {\n return {\n x: (constraint.bodyB ? constraint.bodyB.position.x : 0) \n + (constraint.pointB ? constraint.pointB.x : 0),\n y: (constraint.bodyB ? constraint.bodyB.position.y : 0) \n + (constraint.pointB ? constraint.pointB.y : 0)\n };\n };\n\n /**\n * Returns the current length of the constraint. \n * This is the distance between both of the constraint's end points.\n * See `constraint.length` for the target rest length.\n * @method currentLength\n * @param {constraint} constraint\n * @returns {number} the current length\n */\n Constraint.currentLength = function(constraint) {\n var pointAX = (constraint.bodyA ? constraint.bodyA.position.x : 0) \n + (constraint.pointA ? constraint.pointA.x : 0);\n\n var pointAY = (constraint.bodyA ? constraint.bodyA.position.y : 0) \n + (constraint.pointA ? constraint.pointA.y : 0);\n\n var pointBX = (constraint.bodyB ? constraint.bodyB.position.x : 0) \n + (constraint.pointB ? constraint.pointB.x : 0);\n \n var pointBY = (constraint.bodyB ? constraint.bodyB.position.y : 0) \n + (constraint.pointB ? constraint.pointB.y : 0);\n\n var deltaX = pointAX - pointBX;\n var deltaY = pointAY - pointBY;\n\n return Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n };\n\n /*\n *\n * Properties Documentation\n *\n */\n\n /**\n * An integer `Number` uniquely identifying number generated in `Composite.create` by `Common.nextId`.\n *\n * @property id\n * @type number\n */\n\n /**\n * A `String` denoting the type of object.\n *\n * @property type\n * @type string\n * @default \"constraint\"\n * @readOnly\n */\n\n /**\n * An arbitrary `String` name to help the user identify and manage bodies.\n *\n * @property label\n * @type string\n * @default \"Constraint\"\n */\n\n /**\n * An `Object` that defines the rendering properties to be consumed by the module `Matter.Render`.\n *\n * @property render\n * @type object\n */\n\n /**\n * A flag that indicates if the constraint should be rendered.\n *\n * @property render.visible\n * @type boolean\n * @default true\n */\n\n /**\n * A `Number` that defines the line width to use when rendering the constraint outline.\n * A value of `0` means no outline will be rendered.\n *\n * @property render.lineWidth\n * @type number\n * @default 2\n */\n\n /**\n * A `String` that defines the stroke style to use when rendering the constraint outline.\n * It is the same as when using a canvas, so it accepts CSS style property values.\n *\n * @property render.strokeStyle\n * @type string\n * @default a random colour\n */\n\n /**\n * A `String` that defines the constraint rendering type. \n * The possible values are 'line', 'pin', 'spring'.\n * An appropriate render type will be automatically chosen unless one is given in options.\n *\n * @property render.type\n * @type string\n * @default 'line'\n */\n\n /**\n * A `Boolean` that defines if the constraint's anchor points should be rendered.\n *\n * @property render.anchors\n * @type boolean\n * @default true\n */\n\n /**\n * The first possible `Body` that this constraint is attached to.\n *\n * @property bodyA\n * @type body\n * @default null\n */\n\n /**\n * The second possible `Body` that this constraint is attached to.\n *\n * @property bodyB\n * @type body\n * @default null\n */\n\n /**\n * A `Vector` that specifies the offset of the constraint from center of the `constraint.bodyA` if defined, otherwise a world-space position.\n *\n * @property pointA\n * @type vector\n * @default { x: 0, y: 0 }\n */\n\n /**\n * A `Vector` that specifies the offset of the constraint from center of the `constraint.bodyB` if defined, otherwise a world-space position.\n *\n * @property pointB\n * @type vector\n * @default { x: 0, y: 0 }\n */\n\n /**\n * A `Number` that specifies the stiffness of the constraint, i.e. the rate at which it returns to its resting `constraint.length`.\n * A value of `1` means the constraint should be very stiff.\n * A value of `0.2` means the constraint acts like a soft spring.\n *\n * @property stiffness\n * @type number\n * @default 1\n */\n\n /**\n * A `Number` that specifies the damping of the constraint, \n * i.e. the amount of resistance applied to each body based on their velocities to limit the amount of oscillation.\n * Damping will only be apparent when the constraint also has a very low `stiffness`.\n * A value of `0.1` means the constraint will apply heavy damping, resulting in little to no oscillation.\n * A value of `0` means the constraint will apply no damping.\n *\n * @property damping\n * @type number\n * @default 0\n */\n\n /**\n * A `Number` that specifies the target resting length of the constraint. \n * It is calculated automatically in `Constraint.create` from initial positions of the `constraint.bodyA` and `constraint.bodyB`.\n *\n * @property length\n * @type number\n */\n\n /**\n * An object reserved for storing plugin-specific properties.\n *\n * @property plugin\n * @type {}\n */\n\n})();\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.Axes` module contains methods for creating and manipulating sets of axes.\n*\n* @class Axes\n*/\n\nvar Axes = {};\n\nmodule.exports = Axes;\n\nvar Vector = __webpack_require__(2);\nvar Common = __webpack_require__(0);\n\n(function() {\n\n /**\n * Creates a new set of axes from the given vertices.\n * @method fromVertices\n * @param {vertices} vertices\n * @return {axes} A new axes from the given vertices\n */\n Axes.fromVertices = function(vertices) {\n var axes = {};\n\n // find the unique axes, using edge normal gradients\n for (var i = 0; i < vertices.length; i++) {\n var j = (i + 1) % vertices.length, \n normal = Vector.normalise({ \n x: vertices[j].y - vertices[i].y, \n y: vertices[i].x - vertices[j].x\n }),\n gradient = (normal.y === 0) ? Infinity : (normal.x / normal.y);\n \n // limit precision\n gradient = gradient.toFixed(3).toString();\n axes[gradient] = normal;\n }\n\n return Common.values(axes);\n };\n\n /**\n * Rotates a set of axes by the given angle.\n * @method rotate\n * @param {axes} axes\n * @param {number} angle\n */\n Axes.rotate = function(axes, angle) {\n if (angle === 0)\n return;\n \n var cos = Math.cos(angle),\n sin = Math.sin(angle);\n\n for (var i = 0; i < axes.length; i++) {\n var axis = axes[i],\n xx;\n xx = axis.x * cos - axis.y * sin;\n axis.y = axis.x * sin + axis.y * cos;\n axis.x = xx;\n }\n };\n\n})();\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.Bodies` module contains factory methods for creating rigid body models \n* with commonly used body configurations (such as rectangles, circles and other polygons).\n*\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\n*\n* @class Bodies\n*/\n\n// TODO: true circle bodies\n\nvar Bodies = {};\n\nmodule.exports = Bodies;\n\nvar Vertices = __webpack_require__(3);\nvar Common = __webpack_require__(0);\nvar Body = __webpack_require__(4);\nvar Bounds = __webpack_require__(1);\nvar Vector = __webpack_require__(2);\n\n(function() {\n\n /**\n * Creates a new rigid body model with a rectangle hull. \n * The options parameter is an object that specifies any properties you wish to override the defaults.\n * See the properties section of the `Matter.Body` module for detailed information on what you can pass via the `options` object.\n * @method rectangle\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {object} [options]\n * @return {body} A new rectangle body\n */\n Bodies.rectangle = function(x, y, width, height, options) {\n options = options || {};\n\n var rectangle = { \n label: 'Rectangle Body',\n position: { x: x, y: y },\n vertices: Vertices.fromPath('L 0 0 L ' + width + ' 0 L ' + width + ' ' + height + ' L 0 ' + height)\n };\n\n if (options.chamfer) {\n var chamfer = options.chamfer;\n rectangle.vertices = Vertices.chamfer(rectangle.vertices, chamfer.radius, \n chamfer.quality, chamfer.qualityMin, chamfer.qualityMax);\n delete options.chamfer;\n }\n\n return Body.create(Common.extend({}, rectangle, options));\n };\n \n /**\n * Creates a new rigid body model with a trapezoid hull. \n * The `slope` is parameterised as a fraction of `width` and must be < 1 to form a valid trapezoid. \n * The options parameter is an object that specifies any properties you wish to override the defaults.\n * See the properties section of the `Matter.Body` module for detailed information on what you can pass via the `options` object.\n * @method trapezoid\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} slope Must be a number < 1.\n * @param {object} [options]\n * @return {body} A new trapezoid body\n */\n Bodies.trapezoid = function(x, y, width, height, slope, options) {\n options = options || {};\n\n if (slope >= 1) {\n Common.warn('Bodies.trapezoid: slope parameter must be < 1.');\n }\n\n slope *= 0.5;\n var roof = (1 - (slope * 2)) * width;\n \n var x1 = width * slope,\n x2 = x1 + roof,\n x3 = x2 + x1,\n verticesPath;\n\n if (slope < 0.5) {\n verticesPath = 'L 0 0 L ' + x1 + ' ' + (-height) + ' L ' + x2 + ' ' + (-height) + ' L ' + x3 + ' 0';\n } else {\n verticesPath = 'L 0 0 L ' + x2 + ' ' + (-height) + ' L ' + x3 + ' 0';\n }\n\n var trapezoid = { \n label: 'Trapezoid Body',\n position: { x: x, y: y },\n vertices: Vertices.fromPath(verticesPath)\n };\n\n if (options.chamfer) {\n var chamfer = options.chamfer;\n trapezoid.vertices = Vertices.chamfer(trapezoid.vertices, chamfer.radius, \n chamfer.quality, chamfer.qualityMin, chamfer.qualityMax);\n delete options.chamfer;\n }\n\n return Body.create(Common.extend({}, trapezoid, options));\n };\n\n /**\n * Creates a new rigid body model with a circle hull. \n * The options parameter is an object that specifies any properties you wish to override the defaults.\n * See the properties section of the `Matter.Body` module for detailed information on what you can pass via the `options` object.\n * @method circle\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {object} [options]\n * @param {number} [maxSides]\n * @return {body} A new circle body\n */\n Bodies.circle = function(x, y, radius, options, maxSides) {\n options = options || {};\n\n var circle = {\n label: 'Circle Body',\n circleRadius: radius\n };\n \n // approximate circles with polygons until true circles implemented in SAT\n maxSides = maxSides || 25;\n var sides = Math.ceil(Math.max(10, Math.min(maxSides, radius)));\n\n // optimisation: always use even number of sides (half the number of unique axes)\n if (sides % 2 === 1)\n sides += 1;\n\n return Bodies.polygon(x, y, sides, radius, Common.extend({}, circle, options));\n };\n\n /**\n * Creates a new rigid body model with a regular polygon hull with the given number of sides. \n * The options parameter is an object that specifies any properties you wish to override the defaults.\n * See the properties section of the `Matter.Body` module for detailed information on what you can pass via the `options` object.\n * @method polygon\n * @param {number} x\n * @param {number} y\n * @param {number} sides\n * @param {number} radius\n * @param {object} [options]\n * @return {body} A new regular polygon body\n */\n Bodies.polygon = function(x, y, sides, radius, options) {\n options = options || {};\n\n if (sides < 3)\n return Bodies.circle(x, y, radius, options);\n\n var theta = 2 * Math.PI / sides,\n path = '',\n offset = theta * 0.5;\n\n for (var i = 0; i < sides; i += 1) {\n var angle = offset + (i * theta),\n xx = Math.cos(angle) * radius,\n yy = Math.sin(angle) * radius;\n\n path += 'L ' + xx.toFixed(3) + ' ' + yy.toFixed(3) + ' ';\n }\n\n var polygon = { \n label: 'Polygon Body',\n position: { x: x, y: y },\n vertices: Vertices.fromPath(path)\n };\n\n if (options.chamfer) {\n var chamfer = options.chamfer;\n polygon.vertices = Vertices.chamfer(polygon.vertices, chamfer.radius, \n chamfer.quality, chamfer.qualityMin, chamfer.qualityMax);\n delete options.chamfer;\n }\n\n return Body.create(Common.extend({}, polygon, options));\n };\n\n /**\n * Utility to create a compound body based on set(s) of vertices.\n * \n * _Note:_ To optionally enable automatic concave vertices decomposition the [poly-decomp](https://github.com/schteppe/poly-decomp.js) \n * package must be first installed and provided see `Common.setDecomp`, otherwise the convex hull of each vertex set will be used.\n * \n * The resulting vertices are reorientated about their centre of mass,\n * and offset such that `body.position` corresponds to this point.\n * \n * The resulting offset may be found if needed by subtracting `body.bounds` from the original input bounds.\n * To later move the centre of mass see `Body.setCentre`.\n * \n * Note that automatic conconcave decomposition results are not always optimal. \n * For best results, simplify the input vertices as much as possible first.\n * By default this function applies some addtional simplification to help.\n * \n * Some outputs may also require further manual processing afterwards to be robust.\n * In particular some parts may need to be overlapped to avoid collision gaps.\n * Thin parts and sharp points should be avoided or removed where possible.\n *\n * The options parameter object specifies any `Matter.Body` properties you wish to override the defaults.\n * \n * See the properties section of the `Matter.Body` module for detailed information on what you can pass via the `options` object.\n * @method fromVertices\n * @param {number} x\n * @param {number} y\n * @param {array} vertexSets One or more arrays of vertex points e.g. `[[{ x: 0, y: 0 }...], ...]`.\n * @param {object} [options] The body options.\n * @param {bool} [flagInternal=false] Optionally marks internal edges with `isInternal`.\n * @param {number} [removeCollinear=0.01] Threshold when simplifying vertices along the same edge.\n * @param {number} [minimumArea=10] Threshold when removing small parts.\n * @param {number} [removeDuplicatePoints=0.01] Threshold when simplifying nearby vertices.\n * @return {body}\n */\n Bodies.fromVertices = function(x, y, vertexSets, options, flagInternal, removeCollinear, minimumArea, removeDuplicatePoints) {\n var decomp = Common.getDecomp(),\n canDecomp,\n body,\n parts,\n isConvex,\n isConcave,\n vertices,\n i,\n j,\n k,\n v,\n z;\n\n // check decomp is as expected\n canDecomp = Boolean(decomp && decomp.quickDecomp);\n\n options = options || {};\n parts = [];\n\n flagInternal = typeof flagInternal !== 'undefined' ? flagInternal : false;\n removeCollinear = typeof removeCollinear !== 'undefined' ? removeCollinear : 0.01;\n minimumArea = typeof minimumArea !== 'undefined' ? minimumArea : 10;\n removeDuplicatePoints = typeof removeDuplicatePoints !== 'undefined' ? removeDuplicatePoints : 0.01;\n\n // ensure vertexSets is an array of arrays\n if (!Common.isArray(vertexSets[0])) {\n vertexSets = [vertexSets];\n }\n\n for (v = 0; v < vertexSets.length; v += 1) {\n vertices = vertexSets[v];\n isConvex = Vertices.isConvex(vertices);\n isConcave = !isConvex;\n\n if (isConcave && !canDecomp) {\n Common.warnOnce(\n 'Bodies.fromVertices: Install the \\'poly-decomp\\' library and use Common.setDecomp or provide \\'decomp\\' as a global to decompose concave vertices.'\n );\n }\n\n if (isConvex || !canDecomp) {\n if (isConvex) {\n vertices = Vertices.clockwiseSort(vertices);\n } else {\n // fallback to convex hull when decomposition is not possible\n vertices = Vertices.hull(vertices);\n }\n\n parts.push({\n position: { x: x, y: y },\n vertices: vertices\n });\n } else {\n // initialise a decomposition\n var concave = vertices.map(function(vertex) {\n return [vertex.x, vertex.y];\n });\n\n // vertices are concave and simple, we can decompose into parts\n decomp.makeCCW(concave);\n if (removeCollinear !== false)\n decomp.removeCollinearPoints(concave, removeCollinear);\n if (removeDuplicatePoints !== false && decomp.removeDuplicatePoints)\n decomp.removeDuplicatePoints(concave, removeDuplicatePoints);\n\n // use the quick decomposition algorithm (Bayazit)\n var decomposed = decomp.quickDecomp(concave);\n\n // for each decomposed chunk\n for (i = 0; i < decomposed.length; i++) {\n var chunk = decomposed[i];\n\n // convert vertices into the correct structure\n var chunkVertices = chunk.map(function(vertices) {\n return {\n x: vertices[0],\n y: vertices[1]\n };\n });\n\n // skip small chunks\n if (minimumArea > 0 && Vertices.area(chunkVertices) < minimumArea)\n continue;\n\n // create a compound part\n parts.push({\n position: Vertices.centre(chunkVertices),\n vertices: chunkVertices\n });\n }\n }\n }\n\n // create body parts\n for (i = 0; i < parts.length; i++) {\n parts[i] = Body.create(Common.extend(parts[i], options));\n }\n\n // flag internal edges (coincident part edges)\n if (flagInternal) {\n var coincident_max_dist = 5;\n\n for (i = 0; i < parts.length; i++) {\n var partA = parts[i];\n\n for (j = i + 1; j < parts.length; j++) {\n var partB = parts[j];\n\n if (Bounds.overlaps(partA.bounds, partB.bounds)) {\n var pav = partA.vertices,\n pbv = partB.vertices;\n\n // iterate vertices of both parts\n for (k = 0; k < partA.vertices.length; k++) {\n for (z = 0; z < partB.vertices.length; z++) {\n // find distances between the vertices\n var da = Vector.magnitudeSquared(Vector.sub(pav[(k + 1) % pav.length], pbv[z])),\n db = Vector.magnitudeSquared(Vector.sub(pav[k], pbv[(z + 1) % pbv.length]));\n\n // if both vertices are very close, consider the edge concident (internal)\n if (da < coincident_max_dist && db < coincident_max_dist) {\n pav[k].isInternal = true;\n pbv[z].isInternal = true;\n }\n }\n }\n\n }\n }\n }\n }\n\n if (parts.length > 1) {\n // create the parent body to be returned, that contains generated compound parts\n body = Body.create(Common.extend({ parts: parts.slice(0) }, options));\n\n // offset such that body.position is at the centre off mass\n Body.setPosition(body, { x: x, y: y });\n\n return body;\n } else {\n return parts[0];\n }\n };\n\n})();\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.Detector` module contains methods for efficiently detecting collisions between a list of bodies using a broadphase algorithm.\n*\n* @class Detector\n*/\n\nvar Detector = {};\n\nmodule.exports = Detector;\n\nvar Common = __webpack_require__(0);\nvar Collision = __webpack_require__(8);\n\n(function() {\n\n /**\n * Creates a new collision detector.\n * @method create\n * @param {} options\n * @return {detector} A new collision detector\n */\n Detector.create = function(options) {\n var defaults = {\n bodies: [],\n collisions: [],\n pairs: null\n };\n\n return Common.extend(defaults, options);\n };\n\n /**\n * Sets the list of bodies in the detector.\n * @method setBodies\n * @param {detector} detector\n * @param {body[]} bodies\n */\n Detector.setBodies = function(detector, bodies) {\n detector.bodies = bodies.slice(0);\n };\n\n /**\n * Clears the detector including its list of bodies.\n * @method clear\n * @param {detector} detector\n */\n Detector.clear = function(detector) {\n detector.bodies = [];\n detector.collisions = [];\n };\n\n /**\n * Efficiently finds all collisions among all the bodies in `detector.bodies` using a broadphase algorithm.\n * \n * _Note:_ The specific ordering of collisions returned is not guaranteed between releases and may change for performance reasons.\n * If a specific ordering is required then apply a sort to the resulting array.\n * @method collisions\n * @param {detector} detector\n * @return {collision[]} collisions\n */\n Detector.collisions = function(detector) {\n var pairs = detector.pairs,\n bodies = detector.bodies,\n bodiesLength = bodies.length,\n canCollide = Detector.canCollide,\n collides = Collision.collides,\n collisions = detector.collisions,\n collisionIndex = 0,\n i,\n j;\n\n bodies.sort(Detector._compareBoundsX);\n\n for (i = 0; i < bodiesLength; i++) {\n var bodyA = bodies[i],\n boundsA = bodyA.bounds,\n boundXMax = bodyA.bounds.max.x,\n boundYMax = bodyA.bounds.max.y,\n boundYMin = bodyA.bounds.min.y,\n bodyAStatic = bodyA.isStatic || bodyA.isSleeping,\n partsALength = bodyA.parts.length,\n partsASingle = partsALength === 1;\n\n for (j = i + 1; j < bodiesLength; j++) {\n var bodyB = bodies[j],\n boundsB = bodyB.bounds;\n\n if (boundsB.min.x > boundXMax) {\n break;\n }\n\n if (boundYMax < boundsB.min.y || boundYMin > boundsB.max.y) {\n continue;\n }\n\n if (bodyAStatic && (bodyB.isStatic || bodyB.isSleeping)) {\n continue;\n }\n\n if (!canCollide(bodyA.collisionFilter, bodyB.collisionFilter)) {\n continue;\n }\n\n var partsBLength = bodyB.parts.length;\n\n if (partsASingle && partsBLength === 1) {\n var collision = collides(bodyA, bodyB, pairs);\n\n if (collision) {\n collisions[collisionIndex++] = collision;\n }\n } else {\n var partsAStart = partsALength > 1 ? 1 : 0,\n partsBStart = partsBLength > 1 ? 1 : 0;\n \n for (var k = partsAStart; k < partsALength; k++) {\n var partA = bodyA.parts[k],\n boundsA = partA.bounds;\n\n for (var z = partsBStart; z < partsBLength; z++) {\n var partB = bodyB.parts[z],\n boundsB = partB.bounds;\n\n if (boundsA.min.x > boundsB.max.x || boundsA.max.x < boundsB.min.x\n || boundsA.max.y < boundsB.min.y || boundsA.min.y > boundsB.max.y) {\n continue;\n }\n\n var collision = collides(partA, partB, pairs);\n\n if (collision) {\n collisions[collisionIndex++] = collision;\n }\n }\n }\n }\n }\n }\n\n if (collisions.length !== collisionIndex) {\n collisions.length = collisionIndex;\n }\n\n return collisions;\n };\n\n /**\n * Returns `true` if both supplied collision filters will allow a collision to occur.\n * See `body.collisionFilter` for more information.\n * @method canCollide\n * @param {} filterA\n * @param {} filterB\n * @return {bool} `true` if collision can occur\n */\n Detector.canCollide = function(filterA, filterB) {\n if (filterA.group === filterB.group && filterA.group !== 0)\n return filterA.group > 0;\n\n return (filterA.mask & filterB.category) !== 0 && (filterB.mask & filterA.category) !== 0;\n };\n\n /**\n * The comparison function used in the broadphase algorithm.\n * Returns the signed delta of the bodies bounds on the x-axis.\n * @private\n * @method _sortCompare\n * @param {body} bodyA\n * @param {body} bodyB\n * @return {number} The signed delta used for sorting\n */\n Detector._compareBoundsX = function(bodyA, bodyB) {\n return bodyA.bounds.min.x - bodyB.bounds.min.x;\n };\n\n /*\n *\n * Properties Documentation\n *\n */\n\n /**\n * The array of `Matter.Body` between which the detector finds collisions.\n * \n * _Note:_ The order of bodies in this array _is not fixed_ and will be continually managed by the detector.\n * @property bodies\n * @type body[]\n * @default []\n */\n\n /**\n * The array of `Matter.Collision` found in the last call to `Detector.collisions` on this detector.\n * @property collisions\n * @type collision[]\n * @default []\n */\n\n /**\n * Optional. A `Matter.Pairs` object from which previous collision objects may be reused. Intended for internal `Matter.Engine` usage.\n * @property pairs\n * @type {pairs|null}\n * @default null\n */\n\n})();\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.Mouse` module contains methods for creating and manipulating mouse inputs.\n*\n* @class Mouse\n*/\n\nvar Mouse = {};\n\nmodule.exports = Mouse;\n\nvar Common = __webpack_require__(0);\n\n(function() {\n\n /**\n * Creates a mouse input.\n * @method create\n * @param {HTMLElement} element\n * @return {mouse} A new mouse\n */\n Mouse.create = function(element) {\n var mouse = {};\n\n if (!element) {\n Common.log('Mouse.create: element was undefined, defaulting to document.body', 'warn');\n }\n \n mouse.element = element || document.body;\n mouse.absolute = { x: 0, y: 0 };\n mouse.position = { x: 0, y: 0 };\n mouse.mousedownPosition = { x: 0, y: 0 };\n mouse.mouseupPosition = { x: 0, y: 0 };\n mouse.offset = { x: 0, y: 0 };\n mouse.scale = { x: 1, y: 1 };\n mouse.wheelDelta = 0;\n mouse.button = -1;\n mouse.pixelRatio = parseInt(mouse.element.getAttribute('data-pixel-ratio'), 10) || 1;\n\n mouse.sourceEvents = {\n mousemove: null,\n mousedown: null,\n mouseup: null,\n mousewheel: null\n };\n \n mouse.mousemove = function(event) { \n var position = Mouse._getRelativeMousePosition(event, mouse.element, mouse.pixelRatio),\n touches = event.changedTouches;\n\n if (touches) {\n mouse.button = 0;\n event.preventDefault();\n }\n\n mouse.absolute.x = position.x;\n mouse.absolute.y = position.y;\n mouse.position.x = mouse.absolute.x * mouse.scale.x + mouse.offset.x;\n mouse.position.y = mouse.absolute.y * mouse.scale.y + mouse.offset.y;\n mouse.sourceEvents.mousemove = event;\n };\n \n mouse.mousedown = function(event) {\n var position = Mouse._getRelativeMousePosition(event, mouse.element, mouse.pixelRatio),\n touches = event.changedTouches;\n\n if (touches) {\n mouse.button = 0;\n event.preventDefault();\n } else {\n mouse.button = event.button;\n }\n\n mouse.absolute.x = position.x;\n mouse.absolute.y = position.y;\n mouse.position.x = mouse.absolute.x * mouse.scale.x + mouse.offset.x;\n mouse.position.y = mouse.absolute.y * mouse.scale.y + mouse.offset.y;\n mouse.mousedownPosition.x = mouse.position.x;\n mouse.mousedownPosition.y = mouse.position.y;\n mouse.sourceEvents.mousedown = event;\n };\n \n mouse.mouseup = function(event) {\n var position = Mouse._getRelativeMousePosition(event, mouse.element, mouse.pixelRatio),\n touches = event.changedTouches;\n\n if (touches) {\n event.preventDefault();\n }\n \n mouse.button = -1;\n mouse.absolute.x = position.x;\n mouse.absolute.y = position.y;\n mouse.position.x = mouse.absolute.x * mouse.scale.x + mouse.offset.x;\n mouse.position.y = mouse.absolute.y * mouse.scale.y + mouse.offset.y;\n mouse.mouseupPosition.x = mouse.position.x;\n mouse.mouseupPosition.y = mouse.position.y;\n mouse.sourceEvents.mouseup = event;\n };\n\n mouse.mousewheel = function(event) {\n mouse.wheelDelta = Math.max(-1, Math.min(1, event.wheelDelta || -event.detail));\n event.preventDefault();\n mouse.sourceEvents.mousewheel = event;\n };\n\n Mouse.setElement(mouse, mouse.element);\n\n return mouse;\n };\n\n /**\n * Sets the element the mouse is bound to (and relative to).\n * @method setElement\n * @param {mouse} mouse\n * @param {HTMLElement} element\n */\n Mouse.setElement = function(mouse, element) {\n mouse.element = element;\n\n element.addEventListener('mousemove', mouse.mousemove, { passive: true });\n element.addEventListener('mousedown', mouse.mousedown, { passive: true });\n element.addEventListener('mouseup', mouse.mouseup, { passive: true });\n \n element.addEventListener('wheel', mouse.mousewheel, { passive: false });\n \n element.addEventListener('touchmove', mouse.mousemove, { passive: false });\n element.addEventListener('touchstart', mouse.mousedown, { passive: false });\n element.addEventListener('touchend', mouse.mouseup, { passive: false });\n };\n\n /**\n * Clears all captured source events.\n * @method clearSourceEvents\n * @param {mouse} mouse\n */\n Mouse.clearSourceEvents = function(mouse) {\n mouse.sourceEvents.mousemove = null;\n mouse.sourceEvents.mousedown = null;\n mouse.sourceEvents.mouseup = null;\n mouse.sourceEvents.mousewheel = null;\n mouse.wheelDelta = 0;\n };\n\n /**\n * Sets the mouse position offset.\n * @method setOffset\n * @param {mouse} mouse\n * @param {vector} offset\n */\n Mouse.setOffset = function(mouse, offset) {\n mouse.offset.x = offset.x;\n mouse.offset.y = offset.y;\n mouse.position.x = mouse.absolute.x * mouse.scale.x + mouse.offset.x;\n mouse.position.y = mouse.absolute.y * mouse.scale.y + mouse.offset.y;\n };\n\n /**\n * Sets the mouse position scale.\n * @method setScale\n * @param {mouse} mouse\n * @param {vector} scale\n */\n Mouse.setScale = function(mouse, scale) {\n mouse.scale.x = scale.x;\n mouse.scale.y = scale.y;\n mouse.position.x = mouse.absolute.x * mouse.scale.x + mouse.offset.x;\n mouse.position.y = mouse.absolute.y * mouse.scale.y + mouse.offset.y;\n };\n \n /**\n * Gets the mouse position relative to an element given a screen pixel ratio.\n * @method _getRelativeMousePosition\n * @private\n * @param {} event\n * @param {} element\n * @param {number} pixelRatio\n * @return {}\n */\n Mouse._getRelativeMousePosition = function(event, element, pixelRatio) {\n var elementBounds = element.getBoundingClientRect(),\n rootNode = (document.documentElement || document.body.parentNode || document.body),\n scrollX = (window.pageXOffset !== undefined) ? window.pageXOffset : rootNode.scrollLeft,\n scrollY = (window.pageYOffset !== undefined) ? window.pageYOffset : rootNode.scrollTop,\n touches = event.changedTouches,\n x, y;\n \n if (touches) {\n x = touches[0].pageX - elementBounds.left - scrollX;\n y = touches[0].pageY - elementBounds.top - scrollY;\n } else {\n x = event.pageX - elementBounds.left - scrollX;\n y = event.pageY - elementBounds.top - scrollY;\n }\n\n return { \n x: x / (element.clientWidth / (element.width || element.clientWidth) * pixelRatio),\n y: y / (element.clientHeight / (element.height || element.clientHeight) * pixelRatio)\n };\n };\n\n})();\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.Plugin` module contains functions for registering and installing plugins on modules.\n*\n* @class Plugin\n*/\n\nvar Plugin = {};\n\nmodule.exports = Plugin;\n\nvar Common = __webpack_require__(0);\n\n(function() {\n\n Plugin._registry = {};\n\n /**\n * Registers a plugin object so it can be resolved later by name.\n * @method register\n * @param plugin {} The plugin to register.\n * @return {object} The plugin.\n */\n Plugin.register = function(plugin) {\n if (!Plugin.isPlugin(plugin)) {\n Common.warn('Plugin.register:', Plugin.toString(plugin), 'does not implement all required fields.');\n }\n\n if (plugin.name in Plugin._registry) {\n var registered = Plugin._registry[plugin.name],\n pluginVersion = Plugin.versionParse(plugin.version).number,\n registeredVersion = Plugin.versionParse(registered.version).number;\n\n if (pluginVersion > registeredVersion) {\n Common.warn('Plugin.register:', Plugin.toString(registered), 'was upgraded to', Plugin.toString(plugin));\n Plugin._registry[plugin.name] = plugin;\n } else if (pluginVersion < registeredVersion) {\n Common.warn('Plugin.register:', Plugin.toString(registered), 'can not be downgraded to', Plugin.toString(plugin));\n } else if (plugin !== registered) {\n Common.warn('Plugin.register:', Plugin.toString(plugin), 'is already registered to different plugin object');\n }\n } else {\n Plugin._registry[plugin.name] = plugin;\n }\n\n return plugin;\n };\n\n /**\n * Resolves a dependency to a plugin object from the registry if it exists. \n * The `dependency` may contain a version, but only the name matters when resolving.\n * @method resolve\n * @param dependency {string} The dependency.\n * @return {object} The plugin if resolved, otherwise `undefined`.\n */\n Plugin.resolve = function(dependency) {\n return Plugin._registry[Plugin.dependencyParse(dependency).name];\n };\n\n /**\n * Returns a pretty printed plugin name and version.\n * @method toString\n * @param plugin {} The plugin.\n * @return {string} Pretty printed plugin name and version.\n */\n Plugin.toString = function(plugin) {\n return typeof plugin === 'string' ? plugin : (plugin.name || 'anonymous') + '@' + (plugin.version || plugin.range || '0.0.0');\n };\n\n /**\n * Returns `true` if the object meets the minimum standard to be considered a plugin.\n * This means it must define the following properties:\n * - `name`\n * - `version`\n * - `install`\n * @method isPlugin\n * @param obj {} The obj to test.\n * @return {boolean} `true` if the object can be considered a plugin otherwise `false`.\n */\n Plugin.isPlugin = function(obj) {\n return obj && obj.name && obj.version && obj.install;\n };\n\n /**\n * Returns `true` if a plugin with the given `name` been installed on `module`.\n * @method isUsed\n * @param module {} The module.\n * @param name {string} The plugin name.\n * @return {boolean} `true` if a plugin with the given `name` been installed on `module`, otherwise `false`.\n */\n Plugin.isUsed = function(module, name) {\n return module.used.indexOf(name) > -1;\n };\n\n /**\n * Returns `true` if `plugin.for` is applicable to `module` by comparing against `module.name` and `module.version`.\n * If `plugin.for` is not specified then it is assumed to be applicable.\n * The value of `plugin.for` is a string of the format `'module-name'` or `'module-name@version'`.\n * @method isFor\n * @param plugin {} The plugin.\n * @param module {} The module.\n * @return {boolean} `true` if `plugin.for` is applicable to `module`, otherwise `false`.\n */\n Plugin.isFor = function(plugin, module) {\n var parsed = plugin.for && Plugin.dependencyParse(plugin.for);\n return !plugin.for || (module.name === parsed.name && Plugin.versionSatisfies(module.version, parsed.range));\n };\n\n /**\n * Installs the plugins by calling `plugin.install` on each plugin specified in `plugins` if passed, otherwise `module.uses`.\n * For installing plugins on `Matter` see the convenience function `Matter.use`.\n * Plugins may be specified either by their name or a reference to the plugin object.\n * Plugins themselves may specify further dependencies, but each plugin is installed only once.\n * Order is important, a topological sort is performed to find the best resulting order of installation.\n * This sorting attempts to satisfy every dependency's requested ordering, but may not be exact in all cases.\n * This function logs the resulting status of each dependency in the console, along with any warnings.\n * - A green tick ✅ indicates a dependency was resolved and installed.\n * - An orange diamond 🔶 indicates a dependency was resolved but a warning was thrown for it or one if its dependencies.\n * - A red cross ❌ indicates a dependency could not be resolved.\n * Avoid calling this function multiple times on the same module unless you intend to manually control installation order.\n * @method use\n * @param module {} The module install plugins on.\n * @param [plugins=module.uses] {} The plugins to install on module (optional, defaults to `module.uses`).\n */\n Plugin.use = function(module, plugins) {\n module.uses = (module.uses || []).concat(plugins || []);\n\n if (module.uses.length === 0) {\n Common.warn('Plugin.use:', Plugin.toString(module), 'does not specify any dependencies to install.');\n return;\n }\n\n var dependencies = Plugin.dependencies(module),\n sortedDependencies = Common.topologicalSort(dependencies),\n status = [];\n\n for (var i = 0; i < sortedDependencies.length; i += 1) {\n if (sortedDependencies[i] === module.name) {\n continue;\n }\n\n var plugin = Plugin.resolve(sortedDependencies[i]);\n\n if (!plugin) {\n status.push('❌ ' + sortedDependencies[i]);\n continue;\n }\n\n if (Plugin.isUsed(module, plugin.name)) {\n continue;\n }\n\n if (!Plugin.isFor(plugin, module)) {\n Common.warn('Plugin.use:', Plugin.toString(plugin), 'is for', plugin.for, 'but installed on', Plugin.toString(module) + '.');\n plugin._warned = true;\n }\n\n if (plugin.install) {\n plugin.install(module);\n } else {\n Common.warn('Plugin.use:', Plugin.toString(plugin), 'does not specify an install function.');\n plugin._warned = true;\n }\n\n if (plugin._warned) {\n status.push('🔶 ' + Plugin.toString(plugin));\n delete plugin._warned;\n } else {\n status.push('✅ ' + Plugin.toString(plugin));\n }\n\n module.used.push(plugin.name);\n }\n\n if (status.length > 0) {\n Common.info(status.join(' '));\n }\n };\n\n /**\n * Recursively finds all of a module's dependencies and returns a flat dependency graph.\n * @method dependencies\n * @param module {} The module.\n * @return {object} A dependency graph.\n */\n Plugin.dependencies = function(module, tracked) {\n var parsedBase = Plugin.dependencyParse(module),\n name = parsedBase.name;\n\n tracked = tracked || {};\n\n if (name in tracked) {\n return;\n }\n\n module = Plugin.resolve(module) || module;\n\n tracked[name] = Common.map(module.uses || [], function(dependency) {\n if (Plugin.isPlugin(dependency)) {\n Plugin.register(dependency);\n }\n\n var parsed = Plugin.dependencyParse(dependency),\n resolved = Plugin.resolve(dependency);\n\n if (resolved && !Plugin.versionSatisfies(resolved.version, parsed.range)) {\n Common.warn(\n 'Plugin.dependencies:', Plugin.toString(resolved), 'does not satisfy',\n Plugin.toString(parsed), 'used by', Plugin.toString(parsedBase) + '.'\n );\n\n resolved._warned = true;\n module._warned = true;\n } else if (!resolved) {\n Common.warn(\n 'Plugin.dependencies:', Plugin.toString(dependency), 'used by',\n Plugin.toString(parsedBase), 'could not be resolved.'\n );\n\n module._warned = true;\n }\n\n return parsed.name;\n });\n\n for (var i = 0; i < tracked[name].length; i += 1) {\n Plugin.dependencies(tracked[name][i], tracked);\n }\n\n return tracked;\n };\n\n /**\n * Parses a dependency string into its components.\n * The `dependency` is a string of the format `'module-name'` or `'module-name@version'`.\n * See documentation for `Plugin.versionParse` for a description of the format.\n * This function can also handle dependencies that are already resolved (e.g. a module object).\n * @method dependencyParse\n * @param dependency {string} The dependency of the format `'module-name'` or `'module-name@version'`.\n * @return {object} The dependency parsed into its components.\n */\n Plugin.dependencyParse = function(dependency) {\n if (Common.isString(dependency)) {\n var pattern = /^[\\w-]+(@(\\*|[\\^~]?\\d+\\.\\d+\\.\\d+(-[0-9A-Za-z-+]+)?))?$/;\n\n if (!pattern.test(dependency)) {\n Common.warn('Plugin.dependencyParse:', dependency, 'is not a valid dependency string.');\n }\n\n return {\n name: dependency.split('@')[0],\n range: dependency.split('@')[1] || '*'\n };\n }\n\n return {\n name: dependency.name,\n range: dependency.range || dependency.version\n };\n };\n\n /**\n * Parses a version string into its components. \n * Versions are strictly of the format `x.y.z` (as in [semver](http://semver.org/)).\n * Versions may optionally have a prerelease tag in the format `x.y.z-alpha`.\n * Ranges are a strict subset of [npm ranges](https://docs.npmjs.com/misc/semver#advanced-range-syntax).\n * Only the following range types are supported:\n * - Tilde ranges e.g. `~1.2.3`\n * - Caret ranges e.g. `^1.2.3`\n * - Greater than ranges e.g. `>1.2.3`\n * - Greater than or equal ranges e.g. `>=1.2.3`\n * - Exact version e.g. `1.2.3`\n * - Any version `*`\n * @method versionParse\n * @param range {string} The version string.\n * @return {object} The version range parsed into its components.\n */\n Plugin.versionParse = function(range) {\n var pattern = /^(\\*)|(\\^|~|>=|>)?\\s*((\\d+)\\.(\\d+)\\.(\\d+))(-[0-9A-Za-z-+]+)?$/;\n\n if (!pattern.test(range)) {\n Common.warn('Plugin.versionParse:', range, 'is not a valid version or range.');\n }\n\n var parts = pattern.exec(range);\n var major = Number(parts[4]);\n var minor = Number(parts[5]);\n var patch = Number(parts[6]);\n\n return {\n isRange: Boolean(parts[1] || parts[2]),\n version: parts[3],\n range: range,\n operator: parts[1] || parts[2] || '',\n major: major,\n minor: minor,\n patch: patch,\n parts: [major, minor, patch],\n prerelease: parts[7],\n number: major * 1e8 + minor * 1e4 + patch\n };\n };\n\n /**\n * Returns `true` if `version` satisfies the given `range`.\n * See documentation for `Plugin.versionParse` for a description of the format.\n * If a version or range is not specified, then any version (`*`) is assumed to satisfy.\n * @method versionSatisfies\n * @param version {string} The version string.\n * @param range {string} The range string.\n * @return {boolean} `true` if `version` satisfies `range`, otherwise `false`.\n */\n Plugin.versionSatisfies = function(version, range) {\n range = range || '*';\n\n var r = Plugin.versionParse(range),\n v = Plugin.versionParse(version);\n\n if (r.isRange) {\n if (r.operator === '*' || version === '*') {\n return true;\n }\n\n if (r.operator === '>') {\n return v.number > r.number;\n }\n\n if (r.operator === '>=') {\n return v.number >= r.number;\n }\n\n if (r.operator === '~') {\n return v.major === r.major && v.minor === r.minor && v.patch >= r.patch;\n }\n\n if (r.operator === '^') {\n if (r.major > 0) {\n return v.major === r.major && v.number >= r.number;\n }\n\n if (r.minor > 0) {\n return v.minor === r.minor && v.patch >= r.patch;\n }\n\n return v.patch === r.patch;\n }\n }\n\n return version === range || version === '*';\n };\n\n})();\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n/**\n* The `Matter.Contact` module contains methods for creating and manipulating collision contacts.\n*\n* @class Contact\n*/\n\nvar Contact = {};\n\nmodule.exports = Contact;\n\n(function() {\n\n /**\n * Creates a new contact.\n * @method create\n * @param {vertex} [vertex]\n * @return {contact} A new contact\n */\n Contact.create = function(vertex) {\n return {\n vertex: vertex,\n normalImpulse: 0,\n tangentImpulse: 0\n };\n };\n\n})();\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.Engine` module contains methods for creating and manipulating engines.\n* An engine is a controller that manages updating the simulation of the world.\n* See `Matter.Runner` for an optional game loop utility.\n*\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\n*\n* @class Engine\n*/\n\nvar Engine = {};\n\nmodule.exports = Engine;\n\nvar Sleeping = __webpack_require__(7);\nvar Resolver = __webpack_require__(18);\nvar Detector = __webpack_require__(13);\nvar Pairs = __webpack_require__(19);\nvar Events = __webpack_require__(5);\nvar Composite = __webpack_require__(6);\nvar Constraint = __webpack_require__(10);\nvar Common = __webpack_require__(0);\nvar Body = __webpack_require__(4);\n\n(function() {\n\n Engine._deltaMax = 1000 / 60;\n\n /**\n * Creates a new engine. The options parameter is an object that specifies any properties you wish to override the defaults.\n * All properties have default values, and many are pre-calculated automatically based on other properties.\n * See the properties section below for detailed information on what you can pass via the `options` object.\n * @method create\n * @param {object} [options]\n * @return {engine} engine\n */\n Engine.create = function(options) {\n options = options || {};\n\n var defaults = {\n positionIterations: 6,\n velocityIterations: 4,\n constraintIterations: 2,\n enableSleeping: false,\n events: [],\n plugin: {},\n gravity: {\n x: 0,\n y: 1,\n scale: 0.001\n },\n timing: {\n timestamp: 0,\n timeScale: 1,\n lastDelta: 0,\n lastElapsed: 0,\n lastUpdatesPerFrame: 0\n }\n };\n\n var engine = Common.extend(defaults, options);\n\n engine.world = options.world || Composite.create({ label: 'World' });\n engine.pairs = options.pairs || Pairs.create();\n engine.detector = options.detector || Detector.create();\n engine.detector.pairs = engine.pairs;\n\n // for temporary back compatibility only\n engine.grid = { buckets: [] };\n engine.world.gravity = engine.gravity;\n engine.broadphase = engine.grid;\n engine.metrics = {};\n \n return engine;\n };\n\n /**\n * Moves the simulation forward in time by `delta` milliseconds.\n * Triggers `beforeUpdate`, `beforeSolve` and `afterUpdate` events.\n * Triggers `collisionStart`, `collisionActive` and `collisionEnd` events.\n * @method update\n * @param {engine} engine\n * @param {number} [delta=16.666]\n */\n Engine.update = function(engine, delta) {\n var startTime = Common.now();\n\n var world = engine.world,\n detector = engine.detector,\n pairs = engine.pairs,\n timing = engine.timing,\n timestamp = timing.timestamp,\n i;\n\n // warn if high delta\n if (delta > Engine._deltaMax) {\n Common.warnOnce(\n 'Matter.Engine.update: delta argument is recommended to be less than or equal to', Engine._deltaMax.toFixed(3), 'ms.'\n );\n }\n\n delta = typeof delta !== 'undefined' ? delta : Common._baseDelta;\n delta *= timing.timeScale;\n\n // increment timestamp\n timing.timestamp += delta;\n timing.lastDelta = delta;\n\n // create an event object\n var event = {\n timestamp: timing.timestamp,\n delta: delta\n };\n\n Events.trigger(engine, 'beforeUpdate', event);\n\n // get all bodies and all constraints in the world\n var allBodies = Composite.allBodies(world),\n allConstraints = Composite.allConstraints(world);\n\n // if the world has changed\n if (world.isModified) {\n // update the detector bodies\n Detector.setBodies(detector, allBodies);\n\n // reset all composite modified flags\n Composite.setModified(world, false, false, true);\n }\n\n // update sleeping if enabled\n if (engine.enableSleeping)\n Sleeping.update(allBodies, delta);\n\n // apply gravity to all bodies\n Engine._bodiesApplyGravity(allBodies, engine.gravity);\n\n // update all body position and rotation by integration\n if (delta > 0) {\n Engine._bodiesUpdate(allBodies, delta);\n }\n\n Events.trigger(engine, 'beforeSolve', event);\n\n // update all constraints (first pass)\n Constraint.preSolveAll(allBodies);\n for (i = 0; i < engine.constraintIterations; i++) {\n Constraint.solveAll(allConstraints, delta);\n }\n Constraint.postSolveAll(allBodies);\n\n // find all collisions\n var collisions = Detector.collisions(detector);\n\n // update collision pairs\n Pairs.update(pairs, collisions, timestamp);\n\n // wake up bodies involved in collisions\n if (engine.enableSleeping)\n Sleeping.afterCollisions(pairs.list);\n\n // trigger collision events\n if (pairs.collisionStart.length > 0) {\n Events.trigger(engine, 'collisionStart', { \n pairs: pairs.collisionStart,\n timestamp: timing.timestamp,\n delta: delta\n });\n }\n\n // iteratively resolve position between collisions\n var positionDamping = Common.clamp(20 / engine.positionIterations, 0, 1);\n \n Resolver.preSolvePosition(pairs.list);\n for (i = 0; i < engine.positionIterations; i++) {\n Resolver.solvePosition(pairs.list, delta, positionDamping);\n }\n Resolver.postSolvePosition(allBodies);\n\n // update all constraints (second pass)\n Constraint.preSolveAll(allBodies);\n for (i = 0; i < engine.constraintIterations; i++) {\n Constraint.solveAll(allConstraints, delta);\n }\n Constraint.postSolveAll(allBodies);\n\n // iteratively resolve velocity between collisions\n Resolver.preSolveVelocity(pairs.list);\n for (i = 0; i < engine.velocityIterations; i++) {\n Resolver.solveVelocity(pairs.list, delta);\n }\n\n // update body speed and velocity properties\n Engine._bodiesUpdateVelocities(allBodies);\n\n // trigger collision events\n if (pairs.collisionActive.length > 0) {\n Events.trigger(engine, 'collisionActive', { \n pairs: pairs.collisionActive, \n timestamp: timing.timestamp,\n delta: delta\n });\n }\n\n if (pairs.collisionEnd.length > 0) {\n Events.trigger(engine, 'collisionEnd', {\n pairs: pairs.collisionEnd,\n timestamp: timing.timestamp,\n delta: delta\n });\n }\n\n // clear force buffers\n Engine._bodiesClearForces(allBodies);\n\n Events.trigger(engine, 'afterUpdate', event);\n\n // log the time elapsed computing this update\n engine.timing.lastElapsed = Common.now() - startTime;\n\n return engine;\n };\n \n /**\n * Merges two engines by keeping the configuration of `engineA` but replacing the world with the one from `engineB`.\n * @method merge\n * @param {engine} engineA\n * @param {engine} engineB\n */\n Engine.merge = function(engineA, engineB) {\n Common.extend(engineA, engineB);\n \n if (engineB.world) {\n engineA.world = engineB.world;\n\n Engine.clear(engineA);\n\n var bodies = Composite.allBodies(engineA.world);\n\n for (var i = 0; i < bodies.length; i++) {\n var body = bodies[i];\n Sleeping.set(body, false);\n body.id = Common.nextId();\n }\n }\n };\n\n /**\n * Clears the engine pairs and detector.\n * @method clear\n * @param {engine} engine\n */\n Engine.clear = function(engine) {\n Pairs.clear(engine.pairs);\n Detector.clear(engine.detector);\n };\n\n /**\n * Zeroes the `body.force` and `body.torque` force buffers.\n * @method _bodiesClearForces\n * @private\n * @param {body[]} bodies\n */\n Engine._bodiesClearForces = function(bodies) {\n var bodiesLength = bodies.length;\n\n for (var i = 0; i < bodiesLength; i++) {\n var body = bodies[i];\n\n // reset force buffers\n body.force.x = 0;\n body.force.y = 0;\n body.torque = 0;\n }\n };\n\n /**\n * Applies gravitational acceleration to all `bodies`.\n * This models a [uniform gravitational field](https://en.wikipedia.org/wiki/Gravity_of_Earth), similar to near the surface of a planet.\n * \n * @method _bodiesApplyGravity\n * @private\n * @param {body[]} bodies\n * @param {vector} gravity\n */\n Engine._bodiesApplyGravity = function(bodies, gravity) {\n var gravityScale = typeof gravity.scale !== 'undefined' ? gravity.scale : 0.001,\n bodiesLength = bodies.length;\n\n if ((gravity.x === 0 && gravity.y === 0) || gravityScale === 0) {\n return;\n }\n \n for (var i = 0; i < bodiesLength; i++) {\n var body = bodies[i];\n\n if (body.isStatic || body.isSleeping)\n continue;\n\n // add the resultant force of gravity\n body.force.y += body.mass * gravity.y * gravityScale;\n body.force.x += body.mass * gravity.x * gravityScale;\n }\n };\n\n /**\n * Applies `Body.update` to all given `bodies`.\n * @method _bodiesUpdate\n * @private\n * @param {body[]} bodies\n * @param {number} delta The amount of time elapsed between updates\n */\n Engine._bodiesUpdate = function(bodies, delta) {\n var bodiesLength = bodies.length;\n\n for (var i = 0; i < bodiesLength; i++) {\n var body = bodies[i];\n\n if (body.isStatic || body.isSleeping)\n continue;\n\n Body.update(body, delta);\n }\n };\n\n /**\n * Applies `Body.updateVelocities` to all given `bodies`.\n * @method _bodiesUpdateVelocities\n * @private\n * @param {body[]} bodies\n */\n Engine._bodiesUpdateVelocities = function(bodies) {\n var bodiesLength = bodies.length;\n\n for (var i = 0; i < bodiesLength; i++) {\n Body.updateVelocities(bodies[i]);\n }\n };\n\n /**\n * A deprecated alias for `Runner.run`, use `Matter.Runner.run(engine)` instead and see `Matter.Runner` for more information.\n * @deprecated use Matter.Runner.run(engine) instead\n * @method run\n * @param {engine} engine\n */\n\n /**\n * Fired just before an update\n *\n * @event beforeUpdate\n * @param {object} event An event object\n * @param {number} event.timestamp The engine.timing.timestamp of the event\n * @param {number} event.delta The delta time in milliseconds value used in the update\n * @param {engine} event.source The source object of the event\n * @param {string} event.name The name of the event\n */\n\n /**\n * Fired after bodies updated based on their velocity and forces, but before any collision detection, constraints and resolving etc.\n *\n * @event beforeSolve\n * @param {object} event An event object\n * @param {number} event.timestamp The engine.timing.timestamp of the event\n * @param {number} event.delta The delta time in milliseconds value used in the update\n * @param {engine} event.source The source object of the event\n * @param {string} event.name The name of the event\n */\n\n /**\n * Fired after engine update and all collision events\n *\n * @event afterUpdate\n * @param {object} event An event object\n * @param {number} event.timestamp The engine.timing.timestamp of the event\n * @param {number} event.delta The delta time in milliseconds value used in the update\n * @param {engine} event.source The source object of the event\n * @param {string} event.name The name of the event\n */\n\n /**\n * Fired after engine update, provides a list of all pairs that have started to collide in the current tick (if any)\n *\n * @event collisionStart\n * @param {object} event An event object\n * @param {pair[]} event.pairs List of affected pairs\n * @param {number} event.timestamp The engine.timing.timestamp of the event\n * @param {number} event.delta The delta time in milliseconds value used in the update\n * @param {engine} event.source The source object of the event\n * @param {string} event.name The name of the event\n */\n\n /**\n * Fired after engine update, provides a list of all pairs that are colliding in the current tick (if any)\n *\n * @event collisionActive\n * @param {object} event An event object\n * @param {pair[]} event.pairs List of affected pairs\n * @param {number} event.timestamp The engine.timing.timestamp of the event\n * @param {number} event.delta The delta time in milliseconds value used in the update\n * @param {engine} event.source The source object of the event\n * @param {string} event.name The name of the event\n */\n\n /**\n * Fired after engine update, provides a list of all pairs that have ended collision in the current tick (if any)\n *\n * @event collisionEnd\n * @param {object} event An event object\n * @param {pair[]} event.pairs List of affected pairs\n * @param {number} event.timestamp The engine.timing.timestamp of the event\n * @param {number} event.delta The delta time in milliseconds value used in the update\n * @param {engine} event.source The source object of the event\n * @param {string} event.name The name of the event\n */\n\n /*\n *\n * Properties Documentation\n *\n */\n\n /**\n * An integer `Number` that specifies the number of position iterations to perform each update.\n * The higher the value, the higher quality the simulation will be at the expense of performance.\n *\n * @property positionIterations\n * @type number\n * @default 6\n */\n\n /**\n * An integer `Number` that specifies the number of velocity iterations to perform each update.\n * The higher the value, the higher quality the simulation will be at the expense of performance.\n *\n * @property velocityIterations\n * @type number\n * @default 4\n */\n\n /**\n * An integer `Number` that specifies the number of constraint iterations to perform each update.\n * The higher the value, the higher quality the simulation will be at the expense of performance.\n * The default value of `2` is usually very adequate.\n *\n * @property constraintIterations\n * @type number\n * @default 2\n */\n\n /**\n * A flag that specifies whether the engine should allow sleeping via the `Matter.Sleeping` module.\n * Sleeping can improve stability and performance, but often at the expense of accuracy.\n *\n * @property enableSleeping\n * @type boolean\n * @default false\n */\n\n /**\n * An `Object` containing properties regarding the timing systems of the engine. \n *\n * @property timing\n * @type object\n */\n\n /**\n * A `Number` that specifies the global scaling factor of time for all bodies.\n * A value of `0` freezes the simulation.\n * A value of `0.1` gives a slow-motion effect.\n * A value of `1.2` gives a speed-up effect.\n *\n * @property timing.timeScale\n * @type number\n * @default 1\n */\n\n /**\n * A `Number` that specifies the current simulation-time in milliseconds starting from `0`. \n * It is incremented on every `Engine.update` by the given `delta` argument. \n * \n * @property timing.timestamp\n * @type number\n * @default 0\n */\n\n /**\n * A `Number` that represents the total execution time elapsed during the last `Engine.update` in milliseconds.\n * It is updated by timing from the start of the last `Engine.update` call until it ends.\n *\n * This value will also include the total execution time of all event handlers directly or indirectly triggered by the engine update.\n * \n * @property timing.lastElapsed\n * @type number\n * @default 0\n */\n\n /**\n * A `Number` that represents the `delta` value used in the last engine update.\n * \n * @property timing.lastDelta\n * @type number\n * @default 0\n */\n\n /**\n * A `Matter.Detector` instance.\n *\n * @property detector\n * @type detector\n * @default a Matter.Detector instance\n */\n\n /**\n * A `Matter.Grid` instance.\n *\n * @deprecated replaced by `engine.detector`\n * @property grid\n * @type grid\n * @default a Matter.Grid instance\n */\n\n /**\n * Replaced by and now alias for `engine.grid`.\n *\n * @deprecated replaced by `engine.detector`\n * @property broadphase\n * @type grid\n * @default a Matter.Grid instance\n */\n\n /**\n * The root `Matter.Composite` instance that will contain all bodies, constraints and other composites to be simulated by this engine.\n *\n * @property world\n * @type composite\n * @default a Matter.Composite instance\n */\n\n /**\n * An object reserved for storing plugin-specific properties.\n *\n * @property plugin\n * @type {}\n */\n\n /**\n * An optional gravitational acceleration applied to all bodies in `engine.world` on every update.\n * \n * This models a [uniform gravitational field](https://en.wikipedia.org/wiki/Gravity_of_Earth), similar to near the surface of a planet. For gravity in other contexts, disable this and apply forces as needed.\n * \n * To disable set the `scale` component to `0`.\n * \n * This is split into three components for ease of use: \n * a normalised direction (`x` and `y`) and magnitude (`scale`).\n *\n * @property gravity\n * @type object\n */\n\n /**\n * The gravitational direction normal `x` component, to be multiplied by `gravity.scale`.\n * \n * @property gravity.x\n * @type object\n * @default 0\n */\n\n /**\n * The gravitational direction normal `y` component, to be multiplied by `gravity.scale`.\n *\n * @property gravity.y\n * @type object\n * @default 1\n */\n\n /**\n * The magnitude of the gravitational acceleration.\n * \n * @property gravity.scale\n * @type object\n * @default 0.001\n */\n\n})();\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.Resolver` module contains methods for resolving collision pairs.\n*\n* @class Resolver\n*/\n\nvar Resolver = {};\n\nmodule.exports = Resolver;\n\nvar Vertices = __webpack_require__(3);\nvar Common = __webpack_require__(0);\nvar Bounds = __webpack_require__(1);\n\n(function() {\n\n Resolver._restingThresh = 2;\n Resolver._restingThreshTangent = Math.sqrt(6);\n Resolver._positionDampen = 0.9;\n Resolver._positionWarming = 0.8;\n Resolver._frictionNormalMultiplier = 5;\n Resolver._frictionMaxStatic = Number.MAX_VALUE;\n\n /**\n * Prepare pairs for position solving.\n * @method preSolvePosition\n * @param {pair[]} pairs\n */\n Resolver.preSolvePosition = function(pairs) {\n var i,\n pair,\n contactCount,\n pairsLength = pairs.length;\n\n // find total contacts on each body\n for (i = 0; i < pairsLength; i++) {\n pair = pairs[i];\n \n if (!pair.isActive)\n continue;\n \n contactCount = pair.contactCount;\n pair.collision.parentA.totalContacts += contactCount;\n pair.collision.parentB.totalContacts += contactCount;\n }\n };\n\n /**\n * Find a solution for pair positions.\n * @method solvePosition\n * @param {pair[]} pairs\n * @param {number} delta\n * @param {number} [damping=1]\n */\n Resolver.solvePosition = function(pairs, delta, damping) {\n var i,\n pair,\n collision,\n bodyA,\n bodyB,\n normal,\n contactShare,\n positionImpulse,\n positionDampen = Resolver._positionDampen * (damping || 1),\n slopDampen = Common.clamp(delta / Common._baseDelta, 0, 1),\n pairsLength = pairs.length;\n\n // find impulses required to resolve penetration\n for (i = 0; i < pairsLength; i++) {\n pair = pairs[i];\n \n if (!pair.isActive || pair.isSensor)\n continue;\n\n collision = pair.collision;\n bodyA = collision.parentA;\n bodyB = collision.parentB;\n normal = collision.normal;\n\n // get current separation between body edges involved in collision\n pair.separation = \n collision.depth + normal.x * (bodyB.positionImpulse.x - bodyA.positionImpulse.x)\n + normal.y * (bodyB.positionImpulse.y - bodyA.positionImpulse.y);\n }\n \n for (i = 0; i < pairsLength; i++) {\n pair = pairs[i];\n\n if (!pair.isActive || pair.isSensor)\n continue;\n \n collision = pair.collision;\n bodyA = collision.parentA;\n bodyB = collision.parentB;\n normal = collision.normal;\n positionImpulse = pair.separation - pair.slop * slopDampen;\n\n if (bodyA.isStatic || bodyB.isStatic)\n positionImpulse *= 2;\n \n if (!(bodyA.isStatic || bodyA.isSleeping)) {\n contactShare = positionDampen / bodyA.totalContacts;\n bodyA.positionImpulse.x += normal.x * positionImpulse * contactShare;\n bodyA.positionImpulse.y += normal.y * positionImpulse * contactShare;\n }\n\n if (!(bodyB.isStatic || bodyB.isSleeping)) {\n contactShare = positionDampen / bodyB.totalContacts;\n bodyB.positionImpulse.x -= normal.x * positionImpulse * contactShare;\n bodyB.positionImpulse.y -= normal.y * positionImpulse * contactShare;\n }\n }\n };\n\n /**\n * Apply position resolution.\n * @method postSolvePosition\n * @param {body[]} bodies\n */\n Resolver.postSolvePosition = function(bodies) {\n var positionWarming = Resolver._positionWarming,\n bodiesLength = bodies.length,\n verticesTranslate = Vertices.translate,\n boundsUpdate = Bounds.update;\n\n for (var i = 0; i < bodiesLength; i++) {\n var body = bodies[i],\n positionImpulse = body.positionImpulse,\n positionImpulseX = positionImpulse.x,\n positionImpulseY = positionImpulse.y,\n velocity = body.velocity;\n\n // reset contact count\n body.totalContacts = 0;\n\n if (positionImpulseX !== 0 || positionImpulseY !== 0) {\n // update body geometry\n for (var j = 0; j < body.parts.length; j++) {\n var part = body.parts[j];\n verticesTranslate(part.vertices, positionImpulse);\n boundsUpdate(part.bounds, part.vertices, velocity);\n part.position.x += positionImpulseX;\n part.position.y += positionImpulseY;\n }\n\n // move the body without changing velocity\n body.positionPrev.x += positionImpulseX;\n body.positionPrev.y += positionImpulseY;\n\n if (positionImpulseX * velocity.x + positionImpulseY * velocity.y < 0) {\n // reset cached impulse if the body has velocity along it\n positionImpulse.x = 0;\n positionImpulse.y = 0;\n } else {\n // warm the next iteration\n positionImpulse.x *= positionWarming;\n positionImpulse.y *= positionWarming;\n }\n }\n }\n };\n\n /**\n * Prepare pairs for velocity solving.\n * @method preSolveVelocity\n * @param {pair[]} pairs\n */\n Resolver.preSolveVelocity = function(pairs) {\n var pairsLength = pairs.length,\n i,\n j;\n \n for (i = 0; i < pairsLength; i++) {\n var pair = pairs[i];\n \n if (!pair.isActive || pair.isSensor)\n continue;\n \n var contacts = pair.contacts,\n contactCount = pair.contactCount,\n collision = pair.collision,\n bodyA = collision.parentA,\n bodyB = collision.parentB,\n normal = collision.normal,\n tangent = collision.tangent;\n \n // resolve each contact\n for (j = 0; j < contactCount; j++) {\n var contact = contacts[j],\n contactVertex = contact.vertex,\n normalImpulse = contact.normalImpulse,\n tangentImpulse = contact.tangentImpulse;\n \n if (normalImpulse !== 0 || tangentImpulse !== 0) {\n // total impulse from contact\n var impulseX = normal.x * normalImpulse + tangent.x * tangentImpulse,\n impulseY = normal.y * normalImpulse + tangent.y * tangentImpulse;\n \n // apply impulse from contact\n if (!(bodyA.isStatic || bodyA.isSleeping)) {\n bodyA.positionPrev.x += impulseX * bodyA.inverseMass;\n bodyA.positionPrev.y += impulseY * bodyA.inverseMass;\n bodyA.anglePrev += bodyA.inverseInertia * (\n (contactVertex.x - bodyA.position.x) * impulseY\n - (contactVertex.y - bodyA.position.y) * impulseX\n );\n }\n \n if (!(bodyB.isStatic || bodyB.isSleeping)) {\n bodyB.positionPrev.x -= impulseX * bodyB.inverseMass;\n bodyB.positionPrev.y -= impulseY * bodyB.inverseMass;\n bodyB.anglePrev -= bodyB.inverseInertia * (\n (contactVertex.x - bodyB.position.x) * impulseY \n - (contactVertex.y - bodyB.position.y) * impulseX\n );\n }\n }\n }\n }\n };\n\n /**\n * Find a solution for pair velocities.\n * @method solveVelocity\n * @param {pair[]} pairs\n * @param {number} delta\n */\n Resolver.solveVelocity = function(pairs, delta) {\n var timeScale = delta / Common._baseDelta,\n timeScaleSquared = timeScale * timeScale,\n timeScaleCubed = timeScaleSquared * timeScale,\n restingThresh = -Resolver._restingThresh * timeScale,\n restingThreshTangent = Resolver._restingThreshTangent,\n frictionNormalMultiplier = Resolver._frictionNormalMultiplier * timeScale,\n frictionMaxStatic = Resolver._frictionMaxStatic,\n pairsLength = pairs.length,\n tangentImpulse,\n maxFriction,\n i,\n j;\n\n for (i = 0; i < pairsLength; i++) {\n var pair = pairs[i];\n \n if (!pair.isActive || pair.isSensor)\n continue;\n \n var collision = pair.collision,\n bodyA = collision.parentA,\n bodyB = collision.parentB,\n normalX = collision.normal.x,\n normalY = collision.normal.y,\n tangentX = collision.tangent.x,\n tangentY = collision.tangent.y,\n inverseMassTotal = pair.inverseMass,\n friction = pair.friction * pair.frictionStatic * frictionNormalMultiplier,\n contacts = pair.contacts,\n contactCount = pair.contactCount,\n contactShare = 1 / contactCount;\n\n // get body velocities\n var bodyAVelocityX = bodyA.position.x - bodyA.positionPrev.x,\n bodyAVelocityY = bodyA.position.y - bodyA.positionPrev.y,\n bodyAAngularVelocity = bodyA.angle - bodyA.anglePrev,\n bodyBVelocityX = bodyB.position.x - bodyB.positionPrev.x,\n bodyBVelocityY = bodyB.position.y - bodyB.positionPrev.y,\n bodyBAngularVelocity = bodyB.angle - bodyB.anglePrev;\n\n // resolve each contact\n for (j = 0; j < contactCount; j++) {\n var contact = contacts[j],\n contactVertex = contact.vertex;\n\n var offsetAX = contactVertex.x - bodyA.position.x,\n offsetAY = contactVertex.y - bodyA.position.y,\n offsetBX = contactVertex.x - bodyB.position.x,\n offsetBY = contactVertex.y - bodyB.position.y;\n \n var velocityPointAX = bodyAVelocityX - offsetAY * bodyAAngularVelocity,\n velocityPointAY = bodyAVelocityY + offsetAX * bodyAAngularVelocity,\n velocityPointBX = bodyBVelocityX - offsetBY * bodyBAngularVelocity,\n velocityPointBY = bodyBVelocityY + offsetBX * bodyBAngularVelocity;\n\n var relativeVelocityX = velocityPointAX - velocityPointBX,\n relativeVelocityY = velocityPointAY - velocityPointBY;\n\n var normalVelocity = normalX * relativeVelocityX + normalY * relativeVelocityY,\n tangentVelocity = tangentX * relativeVelocityX + tangentY * relativeVelocityY;\n\n // coulomb friction\n var normalOverlap = pair.separation + normalVelocity;\n var normalForce = Math.min(normalOverlap, 1);\n normalForce = normalOverlap < 0 ? 0 : normalForce;\n\n var frictionLimit = normalForce * friction;\n\n if (tangentVelocity < -frictionLimit || tangentVelocity > frictionLimit) {\n maxFriction = (tangentVelocity > 0 ? tangentVelocity : -tangentVelocity);\n tangentImpulse = pair.friction * (tangentVelocity > 0 ? 1 : -1) * timeScaleCubed;\n \n if (tangentImpulse < -maxFriction) {\n tangentImpulse = -maxFriction;\n } else if (tangentImpulse > maxFriction) {\n tangentImpulse = maxFriction;\n }\n } else {\n tangentImpulse = tangentVelocity;\n maxFriction = frictionMaxStatic;\n }\n\n // account for mass, inertia and contact offset\n var oAcN = offsetAX * normalY - offsetAY * normalX,\n oBcN = offsetBX * normalY - offsetBY * normalX,\n share = contactShare / (inverseMassTotal + bodyA.inverseInertia * oAcN * oAcN + bodyB.inverseInertia * oBcN * oBcN);\n\n // raw impulses\n var normalImpulse = (1 + pair.restitution) * normalVelocity * share;\n tangentImpulse *= share;\n\n // handle high velocity and resting collisions separately\n if (normalVelocity < restingThresh) {\n // high normal velocity so clear cached contact normal impulse\n contact.normalImpulse = 0;\n } else {\n // solve resting collision constraints using Erin Catto's method (GDC08)\n // impulse constraint tends to 0\n var contactNormalImpulse = contact.normalImpulse;\n contact.normalImpulse += normalImpulse;\n if (contact.normalImpulse > 0) contact.normalImpulse = 0;\n normalImpulse = contact.normalImpulse - contactNormalImpulse;\n }\n\n // handle high velocity and resting collisions separately\n if (tangentVelocity < -restingThreshTangent || tangentVelocity > restingThreshTangent) {\n // high tangent velocity so clear cached contact tangent impulse\n contact.tangentImpulse = 0;\n } else {\n // solve resting collision constraints using Erin Catto's method (GDC08)\n // tangent impulse tends to -tangentSpeed or +tangentSpeed\n var contactTangentImpulse = contact.tangentImpulse;\n contact.tangentImpulse += tangentImpulse;\n if (contact.tangentImpulse < -maxFriction) contact.tangentImpulse = -maxFriction;\n if (contact.tangentImpulse > maxFriction) contact.tangentImpulse = maxFriction;\n tangentImpulse = contact.tangentImpulse - contactTangentImpulse;\n }\n\n // total impulse from contact\n var impulseX = normalX * normalImpulse + tangentX * tangentImpulse,\n impulseY = normalY * normalImpulse + tangentY * tangentImpulse;\n \n // apply impulse from contact\n if (!(bodyA.isStatic || bodyA.isSleeping)) {\n bodyA.positionPrev.x += impulseX * bodyA.inverseMass;\n bodyA.positionPrev.y += impulseY * bodyA.inverseMass;\n bodyA.anglePrev += (offsetAX * impulseY - offsetAY * impulseX) * bodyA.inverseInertia;\n }\n\n if (!(bodyB.isStatic || bodyB.isSleeping)) {\n bodyB.positionPrev.x -= impulseX * bodyB.inverseMass;\n bodyB.positionPrev.y -= impulseY * bodyB.inverseMass;\n bodyB.anglePrev -= (offsetBX * impulseY - offsetBY * impulseX) * bodyB.inverseInertia;\n }\n }\n }\n };\n\n})();\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.Pairs` module contains methods for creating and manipulating collision pair sets.\n*\n* @class Pairs\n*/\n\nvar Pairs = {};\n\nmodule.exports = Pairs;\n\nvar Pair = __webpack_require__(9);\nvar Common = __webpack_require__(0);\n\n(function() {\n\n /**\n * Creates a new pairs structure.\n * @method create\n * @param {object} options\n * @return {pairs} A new pairs structure\n */\n Pairs.create = function(options) {\n return Common.extend({ \n table: {},\n list: [],\n collisionStart: [],\n collisionActive: [],\n collisionEnd: []\n }, options);\n };\n\n /**\n * Updates pairs given a list of collisions.\n * @method update\n * @param {object} pairs\n * @param {collision[]} collisions\n * @param {number} timestamp\n */\n Pairs.update = function(pairs, collisions, timestamp) {\n var pairUpdate = Pair.update,\n pairCreate = Pair.create,\n pairSetActive = Pair.setActive,\n pairsTable = pairs.table,\n pairsList = pairs.list,\n pairsListLength = pairsList.length,\n pairsListIndex = pairsListLength,\n collisionStart = pairs.collisionStart,\n collisionEnd = pairs.collisionEnd,\n collisionActive = pairs.collisionActive,\n collisionsLength = collisions.length,\n collisionStartIndex = 0,\n collisionEndIndex = 0,\n collisionActiveIndex = 0,\n collision,\n pair,\n i;\n\n for (i = 0; i < collisionsLength; i++) {\n collision = collisions[i];\n pair = collision.pair;\n\n if (pair) {\n // pair already exists (but may or may not be active)\n if (pair.isActive) {\n // pair exists and is active\n collisionActive[collisionActiveIndex++] = pair;\n }\n\n // update the pair\n pairUpdate(pair, collision, timestamp);\n } else {\n // pair did not exist, create a new pair\n pair = pairCreate(collision, timestamp);\n pairsTable[pair.id] = pair;\n\n // add the new pair\n collisionStart[collisionStartIndex++] = pair;\n pairsList[pairsListIndex++] = pair;\n }\n }\n\n // find pairs that are no longer active\n pairsListIndex = 0;\n pairsListLength = pairsList.length;\n\n for (i = 0; i < pairsListLength; i++) {\n pair = pairsList[i];\n \n // pair is active if updated this timestep\n if (pair.timeUpdated >= timestamp) {\n // keep active pairs\n pairsList[pairsListIndex++] = pair;\n } else {\n pairSetActive(pair, false, timestamp);\n\n // keep inactive pairs if both bodies may be sleeping\n if (pair.collision.bodyA.sleepCounter > 0 && pair.collision.bodyB.sleepCounter > 0) {\n pairsList[pairsListIndex++] = pair;\n } else {\n // remove inactive pairs if either body awake\n collisionEnd[collisionEndIndex++] = pair;\n delete pairsTable[pair.id];\n }\n }\n }\n\n // update array lengths if changed\n if (pairsList.length !== pairsListIndex) {\n pairsList.length = pairsListIndex;\n }\n\n if (collisionStart.length !== collisionStartIndex) {\n collisionStart.length = collisionStartIndex;\n }\n\n if (collisionEnd.length !== collisionEndIndex) {\n collisionEnd.length = collisionEndIndex;\n }\n\n if (collisionActive.length !== collisionActiveIndex) {\n collisionActive.length = collisionActiveIndex;\n }\n };\n\n /**\n * Clears the given pairs structure.\n * @method clear\n * @param {pairs} pairs\n * @return {pairs} pairs\n */\n Pairs.clear = function(pairs) {\n pairs.table = {};\n pairs.list.length = 0;\n pairs.collisionStart.length = 0;\n pairs.collisionActive.length = 0;\n pairs.collisionEnd.length = 0;\n return pairs;\n };\n\n})();\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar Matter = module.exports = __webpack_require__(21);\r\n\r\nMatter.Axes = __webpack_require__(11);\r\nMatter.Bodies = __webpack_require__(12);\r\nMatter.Body = __webpack_require__(4);\r\nMatter.Bounds = __webpack_require__(1);\r\nMatter.Collision = __webpack_require__(8);\r\nMatter.Common = __webpack_require__(0);\r\nMatter.Composite = __webpack_require__(6);\r\nMatter.Composites = __webpack_require__(22);\r\nMatter.Constraint = __webpack_require__(10);\r\nMatter.Contact = __webpack_require__(16);\r\nMatter.Detector = __webpack_require__(13);\r\nMatter.Engine = __webpack_require__(17);\r\nMatter.Events = __webpack_require__(5);\r\nMatter.Grid = __webpack_require__(23);\r\nMatter.Mouse = __webpack_require__(14);\r\nMatter.MouseConstraint = __webpack_require__(24);\r\nMatter.Pair = __webpack_require__(9);\r\nMatter.Pairs = __webpack_require__(19);\r\nMatter.Plugin = __webpack_require__(15);\r\nMatter.Query = __webpack_require__(25);\r\nMatter.Render = __webpack_require__(26);\r\nMatter.Resolver = __webpack_require__(18);\r\nMatter.Runner = __webpack_require__(27);\r\nMatter.SAT = __webpack_require__(28);\r\nMatter.Sleeping = __webpack_require__(7);\r\nMatter.Svg = __webpack_require__(29);\r\nMatter.Vector = __webpack_require__(2);\r\nMatter.Vertices = __webpack_require__(3);\r\nMatter.World = __webpack_require__(30);\r\n\r\n// temporary back compatibility\r\nMatter.Engine.run = Matter.Runner.run;\r\nMatter.Common.deprecated(Matter.Engine, 'run', 'Engine.run ➤ use Matter.Runner.run(engine) instead');\r\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\r\n* The `Matter` module is the top level namespace. It also includes a function for installing plugins on top of the library.\r\n*\r\n* @class Matter\r\n*/\r\n\r\nvar Matter = {};\r\n\r\nmodule.exports = Matter;\r\n\r\nvar Plugin = __webpack_require__(15);\r\nvar Common = __webpack_require__(0);\r\n\r\n(function() {\r\n\r\n /**\r\n * The library name.\r\n * @property name\r\n * @readOnly\r\n * @type {String}\r\n */\r\n Matter.name = 'matter-js';\r\n\r\n /**\r\n * The library version.\r\n * @property version\r\n * @readOnly\r\n * @type {String}\r\n */\r\n Matter.version = true ? \"0.20.0\" : undefined;\r\n\r\n /**\r\n * A list of plugin dependencies to be installed. These are normally set and installed through `Matter.use`.\r\n * Alternatively you may set `Matter.uses` manually and install them by calling `Plugin.use(Matter)`.\r\n * @property uses\r\n * @type {Array}\r\n */\r\n Matter.uses = [];\r\n\r\n /**\r\n * The plugins that have been installed through `Matter.Plugin.install`. Read only.\r\n * @property used\r\n * @readOnly\r\n * @type {Array}\r\n */\r\n Matter.used = [];\r\n\r\n /**\r\n * Installs the given plugins on the `Matter` namespace.\r\n * This is a short-hand for `Plugin.use`, see it for more information.\r\n * Call this function once at the start of your code, with all of the plugins you wish to install as arguments.\r\n * Avoid calling this function multiple times unless you intend to manually control installation order.\r\n * @method use\r\n * @param ...plugin {Function} The plugin(s) to install on `base` (multi-argument).\r\n */\r\n Matter.use = function() {\r\n Plugin.use(Matter, Array.prototype.slice.call(arguments));\r\n };\r\n\r\n /**\r\n * Chains a function to excute before the original function on the given `path` relative to `Matter`.\r\n * See also docs for `Common.chain`.\r\n * @method before\r\n * @param {string} path The path relative to `Matter`\r\n * @param {function} func The function to chain before the original\r\n * @return {function} The chained function that replaced the original\r\n */\r\n Matter.before = function(path, func) {\r\n path = path.replace(/^Matter./, '');\r\n return Common.chainPathBefore(Matter, path, func);\r\n };\r\n\r\n /**\r\n * Chains a function to excute after the original function on the given `path` relative to `Matter`.\r\n * See also docs for `Common.chain`.\r\n * @method after\r\n * @param {string} path The path relative to `Matter`\r\n * @param {function} func The function to chain after the original\r\n * @return {function} The chained function that replaced the original\r\n */\r\n Matter.after = function(path, func) {\r\n path = path.replace(/^Matter./, '');\r\n return Common.chainPathAfter(Matter, path, func);\r\n };\r\n\r\n})();\r\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.Composites` module contains factory methods for creating composite bodies\n* with commonly used configurations (such as stacks and chains).\n*\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\n*\n* @class Composites\n*/\n\nvar Composites = {};\n\nmodule.exports = Composites;\n\nvar Composite = __webpack_require__(6);\nvar Constraint = __webpack_require__(10);\nvar Common = __webpack_require__(0);\nvar Body = __webpack_require__(4);\nvar Bodies = __webpack_require__(12);\nvar deprecated = Common.deprecated;\n\n(function() {\n\n /**\n * Create a new composite containing bodies created in the callback in a grid arrangement.\n * This function uses the body's bounds to prevent overlaps.\n * @method stack\n * @param {number} x Starting position in X.\n * @param {number} y Starting position in Y.\n * @param {number} columns\n * @param {number} rows\n * @param {number} columnGap\n * @param {number} rowGap\n * @param {function} callback\n * @return {composite} A new composite containing objects created in the callback\n */\n Composites.stack = function(x, y, columns, rows, columnGap, rowGap, callback) {\n var stack = Composite.create({ label: 'Stack' }),\n currentX = x,\n currentY = y,\n lastBody,\n i = 0;\n\n for (var row = 0; row < rows; row++) {\n var maxHeight = 0;\n \n for (var column = 0; column < columns; column++) {\n var body = callback(currentX, currentY, column, row, lastBody, i);\n \n if (body) {\n var bodyHeight = body.bounds.max.y - body.bounds.min.y,\n bodyWidth = body.bounds.max.x - body.bounds.min.x; \n\n if (bodyHeight > maxHeight)\n maxHeight = bodyHeight;\n \n Body.translate(body, { x: bodyWidth * 0.5, y: bodyHeight * 0.5 });\n\n currentX = body.bounds.max.x + columnGap;\n\n Composite.addBody(stack, body);\n \n lastBody = body;\n i += 1;\n } else {\n currentX += columnGap;\n }\n }\n \n currentY += maxHeight + rowGap;\n currentX = x;\n }\n\n return stack;\n };\n \n /**\n * Chains all bodies in the given composite together using constraints.\n * @method chain\n * @param {composite} composite\n * @param {number} xOffsetA\n * @param {number} yOffsetA\n * @param {number} xOffsetB\n * @param {number} yOffsetB\n * @param {object} options\n * @return {composite} A new composite containing objects chained together with constraints\n */\n Composites.chain = function(composite, xOffsetA, yOffsetA, xOffsetB, yOffsetB, options) {\n var bodies = composite.bodies;\n \n for (var i = 1; i < bodies.length; i++) {\n var bodyA = bodies[i - 1],\n bodyB = bodies[i],\n bodyAHeight = bodyA.bounds.max.y - bodyA.bounds.min.y,\n bodyAWidth = bodyA.bounds.max.x - bodyA.bounds.min.x, \n bodyBHeight = bodyB.bounds.max.y - bodyB.bounds.min.y,\n bodyBWidth = bodyB.bounds.max.x - bodyB.bounds.min.x;\n \n var defaults = {\n bodyA: bodyA,\n pointA: { x: bodyAWidth * xOffsetA, y: bodyAHeight * yOffsetA },\n bodyB: bodyB,\n pointB: { x: bodyBWidth * xOffsetB, y: bodyBHeight * yOffsetB }\n };\n \n var constraint = Common.extend(defaults, options);\n \n Composite.addConstraint(composite, Constraint.create(constraint));\n }\n\n composite.label += ' Chain';\n \n return composite;\n };\n\n /**\n * Connects bodies in the composite with constraints in a grid pattern, with optional cross braces.\n * @method mesh\n * @param {composite} composite\n * @param {number} columns\n * @param {number} rows\n * @param {boolean} crossBrace\n * @param {object} options\n * @return {composite} The composite containing objects meshed together with constraints\n */\n Composites.mesh = function(composite, columns, rows, crossBrace, options) {\n var bodies = composite.bodies,\n row,\n col,\n bodyA,\n bodyB,\n bodyC;\n \n for (row = 0; row < rows; row++) {\n for (col = 1; col < columns; col++) {\n bodyA = bodies[(col - 1) + (row * columns)];\n bodyB = bodies[col + (row * columns)];\n Composite.addConstraint(composite, Constraint.create(Common.extend({ bodyA: bodyA, bodyB: bodyB }, options)));\n }\n\n if (row > 0) {\n for (col = 0; col < columns; col++) {\n bodyA = bodies[col + ((row - 1) * columns)];\n bodyB = bodies[col + (row * columns)];\n Composite.addConstraint(composite, Constraint.create(Common.extend({ bodyA: bodyA, bodyB: bodyB }, options)));\n\n if (crossBrace && col > 0) {\n bodyC = bodies[(col - 1) + ((row - 1) * columns)];\n Composite.addConstraint(composite, Constraint.create(Common.extend({ bodyA: bodyC, bodyB: bodyB }, options)));\n }\n\n if (crossBrace && col < columns - 1) {\n bodyC = bodies[(col + 1) + ((row - 1) * columns)];\n Composite.addConstraint(composite, Constraint.create(Common.extend({ bodyA: bodyC, bodyB: bodyB }, options)));\n }\n }\n }\n }\n\n composite.label += ' Mesh';\n \n return composite;\n };\n \n /**\n * Create a new composite containing bodies created in the callback in a pyramid arrangement.\n * This function uses the body's bounds to prevent overlaps.\n * @method pyramid\n * @param {number} x Starting position in X.\n * @param {number} y Starting position in Y.\n * @param {number} columns\n * @param {number} rows\n * @param {number} columnGap\n * @param {number} rowGap\n * @param {function} callback\n * @return {composite} A new composite containing objects created in the callback\n */\n Composites.pyramid = function(x, y, columns, rows, columnGap, rowGap, callback) {\n return Composites.stack(x, y, columns, rows, columnGap, rowGap, function(stackX, stackY, column, row, lastBody, i) {\n var actualRows = Math.min(rows, Math.ceil(columns / 2)),\n lastBodyWidth = lastBody ? lastBody.bounds.max.x - lastBody.bounds.min.x : 0;\n \n if (row > actualRows)\n return;\n \n // reverse row order\n row = actualRows - row;\n \n var start = row,\n end = columns - 1 - row;\n\n if (column < start || column > end)\n return;\n \n // retroactively fix the first body's position, since width was unknown\n if (i === 1) {\n Body.translate(lastBody, { x: (column + (columns % 2 === 1 ? 1 : -1)) * lastBodyWidth, y: 0 });\n }\n\n var xOffset = lastBody ? column * lastBodyWidth : 0;\n \n return callback(x + xOffset + column * columnGap, stackY, column, row, lastBody, i);\n });\n };\n\n /**\n * This has now moved to the [newtonsCradle example](https://github.com/liabru/matter-js/blob/master/examples/newtonsCradle.js), follow that instead as this function is deprecated here.\n * @deprecated moved to newtonsCradle example\n * @method newtonsCradle\n * @param {number} x Starting position in X.\n * @param {number} y Starting position in Y.\n * @param {number} number\n * @param {number} size\n * @param {number} length\n * @return {composite} A new composite newtonsCradle body\n */\n Composites.newtonsCradle = function(x, y, number, size, length) {\n var newtonsCradle = Composite.create({ label: 'Newtons Cradle' });\n\n for (var i = 0; i < number; i++) {\n var separation = 1.9,\n circle = Bodies.circle(x + i * (size * separation), y + length, size, \n { inertia: Infinity, restitution: 1, friction: 0, frictionAir: 0.0001, slop: 1 }),\n constraint = Constraint.create({ pointA: { x: x + i * (size * separation), y: y }, bodyB: circle });\n\n Composite.addBody(newtonsCradle, circle);\n Composite.addConstraint(newtonsCradle, constraint);\n }\n\n return newtonsCradle;\n };\n\n deprecated(Composites, 'newtonsCradle', 'Composites.newtonsCradle ➤ moved to newtonsCradle example');\n \n /**\n * This has now moved to the [car example](https://github.com/liabru/matter-js/blob/master/examples/car.js), follow that instead as this function is deprecated here.\n * @deprecated moved to car example\n * @method car\n * @param {number} x Starting position in X.\n * @param {number} y Starting position in Y.\n * @param {number} width\n * @param {number} height\n * @param {number} wheelSize\n * @return {composite} A new composite car body\n */\n Composites.car = function(x, y, width, height, wheelSize) {\n var group = Body.nextGroup(true),\n wheelBase = 20,\n wheelAOffset = -width * 0.5 + wheelBase,\n wheelBOffset = width * 0.5 - wheelBase,\n wheelYOffset = 0;\n \n var car = Composite.create({ label: 'Car' }),\n body = Bodies.rectangle(x, y, width, height, { \n collisionFilter: {\n group: group\n },\n chamfer: {\n radius: height * 0.5\n },\n density: 0.0002\n });\n \n var wheelA = Bodies.circle(x + wheelAOffset, y + wheelYOffset, wheelSize, { \n collisionFilter: {\n group: group\n },\n friction: 0.8\n });\n \n var wheelB = Bodies.circle(x + wheelBOffset, y + wheelYOffset, wheelSize, { \n collisionFilter: {\n group: group\n },\n friction: 0.8\n });\n \n var axelA = Constraint.create({\n bodyB: body,\n pointB: { x: wheelAOffset, y: wheelYOffset },\n bodyA: wheelA,\n stiffness: 1,\n length: 0\n });\n \n var axelB = Constraint.create({\n bodyB: body,\n pointB: { x: wheelBOffset, y: wheelYOffset },\n bodyA: wheelB,\n stiffness: 1,\n length: 0\n });\n \n Composite.addBody(car, body);\n Composite.addBody(car, wheelA);\n Composite.addBody(car, wheelB);\n Composite.addConstraint(car, axelA);\n Composite.addConstraint(car, axelB);\n\n return car;\n };\n\n deprecated(Composites, 'car', 'Composites.car ➤ moved to car example');\n\n /**\n * This has now moved to the [softBody example](https://github.com/liabru/matter-js/blob/master/examples/softBody.js)\n * and the [cloth example](https://github.com/liabru/matter-js/blob/master/examples/cloth.js), follow those instead as this function is deprecated here.\n * @deprecated moved to softBody and cloth examples\n * @method softBody\n * @param {number} x Starting position in X.\n * @param {number} y Starting position in Y.\n * @param {number} columns\n * @param {number} rows\n * @param {number} columnGap\n * @param {number} rowGap\n * @param {boolean} crossBrace\n * @param {number} particleRadius\n * @param {} particleOptions\n * @param {} constraintOptions\n * @return {composite} A new composite softBody\n */\n Composites.softBody = function(x, y, columns, rows, columnGap, rowGap, crossBrace, particleRadius, particleOptions, constraintOptions) {\n particleOptions = Common.extend({ inertia: Infinity }, particleOptions);\n constraintOptions = Common.extend({ stiffness: 0.2, render: { type: 'line', anchors: false } }, constraintOptions);\n\n var softBody = Composites.stack(x, y, columns, rows, columnGap, rowGap, function(stackX, stackY) {\n return Bodies.circle(stackX, stackY, particleRadius, particleOptions);\n });\n\n Composites.mesh(softBody, columns, rows, crossBrace, constraintOptions);\n\n softBody.label = 'Soft Body';\n\n return softBody;\n };\n\n deprecated(Composites, 'softBody', 'Composites.softBody ➤ moved to softBody and cloth examples');\n})();\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* This module has now been replaced by `Matter.Detector`.\n*\n* All usage should be migrated to `Matter.Detector` or another alternative.\n* For back-compatibility purposes this module will remain for a short term and then later removed in a future release.\n*\n* The `Matter.Grid` module contains methods for creating and manipulating collision broadphase grid structures.\n*\n* @class Grid\n* @deprecated\n*/\n\nvar Grid = {};\n\nmodule.exports = Grid;\n\nvar Pair = __webpack_require__(9);\nvar Common = __webpack_require__(0);\nvar deprecated = Common.deprecated;\n\n(function() {\n\n /**\n * Creates a new grid.\n * @deprecated replaced by Matter.Detector\n * @method create\n * @param {} options\n * @return {grid} A new grid\n */\n Grid.create = function(options) {\n var defaults = {\n buckets: {},\n pairs: {},\n pairsList: [],\n bucketWidth: 48,\n bucketHeight: 48\n };\n\n return Common.extend(defaults, options);\n };\n\n /**\n * The width of a single grid bucket.\n *\n * @property bucketWidth\n * @type number\n * @default 48\n */\n\n /**\n * The height of a single grid bucket.\n *\n * @property bucketHeight\n * @type number\n * @default 48\n */\n\n /**\n * Updates the grid.\n * @deprecated replaced by Matter.Detector\n * @method update\n * @param {grid} grid\n * @param {body[]} bodies\n * @param {engine} engine\n * @param {boolean} forceUpdate\n */\n Grid.update = function(grid, bodies, engine, forceUpdate) {\n var i, col, row,\n world = engine.world,\n buckets = grid.buckets,\n bucket,\n bucketId,\n gridChanged = false;\n\n for (i = 0; i < bodies.length; i++) {\n var body = bodies[i];\n\n if (body.isSleeping && !forceUpdate)\n continue;\n\n // temporary back compatibility bounds check\n if (world.bounds && (body.bounds.max.x < world.bounds.min.x || body.bounds.min.x > world.bounds.max.x\n || body.bounds.max.y < world.bounds.min.y || body.bounds.min.y > world.bounds.max.y))\n continue;\n\n var newRegion = Grid._getRegion(grid, body);\n\n // if the body has changed grid region\n if (!body.region || newRegion.id !== body.region.id || forceUpdate) {\n\n if (!body.region || forceUpdate)\n body.region = newRegion;\n\n var union = Grid._regionUnion(newRegion, body.region);\n\n // update grid buckets affected by region change\n // iterate over the union of both regions\n for (col = union.startCol; col <= union.endCol; col++) {\n for (row = union.startRow; row <= union.endRow; row++) {\n bucketId = Grid._getBucketId(col, row);\n bucket = buckets[bucketId];\n\n var isInsideNewRegion = (col >= newRegion.startCol && col <= newRegion.endCol\n && row >= newRegion.startRow && row <= newRegion.endRow);\n\n var isInsideOldRegion = (col >= body.region.startCol && col <= body.region.endCol\n && row >= body.region.startRow && row <= body.region.endRow);\n\n // remove from old region buckets\n if (!isInsideNewRegion && isInsideOldRegion) {\n if (isInsideOldRegion) {\n if (bucket)\n Grid._bucketRemoveBody(grid, bucket, body);\n }\n }\n\n // add to new region buckets\n if (body.region === newRegion || (isInsideNewRegion && !isInsideOldRegion) || forceUpdate) {\n if (!bucket)\n bucket = Grid._createBucket(buckets, bucketId);\n Grid._bucketAddBody(grid, bucket, body);\n }\n }\n }\n\n // set the new region\n body.region = newRegion;\n\n // flag changes so we can update pairs\n gridChanged = true;\n }\n }\n\n // update pairs list only if pairs changed (i.e. a body changed region)\n if (gridChanged)\n grid.pairsList = Grid._createActivePairsList(grid);\n };\n\n deprecated(Grid, 'update', 'Grid.update ➤ replaced by Matter.Detector');\n\n /**\n * Clears the grid.\n * @deprecated replaced by Matter.Detector\n * @method clear\n * @param {grid} grid\n */\n Grid.clear = function(grid) {\n grid.buckets = {};\n grid.pairs = {};\n grid.pairsList = [];\n };\n\n deprecated(Grid, 'clear', 'Grid.clear ➤ replaced by Matter.Detector');\n\n /**\n * Finds the union of two regions.\n * @method _regionUnion\n * @deprecated replaced by Matter.Detector\n * @private\n * @param {} regionA\n * @param {} regionB\n * @return {} region\n */\n Grid._regionUnion = function(regionA, regionB) {\n var startCol = Math.min(regionA.startCol, regionB.startCol),\n endCol = Math.max(regionA.endCol, regionB.endCol),\n startRow = Math.min(regionA.startRow, regionB.startRow),\n endRow = Math.max(regionA.endRow, regionB.endRow);\n\n return Grid._createRegion(startCol, endCol, startRow, endRow);\n };\n\n /**\n * Gets the region a given body falls in for a given grid.\n * @method _getRegion\n * @deprecated replaced by Matter.Detector\n * @private\n * @param {} grid\n * @param {} body\n * @return {} region\n */\n Grid._getRegion = function(grid, body) {\n var bounds = body.bounds,\n startCol = Math.floor(bounds.min.x / grid.bucketWidth),\n endCol = Math.floor(bounds.max.x / grid.bucketWidth),\n startRow = Math.floor(bounds.min.y / grid.bucketHeight),\n endRow = Math.floor(bounds.max.y / grid.bucketHeight);\n\n return Grid._createRegion(startCol, endCol, startRow, endRow);\n };\n\n /**\n * Creates a region.\n * @method _createRegion\n * @deprecated replaced by Matter.Detector\n * @private\n * @param {} startCol\n * @param {} endCol\n * @param {} startRow\n * @param {} endRow\n * @return {} region\n */\n Grid._createRegion = function(startCol, endCol, startRow, endRow) {\n return { \n id: startCol + ',' + endCol + ',' + startRow + ',' + endRow,\n startCol: startCol, \n endCol: endCol, \n startRow: startRow, \n endRow: endRow \n };\n };\n\n /**\n * Gets the bucket id at the given position.\n * @method _getBucketId\n * @deprecated replaced by Matter.Detector\n * @private\n * @param {} column\n * @param {} row\n * @return {string} bucket id\n */\n Grid._getBucketId = function(column, row) {\n return 'C' + column + 'R' + row;\n };\n\n /**\n * Creates a bucket.\n * @method _createBucket\n * @deprecated replaced by Matter.Detector\n * @private\n * @param {} buckets\n * @param {} bucketId\n * @return {} bucket\n */\n Grid._createBucket = function(buckets, bucketId) {\n var bucket = buckets[bucketId] = [];\n return bucket;\n };\n\n /**\n * Adds a body to a bucket.\n * @method _bucketAddBody\n * @deprecated replaced by Matter.Detector\n * @private\n * @param {} grid\n * @param {} bucket\n * @param {} body\n */\n Grid._bucketAddBody = function(grid, bucket, body) {\n var gridPairs = grid.pairs,\n pairId = Pair.id,\n bucketLength = bucket.length,\n i;\n\n // add new pairs\n for (i = 0; i < bucketLength; i++) {\n var bodyB = bucket[i];\n\n if (body.id === bodyB.id || (body.isStatic && bodyB.isStatic))\n continue;\n\n // keep track of the number of buckets the pair exists in\n // important for Grid.update to work\n var id = pairId(body, bodyB),\n pair = gridPairs[id];\n\n if (pair) {\n pair[2] += 1;\n } else {\n gridPairs[id] = [body, bodyB, 1];\n }\n }\n\n // add to bodies (after pairs, otherwise pairs with self)\n bucket.push(body);\n };\n\n /**\n * Removes a body from a bucket.\n * @method _bucketRemoveBody\n * @deprecated replaced by Matter.Detector\n * @private\n * @param {} grid\n * @param {} bucket\n * @param {} body\n */\n Grid._bucketRemoveBody = function(grid, bucket, body) {\n var gridPairs = grid.pairs,\n pairId = Pair.id,\n i;\n\n // remove from bucket\n bucket.splice(Common.indexOf(bucket, body), 1);\n\n var bucketLength = bucket.length;\n\n // update pair counts\n for (i = 0; i < bucketLength; i++) {\n // keep track of the number of buckets the pair exists in\n // important for _createActivePairsList to work\n var pair = gridPairs[pairId(body, bucket[i])];\n\n if (pair)\n pair[2] -= 1;\n }\n };\n\n /**\n * Generates a list of the active pairs in the grid.\n * @method _createActivePairsList\n * @deprecated replaced by Matter.Detector\n * @private\n * @param {} grid\n * @return [] pairs\n */\n Grid._createActivePairsList = function(grid) {\n var pair,\n gridPairs = grid.pairs,\n pairKeys = Common.keys(gridPairs),\n pairKeysLength = pairKeys.length,\n pairs = [],\n k;\n\n // iterate over grid.pairs\n for (k = 0; k < pairKeysLength; k++) {\n pair = gridPairs[pairKeys[k]];\n\n // if pair exists in at least one bucket\n // it is a pair that needs further collision testing so push it\n if (pair[2] > 0) {\n pairs.push(pair);\n } else {\n delete gridPairs[pairKeys[k]];\n }\n }\n\n return pairs;\n };\n \n})();\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.MouseConstraint` module contains methods for creating mouse constraints.\n* Mouse constraints are used for allowing user interaction, providing the ability to move bodies via the mouse or touch.\n*\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\n*\n* @class MouseConstraint\n*/\n\nvar MouseConstraint = {};\n\nmodule.exports = MouseConstraint;\n\nvar Vertices = __webpack_require__(3);\nvar Sleeping = __webpack_require__(7);\nvar Mouse = __webpack_require__(14);\nvar Events = __webpack_require__(5);\nvar Detector = __webpack_require__(13);\nvar Constraint = __webpack_require__(10);\nvar Composite = __webpack_require__(6);\nvar Common = __webpack_require__(0);\nvar Bounds = __webpack_require__(1);\n\n(function() {\n\n /**\n * Creates a new mouse constraint.\n * All properties have default values, and many are pre-calculated automatically based on other properties.\n * See the properties section below for detailed information on what you can pass via the `options` object.\n * @method create\n * @param {engine} engine\n * @param {} options\n * @return {MouseConstraint} A new MouseConstraint\n */\n MouseConstraint.create = function(engine, options) {\n var mouse = (engine ? engine.mouse : null) || (options ? options.mouse : null);\n\n if (!mouse) {\n if (engine && engine.render && engine.render.canvas) {\n mouse = Mouse.create(engine.render.canvas);\n } else if (options && options.element) {\n mouse = Mouse.create(options.element);\n } else {\n mouse = Mouse.create();\n Common.warn('MouseConstraint.create: options.mouse was undefined, options.element was undefined, may not function as expected');\n }\n }\n\n var constraint = Constraint.create({ \n label: 'Mouse Constraint',\n pointA: mouse.position,\n pointB: { x: 0, y: 0 },\n length: 0.01, \n stiffness: 0.1,\n angularStiffness: 1,\n render: {\n strokeStyle: '#90EE90',\n lineWidth: 3\n }\n });\n\n var defaults = {\n type: 'mouseConstraint',\n mouse: mouse,\n element: null,\n body: null,\n constraint: constraint,\n collisionFilter: {\n category: 0x0001,\n mask: 0xFFFFFFFF,\n group: 0\n }\n };\n\n var mouseConstraint = Common.extend(defaults, options);\n\n Events.on(engine, 'beforeUpdate', function() {\n var allBodies = Composite.allBodies(engine.world);\n MouseConstraint.update(mouseConstraint, allBodies);\n MouseConstraint._triggerEvents(mouseConstraint);\n });\n\n return mouseConstraint;\n };\n\n /**\n * Updates the given mouse constraint.\n * @private\n * @method update\n * @param {MouseConstraint} mouseConstraint\n * @param {body[]} bodies\n */\n MouseConstraint.update = function(mouseConstraint, bodies) {\n var mouse = mouseConstraint.mouse,\n constraint = mouseConstraint.constraint,\n body = mouseConstraint.body;\n\n if (mouse.button === 0) {\n if (!constraint.bodyB) {\n for (var i = 0; i < bodies.length; i++) {\n body = bodies[i];\n if (Bounds.contains(body.bounds, mouse.position) \n && Detector.canCollide(body.collisionFilter, mouseConstraint.collisionFilter)) {\n for (var j = body.parts.length > 1 ? 1 : 0; j < body.parts.length; j++) {\n var part = body.parts[j];\n if (Vertices.contains(part.vertices, mouse.position)) {\n constraint.pointA = mouse.position;\n constraint.bodyB = mouseConstraint.body = body;\n constraint.pointB = { x: mouse.position.x - body.position.x, y: mouse.position.y - body.position.y };\n constraint.angleB = body.angle;\n\n Sleeping.set(body, false);\n Events.trigger(mouseConstraint, 'startdrag', { mouse: mouse, body: body });\n\n break;\n }\n }\n }\n }\n } else {\n Sleeping.set(constraint.bodyB, false);\n constraint.pointA = mouse.position;\n }\n } else {\n constraint.bodyB = mouseConstraint.body = null;\n constraint.pointB = null;\n\n if (body)\n Events.trigger(mouseConstraint, 'enddrag', { mouse: mouse, body: body });\n }\n };\n\n /**\n * Triggers mouse constraint events.\n * @method _triggerEvents\n * @private\n * @param {mouse} mouseConstraint\n */\n MouseConstraint._triggerEvents = function(mouseConstraint) {\n var mouse = mouseConstraint.mouse,\n mouseEvents = mouse.sourceEvents;\n\n if (mouseEvents.mousemove)\n Events.trigger(mouseConstraint, 'mousemove', { mouse: mouse });\n\n if (mouseEvents.mousedown)\n Events.trigger(mouseConstraint, 'mousedown', { mouse: mouse });\n\n if (mouseEvents.mouseup)\n Events.trigger(mouseConstraint, 'mouseup', { mouse: mouse });\n\n // reset the mouse state ready for the next step\n Mouse.clearSourceEvents(mouse);\n };\n\n /*\n *\n * Events Documentation\n *\n */\n\n /**\n * Fired when the mouse has moved (or a touch moves) during the last step\n *\n * @event mousemove\n * @param {} event An event object\n * @param {mouse} event.mouse The engine's mouse instance\n * @param {} event.source The source object of the event\n * @param {} event.name The name of the event\n */\n\n /**\n * Fired when the mouse is down (or a touch has started) during the last step\n *\n * @event mousedown\n * @param {} event An event object\n * @param {mouse} event.mouse The engine's mouse instance\n * @param {} event.source The source object of the event\n * @param {} event.name The name of the event\n */\n\n /**\n * Fired when the mouse is up (or a touch has ended) during the last step\n *\n * @event mouseup\n * @param {} event An event object\n * @param {mouse} event.mouse The engine's mouse instance\n * @param {} event.source The source object of the event\n * @param {} event.name The name of the event\n */\n\n /**\n * Fired when the user starts dragging a body\n *\n * @event startdrag\n * @param {} event An event object\n * @param {mouse} event.mouse The engine's mouse instance\n * @param {body} event.body The body being dragged\n * @param {} event.source The source object of the event\n * @param {} event.name The name of the event\n */\n\n /**\n * Fired when the user ends dragging a body\n *\n * @event enddrag\n * @param {} event An event object\n * @param {mouse} event.mouse The engine's mouse instance\n * @param {body} event.body The body that has stopped being dragged\n * @param {} event.source The source object of the event\n * @param {} event.name The name of the event\n */\n\n /*\n *\n * Properties Documentation\n *\n */\n\n /**\n * A `String` denoting the type of object.\n *\n * @property type\n * @type string\n * @default \"constraint\"\n * @readOnly\n */\n\n /**\n * The `Mouse` instance in use. If not supplied in `MouseConstraint.create`, one will be created.\n *\n * @property mouse\n * @type mouse\n * @default mouse\n */\n\n /**\n * The `Body` that is currently being moved by the user, or `null` if no body.\n *\n * @property body\n * @type body\n * @default null\n */\n\n /**\n * The `Constraint` object that is used to move the body during interaction.\n *\n * @property constraint\n * @type constraint\n */\n\n /**\n * An `Object` that specifies the collision filter properties.\n * The collision filter allows the user to define which types of body this mouse constraint can interact with.\n * See `body.collisionFilter` for more information.\n *\n * @property collisionFilter\n * @type object\n */\n\n})();\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.Query` module contains methods for performing collision queries.\n*\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\n*\n* @class Query\n*/\n\nvar Query = {};\n\nmodule.exports = Query;\n\nvar Vector = __webpack_require__(2);\nvar Collision = __webpack_require__(8);\nvar Bounds = __webpack_require__(1);\nvar Bodies = __webpack_require__(12);\nvar Vertices = __webpack_require__(3);\n\n(function() {\n\n /**\n * Returns a list of collisions between `body` and `bodies`.\n * @method collides\n * @param {body} body\n * @param {body[]} bodies\n * @return {collision[]} Collisions\n */\n Query.collides = function(body, bodies) {\n var collisions = [],\n bodiesLength = bodies.length,\n bounds = body.bounds,\n collides = Collision.collides,\n overlaps = Bounds.overlaps;\n\n for (var i = 0; i < bodiesLength; i++) {\n var bodyA = bodies[i],\n partsALength = bodyA.parts.length,\n partsAStart = partsALength === 1 ? 0 : 1;\n \n if (overlaps(bodyA.bounds, bounds)) {\n for (var j = partsAStart; j < partsALength; j++) {\n var part = bodyA.parts[j];\n\n if (overlaps(part.bounds, bounds)) {\n var collision = collides(part, body);\n\n if (collision) {\n collisions.push(collision);\n break;\n }\n }\n }\n }\n }\n\n return collisions;\n };\n\n /**\n * Casts a ray segment against a set of bodies and returns all collisions, ray width is optional. Intersection points are not provided.\n * @method ray\n * @param {body[]} bodies\n * @param {vector} startPoint\n * @param {vector} endPoint\n * @param {number} [rayWidth]\n * @return {collision[]} Collisions\n */\n Query.ray = function(bodies, startPoint, endPoint, rayWidth) {\n rayWidth = rayWidth || 1e-100;\n\n var rayAngle = Vector.angle(startPoint, endPoint),\n rayLength = Vector.magnitude(Vector.sub(startPoint, endPoint)),\n rayX = (endPoint.x + startPoint.x) * 0.5,\n rayY = (endPoint.y + startPoint.y) * 0.5,\n ray = Bodies.rectangle(rayX, rayY, rayLength, rayWidth, { angle: rayAngle }),\n collisions = Query.collides(ray, bodies);\n\n for (var i = 0; i < collisions.length; i += 1) {\n var collision = collisions[i];\n collision.body = collision.bodyB = collision.bodyA; \n }\n\n return collisions;\n };\n\n /**\n * Returns all bodies whose bounds are inside (or outside if set) the given set of bounds, from the given set of bodies.\n * @method region\n * @param {body[]} bodies\n * @param {bounds} bounds\n * @param {bool} [outside=false]\n * @return {body[]} The bodies matching the query\n */\n Query.region = function(bodies, bounds, outside) {\n var result = [];\n\n for (var i = 0; i < bodies.length; i++) {\n var body = bodies[i],\n overlaps = Bounds.overlaps(body.bounds, bounds);\n if ((overlaps && !outside) || (!overlaps && outside))\n result.push(body);\n }\n\n return result;\n };\n\n /**\n * Returns all bodies whose vertices contain the given point, from the given set of bodies.\n * @method point\n * @param {body[]} bodies\n * @param {vector} point\n * @return {body[]} The bodies matching the query\n */\n Query.point = function(bodies, point) {\n var result = [];\n\n for (var i = 0; i < bodies.length; i++) {\n var body = bodies[i];\n \n if (Bounds.contains(body.bounds, point)) {\n for (var j = body.parts.length === 1 ? 0 : 1; j < body.parts.length; j++) {\n var part = body.parts[j];\n\n if (Bounds.contains(part.bounds, point)\n && Vertices.contains(part.vertices, point)) {\n result.push(body);\n break;\n }\n }\n }\n }\n\n return result;\n };\n\n})();\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.Render` module is a lightweight, optional utility which provides a simple canvas based renderer for visualising instances of `Matter.Engine`.\n* It is intended for development and debugging purposes, but may also be suitable for simple games.\n* It includes a number of drawing options including wireframe, vector with support for sprites and viewports.\n*\n* @class Render\n*/\n\nvar Render = {};\n\nmodule.exports = Render;\n\nvar Body = __webpack_require__(4);\nvar Common = __webpack_require__(0);\nvar Composite = __webpack_require__(6);\nvar Bounds = __webpack_require__(1);\nvar Events = __webpack_require__(5);\nvar Vector = __webpack_require__(2);\nvar Mouse = __webpack_require__(14);\n\n(function() {\n\n var _requestAnimationFrame,\n _cancelAnimationFrame;\n\n if (typeof window !== 'undefined') {\n _requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame\n || window.mozRequestAnimationFrame || window.msRequestAnimationFrame\n || function(callback){ window.setTimeout(function() { callback(Common.now()); }, 1000 / 60); };\n\n _cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame\n || window.webkitCancelAnimationFrame || window.msCancelAnimationFrame;\n }\n\n Render._goodFps = 30;\n Render._goodDelta = 1000 / 60;\n\n /**\n * Creates a new renderer. The options parameter is an object that specifies any properties you wish to override the defaults.\n * All properties have default values, and many are pre-calculated automatically based on other properties.\n * See the properties section below for detailed information on what you can pass via the `options` object.\n * @method create\n * @param {object} [options]\n * @return {render} A new renderer\n */\n Render.create = function(options) {\n var defaults = {\n engine: null,\n element: null,\n canvas: null,\n mouse: null,\n frameRequestId: null,\n timing: {\n historySize: 60,\n delta: 0,\n deltaHistory: [],\n lastTime: 0,\n lastTimestamp: 0,\n lastElapsed: 0,\n timestampElapsed: 0,\n timestampElapsedHistory: [],\n engineDeltaHistory: [],\n engineElapsedHistory: [],\n engineUpdatesHistory: [],\n elapsedHistory: []\n },\n options: {\n width: 800,\n height: 600,\n pixelRatio: 1,\n background: '#14151f',\n wireframeBackground: '#14151f',\n wireframeStrokeStyle: '#bbb',\n hasBounds: !!options.bounds,\n enabled: true,\n wireframes: true,\n showSleeping: true,\n showDebug: false,\n showStats: false,\n showPerformance: false,\n showBounds: false,\n showVelocity: false,\n showCollisions: false,\n showSeparations: false,\n showAxes: false,\n showPositions: false,\n showAngleIndicator: false,\n showIds: false,\n showVertexNumbers: false,\n showConvexHulls: false,\n showInternalEdges: false,\n showMousePosition: false\n }\n };\n\n var render = Common.extend(defaults, options);\n\n if (render.canvas) {\n render.canvas.width = render.options.width || render.canvas.width;\n render.canvas.height = render.options.height || render.canvas.height;\n }\n\n render.mouse = options.mouse;\n render.engine = options.engine;\n render.canvas = render.canvas || _createCanvas(render.options.width, render.options.height);\n render.context = render.canvas.getContext('2d');\n render.textures = {};\n\n render.bounds = render.bounds || {\n min: {\n x: 0,\n y: 0\n },\n max: {\n x: render.canvas.width,\n y: render.canvas.height\n }\n };\n\n // for temporary back compatibility only\n render.controller = Render;\n render.options.showBroadphase = false;\n\n if (render.options.pixelRatio !== 1) {\n Render.setPixelRatio(render, render.options.pixelRatio);\n }\n\n if (Common.isElement(render.element)) {\n render.element.appendChild(render.canvas);\n }\n\n return render;\n };\n\n /**\n * Continuously updates the render canvas on the `requestAnimationFrame` event.\n * @method run\n * @param {render} render\n */\n Render.run = function(render) {\n (function loop(time){\n render.frameRequestId = _requestAnimationFrame(loop);\n \n _updateTiming(render, time);\n\n Render.world(render, time);\n\n render.context.setTransform(render.options.pixelRatio, 0, 0, render.options.pixelRatio, 0, 0);\n\n if (render.options.showStats || render.options.showDebug) {\n Render.stats(render, render.context, time);\n }\n\n if (render.options.showPerformance || render.options.showDebug) {\n Render.performance(render, render.context, time);\n }\n\n render.context.setTransform(1, 0, 0, 1, 0, 0);\n })();\n };\n\n /**\n * Ends execution of `Render.run` on the given `render`, by canceling the animation frame request event loop.\n * @method stop\n * @param {render} render\n */\n Render.stop = function(render) {\n _cancelAnimationFrame(render.frameRequestId);\n };\n\n /**\n * Sets the pixel ratio of the renderer and updates the canvas.\n * To automatically detect the correct ratio, pass the string `'auto'` for `pixelRatio`.\n * @method setPixelRatio\n * @param {render} render\n * @param {number} pixelRatio\n */\n Render.setPixelRatio = function(render, pixelRatio) {\n var options = render.options,\n canvas = render.canvas;\n\n if (pixelRatio === 'auto') {\n pixelRatio = _getPixelRatio(canvas);\n }\n\n options.pixelRatio = pixelRatio;\n canvas.setAttribute('data-pixel-ratio', pixelRatio);\n canvas.width = options.width * pixelRatio;\n canvas.height = options.height * pixelRatio;\n canvas.style.width = options.width + 'px';\n canvas.style.height = options.height + 'px';\n };\n\n /**\n * Sets the render `width` and `height`.\n * \n * Updates the canvas accounting for `render.options.pixelRatio`. \n * \n * Updates the bottom right render bound `render.bounds.max` relative to the provided `width` and `height`.\n * The top left render bound `render.bounds.min` isn't changed.\n * \n * Follow this call with `Render.lookAt` if you need to change the render bounds.\n * \n * See also `Render.setPixelRatio`.\n * @method setSize\n * @param {render} render\n * @param {number} width The width (in CSS pixels)\n * @param {number} height The height (in CSS pixels)\n */\n Render.setSize = function(render, width, height) {\n render.options.width = width;\n render.options.height = height;\n render.bounds.max.x = render.bounds.min.x + width;\n render.bounds.max.y = render.bounds.min.y + height;\n\n if (render.options.pixelRatio !== 1) {\n Render.setPixelRatio(render, render.options.pixelRatio);\n } else {\n render.canvas.width = width;\n render.canvas.height = height;\n }\n };\n\n /**\n * Positions and sizes the viewport around the given object bounds.\n * Objects must have at least one of the following properties:\n * - `object.bounds`\n * - `object.position`\n * - `object.min` and `object.max`\n * - `object.x` and `object.y`\n * @method lookAt\n * @param {render} render\n * @param {object[]} objects\n * @param {vector} [padding]\n * @param {bool} [center=true]\n */\n Render.lookAt = function(render, objects, padding, center) {\n center = typeof center !== 'undefined' ? center : true;\n objects = Common.isArray(objects) ? objects : [objects];\n padding = padding || {\n x: 0,\n y: 0\n };\n\n // find bounds of all objects\n var bounds = {\n min: { x: Infinity, y: Infinity },\n max: { x: -Infinity, y: -Infinity }\n };\n\n for (var i = 0; i < objects.length; i += 1) {\n var object = objects[i],\n min = object.bounds ? object.bounds.min : (object.min || object.position || object),\n max = object.bounds ? object.bounds.max : (object.max || object.position || object);\n\n if (min && max) {\n if (min.x < bounds.min.x)\n bounds.min.x = min.x;\n\n if (max.x > bounds.max.x)\n bounds.max.x = max.x;\n\n if (min.y < bounds.min.y)\n bounds.min.y = min.y;\n\n if (max.y > bounds.max.y)\n bounds.max.y = max.y;\n }\n }\n\n // find ratios\n var width = (bounds.max.x - bounds.min.x) + 2 * padding.x,\n height = (bounds.max.y - bounds.min.y) + 2 * padding.y,\n viewHeight = render.canvas.height,\n viewWidth = render.canvas.width,\n outerRatio = viewWidth / viewHeight,\n innerRatio = width / height,\n scaleX = 1,\n scaleY = 1;\n\n // find scale factor\n if (innerRatio > outerRatio) {\n scaleY = innerRatio / outerRatio;\n } else {\n scaleX = outerRatio / innerRatio;\n }\n\n // enable bounds\n render.options.hasBounds = true;\n\n // position and size\n render.bounds.min.x = bounds.min.x;\n render.bounds.max.x = bounds.min.x + width * scaleX;\n render.bounds.min.y = bounds.min.y;\n render.bounds.max.y = bounds.min.y + height * scaleY;\n\n // center\n if (center) {\n render.bounds.min.x += width * 0.5 - (width * scaleX) * 0.5;\n render.bounds.max.x += width * 0.5 - (width * scaleX) * 0.5;\n render.bounds.min.y += height * 0.5 - (height * scaleY) * 0.5;\n render.bounds.max.y += height * 0.5 - (height * scaleY) * 0.5;\n }\n\n // padding\n render.bounds.min.x -= padding.x;\n render.bounds.max.x -= padding.x;\n render.bounds.min.y -= padding.y;\n render.bounds.max.y -= padding.y;\n\n // update mouse\n if (render.mouse) {\n Mouse.setScale(render.mouse, {\n x: (render.bounds.max.x - render.bounds.min.x) / render.canvas.width,\n y: (render.bounds.max.y - render.bounds.min.y) / render.canvas.height\n });\n\n Mouse.setOffset(render.mouse, render.bounds.min);\n }\n };\n\n /**\n * Applies viewport transforms based on `render.bounds` to a render context.\n * @method startViewTransform\n * @param {render} render\n */\n Render.startViewTransform = function(render) {\n var boundsWidth = render.bounds.max.x - render.bounds.min.x,\n boundsHeight = render.bounds.max.y - render.bounds.min.y,\n boundsScaleX = boundsWidth / render.options.width,\n boundsScaleY = boundsHeight / render.options.height;\n\n render.context.setTransform(\n render.options.pixelRatio / boundsScaleX, 0, 0, \n render.options.pixelRatio / boundsScaleY, 0, 0\n );\n \n render.context.translate(-render.bounds.min.x, -render.bounds.min.y);\n };\n\n /**\n * Resets all transforms on the render context.\n * @method endViewTransform\n * @param {render} render\n */\n Render.endViewTransform = function(render) {\n render.context.setTransform(render.options.pixelRatio, 0, 0, render.options.pixelRatio, 0, 0);\n };\n\n /**\n * Renders the given `engine`'s `Matter.World` object.\n * This is the entry point for all rendering and should be called every time the scene changes.\n * @method world\n * @param {render} render\n */\n Render.world = function(render, time) {\n var startTime = Common.now(),\n engine = render.engine,\n world = engine.world,\n canvas = render.canvas,\n context = render.context,\n options = render.options,\n timing = render.timing;\n\n var allBodies = Composite.allBodies(world),\n allConstraints = Composite.allConstraints(world),\n background = options.wireframes ? options.wireframeBackground : options.background,\n bodies = [],\n constraints = [],\n i;\n\n var event = {\n timestamp: engine.timing.timestamp\n };\n\n Events.trigger(render, 'beforeRender', event);\n\n // apply background if it has changed\n if (render.currentBackground !== background)\n _applyBackground(render, background);\n\n // clear the canvas with a transparent fill, to allow the canvas background to show\n context.globalCompositeOperation = 'source-in';\n context.fillStyle = \"transparent\";\n context.fillRect(0, 0, canvas.width, canvas.height);\n context.globalCompositeOperation = 'source-over';\n\n // handle bounds\n if (options.hasBounds) {\n // filter out bodies that are not in view\n for (i = 0; i < allBodies.length; i++) {\n var body = allBodies[i];\n if (Bounds.overlaps(body.bounds, render.bounds))\n bodies.push(body);\n }\n\n // filter out constraints that are not in view\n for (i = 0; i < allConstraints.length; i++) {\n var constraint = allConstraints[i],\n bodyA = constraint.bodyA,\n bodyB = constraint.bodyB,\n pointAWorld = constraint.pointA,\n pointBWorld = constraint.pointB;\n\n if (bodyA) pointAWorld = Vector.add(bodyA.position, constraint.pointA);\n if (bodyB) pointBWorld = Vector.add(bodyB.position, constraint.pointB);\n\n if (!pointAWorld || !pointBWorld)\n continue;\n\n if (Bounds.contains(render.bounds, pointAWorld) || Bounds.contains(render.bounds, pointBWorld))\n constraints.push(constraint);\n }\n\n // transform the view\n Render.startViewTransform(render);\n\n // update mouse\n if (render.mouse) {\n Mouse.setScale(render.mouse, {\n x: (render.bounds.max.x - render.bounds.min.x) / render.options.width,\n y: (render.bounds.max.y - render.bounds.min.y) / render.options.height\n });\n\n Mouse.setOffset(render.mouse, render.bounds.min);\n }\n } else {\n constraints = allConstraints;\n bodies = allBodies;\n\n if (render.options.pixelRatio !== 1) {\n render.context.setTransform(render.options.pixelRatio, 0, 0, render.options.pixelRatio, 0, 0);\n }\n }\n\n if (!options.wireframes || (engine.enableSleeping && options.showSleeping)) {\n // fully featured rendering of bodies\n Render.bodies(render, bodies, context);\n } else {\n if (options.showConvexHulls)\n Render.bodyConvexHulls(render, bodies, context);\n\n // optimised method for wireframes only\n Render.bodyWireframes(render, bodies, context);\n }\n\n if (options.showBounds)\n Render.bodyBounds(render, bodies, context);\n\n if (options.showAxes || options.showAngleIndicator)\n Render.bodyAxes(render, bodies, context);\n\n if (options.showPositions)\n Render.bodyPositions(render, bodies, context);\n\n if (options.showVelocity)\n Render.bodyVelocity(render, bodies, context);\n\n if (options.showIds)\n Render.bodyIds(render, bodies, context);\n\n if (options.showSeparations)\n Render.separations(render, engine.pairs.list, context);\n\n if (options.showCollisions)\n Render.collisions(render, engine.pairs.list, context);\n\n if (options.showVertexNumbers)\n Render.vertexNumbers(render, bodies, context);\n\n if (options.showMousePosition)\n Render.mousePosition(render, render.mouse, context);\n\n Render.constraints(constraints, context);\n\n if (options.hasBounds) {\n // revert view transforms\n Render.endViewTransform(render);\n }\n\n Events.trigger(render, 'afterRender', event);\n\n // log the time elapsed computing this update\n timing.lastElapsed = Common.now() - startTime;\n };\n\n /**\n * Renders statistics about the engine and world useful for debugging.\n * @private\n * @method stats\n * @param {render} render\n * @param {RenderingContext} context\n * @param {Number} time\n */\n Render.stats = function(render, context, time) {\n var engine = render.engine,\n world = engine.world,\n bodies = Composite.allBodies(world),\n parts = 0,\n width = 55,\n height = 44,\n x = 0,\n y = 0;\n \n // count parts\n for (var i = 0; i < bodies.length; i += 1) {\n parts += bodies[i].parts.length;\n }\n\n // sections\n var sections = {\n 'Part': parts,\n 'Body': bodies.length,\n 'Cons': Composite.allConstraints(world).length,\n 'Comp': Composite.allComposites(world).length,\n 'Pair': engine.pairs.list.length\n };\n\n // background\n context.fillStyle = '#0e0f19';\n context.fillRect(x, y, width * 5.5, height);\n\n context.font = '12px Arial';\n context.textBaseline = 'top';\n context.textAlign = 'right';\n\n // sections\n for (var key in sections) {\n var section = sections[key];\n // label\n context.fillStyle = '#aaa';\n context.fillText(key, x + width, y + 8);\n\n // value\n context.fillStyle = '#eee';\n context.fillText(section, x + width, y + 26);\n\n x += width;\n }\n };\n\n /**\n * Renders engine and render performance information.\n * @private\n * @method performance\n * @param {render} render\n * @param {RenderingContext} context\n */\n Render.performance = function(render, context) {\n var engine = render.engine,\n timing = render.timing,\n deltaHistory = timing.deltaHistory,\n elapsedHistory = timing.elapsedHistory,\n timestampElapsedHistory = timing.timestampElapsedHistory,\n engineDeltaHistory = timing.engineDeltaHistory,\n engineUpdatesHistory = timing.engineUpdatesHistory,\n engineElapsedHistory = timing.engineElapsedHistory,\n lastEngineUpdatesPerFrame = engine.timing.lastUpdatesPerFrame,\n lastEngineDelta = engine.timing.lastDelta;\n \n var deltaMean = _mean(deltaHistory),\n elapsedMean = _mean(elapsedHistory),\n engineDeltaMean = _mean(engineDeltaHistory),\n engineUpdatesMean = _mean(engineUpdatesHistory),\n engineElapsedMean = _mean(engineElapsedHistory),\n timestampElapsedMean = _mean(timestampElapsedHistory),\n rateMean = (timestampElapsedMean / deltaMean) || 0,\n neededUpdatesPerFrame = Math.round(deltaMean / lastEngineDelta),\n fps = (1000 / deltaMean) || 0;\n\n var graphHeight = 4,\n gap = 12,\n width = 60,\n height = 34,\n x = 10,\n y = 69;\n\n // background\n context.fillStyle = '#0e0f19';\n context.fillRect(0, 50, gap * 5 + width * 6 + 22, height);\n\n // show FPS\n Render.status(\n context, x, y, width, graphHeight, deltaHistory.length, \n Math.round(fps) + ' fps', \n fps / Render._goodFps,\n function(i) { return (deltaHistory[i] / deltaMean) - 1; }\n );\n\n // show engine delta\n Render.status(\n context, x + gap + width, y, width, graphHeight, engineDeltaHistory.length,\n lastEngineDelta.toFixed(2) + ' dt', \n Render._goodDelta / lastEngineDelta,\n function(i) { return (engineDeltaHistory[i] / engineDeltaMean) - 1; }\n );\n\n // show engine updates per frame\n Render.status(\n context, x + (gap + width) * 2, y, width, graphHeight, engineUpdatesHistory.length,\n lastEngineUpdatesPerFrame + ' upf', \n Math.pow(Common.clamp((engineUpdatesMean / neededUpdatesPerFrame) || 1, 0, 1), 4),\n function(i) { return (engineUpdatesHistory[i] / engineUpdatesMean) - 1; }\n );\n\n // show engine update time\n Render.status(\n context, x + (gap + width) * 3, y, width, graphHeight, engineElapsedHistory.length,\n engineElapsedMean.toFixed(2) + ' ut', \n 1 - (lastEngineUpdatesPerFrame * engineElapsedMean / Render._goodFps),\n function(i) { return (engineElapsedHistory[i] / engineElapsedMean) - 1; }\n );\n\n // show render time\n Render.status(\n context, x + (gap + width) * 4, y, width, graphHeight, elapsedHistory.length,\n elapsedMean.toFixed(2) + ' rt', \n 1 - (elapsedMean / Render._goodFps),\n function(i) { return (elapsedHistory[i] / elapsedMean) - 1; }\n );\n\n // show effective speed\n Render.status(\n context, x + (gap + width) * 5, y, width, graphHeight, timestampElapsedHistory.length, \n rateMean.toFixed(2) + ' x', \n rateMean * rateMean * rateMean,\n function(i) { return (((timestampElapsedHistory[i] / deltaHistory[i]) / rateMean) || 0) - 1; }\n );\n };\n\n /**\n * Renders a label, indicator and a chart.\n * @private\n * @method status\n * @param {RenderingContext} context\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} count\n * @param {string} label\n * @param {string} indicator\n * @param {function} plotY\n */\n Render.status = function(context, x, y, width, height, count, label, indicator, plotY) {\n // background\n context.strokeStyle = '#888';\n context.fillStyle = '#444';\n context.lineWidth = 1;\n context.fillRect(x, y + 7, width, 1);\n\n // chart\n context.beginPath();\n context.moveTo(x, y + 7 - height * Common.clamp(0.4 * plotY(0), -2, 2));\n for (var i = 0; i < width; i += 1) {\n context.lineTo(x + i, y + 7 - (i < count ? height * Common.clamp(0.4 * plotY(i), -2, 2) : 0));\n }\n context.stroke();\n\n // indicator\n context.fillStyle = 'hsl(' + Common.clamp(25 + 95 * indicator, 0, 120) + ',100%,60%)';\n context.fillRect(x, y - 7, 4, 4);\n\n // label\n context.font = '12px Arial';\n context.textBaseline = 'middle';\n context.textAlign = 'right';\n context.fillStyle = '#eee';\n context.fillText(label, x + width, y - 5);\n };\n\n /**\n * Description\n * @private\n * @method constraints\n * @param {constraint[]} constraints\n * @param {RenderingContext} context\n */\n Render.constraints = function(constraints, context) {\n var c = context;\n\n for (var i = 0; i < constraints.length; i++) {\n var constraint = constraints[i];\n\n if (!constraint.render.visible || !constraint.pointA || !constraint.pointB)\n continue;\n\n var bodyA = constraint.bodyA,\n bodyB = constraint.bodyB,\n start,\n end;\n\n if (bodyA) {\n start = Vector.add(bodyA.position, constraint.pointA);\n } else {\n start = constraint.pointA;\n }\n\n if (constraint.render.type === 'pin') {\n c.beginPath();\n c.arc(start.x, start.y, 3, 0, 2 * Math.PI);\n c.closePath();\n } else {\n if (bodyB) {\n end = Vector.add(bodyB.position, constraint.pointB);\n } else {\n end = constraint.pointB;\n }\n\n c.beginPath();\n c.moveTo(start.x, start.y);\n\n if (constraint.render.type === 'spring') {\n var delta = Vector.sub(end, start),\n normal = Vector.perp(Vector.normalise(delta)),\n coils = Math.ceil(Common.clamp(constraint.length / 5, 12, 20)),\n offset;\n\n for (var j = 1; j < coils; j += 1) {\n offset = j % 2 === 0 ? 1 : -1;\n\n c.lineTo(\n start.x + delta.x * (j / coils) + normal.x * offset * 4,\n start.y + delta.y * (j / coils) + normal.y * offset * 4\n );\n }\n }\n\n c.lineTo(end.x, end.y);\n }\n\n if (constraint.render.lineWidth) {\n c.lineWidth = constraint.render.lineWidth;\n c.strokeStyle = constraint.render.strokeStyle;\n c.stroke();\n }\n\n if (constraint.render.anchors) {\n c.fillStyle = constraint.render.strokeStyle;\n c.beginPath();\n c.arc(start.x, start.y, 3, 0, 2 * Math.PI);\n c.arc(end.x, end.y, 3, 0, 2 * Math.PI);\n c.closePath();\n c.fill();\n }\n }\n };\n\n /**\n * Description\n * @private\n * @method bodies\n * @param {render} render\n * @param {body[]} bodies\n * @param {RenderingContext} context\n */\n Render.bodies = function(render, bodies, context) {\n var c = context,\n engine = render.engine,\n options = render.options,\n showInternalEdges = options.showInternalEdges || !options.wireframes,\n body,\n part,\n i,\n k;\n\n for (i = 0; i < bodies.length; i++) {\n body = bodies[i];\n\n if (!body.render.visible)\n continue;\n\n // handle compound parts\n for (k = body.parts.length > 1 ? 1 : 0; k < body.parts.length; k++) {\n part = body.parts[k];\n\n if (!part.render.visible)\n continue;\n\n if (options.showSleeping && body.isSleeping) {\n c.globalAlpha = 0.5 * part.render.opacity;\n } else if (part.render.opacity !== 1) {\n c.globalAlpha = part.render.opacity;\n }\n\n if (part.render.sprite && part.render.sprite.texture && !options.wireframes) {\n // part sprite\n var sprite = part.render.sprite,\n texture = _getTexture(render, sprite.texture);\n\n c.translate(part.position.x, part.position.y);\n c.rotate(part.angle);\n\n c.drawImage(\n texture,\n texture.width * -sprite.xOffset * sprite.xScale,\n texture.height * -sprite.yOffset * sprite.yScale,\n texture.width * sprite.xScale,\n texture.height * sprite.yScale\n );\n\n // revert translation, hopefully faster than save / restore\n c.rotate(-part.angle);\n c.translate(-part.position.x, -part.position.y);\n } else {\n // part polygon\n if (part.circleRadius) {\n c.beginPath();\n c.arc(part.position.x, part.position.y, part.circleRadius, 0, 2 * Math.PI);\n } else {\n c.beginPath();\n c.moveTo(part.vertices[0].x, part.vertices[0].y);\n\n for (var j = 1; j < part.vertices.length; j++) {\n if (!part.vertices[j - 1].isInternal || showInternalEdges) {\n c.lineTo(part.vertices[j].x, part.vertices[j].y);\n } else {\n c.moveTo(part.vertices[j].x, part.vertices[j].y);\n }\n\n if (part.vertices[j].isInternal && !showInternalEdges) {\n c.moveTo(part.vertices[(j + 1) % part.vertices.length].x, part.vertices[(j + 1) % part.vertices.length].y);\n }\n }\n\n c.lineTo(part.vertices[0].x, part.vertices[0].y);\n c.closePath();\n }\n\n if (!options.wireframes) {\n c.fillStyle = part.render.fillStyle;\n\n if (part.render.lineWidth) {\n c.lineWidth = part.render.lineWidth;\n c.strokeStyle = part.render.strokeStyle;\n c.stroke();\n }\n\n c.fill();\n } else {\n c.lineWidth = 1;\n c.strokeStyle = render.options.wireframeStrokeStyle;\n c.stroke();\n }\n }\n\n c.globalAlpha = 1;\n }\n }\n };\n\n /**\n * Optimised method for drawing body wireframes in one pass\n * @private\n * @method bodyWireframes\n * @param {render} render\n * @param {body[]} bodies\n * @param {RenderingContext} context\n */\n Render.bodyWireframes = function(render, bodies, context) {\n var c = context,\n showInternalEdges = render.options.showInternalEdges,\n body,\n part,\n i,\n j,\n k;\n\n c.beginPath();\n\n // render all bodies\n for (i = 0; i < bodies.length; i++) {\n body = bodies[i];\n\n if (!body.render.visible)\n continue;\n\n // handle compound parts\n for (k = body.parts.length > 1 ? 1 : 0; k < body.parts.length; k++) {\n part = body.parts[k];\n\n c.moveTo(part.vertices[0].x, part.vertices[0].y);\n\n for (j = 1; j < part.vertices.length; j++) {\n if (!part.vertices[j - 1].isInternal || showInternalEdges) {\n c.lineTo(part.vertices[j].x, part.vertices[j].y);\n } else {\n c.moveTo(part.vertices[j].x, part.vertices[j].y);\n }\n\n if (part.vertices[j].isInternal && !showInternalEdges) {\n c.moveTo(part.vertices[(j + 1) % part.vertices.length].x, part.vertices[(j + 1) % part.vertices.length].y);\n }\n }\n\n c.lineTo(part.vertices[0].x, part.vertices[0].y);\n }\n }\n\n c.lineWidth = 1;\n c.strokeStyle = render.options.wireframeStrokeStyle;\n c.stroke();\n };\n\n /**\n * Optimised method for drawing body convex hull wireframes in one pass\n * @private\n * @method bodyConvexHulls\n * @param {render} render\n * @param {body[]} bodies\n * @param {RenderingContext} context\n */\n Render.bodyConvexHulls = function(render, bodies, context) {\n var c = context,\n body,\n part,\n i,\n j,\n k;\n\n c.beginPath();\n\n // render convex hulls\n for (i = 0; i < bodies.length; i++) {\n body = bodies[i];\n\n if (!body.render.visible || body.parts.length === 1)\n continue;\n\n c.moveTo(body.vertices[0].x, body.vertices[0].y);\n\n for (j = 1; j < body.vertices.length; j++) {\n c.lineTo(body.vertices[j].x, body.vertices[j].y);\n }\n\n c.lineTo(body.vertices[0].x, body.vertices[0].y);\n }\n\n c.lineWidth = 1;\n c.strokeStyle = 'rgba(255,255,255,0.2)';\n c.stroke();\n };\n\n /**\n * Renders body vertex numbers.\n * @private\n * @method vertexNumbers\n * @param {render} render\n * @param {body[]} bodies\n * @param {RenderingContext} context\n */\n Render.vertexNumbers = function(render, bodies, context) {\n var c = context,\n i,\n j,\n k;\n\n for (i = 0; i < bodies.length; i++) {\n var parts = bodies[i].parts;\n for (k = parts.length > 1 ? 1 : 0; k < parts.length; k++) {\n var part = parts[k];\n for (j = 0; j < part.vertices.length; j++) {\n c.fillStyle = 'rgba(255,255,255,0.2)';\n c.fillText(i + '_' + j, part.position.x + (part.vertices[j].x - part.position.x) * 0.8, part.position.y + (part.vertices[j].y - part.position.y) * 0.8);\n }\n }\n }\n };\n\n /**\n * Renders mouse position.\n * @private\n * @method mousePosition\n * @param {render} render\n * @param {mouse} mouse\n * @param {RenderingContext} context\n */\n Render.mousePosition = function(render, mouse, context) {\n var c = context;\n c.fillStyle = 'rgba(255,255,255,0.8)';\n c.fillText(mouse.position.x + ' ' + mouse.position.y, mouse.position.x + 5, mouse.position.y - 5);\n };\n\n /**\n * Draws body bounds\n * @private\n * @method bodyBounds\n * @param {render} render\n * @param {body[]} bodies\n * @param {RenderingContext} context\n */\n Render.bodyBounds = function(render, bodies, context) {\n var c = context,\n engine = render.engine,\n options = render.options;\n\n c.beginPath();\n\n for (var i = 0; i < bodies.length; i++) {\n var body = bodies[i];\n\n if (body.render.visible) {\n var parts = bodies[i].parts;\n for (var j = parts.length > 1 ? 1 : 0; j < parts.length; j++) {\n var part = parts[j];\n c.rect(part.bounds.min.x, part.bounds.min.y, part.bounds.max.x - part.bounds.min.x, part.bounds.max.y - part.bounds.min.y);\n }\n }\n }\n\n if (options.wireframes) {\n c.strokeStyle = 'rgba(255,255,255,0.08)';\n } else {\n c.strokeStyle = 'rgba(0,0,0,0.1)';\n }\n\n c.lineWidth = 1;\n c.stroke();\n };\n\n /**\n * Draws body angle indicators and axes\n * @private\n * @method bodyAxes\n * @param {render} render\n * @param {body[]} bodies\n * @param {RenderingContext} context\n */\n Render.bodyAxes = function(render, bodies, context) {\n var c = context,\n engine = render.engine,\n options = render.options,\n part,\n i,\n j,\n k;\n\n c.beginPath();\n\n for (i = 0; i < bodies.length; i++) {\n var body = bodies[i],\n parts = body.parts;\n\n if (!body.render.visible)\n continue;\n\n if (options.showAxes) {\n // render all axes\n for (j = parts.length > 1 ? 1 : 0; j < parts.length; j++) {\n part = parts[j];\n for (k = 0; k < part.axes.length; k++) {\n var axis = part.axes[k];\n c.moveTo(part.position.x, part.position.y);\n c.lineTo(part.position.x + axis.x * 20, part.position.y + axis.y * 20);\n }\n }\n } else {\n for (j = parts.length > 1 ? 1 : 0; j < parts.length; j++) {\n part = parts[j];\n for (k = 0; k < part.axes.length; k++) {\n // render a single axis indicator\n c.moveTo(part.position.x, part.position.y);\n c.lineTo((part.vertices[0].x + part.vertices[part.vertices.length-1].x) / 2,\n (part.vertices[0].y + part.vertices[part.vertices.length-1].y) / 2);\n }\n }\n }\n }\n\n if (options.wireframes) {\n c.strokeStyle = 'indianred';\n c.lineWidth = 1;\n } else {\n c.strokeStyle = 'rgba(255, 255, 255, 0.4)';\n c.globalCompositeOperation = 'overlay';\n c.lineWidth = 2;\n }\n\n c.stroke();\n c.globalCompositeOperation = 'source-over';\n };\n\n /**\n * Draws body positions\n * @private\n * @method bodyPositions\n * @param {render} render\n * @param {body[]} bodies\n * @param {RenderingContext} context\n */\n Render.bodyPositions = function(render, bodies, context) {\n var c = context,\n engine = render.engine,\n options = render.options,\n body,\n part,\n i,\n k;\n\n c.beginPath();\n\n // render current positions\n for (i = 0; i < bodies.length; i++) {\n body = bodies[i];\n\n if (!body.render.visible)\n continue;\n\n // handle compound parts\n for (k = 0; k < body.parts.length; k++) {\n part = body.parts[k];\n c.arc(part.position.x, part.position.y, 3, 0, 2 * Math.PI, false);\n c.closePath();\n }\n }\n\n if (options.wireframes) {\n c.fillStyle = 'indianred';\n } else {\n c.fillStyle = 'rgba(0,0,0,0.5)';\n }\n c.fill();\n\n c.beginPath();\n\n // render previous positions\n for (i = 0; i < bodies.length; i++) {\n body = bodies[i];\n if (body.render.visible) {\n c.arc(body.positionPrev.x, body.positionPrev.y, 2, 0, 2 * Math.PI, false);\n c.closePath();\n }\n }\n\n c.fillStyle = 'rgba(255,165,0,0.8)';\n c.fill();\n };\n\n /**\n * Draws body velocity\n * @private\n * @method bodyVelocity\n * @param {render} render\n * @param {body[]} bodies\n * @param {RenderingContext} context\n */\n Render.bodyVelocity = function(render, bodies, context) {\n var c = context;\n\n c.beginPath();\n\n for (var i = 0; i < bodies.length; i++) {\n var body = bodies[i];\n\n if (!body.render.visible)\n continue;\n\n var velocity = Body.getVelocity(body);\n\n c.moveTo(body.position.x, body.position.y);\n c.lineTo(body.position.x + velocity.x, body.position.y + velocity.y);\n }\n\n c.lineWidth = 3;\n c.strokeStyle = 'cornflowerblue';\n c.stroke();\n };\n\n /**\n * Draws body ids\n * @private\n * @method bodyIds\n * @param {render} render\n * @param {body[]} bodies\n * @param {RenderingContext} context\n */\n Render.bodyIds = function(render, bodies, context) {\n var c = context,\n i,\n j;\n\n for (i = 0; i < bodies.length; i++) {\n if (!bodies[i].render.visible)\n continue;\n\n var parts = bodies[i].parts;\n for (j = parts.length > 1 ? 1 : 0; j < parts.length; j++) {\n var part = parts[j];\n c.font = \"12px Arial\";\n c.fillStyle = 'rgba(255,255,255,0.5)';\n c.fillText(part.id, part.position.x + 10, part.position.y - 10);\n }\n }\n };\n\n /**\n * Description\n * @private\n * @method collisions\n * @param {render} render\n * @param {pair[]} pairs\n * @param {RenderingContext} context\n */\n Render.collisions = function(render, pairs, context) {\n var c = context,\n options = render.options,\n pair,\n collision,\n corrected,\n bodyA,\n bodyB,\n i,\n j;\n\n c.beginPath();\n\n // render collision positions\n for (i = 0; i < pairs.length; i++) {\n pair = pairs[i];\n\n if (!pair.isActive)\n continue;\n\n collision = pair.collision;\n for (j = 0; j < pair.contactCount; j++) {\n var contact = pair.contacts[j],\n vertex = contact.vertex;\n c.rect(vertex.x - 1.5, vertex.y - 1.5, 3.5, 3.5);\n }\n }\n\n if (options.wireframes) {\n c.fillStyle = 'rgba(255,255,255,0.7)';\n } else {\n c.fillStyle = 'orange';\n }\n c.fill();\n\n c.beginPath();\n\n // render collision normals\n for (i = 0; i < pairs.length; i++) {\n pair = pairs[i];\n\n if (!pair.isActive)\n continue;\n\n collision = pair.collision;\n\n if (pair.contactCount > 0) {\n var normalPosX = pair.contacts[0].vertex.x,\n normalPosY = pair.contacts[0].vertex.y;\n\n if (pair.contactCount === 2) {\n normalPosX = (pair.contacts[0].vertex.x + pair.contacts[1].vertex.x) / 2;\n normalPosY = (pair.contacts[0].vertex.y + pair.contacts[1].vertex.y) / 2;\n }\n\n if (collision.bodyB === collision.supports[0].body || collision.bodyA.isStatic === true) {\n c.moveTo(normalPosX - collision.normal.x * 8, normalPosY - collision.normal.y * 8);\n } else {\n c.moveTo(normalPosX + collision.normal.x * 8, normalPosY + collision.normal.y * 8);\n }\n\n c.lineTo(normalPosX, normalPosY);\n }\n }\n\n if (options.wireframes) {\n c.strokeStyle = 'rgba(255,165,0,0.7)';\n } else {\n c.strokeStyle = 'orange';\n }\n\n c.lineWidth = 1;\n c.stroke();\n };\n\n /**\n * Description\n * @private\n * @method separations\n * @param {render} render\n * @param {pair[]} pairs\n * @param {RenderingContext} context\n */\n Render.separations = function(render, pairs, context) {\n var c = context,\n options = render.options,\n pair,\n collision,\n corrected,\n bodyA,\n bodyB,\n i,\n j;\n\n c.beginPath();\n\n // render separations\n for (i = 0; i < pairs.length; i++) {\n pair = pairs[i];\n\n if (!pair.isActive)\n continue;\n\n collision = pair.collision;\n bodyA = collision.bodyA;\n bodyB = collision.bodyB;\n\n var k = 1;\n\n if (!bodyB.isStatic && !bodyA.isStatic) k = 0.5;\n if (bodyB.isStatic) k = 0;\n\n c.moveTo(bodyB.position.x, bodyB.position.y);\n c.lineTo(bodyB.position.x - collision.penetration.x * k, bodyB.position.y - collision.penetration.y * k);\n\n k = 1;\n\n if (!bodyB.isStatic && !bodyA.isStatic) k = 0.5;\n if (bodyA.isStatic) k = 0;\n\n c.moveTo(bodyA.position.x, bodyA.position.y);\n c.lineTo(bodyA.position.x + collision.penetration.x * k, bodyA.position.y + collision.penetration.y * k);\n }\n\n if (options.wireframes) {\n c.strokeStyle = 'rgba(255,165,0,0.5)';\n } else {\n c.strokeStyle = 'orange';\n }\n c.stroke();\n };\n\n /**\n * Description\n * @private\n * @method inspector\n * @param {inspector} inspector\n * @param {RenderingContext} context\n */\n Render.inspector = function(inspector, context) {\n var engine = inspector.engine,\n selected = inspector.selected,\n render = inspector.render,\n options = render.options,\n bounds;\n\n if (options.hasBounds) {\n var boundsWidth = render.bounds.max.x - render.bounds.min.x,\n boundsHeight = render.bounds.max.y - render.bounds.min.y,\n boundsScaleX = boundsWidth / render.options.width,\n boundsScaleY = boundsHeight / render.options.height;\n\n context.scale(1 / boundsScaleX, 1 / boundsScaleY);\n context.translate(-render.bounds.min.x, -render.bounds.min.y);\n }\n\n for (var i = 0; i < selected.length; i++) {\n var item = selected[i].data;\n\n context.translate(0.5, 0.5);\n context.lineWidth = 1;\n context.strokeStyle = 'rgba(255,165,0,0.9)';\n context.setLineDash([1,2]);\n\n switch (item.type) {\n\n case 'body':\n\n // render body selections\n bounds = item.bounds;\n context.beginPath();\n context.rect(Math.floor(bounds.min.x - 3), Math.floor(bounds.min.y - 3),\n Math.floor(bounds.max.x - bounds.min.x + 6), Math.floor(bounds.max.y - bounds.min.y + 6));\n context.closePath();\n context.stroke();\n\n break;\n\n case 'constraint':\n\n // render constraint selections\n var point = item.pointA;\n if (item.bodyA)\n point = item.pointB;\n context.beginPath();\n context.arc(point.x, point.y, 10, 0, 2 * Math.PI);\n context.closePath();\n context.stroke();\n\n break;\n\n }\n\n context.setLineDash([]);\n context.translate(-0.5, -0.5);\n }\n\n // render selection region\n if (inspector.selectStart !== null) {\n context.translate(0.5, 0.5);\n context.lineWidth = 1;\n context.strokeStyle = 'rgba(255,165,0,0.6)';\n context.fillStyle = 'rgba(255,165,0,0.1)';\n bounds = inspector.selectBounds;\n context.beginPath();\n context.rect(Math.floor(bounds.min.x), Math.floor(bounds.min.y),\n Math.floor(bounds.max.x - bounds.min.x), Math.floor(bounds.max.y - bounds.min.y));\n context.closePath();\n context.stroke();\n context.fill();\n context.translate(-0.5, -0.5);\n }\n\n if (options.hasBounds)\n context.setTransform(1, 0, 0, 1, 0, 0);\n };\n\n /**\n * Updates render timing.\n * @method _updateTiming\n * @private\n * @param {render} render\n * @param {number} time\n */\n var _updateTiming = function(render, time) {\n var engine = render.engine,\n timing = render.timing,\n historySize = timing.historySize,\n timestamp = engine.timing.timestamp;\n\n timing.delta = time - timing.lastTime || Render._goodDelta;\n timing.lastTime = time;\n\n timing.timestampElapsed = timestamp - timing.lastTimestamp || 0;\n timing.lastTimestamp = timestamp;\n\n timing.deltaHistory.unshift(timing.delta);\n timing.deltaHistory.length = Math.min(timing.deltaHistory.length, historySize);\n\n timing.engineDeltaHistory.unshift(engine.timing.lastDelta);\n timing.engineDeltaHistory.length = Math.min(timing.engineDeltaHistory.length, historySize);\n\n timing.timestampElapsedHistory.unshift(timing.timestampElapsed);\n timing.timestampElapsedHistory.length = Math.min(timing.timestampElapsedHistory.length, historySize);\n\n timing.engineUpdatesHistory.unshift(engine.timing.lastUpdatesPerFrame);\n timing.engineUpdatesHistory.length = Math.min(timing.engineUpdatesHistory.length, historySize);\n\n timing.engineElapsedHistory.unshift(engine.timing.lastElapsed);\n timing.engineElapsedHistory.length = Math.min(timing.engineElapsedHistory.length, historySize);\n\n timing.elapsedHistory.unshift(timing.lastElapsed);\n timing.elapsedHistory.length = Math.min(timing.elapsedHistory.length, historySize);\n };\n\n /**\n * Returns the mean value of the given numbers.\n * @method _mean\n * @private\n * @param {Number[]} values\n * @return {Number} the mean of given values\n */\n var _mean = function(values) {\n var result = 0;\n for (var i = 0; i < values.length; i += 1) {\n result += values[i];\n }\n return (result / values.length) || 0;\n };\n\n /**\n * @method _createCanvas\n * @private\n * @param {} width\n * @param {} height\n * @return canvas\n */\n var _createCanvas = function(width, height) {\n var canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n canvas.oncontextmenu = function() { return false; };\n canvas.onselectstart = function() { return false; };\n return canvas;\n };\n\n /**\n * Gets the pixel ratio of the canvas.\n * @method _getPixelRatio\n * @private\n * @param {HTMLElement} canvas\n * @return {Number} pixel ratio\n */\n var _getPixelRatio = function(canvas) {\n var context = canvas.getContext('2d'),\n devicePixelRatio = window.devicePixelRatio || 1,\n backingStorePixelRatio = context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio\n || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio\n || context.backingStorePixelRatio || 1;\n\n return devicePixelRatio / backingStorePixelRatio;\n };\n\n /**\n * Gets the requested texture (an Image) via its path\n * @method _getTexture\n * @private\n * @param {render} render\n * @param {string} imagePath\n * @return {Image} texture\n */\n var _getTexture = function(render, imagePath) {\n var image = render.textures[imagePath];\n\n if (image)\n return image;\n\n image = render.textures[imagePath] = new Image();\n image.src = imagePath;\n\n return image;\n };\n\n /**\n * Applies the background to the canvas using CSS.\n * @method applyBackground\n * @private\n * @param {render} render\n * @param {string} background\n */\n var _applyBackground = function(render, background) {\n var cssBackground = background;\n\n if (/(jpg|gif|png)$/.test(background))\n cssBackground = 'url(' + background + ')';\n\n render.canvas.style.background = cssBackground;\n render.canvas.style.backgroundSize = \"contain\";\n render.currentBackground = background;\n };\n\n /*\n *\n * Events Documentation\n *\n */\n\n /**\n * Fired before rendering\n *\n * @event beforeRender\n * @param {} event An event object\n * @param {number} event.timestamp The engine.timing.timestamp of the event\n * @param {} event.source The source object of the event\n * @param {} event.name The name of the event\n */\n\n /**\n * Fired after rendering\n *\n * @event afterRender\n * @param {} event An event object\n * @param {number} event.timestamp The engine.timing.timestamp of the event\n * @param {} event.source The source object of the event\n * @param {} event.name The name of the event\n */\n\n /*\n *\n * Properties Documentation\n *\n */\n\n /**\n * A back-reference to the `Matter.Render` module.\n *\n * @deprecated\n * @property controller\n * @type render\n */\n\n /**\n * A reference to the `Matter.Engine` instance to be used.\n *\n * @property engine\n * @type engine\n */\n\n /**\n * A reference to the element where the canvas is to be inserted (if `render.canvas` has not been specified)\n *\n * @property element\n * @type HTMLElement\n * @default null\n */\n\n /**\n * The canvas element to render to. If not specified, one will be created if `render.element` has been specified.\n *\n * @property canvas\n * @type HTMLCanvasElement\n * @default null\n */\n\n /**\n * A `Bounds` object that specifies the drawing view region.\n * Rendering will be automatically transformed and scaled to fit within the canvas size (`render.options.width` and `render.options.height`).\n * This allows for creating views that can pan or zoom around the scene.\n * You must also set `render.options.hasBounds` to `true` to enable bounded rendering.\n *\n * @property bounds\n * @type bounds\n */\n\n /**\n * The 2d rendering context from the `render.canvas` element.\n *\n * @property context\n * @type CanvasRenderingContext2D\n */\n\n /**\n * The sprite texture cache.\n *\n * @property textures\n * @type {}\n */\n\n /**\n * The mouse to render if `render.options.showMousePosition` is enabled.\n *\n * @property mouse\n * @type mouse\n * @default null\n */\n\n /**\n * The configuration options of the renderer.\n *\n * @property options\n * @type {}\n */\n\n /**\n * The target width in pixels of the `render.canvas` to be created.\n * See also the `options.pixelRatio` property to change render quality.\n *\n * @property options.width\n * @type number\n * @default 800\n */\n\n /**\n * The target height in pixels of the `render.canvas` to be created.\n * See also the `options.pixelRatio` property to change render quality.\n *\n * @property options.height\n * @type number\n * @default 600\n */\n\n /**\n * The [pixel ratio](https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio) to use when rendering.\n *\n * @property options.pixelRatio\n * @type number\n * @default 1\n */\n\n /**\n * A CSS background color string to use when `render.options.wireframes` is disabled.\n * This may be also set to `'transparent'` or equivalent.\n *\n * @property options.background\n * @type string\n * @default '#14151f'\n */\n\n /**\n * A CSS color string to use for background when `render.options.wireframes` is enabled.\n * This may be also set to `'transparent'` or equivalent.\n *\n * @property options.wireframeBackground\n * @type string\n * @default '#14151f'\n */\n\n /**\n * A CSS color string to use for stroke when `render.options.wireframes` is enabled.\n * This may be also set to `'transparent'` or equivalent.\n *\n * @property options.wireframeStrokeStyle\n * @type string\n * @default '#bbb'\n */\n\n /**\n * A flag that specifies if `render.bounds` should be used when rendering.\n *\n * @property options.hasBounds\n * @type boolean\n * @default false\n */\n\n /**\n * A flag to enable or disable all debug information overlays together. \n * This includes and has priority over the values of:\n *\n * - `render.options.showStats`\n * - `render.options.showPerformance`\n *\n * @property options.showDebug\n * @type boolean\n * @default false\n */\n\n /**\n * A flag to enable or disable the engine stats info overlay. \n * From left to right, the values shown are:\n *\n * - body parts total\n * - body total\n * - constraints total\n * - composites total\n * - collision pairs total\n *\n * @property options.showStats\n * @type boolean\n * @default false\n */\n\n /**\n * A flag to enable or disable performance charts. \n * From left to right, the values shown are:\n *\n * - average render frequency (e.g. 60 fps)\n * - exact engine delta time used for last update (e.g. 16.66ms)\n * - average updates per frame (e.g. 1)\n * - average engine execution duration (e.g. 5.00ms)\n * - average render execution duration (e.g. 0.40ms)\n * - average effective play speed (e.g. '1.00x' is 'real-time')\n *\n * Each value is recorded over a fixed sample of past frames (60 frames).\n *\n * A chart shown below each value indicates the variance from the average over the sample.\n * The more stable or fixed the value is the flatter the chart will appear.\n *\n * @property options.showPerformance\n * @type boolean\n * @default false\n */\n \n /**\n * A flag to enable or disable rendering entirely.\n *\n * @property options.enabled\n * @type boolean\n * @default false\n */\n\n /**\n * A flag to toggle wireframe rendering otherwise solid fill rendering is used.\n *\n * @property options.wireframes\n * @type boolean\n * @default true\n */\n\n /**\n * A flag to enable or disable sleeping bodies indicators.\n *\n * @property options.showSleeping\n * @type boolean\n * @default true\n */\n\n /**\n * A flag to enable or disable the debug information overlay.\n *\n * @property options.showDebug\n * @type boolean\n * @default false\n */\n\n /**\n * A flag to enable or disable the collision broadphase debug overlay.\n *\n * @deprecated no longer implemented\n * @property options.showBroadphase\n * @type boolean\n * @default false\n */\n\n /**\n * A flag to enable or disable the body bounds debug overlay.\n *\n * @property options.showBounds\n * @type boolean\n * @default false\n */\n\n /**\n * A flag to enable or disable the body velocity debug overlay.\n *\n * @property options.showVelocity\n * @type boolean\n * @default false\n */\n\n /**\n * A flag to enable or disable the body collisions debug overlay.\n *\n * @property options.showCollisions\n * @type boolean\n * @default false\n */\n\n /**\n * A flag to enable or disable the collision resolver separations debug overlay.\n *\n * @property options.showSeparations\n * @type boolean\n * @default false\n */\n\n /**\n * A flag to enable or disable the body axes debug overlay.\n *\n * @property options.showAxes\n * @type boolean\n * @default false\n */\n\n /**\n * A flag to enable or disable the body positions debug overlay.\n *\n * @property options.showPositions\n * @type boolean\n * @default false\n */\n\n /**\n * A flag to enable or disable the body angle debug overlay.\n *\n * @property options.showAngleIndicator\n * @type boolean\n * @default false\n */\n\n /**\n * A flag to enable or disable the body and part ids debug overlay.\n *\n * @property options.showIds\n * @type boolean\n * @default false\n */\n\n /**\n * A flag to enable or disable the body vertex numbers debug overlay.\n *\n * @property options.showVertexNumbers\n * @type boolean\n * @default false\n */\n\n /**\n * A flag to enable or disable the body convex hulls debug overlay.\n *\n * @property options.showConvexHulls\n * @type boolean\n * @default false\n */\n\n /**\n * A flag to enable or disable the body internal edges debug overlay.\n *\n * @property options.showInternalEdges\n * @type boolean\n * @default false\n */\n\n /**\n * A flag to enable or disable the mouse position debug overlay.\n *\n * @property options.showMousePosition\n * @type boolean\n * @default false\n */\n\n})();\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.Runner` module is an optional utility that provides a game loop for running a `Matter.Engine` inside a browser environment.\n* A runner will continuously update a `Matter.Engine` whilst synchronising engine updates with the browser frame rate.\n* This runner favours a smoother user experience over perfect time keeping.\n* This runner is optional and is used for development and debugging but could be useful as a starting point for implementing some games and experiences.\n* Alternatively see `Engine.update` to step the engine directly inside your own game loop implementation as may be needed inside other environments.\n*\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\n*\n* @class Runner\n*/\n\nvar Runner = {};\n\nmodule.exports = Runner;\n\nvar Events = __webpack_require__(5);\nvar Engine = __webpack_require__(17);\nvar Common = __webpack_require__(0);\n\n(function() {\n\n Runner._maxFrameDelta = 1000 / 15;\n Runner._frameDeltaFallback = 1000 / 60;\n Runner._timeBufferMargin = 1.5;\n Runner._elapsedNextEstimate = 1;\n Runner._smoothingLowerBound = 0.1;\n Runner._smoothingUpperBound = 0.9;\n\n /**\n * Creates a new Runner. \n * See the properties section below for detailed information on what you can pass via the `options` object.\n * @method create\n * @param {} options\n */\n Runner.create = function(options) {\n var defaults = {\n delta: 1000 / 60,\n frameDelta: null,\n frameDeltaSmoothing: true,\n frameDeltaSnapping: true,\n frameDeltaHistory: [],\n frameDeltaHistorySize: 100,\n frameRequestId: null,\n timeBuffer: 0,\n timeLastTick: null,\n maxUpdates: null,\n maxFrameTime: 1000 / 30,\n lastUpdatesDeferred: 0,\n enabled: true\n };\n\n var runner = Common.extend(defaults, options);\n\n // for temporary back compatibility only\n runner.fps = 0;\n\n return runner;\n };\n\n /**\n * Runs a `Matter.Engine` whilst synchronising engine updates with the browser frame rate. \n * See module and properties descriptions for more information on this runner.\n * Alternatively see `Engine.update` to step the engine directly inside your own game loop implementation.\n * @method run\n * @param {runner} runner\n * @param {engine} [engine]\n * @return {runner} runner\n */\n Runner.run = function(runner, engine) {\n // initial time buffer for the first frame\n runner.timeBuffer = Runner._frameDeltaFallback;\n\n (function onFrame(time){\n runner.frameRequestId = Runner._onNextFrame(runner, onFrame);\n\n if (time && runner.enabled) {\n Runner.tick(runner, engine, time);\n }\n })();\n\n return runner;\n };\n\n /**\n * Performs a single runner tick as used inside `Runner.run`.\n * See module and properties descriptions for more information on this runner.\n * Alternatively see `Engine.update` to step the engine directly inside your own game loop implementation.\n * @method tick\n * @param {runner} runner\n * @param {engine} engine\n * @param {number} time\n */\n Runner.tick = function(runner, engine, time) {\n var tickStartTime = Common.now(),\n engineDelta = runner.delta,\n updateCount = 0;\n\n // find frame delta time since last call\n var frameDelta = time - runner.timeLastTick;\n\n // fallback for unusable frame delta values (e.g. 0, NaN, on first frame or long pauses)\n if (!frameDelta || !runner.timeLastTick || frameDelta > Math.max(Runner._maxFrameDelta, runner.maxFrameTime)) {\n // reuse last accepted frame delta else fallback\n frameDelta = runner.frameDelta || Runner._frameDeltaFallback;\n }\n\n if (runner.frameDeltaSmoothing) {\n // record frame delta over a number of frames\n runner.frameDeltaHistory.push(frameDelta);\n runner.frameDeltaHistory = runner.frameDeltaHistory.slice(-runner.frameDeltaHistorySize);\n\n // sort frame delta history\n var deltaHistorySorted = runner.frameDeltaHistory.slice(0).sort();\n\n // sample a central window to limit outliers\n var deltaHistoryWindow = runner.frameDeltaHistory.slice(\n deltaHistorySorted.length * Runner._smoothingLowerBound, \n deltaHistorySorted.length * Runner._smoothingUpperBound\n );\n\n // take the mean of the central window\n var frameDeltaSmoothed = _mean(deltaHistoryWindow);\n frameDelta = frameDeltaSmoothed || frameDelta;\n }\n\n if (runner.frameDeltaSnapping) {\n // snap frame delta to the nearest 1 Hz\n frameDelta = 1000 / Math.round(1000 / frameDelta);\n }\n\n // update runner values for next call\n runner.frameDelta = frameDelta;\n runner.timeLastTick = time;\n\n // accumulate elapsed time\n runner.timeBuffer += runner.frameDelta;\n\n // limit time buffer size to a single frame of updates\n runner.timeBuffer = Common.clamp(\n runner.timeBuffer, 0, runner.frameDelta + engineDelta * Runner._timeBufferMargin\n );\n\n // reset count of over budget updates\n runner.lastUpdatesDeferred = 0;\n\n // get max updates per frame\n var maxUpdates = runner.maxUpdates || Math.ceil(runner.maxFrameTime / engineDelta);\n\n // create event object\n var event = {\n timestamp: engine.timing.timestamp\n };\n\n // tick events before update\n Events.trigger(runner, 'beforeTick', event);\n Events.trigger(runner, 'tick', event);\n\n var updateStartTime = Common.now();\n\n // simulate time elapsed between calls\n while (engineDelta > 0 && runner.timeBuffer >= engineDelta * Runner._timeBufferMargin) {\n // update the engine\n Events.trigger(runner, 'beforeUpdate', event);\n Engine.update(engine, engineDelta);\n Events.trigger(runner, 'afterUpdate', event);\n\n // consume time simulated from buffer\n runner.timeBuffer -= engineDelta;\n updateCount += 1;\n\n // find elapsed time during this tick\n var elapsedTimeTotal = Common.now() - tickStartTime,\n elapsedTimeUpdates = Common.now() - updateStartTime,\n elapsedNextEstimate = elapsedTimeTotal + Runner._elapsedNextEstimate * elapsedTimeUpdates / updateCount;\n\n // defer updates if over performance budgets for this frame\n if (updateCount >= maxUpdates || elapsedNextEstimate > runner.maxFrameTime) {\n runner.lastUpdatesDeferred = Math.round(Math.max(0, (runner.timeBuffer / engineDelta) - Runner._timeBufferMargin));\n break;\n }\n }\n\n // track timing metrics\n engine.timing.lastUpdatesPerFrame = updateCount;\n\n // tick events after update\n Events.trigger(runner, 'afterTick', event);\n\n // show useful warnings if needed\n if (runner.frameDeltaHistory.length >= 100) {\n if (runner.lastUpdatesDeferred && Math.round(runner.frameDelta / engineDelta) > maxUpdates) {\n Common.warnOnce('Matter.Runner: runner reached runner.maxUpdates, see docs.');\n } else if (runner.lastUpdatesDeferred) {\n Common.warnOnce('Matter.Runner: runner reached runner.maxFrameTime, see docs.');\n }\n\n if (typeof runner.isFixed !== 'undefined') {\n Common.warnOnce('Matter.Runner: runner.isFixed is now redundant, see docs.');\n }\n\n if (runner.deltaMin || runner.deltaMax) {\n Common.warnOnce('Matter.Runner: runner.deltaMin and runner.deltaMax were removed, see docs.');\n }\n\n if (runner.fps !== 0) {\n Common.warnOnce('Matter.Runner: runner.fps was replaced by runner.delta, see docs.');\n }\n }\n };\n\n /**\n * Ends execution of `Runner.run` on the given `runner` by canceling the frame loop.\n * Alternatively to temporarily pause the runner, see `runner.enabled`.\n * @method stop\n * @param {runner} runner\n */\n Runner.stop = function(runner) {\n Runner._cancelNextFrame(runner);\n };\n\n /**\n * Schedules the `callback` on this `runner` for the next animation frame.\n * @private\n * @method _onNextFrame\n * @param {runner} runner\n * @param {function} callback\n * @return {number} frameRequestId\n */\n Runner._onNextFrame = function(runner, callback) {\n if (typeof window !== 'undefined' && window.requestAnimationFrame) {\n runner.frameRequestId = window.requestAnimationFrame(callback);\n } else {\n throw new Error('Matter.Runner: missing required global window.requestAnimationFrame.');\n }\n\n return runner.frameRequestId;\n };\n\n /**\n * Cancels the last callback scheduled by `Runner._onNextFrame` on this `runner`.\n * @private\n * @method _cancelNextFrame\n * @param {runner} runner\n */\n Runner._cancelNextFrame = function(runner) {\n if (typeof window !== 'undefined' && window.cancelAnimationFrame) {\n window.cancelAnimationFrame(runner.frameRequestId);\n } else {\n throw new Error('Matter.Runner: missing required global window.cancelAnimationFrame.');\n }\n };\n\n /**\n * Returns the mean of the given numbers.\n * @method _mean\n * @private\n * @param {Number[]} values\n * @return {Number} the mean of given values.\n */\n var _mean = function(values) {\n var result = 0,\n valuesLength = values.length;\n\n for (var i = 0; i < valuesLength; i += 1) {\n result += values[i];\n }\n\n return (result / valuesLength) || 0;\n };\n\n /*\n *\n * Events Documentation\n *\n */\n\n /**\n * Fired once at the start of the browser frame, before any engine updates.\n *\n * @event beforeTick\n * @param {} event An event object\n * @param {number} event.timestamp The engine.timing.timestamp of the event\n * @param {} event.source The source object of the event\n * @param {} event.name The name of the event\n */\n\n /**\n * Fired once at the start of the browser frame, after `beforeTick`.\n *\n * @event tick\n * @param {} event An event object\n * @param {number} event.timestamp The engine.timing.timestamp of the event\n * @param {} event.source The source object of the event\n * @param {} event.name The name of the event\n */\n\n /**\n * Fired once at the end of the browser frame, after `beforeTick`, `tick` and after any engine updates.\n *\n * @event afterTick\n * @param {} event An event object\n * @param {number} event.timestamp The engine.timing.timestamp of the event\n * @param {} event.source The source object of the event\n * @param {} event.name The name of the event\n */\n\n /**\n * Fired before each and every engine update in this browser frame (if any). \n * There may be multiple engine update calls per browser frame (or none) depending on framerate and timestep delta.\n *\n * @event beforeUpdate\n * @param {} event An event object\n * @param {number} event.timestamp The engine.timing.timestamp of the event\n * @param {} event.source The source object of the event\n * @param {} event.name The name of the event\n */\n\n /**\n * Fired after each and every engine update in this browser frame (if any). \n * There may be multiple engine update calls per browser frame (or none) depending on framerate and timestep delta.\n *\n * @event afterUpdate\n * @param {} event An event object\n * @param {number} event.timestamp The engine.timing.timestamp of the event\n * @param {} event.source The source object of the event\n * @param {} event.name The name of the event\n */\n\n /*\n *\n * Properties Documentation\n *\n */\n\n /**\n * The fixed timestep size used for `Engine.update` calls in milliseconds, known as `delta`.\n * \n * This value is recommended to be `1000 / 60` ms or smaller (i.e. equivalent to at least 60hz).\n * \n * Smaller `delta` values provide higher quality results at the cost of performance.\n * \n * You should usually avoid changing `delta` during running, otherwise quality may be affected. \n * \n * For smoother frame pacing choose a `delta` that is an even multiple of each display FPS you target, i.e. `1000 / (n * fps)` as this helps distribute an equal number of updates over each display frame.\n * \n * For example with a 60 Hz `delta` i.e. `1000 / 60` the runner will on average perform one update per frame on displays running 60 FPS and one update every two frames on displays running 120 FPS, etc.\n * \n * Where as e.g. using a 240 Hz `delta` i.e. `1000 / 240` the runner will on average perform four updates per frame on displays running 60 FPS and two updates per frame on displays running 120 FPS, etc.\n * \n * Therefore `Runner.run` will call multiple engine updates (or none) as needed to simulate the time elapsed between browser frames. \n * \n * In practice the number of updates in any particular frame may be restricted to respect the runner's performance budgets. These are specified by `runner.maxFrameTime` and `runner.maxUpdates`, see those properties for details.\n * \n * @property delta\n * @type number\n * @default 1000 / 60\n */\n\n /**\n * A flag that can be toggled to enable or disable tick calls on this runner, therefore pausing engine updates and events while the runner loop remains running.\n *\n * @property enabled\n * @type boolean\n * @default true\n */\n\n /**\n * The accumulated time elapsed that has yet to be simulated in milliseconds.\n * This value is clamped within certain limits (see `Runner.tick` code).\n *\n * @private\n * @property timeBuffer\n * @type number\n * @default 0\n */\n\n /**\n * The measured time elapsed between the last two browser frames measured in milliseconds.\n * This is useful e.g. to estimate the current browser FPS using `1000 / runner.frameDelta`.\n *\n * @readonly\n * @property frameDelta\n * @type number\n */\n\n /**\n * Enables averaging to smooth frame rate measurements and therefore stabilise play rate.\n *\n * @property frameDeltaSmoothing\n * @type boolean\n * @default true\n */\n\n /**\n * Rounds measured browser frame delta to the nearest 1 Hz.\n * This option can help smooth frame rate measurements and simplify handling hardware timing differences e.g. 59.94Hz and 60Hz displays.\n * For best results you should also round your `runner.delta` equivalent to the nearest 1 Hz.\n *\n * @property frameDeltaSnapping\n * @type boolean\n * @default true\n */\n\n /**\n * A performance budget that limits execution time allowed for this runner per browser frame in milliseconds.\n * \n * To calculate the effective browser FPS at which this throttle is applied use `1000 / runner.maxFrameTime`.\n * \n * This performance budget is intended to help maintain browser interactivity and help improve framerate recovery during temporary high CPU usage.\n * \n * This budget only covers the measured time elapsed executing the functions called in the scope of the runner tick, including `Engine.update` and its related user event callbacks.\n * \n * You may also reduce this budget to allow for any significant additional processing you perform on the same thread outside the scope of this runner tick, e.g. rendering time.\n * \n * See also `runner.maxUpdates`.\n *\n * @property maxFrameTime\n * @type number\n * @default 1000 / 30\n */\n\n /**\n * An optional limit for maximum engine update count allowed per frame tick in addition to `runner.maxFrameTime`.\n * \n * Unless you set a value it is automatically chosen based on `runner.delta` and `runner.maxFrameTime`.\n * \n * See also `runner.maxFrameTime`.\n * \n * @property maxUpdates\n * @type number\n * @default null\n */\n\n /**\n * The timestamp of the last call to `Runner.tick` used to measure `frameDelta`.\n *\n * @private\n * @property timeLastTick\n * @type number\n * @default 0\n */\n\n /**\n * The id of the last call to `Runner._onNextFrame`.\n *\n * @private\n * @property frameRequestId\n * @type number\n * @default null\n */\n\n})();\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* This module has now been replaced by `Matter.Collision`.\n*\n* All usage should be migrated to `Matter.Collision`.\n* For back-compatibility purposes this module will remain for a short term and then later removed in a future release.\n*\n* The `Matter.SAT` module contains methods for detecting collisions using the Separating Axis Theorem.\n*\n* @class SAT\n* @deprecated\n*/\n\nvar SAT = {};\n\nmodule.exports = SAT;\n\nvar Collision = __webpack_require__(8);\nvar Common = __webpack_require__(0);\nvar deprecated = Common.deprecated;\n\n(function() {\n\n /**\n * Detect collision between two bodies using the Separating Axis Theorem.\n * @deprecated replaced by Collision.collides\n * @method collides\n * @param {body} bodyA\n * @param {body} bodyB\n * @return {collision} collision\n */\n SAT.collides = function(bodyA, bodyB) {\n return Collision.collides(bodyA, bodyB);\n };\n\n deprecated(SAT, 'collides', 'SAT.collides ➤ replaced by Collision.collides');\n\n})();\n\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* The `Matter.Svg` module contains methods for converting SVG images into an array of vector points.\n*\n* To use this module you also need the SVGPathSeg polyfill: https://github.com/progers/pathseg\n*\n* See the included usage [examples](https://github.com/liabru/matter-js/tree/master/examples).\n*\n* @class Svg\n*/\n\nvar Svg = {};\n\nmodule.exports = Svg;\n\nvar Bounds = __webpack_require__(1);\nvar Common = __webpack_require__(0);\n\n(function() {\n\n /**\n * Converts an SVG path into an array of vector points.\n * If the input path forms a concave shape, you must decompose the result into convex parts before use.\n * See `Bodies.fromVertices` which provides support for this.\n * Note that this function is not guaranteed to support complex paths (such as those with holes).\n * You must load the `pathseg.js` polyfill on newer browsers.\n * @method pathToVertices\n * @param {SVGPathElement} path\n * @param {Number} [sampleLength=15]\n * @return {Vector[]} points\n */\n Svg.pathToVertices = function(path, sampleLength) {\n if (typeof window !== 'undefined' && !('SVGPathSeg' in window)) {\n Common.warn('Svg.pathToVertices: SVGPathSeg not defined, a polyfill is required.');\n }\n\n // https://github.com/wout/svg.topoly.js/blob/master/svg.topoly.js\n var i, il, total, point, segment, segments, \n segmentsQueue, lastSegment, \n lastPoint, segmentIndex, points = [],\n lx, ly, length = 0, x = 0, y = 0;\n\n sampleLength = sampleLength || 15;\n\n var addPoint = function(px, py, pathSegType) {\n // all odd-numbered path types are relative except PATHSEG_CLOSEPATH (1)\n var isRelative = pathSegType % 2 === 1 && pathSegType > 1;\n\n // when the last point doesn't equal the current point add the current point\n if (!lastPoint || px != lastPoint.x || py != lastPoint.y) {\n if (lastPoint && isRelative) {\n lx = lastPoint.x;\n ly = lastPoint.y;\n } else {\n lx = 0;\n ly = 0;\n }\n\n var point = {\n x: lx + px,\n y: ly + py\n };\n\n // set last point\n if (isRelative || !lastPoint) {\n lastPoint = point;\n }\n\n points.push(point);\n\n x = lx + px;\n y = ly + py;\n }\n };\n\n var addSegmentPoint = function(segment) {\n var segType = segment.pathSegTypeAsLetter.toUpperCase();\n\n // skip path ends\n if (segType === 'Z') \n return;\n\n // map segment to x and y\n switch (segType) {\n\n case 'M':\n case 'L':\n case 'T':\n case 'C':\n case 'S':\n case 'Q':\n x = segment.x;\n y = segment.y;\n break;\n case 'H':\n x = segment.x;\n break;\n case 'V':\n y = segment.y;\n break;\n }\n\n addPoint(x, y, segment.pathSegType);\n };\n\n // ensure path is absolute\n Svg._svgPathToAbsolute(path);\n\n // get total length\n total = path.getTotalLength();\n\n // queue segments\n segments = [];\n for (i = 0; i < path.pathSegList.numberOfItems; i += 1)\n segments.push(path.pathSegList.getItem(i));\n\n segmentsQueue = segments.concat();\n\n // sample through path\n while (length < total) {\n // get segment at position\n segmentIndex = path.getPathSegAtLength(length);\n segment = segments[segmentIndex];\n\n // new segment\n if (segment != lastSegment) {\n while (segmentsQueue.length && segmentsQueue[0] != segment)\n addSegmentPoint(segmentsQueue.shift());\n\n lastSegment = segment;\n }\n\n // add points in between when curving\n // TODO: adaptive sampling\n switch (segment.pathSegTypeAsLetter.toUpperCase()) {\n\n case 'C':\n case 'T':\n case 'S':\n case 'Q':\n case 'A':\n point = path.getPointAtLength(length);\n addPoint(point.x, point.y, 0);\n break;\n\n }\n\n // increment by sample value\n length += sampleLength;\n }\n\n // add remaining segments not passed by sampling\n for (i = 0, il = segmentsQueue.length; i < il; ++i)\n addSegmentPoint(segmentsQueue[i]);\n\n return points;\n };\n\n Svg._svgPathToAbsolute = function(path) {\n // http://phrogz.net/convert-svg-path-to-all-absolute-commands\n // Copyright (c) Gavin Kistner\n // http://phrogz.net/js/_ReuseLicense.txt\n // Modifications: tidy formatting and naming\n var x0, y0, x1, y1, x2, y2, segs = path.pathSegList,\n x = 0, y = 0, len = segs.numberOfItems;\n\n for (var i = 0; i < len; ++i) {\n var seg = segs.getItem(i),\n segType = seg.pathSegTypeAsLetter;\n\n if (/[MLHVCSQTA]/.test(segType)) {\n if ('x' in seg) x = seg.x;\n if ('y' in seg) y = seg.y;\n } else {\n if ('x1' in seg) x1 = x + seg.x1;\n if ('x2' in seg) x2 = x + seg.x2;\n if ('y1' in seg) y1 = y + seg.y1;\n if ('y2' in seg) y2 = y + seg.y2;\n if ('x' in seg) x += seg.x;\n if ('y' in seg) y += seg.y;\n\n switch (segType) {\n\n case 'm':\n segs.replaceItem(path.createSVGPathSegMovetoAbs(x, y), i);\n break;\n case 'l':\n segs.replaceItem(path.createSVGPathSegLinetoAbs(x, y), i);\n break;\n case 'h':\n segs.replaceItem(path.createSVGPathSegLinetoHorizontalAbs(x), i);\n break;\n case 'v':\n segs.replaceItem(path.createSVGPathSegLinetoVerticalAbs(y), i);\n break;\n case 'c':\n segs.replaceItem(path.createSVGPathSegCurvetoCubicAbs(x, y, x1, y1, x2, y2), i);\n break;\n case 's':\n segs.replaceItem(path.createSVGPathSegCurvetoCubicSmoothAbs(x, y, x2, y2), i);\n break;\n case 'q':\n segs.replaceItem(path.createSVGPathSegCurvetoQuadraticAbs(x, y, x1, y1), i);\n break;\n case 't':\n segs.replaceItem(path.createSVGPathSegCurvetoQuadraticSmoothAbs(x, y), i);\n break;\n case 'a':\n segs.replaceItem(path.createSVGPathSegArcAbs(x, y, seg.r1, seg.r2, seg.angle, seg.largeArcFlag, seg.sweepFlag), i);\n break;\n case 'z':\n case 'Z':\n x = x0;\n y = y0;\n break;\n\n }\n }\n\n if (segType == 'M' || segType == 'm') {\n x0 = x;\n y0 = y;\n }\n }\n };\n\n})();\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\n* This module has now been replaced by `Matter.Composite`.\n*\n* All usage should be migrated to the equivalent functions found on `Matter.Composite`.\n* For example `World.add(world, body)` now becomes `Composite.add(world, body)`.\n*\n* The property `world.gravity` has been moved to `engine.gravity`.\n*\n* For back-compatibility purposes this module will remain as a direct alias to `Matter.Composite` in the short term during migration.\n* Eventually this alias module will be marked as deprecated and then later removed in a future release.\n*\n* @class World\n*/\n\nvar World = {};\n\nmodule.exports = World;\n\nvar Composite = __webpack_require__(6);\nvar Common = __webpack_require__(0);\n\n(function() {\n\n /**\n * See above, aliases for back compatibility only\n */\n World.create = Composite.create;\n World.add = Composite.add;\n World.remove = Composite.remove;\n World.clear = Composite.clear;\n World.addComposite = Composite.addComposite;\n World.addBody = Composite.addBody;\n World.addConstraint = Composite.addConstraint;\n\n})();\n\n\n/***/ })\n/******/ ]);\n});","import * as Matter from 'matter-js';\nimport { Direction, RpgCommonPlayer } from './Player';\n\ninterface Collision {\n id: string;\n timestamp: number;\n}\n\ninterface HitboxData {\n id: string;\n type: 'static' | 'movable';\n body: Matter.Body;\n isMoving?: boolean; // Track movement state\n previousPosition?: Matter.Vector; // Track previous position for movement detection\n // Add sliding option\n enableSliding?: boolean; // Enable collision sliding for this hitbox\n slidingOptions?: SlidingOptions; // Sliding configuration\n}\n\n// Nouvelles interfaces pour les zones\nexport interface ZoneOptions {\n /** World x‑coordinate (ignored if linkedTo) */\n x?: number;\n /** World y‑coordinate (ignored if linkedTo) */\n y?: number;\n /** Circle radius (px) */\n radius: number;\n /** Vision aperture. 360 = full circle, <360 = cone */\n angle?: number;\n /** Facing direction used when angle < 360 */\n direction?: Direction;\n /** If supplied, zone tracks this hitbox id */\n linkedTo?: string;\n /** If true, walls (static hitboxes) stop vision */\n limitedByWalls?: boolean;\n}\n\n// Add sliding options interface\nexport interface SlidingOptions {\n /** Enable collision sliding */\n enabled?: boolean;\n /** Sliding friction factor (0-1, where 0 = no sliding, 1 = perfect sliding) */\n friction?: number;\n /** Minimum velocity threshold for sliding to occur */\n minVelocity?: number;\n}\n\nexport interface ZoneData {\n id: string;\n /** 'static' if x/y provided, otherwise 'linked' */\n type: 'static' | 'linked';\n /** Underlying Matter sensor body */\n body: Matter.Body;\n /** Host hitbox id when type === 'linked' */\n linkedTo?: string;\n /** Aperture in radians (π*2 for full circle) */\n aperture: number;\n /** limitedByWalls flag */\n limitedByWalls: boolean;\n}\n\n/**\n * Class to manage physics in a 2D RPG world without gravity using MatterJS\n * \n * Provides management for:\n * - Static hitboxes (map elements, obstacles)\n * - Movable hitboxes (players, events)\n * - Collision detection and tracking\n * - Collision events (enter/exit)\n * - Zones (sensor areas that detect entities without physical collision)\n */\nexport class RpgCommonPhysic {\n private engine: Matter.Engine;\n private world: Matter.World;\n private hitboxes: Map<string, HitboxData> = new Map();\n private collisions: Map<string, Set<string>> = new Map();\n private collisionEvents: Map<string, { \n onCollisionEnter?: (collidedWith: string[]) => void;\n onCollisionExit?: (collidedWith: string[]) => void;\n }> = new Map();\n \n // Add movement events map\n private movementEvents: Map<string, { \n onStartMoving?: () => void;\n onStopMoving?: () => void;\n }> = new Map();\n \n // Nouvelles propriétés pour les zones\n private zones: Map<string, ZoneData> = new Map();\n private zoneCollisions: Map<string, Set<string>> = new Map();\n private zoneEvents: Map<string, {\n onEnter?: (hitIds: string[]) => void;\n onExit?: (hitIds: string[]) => void;\n }> = new Map();\n\n // Add sliding-related properties\n private collisionNormals: Map<string, Matter.Vector[]> = new Map(); // Store collision normals for sliding\n private lastVelocities: Map<string, Matter.Vector> = new Map(); // Store last frame velocities\n private intendedMovements: Map<string, Matter.Vector> = new Map(); // Store intended movements for sliding\n private collisionData: Map<string, { body: Matter.Body; otherBody: Matter.Body; analysis: any }[]> = new Map(); // Store collision analysis data\n\n /**\n * Initialize the physics engine with no gravity\n * \n * @example\n * ```ts\n * const physic = new RpgCommonPhysic();\n * ```\n */\n constructor() {\n this.engine = Matter.Engine.create({\n gravity: { x: 0, y: 0 }\n });\n this.world = this.engine.world;\n\n // Setup collision detection\n Matter.Events.on(this.engine, 'collisionStart', (event) => this.handleCollisionStart(event));\n Matter.Events.on(this.engine, 'collisionEnd', (event) => this.handleCollisionEnd(event));\n }\n\n /**\n * Updates the physics simulation\n * \n * @param delta - Time delta in milliseconds\n * \n * @example\n * ```ts\n * // Update physics in game loop\n * physic.update(16); // 16ms = ~60fps\n * ```\n */\n update(delta: number): void {\n // 1. Update the physics engine (will apply translations requested by moveBody)\n Matter.Engine.update(this.engine, delta);\n\n // 2. Apply sliding corrections after physics update (using collision data from this frame)\n this.applySlidingCorrections();\n\n // 3. Resolve movable-to-movable collisions to prevent pushing\n this.resolveMovableCollisions();\n\n // 4. Sync bodies positions to player objects\n this.syncBodies();\n \n // 5. Sync linked zones -> host hitboxes\n this.syncLinkedZones();\n \n // 6. Check for movement state changes\n this.checkMovementChanges();\n \n // 7. Clear intended movements for next frame (collision normals are cleared in collision end events)\n this.intendedMovements.clear();\n }\n\n /**\n * Synchronize all physics bodies with their associated players\n * \n * Updates player positions based on their physics bodies after physics calculations\n * \n * @example\n * ```ts\n * // Called automatically in update()\n * physic.syncBodies();\n * ```\n */\n private syncBodies(): void {\n for (const [id, hitboxData] of this.hitboxes.entries()) {\n const body = hitboxData.body;\n const player = body.label;\n\n // Only sync if the label is a player object (not just a string ID)\n if (player && typeof player === 'object' && 'applyPhysic' in player) {\n player.applyPhysic(body);\n }\n }\n }\n\n /**\n * Synchronize linked zones to follow their host hitboxes\n * \n * Updates zones that are linked to players or other movable hitboxes\n * \n * @example\n * ```ts\n * // Called automatically in update()\n * physic.syncLinkedZones();\n * ```\n */\n private syncLinkedZones(): void {\n for (const [, zone] of this.zones) {\n if (zone.type === 'linked' && zone.linkedTo) {\n const host = this.hitboxes.get(zone.linkedTo);\n if (!host) continue;\n \n // Ensure direct position setting to avoid physics interpolation issues\n Matter.Body.setPosition(zone.body, {\n x: host.body.position.x,\n y: host.body.position.y\n });\n \n // Rotate directional cone with host facing (optional)\n if (zone.aperture < Math.PI * 2) {\n const dir = (host.body.label as any).direction ?? Direction.Down;\n const angle = this.directionToAngle(typeof dir === 'function' ? dir() : dir);\n Matter.Body.setAngle(zone.body, angle);\n }\n }\n }\n }\n \n /**\n * Convert a Direction enum value to radians\n * \n * @param dir - Direction enum value\n * @returns Angle in radians\n */\n private directionToAngle(dir: Direction): number {\n switch (dir) {\n case Direction.Up:\n return -Math.PI / 2;\n case Direction.Down:\n return Math.PI / 2;\n case Direction.Left:\n return Math.PI;\n case Direction.Right:\n default:\n return 0;\n }\n }\n\n /**\n * Convert a movement vector to a Direction enum value\n * \n * Determines the primary direction based on the larger component\n * of the movement vector. Returns null if no significant movement.\n * \n * @param dx - X displacement\n * @param dy - Y displacement\n * @returns Direction enum value or null if no movement\n */\n private vectorToDirection(dx: number, dy: number): Direction | null {\n const threshold = 0.1; // Minimum movement to consider\n \n // No significant movement\n if (Math.abs(dx) < threshold && Math.abs(dy) < threshold) {\n return null;\n }\n \n // Determine primary direction based on larger component\n if (Math.abs(dx) > Math.abs(dy)) {\n return dx > 0 ? Direction.Right : Direction.Left;\n } else {\n return dy > 0 ? Direction.Down : Direction.Up;\n }\n }\n\n /**\n * Add a static hitbox (immovable objects like walls, obstacles)\n * \n * @param id - Unique identifier for the hitbox\n * @param x - X position\n * @param y - Y position\n * @param width - Width of hitbox\n * @param height - Height of hitbox\n * @returns The id of the created hitbox\n * \n * @example\n * ```ts\n * // Add a wall\n * physic.addStaticHitbox('wall1', 100, 50, 32, 128);\n * ```\n */\n addStaticHitbox(id: string, x: number, y: number, width: number, height: number): string {\n if (this.hitboxes.has(id)) {\n throw new Error(`Hitbox with id ${id} already exists`);\n }\n\n // Create body with center position to match movable hitboxes\n const centerX = x + width/2;\n const centerY = y + height/2;\n const body = Matter.Bodies.rectangle(centerX, centerY, width, height, {\n isStatic: true,\n label: id\n });\n \n Matter.Composite.add(this.world, body);\n \n this.hitboxes.set(id, {\n id,\n type: 'static',\n body\n });\n \n return id;\n }\n\n /**\n * Add a movable hitbox (players, NPCs, dynamic objects)\n * \n * @param player - Player object that owns this hitbox\n * @param x - X position\n * @param y - Y position\n * @param width - Width of hitbox\n * @param height - Height of hitbox\n * @param options - Additional body options\n * @param slidingOptions - Collision sliding configuration\n * @returns The id of the created hitbox\n * \n * @example\n * ```ts\n * // Add a player with sliding enabled (only against walls)\n * const player = new RpgCommonPlayer();\n * player.id = 'player1';\n * physic.addMovableHitbox(player, 200, 300, 24, 32, {}, {\n * enabled: true,\n * friction: 0.8,\n * minVelocity: 0.5\n * });\n * ```\n */\n addMovableHitbox(player: RpgCommonPlayer, x: number, y: number, width: number, height: number, options = {}, slidingOptions?: SlidingOptions): string {\n // Create body with center position (MatterJS expects center coordinates)\n const centerX = x + width/2;\n const centerY = y + height/2;\n const body = Matter.Bodies.rectangle(centerX, centerY, width, height, {\n inertia: Infinity, // No rotation\n inverseInertia: 0,\n friction: 0,\n frictionAir: 0.1,\n restitution: 0,\n isStatic: false,\n ...options,\n label: player // Store reference to the player object\n });\n\n Matter.Composite.add(this.world, body);\n\n this.hitboxes.set(player.id, {\n id: player.id,\n type: 'movable',\n body,\n previousPosition: { ...body.position }, // Initialize previousPosition\n enableSliding: slidingOptions?.enabled ?? false,\n slidingOptions: slidingOptions\n });\n \n // Initialize player position to top-left corner (consistent with visual system)\n player.x.set(x);\n player.y.set(y);\n \n // Initialize movement tracking for sliding\n if (slidingOptions?.enabled) {\n this.intendedMovements.set(player.id, { x: 0, y: 0 });\n }\n \n return player.id;\n }\n\n /**\n * Update a hitbox's position and size\n * \n * @param id - ID of the hitbox to update\n * @param x - New X position\n * @param y - New Y position\n * @param width - New width (optional)\n * @param height - New height (optional)\n * @returns Boolean indicating success\n * \n * @example\n * ```ts\n * // Update player position\n * physic.updateHitbox('player1', newX, newY);\n * \n * // Update both position and size\n * physic.updateHitbox('player1', newX, newY, newWidth, newHeight);\n * ```\n */\n updateHitbox(id: string, x: number, y: number, width?: number, height?: number): boolean {\n const hitbox = this.hitboxes.get(id);\n\n if (!hitbox) return false;\n\n const body = hitbox.body;\n const player = body.label;\n\n if (width !== undefined && height !== undefined) {\n // Need to recreate the body if size changes\n Matter.Composite.remove(this.world, body);\n \n const newBody = Matter.Bodies.rectangle(\n x + width/2, \n y + height/2, \n width, \n height, \n {\n isStatic: hitbox.type === 'static',\n inertia: Infinity,\n friction: 0,\n frictionAir: 0,\n restitution: 0,\n label: player // Preserve the player reference\n }\n );\n \n Matter.Composite.add(this.world, newBody);\n hitbox.body = newBody;\n } else {\n // Just update position - x,y always represent top-left corner\n const width = body.bounds.max.x - body.bounds.min.x;\n const height = body.bounds.max.y - body.bounds.min.y;\n const centerX = x + width / 2;\n const centerY = y + height / 2;\n Matter.Body.setPosition(body, { x: centerX, y: centerY });\n }\n \n // Update player position if it's a player object\n if (player && typeof player === 'object' && 'x' in player && 'y' in player) {\n // Convert body center position back to top-left corner for consistency\n const width = body.bounds.max.x - body.bounds.min.x;\n const height = body.bounds.max.y - body.bounds.min.y;\n const topLeftX = body.position.x - width / 2;\n const topLeftY = body.position.y - height / 2;\n player.x.set(topLeftX);\n player.y.set(topLeftY);\n }\n \n return true;\n }\n\n /**\n * Remove a hitbox from the world\n * \n * @param id - ID of the hitbox to remove\n * @returns Boolean indicating success\n * \n * @example\n * ```ts\n * // Remove an enemy\n * physic.removeHitbox('enemy1');\n * ```\n */\n removeHitbox(id: string): boolean {\n const hitbox = this.hitboxes.get(id);\n if (!hitbox) return false;\n \n Matter.Composite.remove(this.world, hitbox.body);\n this.hitboxes.delete(id);\n \n // Clean up collision records\n this.collisions.delete(id);\n this.collisionEvents.delete(id);\n \n // Clean up movement events\n this.movementEvents.delete(id);\n \n // Clean up sliding data\n this.collisionNormals.delete(id);\n this.lastVelocities.delete(id);\n this.intendedMovements.delete(id);\n this.collisionData.delete(id);\n \n // Remove this hitbox from other hitboxes' collision records\n for (const [otherId, collisions] of this.collisions.entries()) {\n collisions.delete(id);\n }\n \n return true;\n }\n\n /**\n * Register collision event callbacks for a hitbox\n * \n * @param id - ID of the hitbox\n * @param onCollisionEnter - Callback when entering collision\n * @param onCollisionExit - Callback when exiting collision\n * \n * @example\n * ```ts\n * // Register collision events for player\n * physic.registerCollisionEvents('player1', \n * (hitboxIds) => console.log('Player hit:', hitboxIds),\n * (hitboxIds) => console.log('Player no longer hitting:', hitboxIds)\n * );\n * ```\n */\n registerCollisionEvents(\n id: string, \n onCollisionEnter?: (collidedWith: string[]) => void,\n onCollisionExit?: (collidedWith: string[]) => void\n ): void {\n this.collisionEvents.set(id, { onCollisionEnter, onCollisionExit });\n }\n\n /**\n * Get all hitbox IDs currently colliding with the specified hitbox\n * \n * @param id - ID of the hitbox to check collisions for\n * @returns Array of hitbox IDs or empty array if none found\n * \n * @example\n * ```ts\n * // Get all enemies colliding with player\n * const collidingEnemies = physic.getCollisions('player1');\n * ```\n */\n getCollisions(id: string): string[] {\n const collisions = this.collisions.get(id);\n return collisions ? Array.from(collisions) : [];\n }\n\n /**\n * Check if two hitboxes are colliding\n * \n * @param id1 - First hitbox ID\n * @param id2 - Second hitbox ID\n * @returns Boolean indicating if they are colliding\n * \n * @example\n * ```ts\n * // Check if player is touching the door\n * if (physic.areColliding('player1', 'door')) {\n * // Open the door\n * }\n * ```\n */\n areColliding(id1: string, id2: string): boolean {\n const collisions = this.collisions.get(id1);\n return collisions ? collisions.has(id2) : false;\n }\n\n /**\n * Handle collision start events from MatterJS\n */\n private handleCollisionStart(event: Matter.IEventCollision<Matter.Engine>): void {\n const pairs = event.pairs;\n \n for (const pair of pairs) {\n const bodyA = pair.bodyA;\n const bodyB = pair.bodyB;\n\n // Extraire les IDs et vérifier si ce sont des zones\n const a = this.extractId(bodyA);\n const b = this.extractId(bodyB);\n\n // Zone ↔ Hitbox interaction\n if (a.isZone !== b.isZone) {\n const zoneId = a.isZone ? a.id : b.id;\n const targetId = a.isZone ? b.id : a.id;\n this.processZoneEnter(zoneId, targetId);\n continue; // ne pas traiter comme collision physique\n }\n \n // Normal hitbox ↔ hitbox collision\n if (!a.isZone && !b.isZone) {\n // Get proper IDs whether the label is a player object or string\n const idA = a.id;\n const idB = b.id;\n \n // Check if both are movable - if so, skip automatic handling (we handle it manually)\n const hitboxA = this.hitboxes.get(idA);\n const hitboxB = this.hitboxes.get(idB);\n \n if (hitboxA?.type === 'movable' && hitboxB?.type === 'movable') {\n // Skip automatic collision handling for movable-to-movable collisions\n // These are handled manually in resolveMovableCollisions()\n continue;\n }\n \n // Store collision data for sliding analysis (only for movable vs static)\n this.storeCollisionNormals(pair, idA, idB);\n \n // Record collision for both objects\n this.recordCollision(idA, idB);\n this.recordCollision(idB, idA);\n \n // Trigger onCollisionEnter callbacks\n const eventsA = this.collisionEvents.get(idA);\n const eventsB = this.collisionEvents.get(idB);\n\n if (eventsA?.onCollisionEnter) {\n eventsA.onCollisionEnter([idB]);\n }\n \n if (eventsB?.onCollisionEnter) {\n eventsB.onCollisionEnter([idA]);\n }\n }\n }\n }\n\n /**\n * Handle collision end events from MatterJS\n */\n private handleCollisionEnd(event: Matter.IEventCollision<Matter.Engine>): void {\n const pairs = event.pairs;\n \n for (const pair of pairs) {\n const bodyA = pair.bodyA;\n const bodyB = pair.bodyB;\n \n // Extraire les IDs et vérifier si ce sont des zones\n const a = this.extractId(bodyA);\n const b = this.extractId(bodyB);\n \n // Zone ↔ Hitbox end\n if (a.isZone !== b.isZone) {\n const zoneId = a.isZone ? a.id : b.id;\n const targetId = a.isZone ? b.id : a.id;\n this.processZoneExit(zoneId, targetId);\n continue;\n }\n \n // Normal hitbox ↔ hitbox end\n if (!a.isZone && !b.isZone) {\n // Get proper IDs\n const idA = a.id;\n const idB = b.id;\n\n // Check if both are movable - if so, skip automatic handling\n const hitboxA = this.hitboxes.get(idA);\n const hitboxB = this.hitboxes.get(idB);\n \n if (hitboxA?.type === 'movable' && hitboxB?.type === 'movable') {\n // Skip automatic collision end handling for movable-to-movable collisions\n // These are handled manually in resolveMovableCollisions()\n continue;\n }\n\n // Remove collision records\n this.removeCollision(idA, idB);\n this.removeCollision(idB, idA);\n \n // Clear collision data for these entities\n this.collisionData.delete(idA);\n this.collisionData.delete(idB);\n \n // Trigger onCollisionExit callbacks\n const eventsA = this.collisionEvents.get(idA);\n const eventsB = this.collisionEvents.get(idB);\n \n if (eventsA?.onCollisionExit) {\n eventsA.onCollisionExit([idB]);\n }\n \n if (eventsB?.onCollisionExit) {\n eventsB.onCollisionExit([idA]);\n }\n }\n }\n }\n \n /**\n * Extract entity ID and zone status from a physics body\n * \n * @param body - Matter.js body\n * @returns Object containing ID and isZone flag\n */\n private extractId(body: Matter.Body): { id: string; isZone: boolean } {\n const label = body.label as any;\n if (typeof label === 'string' && label.startsWith('zone:')) {\n return { id: label.slice(5), isZone: true };\n }\n const id = typeof label === 'object' && 'id' in label ? label.id : label;\n return { id, isZone: false };\n }\n \n /**\n * Process a zone enter event\n * \n * @param zoneId - ID of the zone\n * @param hitId - ID of the hitbox entering the zone\n */\n private processZoneEnter(zoneId: string, hitId: string): void {\n // Line‑of‑sight check\n const zone = this.zones.get(zoneId);\n const hitbox = this.hitboxes.get(hitId);\n\n if (!zone || !hitbox) return;\n\n if (zone.limitedByWalls && !this.hasLineOfSight(zone.body.position, hitbox.body.position)) {\n return; // blocked by wall → ignore\n }\n\n if (!this.zoneCollisions.has(zoneId)) this.zoneCollisions.set(zoneId, new Set());\n const set = this.zoneCollisions.get(zoneId)!;\n if (set.has(hitId)) return; // already inside\n set.add(hitId);\n this.zoneEvents.get(zoneId)?.onEnter?.([hitId]);\n }\n\n /**\n * Process a zone exit event\n * \n * @param zoneId - ID of the zone\n * @param hitId - ID of the hitbox exiting the zone\n */\n private processZoneExit(zoneId: string, hitId: string): void {\n const set = this.zoneCollisions.get(zoneId);\n if (!set || !set.has(hitId)) return;\n set.delete(hitId);\n this.zoneEvents.get(zoneId)?.onExit?.([hitId]);\n }\n\n /**\n * Check if there is a clear line of sight between two points\n * \n * @param start - Starting point\n * @param end - Ending point\n * @returns True if no static hitbox blocks the line\n */\n private hasLineOfSight(start: Matter.Vector, end: Matter.Vector): boolean {\n // Only query bodies that are static (walls)\n const staticBodies = Array.from(this.hitboxes.values())\n .filter((h) => h.type === 'static')\n .map((h) => h.body);\n \n // If there are no static bodies, there's nothing to block vision\n if (staticBodies.length === 0) return true;\n \n // Check if any static body intersects the ray\n const collisions = Matter.Query.ray(\n staticBodies,\n start,\n end,\n 1 // Use width of 1 to make detection more reliable\n );\n \n return collisions.length === 0;\n }\n\n /**\n * Record a collision between two hitboxes\n */\n private recordCollision(id1: string, id2: string): void {\n if (!this.collisions.has(id1)) {\n this.collisions.set(id1, new Set());\n }\n \n this.collisions.get(id1)!.add(id2);\n }\n\n /**\n * Remove a collision record between two hitboxes\n */\n private removeCollision(id1: string, id2: string): void {\n const collisions = this.collisions.get(id1);\n if (collisions) {\n collisions.delete(id2);\n }\n }\n\n /**\n * Move a body based on player movement data\n * \n * Applies velocity to a physics body based on the player's current speed\n * and automatically updates the player's position and intended direction\n * \n * @param player - The player object containing movement data\n * @param direction - The intended movement direction\n * @returns Boolean indicating success\n * \n * @example\n * ```ts\n * // Move a player's physics body\n * physic.moveBody(player, Direction.Right);\n * ```\n */\n moveBody(player: RpgCommonPlayer, direction: Direction): boolean {\n const hitbox = this.hitboxes.get(player.id);\n if (!hitbox) return false;\n \n const body = hitbox.body;\n const speedValue = player.speed(); // Assume this is pixels per step\n \n // Set the intended direction on the player\n // This ensures the player faces the direction they intend to move\n if (typeof player.setIntendedDirection === 'function') {\n player.setIntendedDirection(direction);\n }\n \n // Calculate translation vector based on direction and speed\n let dx = 0;\n let dy = 0;\n \n // Direction: 0=down, 1=left, 2=right, 3=up\n switch (direction) {\n case Direction.Down: // down\n dy = speedValue;\n break;\n case Direction.Left: // left\n dx = -speedValue;\n break;\n case Direction.Right: // right\n dx = speedValue;\n break;\n case Direction.Up: // up\n dy = -speedValue;\n break;\n }\n \n // Store intended movement for sliding calculations\n if (hitbox.enableSliding) {\n this.intendedMovements.set(player.id, { x: dx, y: dy });\n }\n \n // Apply movement (this will be potentially modified by sliding in the next frame)\n Matter.Body.translate(body, { x: dx, y: dy });\n \n return true;\n }\n\n /**\n * Stop movement for a player\n * \n * Clears the intended direction and stops any ongoing movement.\n * This should be called when the player releases movement keys.\n * \n * @param player - The player object to stop\n * @returns Boolean indicating success\n * \n * @example\n * ```ts\n * // Player releases all movement keys\n * physic.stopMovement(player);\n * ```\n */\n stopMovement(player: RpgCommonPlayer): boolean {\n const hitbox = this.hitboxes.get(player.id);\n if (!hitbox) return false;\n \n // Clear intended direction\n if (typeof player.setIntendedDirection === 'function') {\n player.setIntendedDirection(null);\n }\n \n // Clear intended movement for sliding calculations\n this.intendedMovements.delete(player.id);\n \n // Stop the physics body\n const body = hitbox.body;\n Matter.Body.setVelocity(body, { x: 0, y: 0 });\n \n return true;\n }\n\n /**\n * Synchronize a player's position to its physics body\n * \n * Updates the physics body position based on the player's current position\n * Useful when player position is changed outside of physics system\n * \n * @param playerId - ID of the player to synchronize\n * @returns Boolean indicating success\n * \n * @example\n * ```ts\n * // After teleporting a player\n * player.x.set(newX);\n * player.y.set(newY);\n * physic.syncPlayerToBody(player.id);\n * ```\n */\n syncPlayerToBody(playerId: string): boolean {\n const hitbox = this.hitboxes.get(playerId);\n if (!hitbox) return false;\n \n const body = hitbox.body;\n const player = body.label;\n \n if (player && typeof player === 'object' && 'x' in player && 'y' in player) {\n Matter.Body.setPosition(body, {\n x: player.x(),\n y: player.y()\n });\n return true;\n }\n \n return false;\n }\n\n /**\n * Get a physics body by entity ID\n * \n * Used by the MovementManager to apply movement strategies\n * \n * @param id - Entity ID\n * @returns The Matter.js body or undefined if not found\n * \n * @example\n * ```ts\n * // Get a body to apply movement\n * const body = physic.getBody('player1');\n * if (body) Matter.Body.setVelocity(body, { x: 5, y: 0 });\n * ```\n */\n getBody(id: string): Matter.Body | undefined {\n return this.hitboxes.get(id)?.body;\n }\n\n /**\n * Apply a translation to a body directly\n * \n * Used as a clean interface for the movement system.\n * Automatically determines and sets the intended direction for players.\n * \n * @param id - Entity ID\n * @param dx - X displacement in pixels\n * @param dy - Y displacement in pixels\n * @returns Boolean indicating success\n * \n * @example\n * ```ts\n * // Move entity 5px right, 2px down\n * physic.applyTranslation('player1', 5, 2);\n * ```\n */\n applyTranslation(id: string, dx: number, dy: number): boolean {\n const body = this.getBody(id);\n if (!body) return false;\n \n // Store intended movement for sliding calculations\n const hitbox = this.hitboxes.get(id);\n if (hitbox?.enableSliding) {\n this.intendedMovements.set(id, { x: dx, y: dy });\n }\n \n // Set intended direction for players based on movement vector\n const player = body.label;\n if (player && typeof player === 'object' && 'setIntendedDirection' in player) {\n const direction = this.vectorToDirection(dx, dy);\n if (direction !== null && typeof player.setIntendedDirection === 'function') {\n player.setIntendedDirection(direction);\n }\n }\n \n Matter.Body.translate(body, { x: dx, y: dy });\n return true;\n }\n\n /**\n * Set the velocity of a body directly\n * \n * Used as a clean interface for the movement system\n * \n * @param id - Entity ID\n * @param vx - X velocity component\n * @param vy - Y velocity component\n * @returns Boolean indicating success\n * \n * @example\n * ```ts\n * // Set entity velocity to 5px/s right\n * physic.setVelocity('player1', 5, 0);\n * ```\n */\n setVelocity(id: string, vx: number, vy: number): boolean {\n const body = this.getBody(id);\n if (!body) return false;\n \n Matter.Body.setVelocity(body, { x: vx, y: vy });\n return true;\n }\n\n /**\n * Apply a force to a body\n * \n * Used as a clean interface for the movement system\n * \n * @param id - Entity ID\n * @param forceX - X force component\n * @param forceY - Y force component\n * @param position - Application point (optional, default is body center)\n * @returns Boolean indicating success\n * \n * @example\n * ```ts\n * // Apply force to push entity\n * physic.applyForce('player1', 0.05, 0);\n * ```\n */\n applyForce(id: string, forceX: number, forceY: number, position?: Matter.Vector): boolean {\n const body = this.getBody(id);\n if (!body) return false;\n \n Matter.Body.applyForce(body, position || body.position, { x: forceX, y: forceY });\n return true;\n }\n\n /**\n * Get the Matter.js world object\n * \n * Useful for advanced manipulation and querying of the physics world\n * \n * @returns Matter.js World object\n * \n * @example\n * ```ts\n * // Query for all bodies in an area\n * const world = physic.getWorld();\n * const bodies = Matter.Query.region(world.bodies, area);\n * ```\n */\n getWorld(): Matter.World {\n return this.world;\n }\n\n /* ----------------------------------------------------------------------- */\n /* ZONES */\n /* ----------------------------------------------------------------------- */\n\n /**\n * Create a new Zone sensor. Never collides physically but triggers events.\n * \n * @param id - Unique identifier for the zone\n * @param opts - Zone options\n * @returns The id of the created zone\n * \n * @example\n * ```ts\n * // 90° cone vision in front of guard1 (120px range)\n * physic.addZone('guardVision', {\n * linkedTo: 'guard1',\n * radius: 120,\n * angle: 90,\n * direction: Direction.Right,\n * limitedByWalls: true\n * });\n * ```\n */\n addZone(id: string, opts: ZoneOptions): string {\n if (this.zones.has(id)) throw new Error(`Zone with id ${id} already exists`);\n\n // Determine geometry ---------------------------------------------------\n const radius = opts.radius;\n const fullCircle = !opts.angle || opts.angle >= 360;\n const aperture = (opts.angle ?? 360) * (Math.PI / 180);\n\n // Helper to build wedge vertices when angle < 360 ---------------------\n const createWedge = (angleRad: number, r: number): Matter.Body => {\n const step = Math.max(4, Math.ceil(angleRad / (Math.PI / 8))); // ≤22.5° per segment\n const verts: Matter.Vector[] = [{ x: 0, y: 0 }];\n for (let i = 0; i <= step; i++) {\n const a = -angleRad / 2 + (i / step) * angleRad;\n verts.push({ x: Math.cos(a) * r, y: Math.sin(a) * r });\n }\n return Matter.Bodies.fromVertices(0, 0, [verts], { \n isSensor: true, \n label: `zone:${id}`\n }, true) as Matter.Body;\n };\n\n let body: Matter.Body;\n if (fullCircle) {\n body = Matter.Bodies.circle(0, 0, radius, { \n isSensor: true, \n label: `zone:${id}` \n });\n } else {\n body = createWedge(aperture, radius);\n }\n\n // Position -------------------------------------------------------------\n if (!opts.linkedTo) {\n // Static zone\n const x = opts.x ?? 0;\n const y = opts.y ?? 0;\n Matter.Body.setPosition(body, { x, y });\n }\n\n Matter.Composite.add(this.world, body);\n\n this.zones.set(id, {\n id,\n type: opts.linkedTo ? 'linked' : 'static',\n body,\n linkedTo: opts.linkedTo,\n aperture,\n limitedByWalls: !!opts.limitedByWalls,\n });\n\n return id;\n }\n\n getZone(id: string): ZoneData | undefined {\n return this.zones.get(id);\n }\n\n /**\n * Remove a zone from the world\n * \n * @param id - ID of the zone to remove\n * @returns Boolean indicating success\n * \n * @example\n * ```ts\n * // Remove a detection zone\n * physic.removeZone('guardVision');\n * ```\n */\n removeZone(id: string): boolean {\n const zone = this.zones.get(id);\n if (!zone) return false;\n\n Matter.Composite.remove(this.world, zone.body);\n this.zones.delete(id);\n this.zoneEvents.delete(id);\n this.zoneCollisions.delete(id);\n return true;\n }\n\n /**\n * Register zone enter/exit callbacks\n * \n * @param id - ID of the zone\n * @param onEnter - Callback when an entity enters the zone\n * @param onExit - Callback when an entity exits the zone\n * \n * @example\n * ```ts\n * // Register zone events\n * physic.registerZoneEvents('guardVision', \n * (hitIds) => console.log('Entities spotted:', hitIds),\n * (hitIds) => console.log('Entities lost:', hitIds)\n * );\n * ```\n */\n registerZoneEvents(\n id: string,\n onEnter?: (hitIds: string[]) => void,\n onExit?: (hitIds: string[]) => void\n ): void {\n this.zoneEvents.set(id, { onEnter, onExit });\n }\n\n /**\n * Get all entity IDs currently inside a zone\n * \n * @param id - ID of the zone to check\n * @returns Array of entity IDs or empty array if none found\n * \n * @example\n * ```ts\n * // Check which entities are in guard's vision\n * const spotted = physic.getEntitiesInZone('guardVision');\n * if (spotted.includes('player1')) {\n * // Guard saw the player!\n * }\n * ```\n */\n getEntitiesInZone(id: string): string[] {\n return this.zoneCollisions.get(id) ? Array.from(this.zoneCollisions.get(id)!) : [];\n }\n\n /**\n * Check for movement state changes on all movable hitboxes\n * \n * Detects when objects start or stop moving and triggers appropriate events\n * \n * @example\n * ```ts\n * // Called automatically in update()\n * physic.checkMovementChanges();\n * ```\n */\n private checkMovementChanges(): void {\n const movementThreshold = 0.1; // Minimum speed to consider an object moving\n const positionChangeThreshold = 0.01; // Minimum position change to consider an object moving\n \n for (const [id, hitboxData] of this.hitboxes.entries()) {\n // Skip static objects or objects without previous position tracking\n if (hitboxData.type === 'static' || !hitboxData.previousPosition) continue;\n \n const body = hitboxData.body;\n const currentPosition = body.position;\n \n // Check velocity\n const velocity = Math.sqrt(body.velocity.x * body.velocity.x + body.velocity.y * body.velocity.y);\n \n // Check position change\n const dx = currentPosition.x - hitboxData.previousPosition.x;\n const dy = currentPosition.y - hitboxData.previousPosition.y;\n const positionChanged = Math.sqrt(dx*dx + dy*dy) > positionChangeThreshold;\n \n const wasMoving = hitboxData.isMoving ?? false;\n const isCurrentlyMoving = velocity > movementThreshold || positionChanged;\n \n // Only trigger events if state changed\n if (isCurrentlyMoving !== wasMoving) {\n hitboxData.isMoving = isCurrentlyMoving;\n \n const events = this.movementEvents.get(id);\n if (!events) continue;\n \n if (isCurrentlyMoving && events.onStartMoving) {\n events.onStartMoving();\n } else if (!isCurrentlyMoving && events.onStopMoving) {\n events.onStopMoving();\n }\n }\n \n // Update previous position for the next frame\n hitboxData.previousPosition = { ...currentPosition };\n }\n }\n\n /**\n * Register movement event callbacks for a hitbox\n * \n * @param id - ID of the hitbox\n * @param onStartMoving - Callback when object starts moving\n * @param onStopMoving - Callback when object stops moving\n * \n * @example\n * ```ts\n * // Register movement events for player\n * physic.registerMovementEvents('player1', \n * () => console.log('Player started moving'),\n * () => console.log('Player stopped moving')\n * );\n * ```\n */\n registerMovementEvents(\n id: string, \n onStartMoving?: () => void,\n onStopMoving?: () => void\n ): void {\n this.movementEvents.set(id, { onStartMoving, onStopMoving });\n }\n\n /**\n * Check if a hitbox is currently moving\n * \n * @param id - ID of the hitbox to check\n * @returns Boolean indicating if the object is in motion\n * \n * @example\n * ```ts\n * // Check if player is moving\n * if (physic.isMoving('player1')) {\n * // Player is in motion\n * }\n * ```\n */\n isMoving(id: string): boolean {\n const hitbox = this.hitboxes.get(id);\n return hitbox?.isMoving ?? false;\n }\n\n /**\n * Unregister movement events for a hitbox\n * \n * @param id - ID of the hitbox\n * @returns Boolean indicating success\n * \n * @example\n * ```ts\n * // Remove movement event listeners\n * physic.unregisterMovementEvents('player1');\n * ```\n */\n unregisterMovementEvents(id: string): boolean {\n return this.movementEvents.delete(id);\n }\n\n /**\n * Enable or disable collision sliding for a hitbox\n * \n * @param id - ID of the hitbox\n * @param enabled - Whether to enable sliding\n * @param options - Sliding configuration options\n * @returns Boolean indicating success\n * \n * @example\n * ```ts\n * // Enable sliding for an existing player\n * physic.setSliding('player1', true, {\n * friction: 0.9,\n * minVelocity: 1.0\n * });\n * ```\n */\n setSliding(id: string, enabled: boolean, options?: SlidingOptions): boolean {\n const hitbox = this.hitboxes.get(id);\n if (!hitbox || hitbox.type !== 'movable') return false;\n \n hitbox.enableSliding = enabled;\n if (enabled && options) {\n hitbox.slidingOptions = options;\n }\n \n // Initialize movement tracking if enabling sliding\n if (enabled && !this.intendedMovements.has(id)) {\n this.intendedMovements.set(id, { x: 0, y: 0 });\n }\n \n return true;\n }\n\n /**\n * Check if sliding is enabled for a hitbox\n * \n * @param id - ID of the hitbox\n * @returns Boolean indicating if sliding is enabled\n * \n * @example\n * ```ts\n * // Check if player has sliding enabled\n * if (physic.isSlidingEnabled('player1')) {\n * // Player can slide along walls\n * }\n * ```\n */\n isSlidingEnabled(id: string): boolean {\n const hitbox = this.hitboxes.get(id);\n return hitbox?.enableSliding ?? false;\n }\n\n /**\n * Get sliding options for a hitbox\n * \n * @param id - ID of the hitbox\n * @returns Sliding options or undefined if not found\n * \n * @example\n * ```ts\n * // Get current sliding configuration\n * const options = physic.getSlidingOptions('player1');\n * console.log('Friction:', options?.friction);\n * ```\n */\n getSlidingOptions(id: string): SlidingOptions | undefined {\n const hitbox = this.hitboxes.get(id);\n return hitbox?.slidingOptions;\n }\n\n // Add new methods for sliding calculations and store velocities\n private applySlidingCorrections(): void {\n for (const [id, hitboxData] of this.hitboxes.entries()) {\n if (hitboxData.type === 'movable' && hitboxData.enableSliding) {\n const body = hitboxData.body;\n const intendedMovement = this.intendedMovements.get(id);\n const collisionData = this.collisionData.get(id);\n const slidingOptions = hitboxData.slidingOptions;\n\n if (!intendedMovement || !collisionData || collisionData.length === 0 || !slidingOptions) {\n continue;\n }\n\n const friction = slidingOptions.friction ?? 0.8;\n const minVelocity = slidingOptions.minVelocity ?? 0.5;\n \n // Check if intended movement is above minimum threshold\n const movementMagnitude = Math.sqrt(intendedMovement.x * intendedMovement.x + intendedMovement.y * intendedMovement.y);\n \n if (movementMagnitude < minVelocity) {\n continue;\n }\n\n // Analyze all collisions to determine if any are partial\n let hasPartialCollision = false;\n let bestSlidingDirection = { x: 0, y: 0 };\n let totalOverlapRatio = 0;\n \n for (const collision of collisionData) {\n const analysis = collision.analysis;\n totalOverlapRatio += analysis.overlapRatio;\n \n if (analysis.isPartial) {\n hasPartialCollision = true;\n // Use the best sliding direction from the analysis\n bestSlidingDirection.x += analysis.bestSlidingDirection.x;\n bestSlidingDirection.y += analysis.bestSlidingDirection.y;\n }\n }\n \n // Only apply sliding if there's at least one partial collision\n if (!hasPartialCollision) {\n continue;\n }\n \n // Average the sliding directions if multiple partial collisions\n if (collisionData.length > 1) {\n bestSlidingDirection.x /= collisionData.length;\n bestSlidingDirection.y /= collisionData.length;\n }\n \n // Apply friction to the sliding movement\n const slidingMovement = Matter.Vector.mult(bestSlidingDirection, friction);\n \n // Apply the sliding movement as an additional translation\n // This happens before the physics engine update, so it will be the actual movement\n Matter.Body.translate(body, slidingMovement);\n }\n }\n }\n\n private storeCollisionNormals(pair: Matter.IPair, idA: string, idB: string): void {\n // Store collision data for sliding analysis\n const hitboxA = this.hitboxes.get(idA);\n const hitboxB = this.hitboxes.get(idB);\n \n // Check if sliding should be applied for hitbox A (only against static hitboxes)\n if (hitboxA?.enableSliding && hitboxA.type === 'movable' && hitboxB?.type === 'static') {\n const intendedMovement = this.intendedMovements.get(idA);\n if (intendedMovement) {\n const analysis = this.analyzeCollision(pair.bodyA, pair.bodyB, intendedMovement);\n \n if (!this.collisionData.has(idA)) {\n this.collisionData.set(idA, []);\n }\n this.collisionData.get(idA)!.push({\n body: pair.bodyA,\n otherBody: pair.bodyB,\n analysis\n });\n }\n }\n \n // Check if sliding should be applied for hitbox B (only against static hitboxes)\n if (hitboxB?.enableSliding && hitboxB.type === 'movable' && hitboxA?.type === 'static') {\n const intendedMovement = this.intendedMovements.get(idB);\n if (intendedMovement) {\n const analysis = this.analyzeCollision(pair.bodyB, pair.bodyA, intendedMovement);\n \n if (!this.collisionData.has(idB)) {\n this.collisionData.set(idB, []);\n }\n this.collisionData.get(idB)!.push({\n body: pair.bodyB,\n otherBody: pair.bodyA,\n analysis\n });\n }\n }\n }\n\n /**\n * Determine if a collision is partial (corner/edge) or full frontal\n * \n * @param bodyA - First collision body\n * @param bodyB - Second collision body\n * @param intendedMovement - The intended movement vector\n * @returns Object with collision analysis\n */\n private analyzeCollision(bodyA: Matter.Body, bodyB: Matter.Body, intendedMovement: Matter.Vector): {\n isPartial: boolean;\n overlapRatio: number;\n bestSlidingDirection: Matter.Vector;\n } {\n // Get body bounds\n const boundsA = bodyA.bounds;\n const boundsB = bodyB.bounds;\n \n // Calculate overlap area\n const overlapLeft = Math.max(boundsA.min.x, boundsB.min.x);\n const overlapRight = Math.min(boundsA.max.x, boundsB.max.x);\n const overlapTop = Math.max(boundsA.min.y, boundsB.min.y);\n const overlapBottom = Math.min(boundsA.max.y, boundsB.max.y);\n \n const overlapWidth = Math.max(0, overlapRight - overlapLeft);\n const overlapHeight = Math.max(0, overlapBottom - overlapTop);\n const overlapArea = overlapWidth * overlapHeight;\n \n // Calculate body A area\n const bodyAWidth = boundsA.max.x - boundsA.min.x;\n const bodyAHeight = boundsA.max.y - boundsA.min.y;\n const bodyAArea = bodyAWidth * bodyAHeight;\n \n // Calculate overlap ratio (how much of body A is overlapping)\n const overlapRatio = overlapArea / bodyAArea;\n \n // Consider collision partial if overlap is less than 30% of the body\n const isPartial = overlapRatio < 0.3;\n \n // Determine best sliding direction based on intended movement and collision geometry\n let bestSlidingDirection = { x: 0, y: 0 };\n \n if (isPartial) {\n // For partial collisions, try to slide around the obstacle\n const centerA = { x: (boundsA.min.x + boundsA.max.x) / 2, y: (boundsA.min.y + boundsA.max.y) / 2 };\n const centerB = { x: (boundsB.min.x + boundsB.max.x) / 2, y: (boundsB.min.y + boundsB.max.y) / 2 };\n \n // Vector from obstacle center to player center\n const toPlayer = Matter.Vector.sub(centerA, centerB);\n \n // Determine if we should slide horizontally or vertically\n if (Math.abs(intendedMovement.x) > Math.abs(intendedMovement.y)) {\n // Primarily horizontal movement - slide vertically\n bestSlidingDirection.y = toPlayer.y > 0 ? Math.abs(intendedMovement.x) : -Math.abs(intendedMovement.x);\n bestSlidingDirection.x = 0;\n } else {\n // Primarily vertical movement - slide horizontally \n bestSlidingDirection.x = toPlayer.x > 0 ? Math.abs(intendedMovement.y) : -Math.abs(intendedMovement.y);\n bestSlidingDirection.y = 0;\n }\n \n // Normalize the sliding direction\n const magnitude = Math.sqrt(bestSlidingDirection.x * bestSlidingDirection.x + bestSlidingDirection.y * bestSlidingDirection.y);\n if (magnitude > 0) {\n bestSlidingDirection.x /= magnitude;\n bestSlidingDirection.y /= magnitude;\n \n // Scale by intended movement magnitude\n const intendedMagnitude = Math.sqrt(intendedMovement.x * intendedMovement.x + intendedMovement.y * intendedMovement.y);\n bestSlidingDirection.x *= intendedMagnitude;\n bestSlidingDirection.y *= intendedMagnitude;\n }\n }\n \n return {\n isPartial,\n overlapRatio,\n bestSlidingDirection\n };\n }\n\n private resolveMovableCollisions(): void {\n const processedPairs = new Set<string>();\n \n // First, check for actual overlaps between all movable bodies to maintain collision state\n const movableHitboxes = Array.from(this.hitboxes.values()).filter(h => h.type === 'movable');\n \n for (let i = 0; i < movableHitboxes.length; i++) {\n for (let j = i + 1; j < movableHitboxes.length; j++) {\n const hitboxA = movableHitboxes[i];\n const hitboxB = movableHitboxes[j];\n \n const bodyA = hitboxA.body;\n const bodyB = hitboxB.body;\n \n // Check if bodies are actually overlapping\n const isOverlapping = this.areBodiesTouching(bodyA, bodyB);\n const wasColliding = this.areColliding(hitboxA.id, hitboxB.id);\n\n if (isOverlapping && !wasColliding) {\n // New collision detected - record it and trigger enter events\n this.recordCollision(hitboxA.id, hitboxB.id);\n this.recordCollision(hitboxB.id, hitboxA.id);\n // Trigger collision enter events\n const eventsA = this.collisionEvents.get(hitboxA.id);\n const eventsB = this.collisionEvents.get(hitboxB.id);\n \n if (eventsA?.onCollisionEnter) {\n eventsA.onCollisionEnter([hitboxB.id]);\n }\n \n if (eventsB?.onCollisionEnter) {\n eventsB.onCollisionEnter([hitboxA.id]);\n }\n\n } else if (!isOverlapping && wasColliding) {\n\n // Check if bodies are still touching with a tolerance. real collision \n const isOverlapping = this.areBodiesTouching(bodyA, bodyB, 10);\n if (isOverlapping) continue\n\n // Collision ended - remove it and trigger exit events\n this.removeCollision(hitboxA.id, hitboxB.id);\n this.removeCollision(hitboxB.id, hitboxA.id);\n\n // Trigger collision exit events\n const eventsA = this.collisionEvents.get(hitboxA.id);\n const eventsB = this.collisionEvents.get(hitboxB.id);\n \n if (eventsA?.onCollisionExit) {\n eventsA.onCollisionExit([hitboxB.id]);\n }\n \n if (eventsB?.onCollisionExit) {\n eventsB.onCollisionExit([hitboxA.id]);\n }\n }\n }\n }\n \n // Now resolve collisions between movable entities\n for (const [id, collisions] of this.collisions.entries()) {\n const hitbox = this.hitboxes.get(id);\n if (!hitbox || hitbox.type !== 'movable') continue;\n\n for (const otherId of collisions) {\n const otherHitbox = this.hitboxes.get(otherId);\n if (!otherHitbox || otherHitbox.type !== 'movable') continue;\n \n // Create a unique pair identifier to avoid processing the same collision twice\n const pairId = id < otherId ? `${id}-${otherId}` : `${otherId}-${id}`;\n if (processedPairs.has(pairId)) continue;\n processedPairs.add(pairId);\n \n // Both are movable entities\n const body = hitbox.body;\n const otherBody = otherHitbox.body;\n \n // Get the intended movement for this frame\n const intendedMovement = this.intendedMovements.get(id);\n const otherIntendedMovement = this.intendedMovements.get(otherId);\n \n // Only revert movement if the body is moving towards the other\n const shouldRevertA = intendedMovement && this.isMovingTowards(body, otherBody, intendedMovement);\n const shouldRevertB = otherIntendedMovement && this.isMovingTowards(otherBody, body, otherIntendedMovement);\n\n // If this hitbox was moving towards the other, revert its movement\n if (shouldRevertA) {\n Matter.Body.translate(body, { x: -intendedMovement.x, y: -intendedMovement.y });\n Matter.Body.setVelocity(body, { x: 0, y: 0 });\n }\n \n // If the other hitbox was moving towards this one, revert its movement\n if (shouldRevertB) {\n Matter.Body.translate(otherBody, { x: -otherIntendedMovement.x, y: -otherIntendedMovement.y });\n Matter.Body.setVelocity(otherBody, { x: 0, y: 0 });\n }\n }\n }\n }\n\n /**\n * Check if two bodies are actually touching/overlapping\n */\n private areBodiesTouching(bodyA: Matter.Body, bodyB: Matter.Body, tolerance: number = 0): boolean {\n const boundsA = bodyA.bounds;\n const boundsB = bodyB.bounds;\n\n return !(boundsA.max.x < boundsB.min.x - tolerance || \n boundsA.min.x > boundsB.max.x + tolerance || \n boundsA.max.y < boundsB.min.y - tolerance || \n boundsA.min.y > boundsB.max.y + tolerance);\n }\n\n\n /**\n * Check if a body is moving towards another body\n */\n private isMovingTowards(bodyA: Matter.Body, bodyB: Matter.Body, movement: Matter.Vector): boolean {\n const directionToB = {\n x: bodyB.position.x - bodyA.position.x,\n y: bodyB.position.y - bodyA.position.y\n };\n \n // Dot product to check if movement is in the same direction as the vector to the other body\n const dotProduct = movement.x * directionToB.x + movement.y * directionToB.y;\n return dotProduct > 0;\n }\n}","import * as Matter from 'matter-js';\nimport { MovementStrategy } from './MovementStrategy';\nimport { RpgCommonPhysic } from '../Physic';\n\n/**\n * Manager for entity movement strategies\n * \n * Handles the execution and lifecycle of all movement strategies\n * for entities in the game world.\n * \n * @example\n * ```ts\n * // In game loop\n * const movementManager = new MovementManager();\n * \n * // Add dash movement to player\n * movementManager.add('player1', new Dash(200, { x: 1, y: 0 }, 300));\n * \n * // Update in game loop\n * function gameLoop(dt) {\n * movementManager.update(dt, physic);\n * physic.update(dt);\n * }\n * ```\n */\nexport class MovementManager {\n /** Map of entity IDs to their active movement strategies */\n private strategies: Map<string, MovementStrategy[]> = new Map();\n\n /**\n * Add a movement strategy to an entity\n * \n * @param id - Entity ID\n * @param strategy - Movement strategy to apply\n */\n add(id: string, strategy: MovementStrategy): void {\n if (!this.strategies.has(id)) {\n this.strategies.set(id, []);\n }\n \n this.strategies.get(id)!.push(strategy);\n }\n\n /**\n * Remove a specific movement strategy from an entity\n * \n * @param id - Entity ID\n * @param strategy - The strategy instance to remove\n * @returns True if the strategy was found and removed\n */\n remove(id: string, strategy: MovementStrategy): boolean {\n const entityStrategies = this.strategies.get(id);\n if (!entityStrategies) return false;\n \n const index = entityStrategies.indexOf(strategy);\n if (index === -1) return false;\n \n entityStrategies.splice(index, 1);\n return true;\n }\n\n /**\n * Remove all movement strategies from an entity\n * \n * @param id - Entity ID\n */\n clear(id: string): void {\n this.strategies.delete(id);\n }\n\n /**\n * Check if an entity has any active movement strategies\n * \n * @param id - Entity ID\n * @returns True if entity has active strategies\n * \n * @example\n * ```ts\n * // Check if player has active movements\n * if (movementManager.hasActiveStrategies('player1')) {\n * // Don't accept input while movements are active\n * }\n * ```\n */\n hasActiveStrategies(id: string): boolean {\n const entityStrategies = this.strategies.get(id);\n return Boolean(entityStrategies && entityStrategies.length > 0);\n }\n\n /**\n * Get all active movement strategies for an entity\n * \n * @param id - Entity ID\n * @returns Array of active strategies or empty array if none\n * \n * @example\n * ```ts\n * // Get all player movements\n * const movements = movementManager.getStrategies('player1');\n * ```\n */\n getStrategies(id: string): MovementStrategy[] {\n return this.strategies.get(id) || [];\n }\n\n /**\n * Update all movement strategies\n * Must be called BEFORE physics.update()\n * \n * @param dt - Time delta in milliseconds\n * @param physic - Physics system to get bodies from\n */\n update(dt: number, physic: RpgCommonPhysic): void {\n for (const [id, strategies] of this.strategies.entries()) {\n // Skip if no strategies\n if (strategies.length === 0) {\n this.strategies.delete(id);\n continue;\n }\n \n // Get the body for this entity\n const body = physic.getBody(id);\n if (!body) continue;\n \n // Update each strategy and remove finished ones\n for (let i = strategies.length - 1; i >= 0; i--) {\n const strategy = strategies[i];\n \n // Apply the movement logic\n strategy.update(body, dt);\n \n // Check if movement is finished\n if (strategy.isFinished?.()) {\n strategies.splice(i, 1);\n \n // Trigger onFinished callback if present\n strategy.onFinished?.();\n }\n }\n }\n }\n} ","import * as Matter from 'matter-js';\nimport { MovementStrategy } from '../MovementStrategy';\n\n/**\n * Applies constant velocity movement in a specified direction\n * \n * Used for simple linear movement at a constant speed\n * \n * @example\n * ```ts\n * // Move entity right at 5 pixels per frame\n * movementManager.add('entity1', new LinearMove(5, 0));\n * \n * // Move diagonally\n * movementManager.add('entity1', new LinearMove(3, 3));\n * ```\n */\nexport class LinearMove implements MovementStrategy {\n /**\n * Create a linear movement\n * \n * @param vx - X velocity component\n * @param vy - Y velocity component\n * @param duration - Optional duration in milliseconds (if not set, movement continues indefinitely)\n */\n constructor(\n private vx: number, \n private vy: number, \n private duration?: number\n ) {\n this.elapsed = 0;\n }\n\n private elapsed: number;\n\n /**\n * Apply velocity to the body\n * \n * @param body - Matter.js body to move\n * @param dt - Time delta in milliseconds\n */\n update(body: Matter.Body, dt: number): void {\n if (this.duration !== undefined) {\n this.elapsed += dt;\n }\n \n Matter.Body.setVelocity(body, { x: this.vx, y: this.vy });\n }\n\n /**\n * Check if movement duration has elapsed\n * \n * @returns True if movement should stop\n */\n isFinished(): boolean {\n return this.duration !== undefined && this.elapsed >= this.duration;\n }\n} ","import * as Matter from 'matter-js';\nimport { MovementStrategy } from '../MovementStrategy';\n\n/**\n * Implements a dash movement in a specified direction for a limited time\n * \n * Dash applies high velocity movement in a direction for a short duration\n * \n * @example\n * ```ts\n * // Dash right for 200ms at speed 10\n * movementManager.add('player1', new Dash(10, { x: 1, y: 0 }, 200));\n * \n * // Dash diagonally (normalized)\n * movementManager.add('player1', new Dash(8, { x: 0.7071, y: 0.7071 }, 150));\n * ```\n */\nexport class Dash implements MovementStrategy {\n private elapsed: number = 0;\n private finished: boolean = false;\n \n /**\n * Create a dash movement\n * \n * @param speed - Movement speed (pixels per frame)\n * @param direction - Normalized direction vector { x, y }\n * @param duration - Duration in milliseconds\n */\n constructor(\n private speed: number,\n private direction: { x: number, y: number },\n private duration: number\n ) {\n // Normalize direction vector if not already normalized\n const magnitude = Math.sqrt(direction.x * direction.x + direction.y * direction.y);\n if (magnitude !== 0 && magnitude !== 1) {\n this.direction = {\n x: direction.x / magnitude,\n y: direction.y / magnitude\n };\n }\n }\n \n /**\n * Apply dash movement to the body\n * \n * @param body - Matter.js body to move\n * @param dt - Time delta in milliseconds\n */\n update(body: Matter.Body, dt: number): void {\n this.elapsed += dt;\n \n if (this.elapsed <= this.duration) {\n // Apply dash velocity\n Matter.Body.setVelocity(body, {\n x: this.direction.x * this.speed,\n y: this.direction.y * this.speed\n });\n } else {\n // Stop the body when dash is complete\n Matter.Body.setVelocity(body, { x: 0, y: 0 });\n this.finished = true;\n }\n }\n \n /**\n * Check if dash duration has elapsed\n * \n * @returns True if dash is complete\n */\n isFinished(): boolean {\n return this.finished;\n }\n \n /**\n * Optional callback for when dash completes\n * Can be used to chain into another movement\n */\n onFinished(): void {\n // Optional event hook for dash completion\n }\n} ","import * as Matter from 'matter-js';\nimport { MovementStrategy } from '../MovementStrategy';\n\n/**\n * Implements a knockback effect with decreasing force over time\n * \n * Applies an initial velocity that gradually decreases to simulate\n * being pushed back by an impact\n * \n * @example\n * ```ts\n * // Knockback player to the left with force 8 for 300ms\n * movementManager.add('player1', new Knockback({ x: -1, y: 0 }, 8, 300));\n * \n * // Knockback with decay (resistance)\n * movementManager.add('enemy1', new Knockback({ x: 0, y: 1 }, 5, 200, 0.9));\n * ```\n */\nexport class Knockback implements MovementStrategy {\n private elapsed: number = 0;\n private currentSpeed: number;\n \n /**\n * Create a knockback movement\n * \n * @param direction - Normalized direction vector { x, y }\n * @param force - Initial force of the knockback\n * @param duration - Duration in milliseconds\n * @param decayFactor - Speed decay multiplier per frame (0.8-0.95 typical)\n */\n constructor(\n private direction: { x: number, y: number },\n private force: number,\n private duration: number,\n private decayFactor: number = 0.9\n ) {\n this.currentSpeed = force;\n \n // Normalize direction vector\n const magnitude = Math.sqrt(direction.x * direction.x + direction.y * direction.y);\n if (magnitude !== 0 && magnitude !== 1) {\n this.direction = {\n x: direction.x / magnitude,\n y: direction.y / magnitude\n };\n }\n }\n \n /**\n * Apply knockback movement with decreasing force\n * \n * @param body - Matter.js body to move\n * @param dt - Time delta in milliseconds\n */\n update(body: Matter.Body, dt: number): void {\n this.elapsed += dt;\n \n if (this.elapsed <= this.duration) {\n // Apply decreasing velocity\n Matter.Body.setVelocity(body, {\n x: this.direction.x * this.currentSpeed,\n y: this.direction.y * this.currentSpeed\n });\n \n // Decay the speed\n this.currentSpeed *= this.decayFactor;\n } else {\n // Stop movement when knockback is complete\n Matter.Body.setVelocity(body, { x: 0, y: 0 });\n }\n }\n \n /**\n * Check if knockback duration has elapsed\n * \n * @returns True if knockback is complete\n */\n isFinished(): boolean {\n return this.elapsed >= this.duration;\n }\n} ","import * as Matter from 'matter-js';\nimport { MovementStrategy } from '../MovementStrategy';\n\n/**\n * Implements a path following movement that navigates through waypoints\n * \n * The entity will follow a sequence of waypoints at a specified speed,\n * with optional looping behavior.\n * \n * @example\n * ```ts\n * // Create a patrol path for an NPC\n * const waypoints = [\n * { x: 100, y: 100 },\n * { x: 300, y: 100 },\n * { x: 300, y: 300 },\n * { x: 100, y: 300 }\n * ];\n * \n * // Follow path once\n * movementManager.add('npc1', new PathFollow(waypoints, 3));\n * \n * // Loop indefinitely (patrol)\n * movementManager.add('npc1', new PathFollow(waypoints, 3, true));\n * ```\n */\nexport class PathFollow implements MovementStrategy {\n private currentWaypoint: number = 0;\n private finished: boolean = false;\n private direction: { x: number, y: number } = { x: 0, y: 0 };\n private waypointThreshold: number = 5; // Distance threshold to consider waypoint reached\n \n /**\n * Create a path following movement\n * \n * @param waypoints - Array of x,y positions to follow\n * @param speed - Movement speed in pixels per frame\n * @param loop - Whether to loop back to start after reaching final waypoint\n * @param pauseAtWaypoints - Optional time in ms to pause at each waypoint\n */\n constructor(\n private waypoints: Array<{ x: number, y: number }>,\n private speed: number,\n private loop: boolean = false,\n private pauseAtWaypoints: number = 0\n ) {\n if (waypoints.length === 0) {\n this.finished = true;\n }\n }\n \n private pauseTimer: number = 0;\n private isPaused: boolean = false;\n \n /**\n * Update path following logic\n * \n * @param body - Matter.js body to move\n * @param dt - Time delta in milliseconds\n */\n update(body: Matter.Body, dt: number): void {\n if (this.finished || this.waypoints.length === 0) {\n Matter.Body.setVelocity(body, { x: 0, y: 0 });\n return;\n }\n \n // Handle pausing at waypoints\n if (this.isPaused) {\n Matter.Body.setVelocity(body, { x: 0, y: 0 });\n this.pauseTimer += dt;\n \n if (this.pauseTimer >= this.pauseAtWaypoints) {\n this.isPaused = false;\n this.pauseTimer = 0;\n }\n return;\n }\n \n const currentTarget = this.waypoints[this.currentWaypoint];\n const distanceX = currentTarget.x - body.position.x;\n const distanceY = currentTarget.y - body.position.y;\n const distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY);\n \n // Check if waypoint is reached\n if (distance <= this.waypointThreshold) {\n // Go to next waypoint\n this.currentWaypoint++;\n \n // Check if we've finished the path\n if (this.currentWaypoint >= this.waypoints.length) {\n if (this.loop) {\n // Loop back to beginning\n this.currentWaypoint = 0;\n } else {\n // End path following\n this.finished = true;\n Matter.Body.setVelocity(body, { x: 0, y: 0 });\n return;\n }\n }\n \n // Pause at waypoint if specified\n if (this.pauseAtWaypoints > 0) {\n this.isPaused = true;\n this.pauseTimer = 0;\n return;\n }\n }\n \n // Calculate movement direction toward current waypoint\n if (distance > 0) {\n this.direction = {\n x: distanceX / distance,\n y: distanceY / distance\n };\n }\n \n // Apply velocity toward current waypoint\n Matter.Body.setVelocity(body, {\n x: this.direction.x * this.speed,\n y: this.direction.y * this.speed\n });\n }\n \n /**\n * Check if path has been fully traversed\n * \n * @returns True if path following is complete\n */\n isFinished(): boolean {\n return this.finished;\n }\n \n /**\n * Get current waypoint index\n * \n * @returns The index of the current target waypoint\n */\n getCurrentWaypoint(): number {\n return this.currentWaypoint;\n }\n \n /**\n * Set a new path of waypoints\n * \n * @param waypoints - New waypoints to follow\n * @param resetProgress - Whether to start from the first waypoint\n */\n setWaypoints(waypoints: Array<{ x: number, y: number }>, resetProgress: boolean = true): void {\n this.waypoints = waypoints;\n if (resetProgress) {\n this.currentWaypoint = 0;\n }\n this.finished = waypoints.length === 0;\n }\n} ","import * as Matter from 'matter-js';\nimport { MovementStrategy } from '../MovementStrategy';\n\n/**\n * Implements an oscillating movement pattern\n * \n * Entity moves back and forth along a single axis or in a pattern\n * like sine wave, useful for patrols or ambient movements\n * \n * @example\n * ```ts\n * // Horizontal oscillation with amplitude 100 and period 3000ms\n * movementManager.add('entity1', new Oscillate({ x: 1, y: 0 }, 100, 3000));\n * \n * // Vertical oscillation\n * movementManager.add('entity1', new Oscillate({ x: 0, y: 1 }, 50, 2000));\n * \n * // Circular oscillation\n * movementManager.add('entity1', new Oscillate({ x: 1, y: 0 }, 100, 4000, 'circular'));\n * ```\n */\nexport class Oscillate implements MovementStrategy {\n private elapsed: number = 0;\n private startPosition: { x: number, y: number } = { x: 0, y: 0 };\n private positionSet: boolean = false;\n \n /**\n * Create an oscillating movement\n * \n * @param direction - Primary axis of oscillation (normalized)\n * @param amplitude - Maximum distance from center position\n * @param period - Time in ms for a complete cycle\n * @param type - Oscillation pattern type ('linear', 'sine', 'circular')\n * @param duration - Optional total duration in ms (undefined for infinite)\n */\n constructor(\n private direction: { x: number, y: number },\n private amplitude: number,\n private period: number,\n private type: 'linear' | 'sine' | 'circular' = 'sine',\n private duration?: number\n ) {\n // Normalize direction vector\n const magnitude = Math.sqrt(direction.x * direction.x + direction.y * direction.y);\n if (magnitude !== 0 && magnitude !== 1) {\n this.direction = {\n x: direction.x / magnitude,\n y: direction.y / magnitude\n };\n }\n }\n \n /**\n * Apply oscillating movement\n * \n * @param body - Matter.js body to move\n * @param dt - Time delta in milliseconds\n */\n update(body: Matter.Body, dt: number): void {\n // Record start position on first update\n if (!this.positionSet) {\n this.startPosition = { ...body.position };\n this.positionSet = true;\n }\n \n this.elapsed += dt;\n \n // Calculate oscillation factor (0 to 1 to 0)\n let factor: number;\n let perpFactor: number = 0;\n \n // Calculate progress through cycle (0 to 1)\n const cycleProgress = (this.elapsed % this.period) / this.period;\n \n switch (this.type) {\n case 'linear':\n // Triangle wave (0->1->0)\n factor = cycleProgress < 0.5 \n ? cycleProgress * 2 \n : (1 - cycleProgress) * 2;\n break;\n \n case 'sine':\n // Sine wave\n factor = Math.sin(cycleProgress * Math.PI * 2) * 0.5 + 0.5;\n break;\n \n case 'circular':\n // Circular motion\n factor = Math.sin(cycleProgress * Math.PI * 2);\n perpFactor = Math.cos(cycleProgress * Math.PI * 2);\n break;\n \n default:\n factor = Math.sin(cycleProgress * Math.PI * 2) * 0.5 + 0.5;\n }\n \n // Calculate new position\n let newX, newY;\n \n if (this.type === 'circular') {\n // For circular, we need both sine and cosine components\n const perpDirection = { x: -this.direction.y, y: this.direction.x };\n \n newX = this.startPosition.x + \n (this.direction.x * factor * this.amplitude) + \n (perpDirection.x * perpFactor * this.amplitude);\n \n newY = this.startPosition.y + \n (this.direction.y * factor * this.amplitude) + \n (perpDirection.y * perpFactor * this.amplitude);\n } else {\n // Map factor from 0-1 to -1 to 1 range for linear and sine\n const mappedFactor = factor * 2 - 1;\n \n newX = this.startPosition.x + (this.direction.x * mappedFactor * this.amplitude);\n newY = this.startPosition.y + (this.direction.y * mappedFactor * this.amplitude);\n }\n \n // Calculate velocity based on position difference\n const vx = (newX - body.position.x) / (dt / 1000);\n const vy = (newY - body.position.y) / (dt / 1000);\n \n // Apply velocity\n Matter.Body.setVelocity(body, { x: vx, y: vy });\n }\n \n /**\n * Check if oscillation duration has elapsed\n * \n * @returns True if movement is finished\n */\n isFinished(): boolean {\n return this.duration !== undefined && this.elapsed >= this.duration;\n }\n \n /**\n * Reset the oscillation to start from the current position\n */\n reset(): void {\n this.elapsed = 0;\n this.positionSet = false;\n }\n} ","import * as Matter from 'matter-js';\nimport { MovementStrategy } from '../MovementStrategy';\n\n/**\n * Combines multiple movement strategies into a single movement\n * \n * Allows composition of movement patterns by either:\n * - Running multiple strategies in parallel (adding their effects)\n * - Running strategies in sequence (one after another)\n * \n * @example\n * ```ts\n * // Parallel movement (oscillate while following a path)\n * const composite = new CompositeMovement('parallel', [\n * new PathFollow(waypoints, 2),\n * new Oscillate({ x: 0, y: 1 }, 10, 1000)\n * ]);\n * \n * // Sequential movement (dash, then knockback)\n * const sequence = new CompositeMovement('sequence', [\n * new Dash(8, { x: 1, y: 0 }, 200),\n * new Knockback({ x: -0.5, y: 0 }, 3, 300)\n * ]);\n * \n * movementManager.add('entity1', composite);\n * ```\n */\nexport class CompositeMovement implements MovementStrategy {\n private currentStrategyIndex: number = 0;\n \n /**\n * Create a composite movement\n * \n * @param mode - How to combine strategies ('parallel' or 'sequence')\n * @param strategies - Array of movement strategies to combine\n */\n constructor(\n private mode: 'parallel' | 'sequence',\n private strategies: MovementStrategy[]\n ) {}\n \n /**\n * Apply the composite movement\n * \n * @param body - Matter.js body to move\n * @param dt - Time delta in milliseconds\n */\n update(body: Matter.Body, dt: number): void {\n if (this.strategies.length === 0) return;\n \n if (this.mode === 'parallel') {\n // Update all strategies simultaneously\n // Their effects will be combined by the physics engine\n this.updateParallel(body, dt);\n } else {\n // Update strategies in sequence\n this.updateSequence(body, dt);\n }\n }\n \n /**\n * Update all strategies in parallel\n */\n private updateParallel(body: Matter.Body, dt: number): void {\n // Make a copy of the array since we might remove elements during iteration\n const currentStrategies = [...this.strategies];\n \n // Track original velocity to combine movement effects\n const originalVelocity = { x: body.velocity.x, y: body.velocity.y };\n let velocitiesApplied = 0;\n \n // Apply each strategy\n for (let i = currentStrategies.length - 1; i >= 0; i--) {\n const strategy = currentStrategies[i];\n \n // Store velocity before strategy update\n const beforeVx = body.velocity.x;\n const beforeVy = body.velocity.y;\n \n // Apply the strategy\n strategy.update(body, dt);\n \n // Track if velocity was changed\n if (beforeVx !== body.velocity.x || beforeVy !== body.velocity.y) {\n velocitiesApplied++;\n }\n \n // Remove finished strategies\n if (strategy.isFinished?.()) {\n this.strategies.splice(this.strategies.indexOf(strategy), 1);\n strategy.onFinished?.();\n }\n }\n \n // If multiple strategies applied velocities, calculate the average\n if (velocitiesApplied > 1) {\n Matter.Body.setVelocity(body, {\n x: (body.velocity.x + originalVelocity.x) / 2,\n y: (body.velocity.y + originalVelocity.y) / 2\n });\n }\n }\n \n /**\n * Update strategies in sequence\n */\n private updateSequence(body: Matter.Body, dt: number): void {\n if (this.currentStrategyIndex >= this.strategies.length) {\n return;\n }\n \n const currentStrategy = this.strategies[this.currentStrategyIndex];\n \n // Apply the current strategy\n currentStrategy.update(body, dt);\n \n // Check if current strategy is finished\n if (currentStrategy.isFinished?.()) {\n // Trigger completion callback\n currentStrategy.onFinished?.();\n \n // Move to next strategy\n this.currentStrategyIndex++;\n }\n }\n \n /**\n * Check if all strategies have finished\n * \n * @returns True if all strategies are completed\n */\n isFinished(): boolean {\n if (this.strategies.length === 0) return true;\n \n if (this.mode === 'parallel') {\n // In parallel mode, we're finished when all strategies are finished\n return this.strategies.length === 0;\n } else {\n // In sequence mode, we're finished when we've gone through all strategies\n return this.currentStrategyIndex >= this.strategies.length;\n }\n }\n \n /**\n * Add a new strategy to the composite\n * \n * @param strategy - Movement strategy to add\n */\n add(strategy: MovementStrategy): void {\n this.strategies.push(strategy);\n }\n \n /**\n * Remove a strategy from the composite\n * \n * @param strategy - Movement strategy to remove\n * @returns True if the strategy was found and removed\n */\n remove(strategy: MovementStrategy): boolean {\n const index = this.strategies.indexOf(strategy);\n if (index === -1) return false;\n \n this.strategies.splice(index, 1);\n return true;\n }\n \n /**\n * Reset the composite to start from the beginning\n */\n reset(): void {\n this.currentStrategyIndex = 0;\n }\n} ","import * as Matter from 'matter-js';\nimport { RpgCommonPhysic } from '../../Physic';\nimport { MovementStrategy } from '../MovementStrategy';\n\n/* Buffers réutilisés */\nconst vTmp1 = Matter.Vector.create();\nconst vTmp2 = Matter.Vector.create();\n\nexport class SeekAvoid implements MovementStrategy {\n private repulseRadius2: number;\n private arriveRadius2: number;\n\n /** (4 px)² : plancher pour éviter les divisions par 0 */\n private readonly EPS2 = 16;\n\n /**\n * @param phys Monde physique\n * @param target Fonction → position à suivre\n * @param maxSpeed Vitesse max (px / ms)\n * @param repulseRadius Rayon de répulsion\n * @param repulseWeight Intensité de la répulsion\n * @param arriveRadius Rayon dans lequel on “arrive” (≃ taille hitbox)\n * @param getTargetBody (optionnel) fonction → body de la cible pour l’ignorer\n */\n constructor(\n private phys: RpgCommonPhysic,\n private targetBody?: Matter.Body,\n private maxSpeed = 2.5,\n private repulseRadius = 32,\n private repulseWeight = 4,\n private arriveRadius = 16,\n // ← nouveauté\n ) {\n this.repulseRadius2 = repulseRadius * repulseRadius;\n this.arriveRadius2 = arriveRadius * arriveRadius;\n }\n\n /* ------------------------------------------------------------------ */\n update(body: Matter.Body, dt: number): void {\n /* ---- 1) Attraction vers la cible ---- */\n const targetPos = this.targetBody.position;\n Matter.Vector.sub(targetPos, body.position, vTmp1); // vTmp1 = target - pos\n const dist2 = Matter.Vector.magnitudeSquared(vTmp1);\n\n let arrived = false\n\n if (this.targetBody) {\n arrived = Matter.Bounds.overlaps(body.bounds, this.targetBody.bounds);\n } \n\n if (arrived) { // à l’intérieur du cercle d’arrivée\n vTmp1.x = 0; vTmp1.y = 0; // → plus de “pull”\n } else {\n const invLen = 1 / Math.sqrt(dist2); // normalisation\n vTmp1.x *= invLen;\n vTmp1.y *= invLen;\n }\n\n /* ---- 2) Répulsion des obstacles ---- */\n const area = {\n min: { x: body.position.x - this.repulseRadius,\n y: body.position.y - this.repulseRadius },\n max: { x: body.position.x + this.repulseRadius,\n y: body.position.y + this.repulseRadius }\n };\n const nearby = Matter.Query.region(this.phys.getWorld().bodies, area);\n\n const targetBody = this.targetBody\n\n let pushX = 0, pushY = 0;\n if (!arrived) { // on désactive l’évitement si arrivé\n for (const b of nearby) {\n if (b === body || b === targetBody || b.isSensor) continue;\n\n Matter.Vector.sub(body.position, b.position, vTmp2); // vTmp2 = pos - obstacle\n let d2 = Matter.Vector.magnitudeSquared(vTmp2);\n if (d2 > this.repulseRadius2) continue;\n\n if (d2 < this.EPS2) d2 = this.EPS2;\n const w = this.repulseWeight / d2;\n pushX += vTmp2.x * w;\n pushY += vTmp2.y * w;\n }\n }\n\n /* ---- 3) Limite la poussée ---- */\n const pushLen = Math.hypot(pushX, pushY);\n const maxPush = this.maxSpeed * 4;\n if (pushLen > maxPush) {\n const k = maxPush / pushLen;\n pushX *= k; pushY *= k;\n }\n\n /* ---- 4) Vitesse désirée ---- */\n let vx = vTmp1.x * this.maxSpeed + pushX;\n let vy = vTmp1.y * this.maxSpeed + pushY;\n const vLen = Math.hypot(vx, vy);\n if (vLen > this.maxSpeed) {\n const k = this.maxSpeed / vLen;\n vx *= k; vy *= k;\n }\n\n if (!Number.isFinite(vx) || !Number.isFinite(vy)) {\n console.warn('[SeekAvoid] vitesse invalide – reset', { vx, vy });\n vx = 0; vy = 0;\n }\n\n Matter.Body.setVelocity(body, { x: vx, y: vy });\n }\n\n setParameters(max?: number, repR?: number, repW?: number, arrR?: number) {\n if (max !== undefined) this.maxSpeed = max;\n if (repR !== undefined) {\n this.repulseRadius = repR;\n this.repulseRadius2 = repR * repR;\n }\n if (repW !== undefined) this.repulseWeight = repW;\n if (arrR !== undefined) {\n this.arriveRadius = arrR;\n this.arriveRadius2 = arrR * arrR;\n }\n }\n}\n","import * as Matter from 'matter-js';\nimport { RpgCommonPhysic } from '../../Physic';\nimport { MovementStrategy } from '../MovementStrategy';\n\n/** Utilitaires Vec2 pour éviter des new() à chaque frame */\nconst vTmp1 = Matter.Vector.create();\nconst vTmp2 = Matter.Vector.create();\n\n/**\n * Implements a seek behavior with linear obstacle avoidance\n * \n * Similar to SeekAvoid but uses a linear repulsion model instead of inverse square.\n * This creates a smoother avoidance field with gradual transitions.\n * \n * @example\n * ```ts\n * // Make enemy follow player with smooth avoidance\n * const playerPosition = () => Matter.Vector.create(player.x(), player.y());\n * movementManager.add('enemy1', new LinearRepulsion(physics, playerPosition, 3, 50, 5));\n * ```\n */\nexport class LinearRepulsion implements MovementStrategy {\n private repulseRadius2: number;\n \n /**\n * Create a seeking movement with linear obstacle avoidance\n * \n * @param phys - Physics system to query for nearby obstacles\n * @param target - Function returning the current target position\n * @param maxSpeed - Maximum movement speed\n * @param repulseRadius - Radius around entity to check for obstacles\n * @param repulseWeight - Strength of repulsion from obstacles\n */\n constructor(\n private phys: RpgCommonPhysic,\n private target: () => Matter.Vector,\n private maxSpeed = 2.5,\n private repulseRadius = 32,\n private repulseWeight = 4\n ) {\n this.repulseRadius2 = this.repulseRadius * this.repulseRadius;\n }\n\n /**\n * Update seek and avoid behavior with linear repulsion\n * \n * @param body - Matter.js body to move\n * @param dt - Time delta in milliseconds\n */\n update(body: Matter.Body, dt: number): void {\n // 1) Attraction (pull) vers la cible actuelle\n Matter.Vector.sub(this.target(), body.position, vTmp1);\n const distance = Matter.Vector.magnitude(vTmp1);\n if (distance > 0.0001) Matter.Vector.mult(vTmp1, 1 / distance, vTmp1);\n\n // 2) Répulsion linéaire - force plus douce qui diminue graduellement\n const area = {\n min: { x: body.position.x - this.repulseRadius,\n y: body.position.y - this.repulseRadius },\n max: { x: body.position.x + this.repulseRadius,\n y: body.position.y + this.repulseRadius }\n };\n const nearby = Matter.Query.region(this.phys.getWorld().bodies, area);\n\n let pushX = 0, pushY = 0;\n for (const b of nearby) {\n if (b === body || b.isSensor) continue;\n \n Matter.Vector.sub(body.position, b.position, vTmp2);\n const d2 = Matter.Vector.magnitudeSquared(vTmp2);\n \n if (d2 > this.repulseRadius2) continue; // trop loin, pas de répulsion\n \n // Répulsion linéaire: force maximale au centre, nulle au bord\n const d = Math.sqrt(d2);\n const w = this.repulseWeight * (this.repulseRadius - d) / this.repulseRadius;\n \n // Normalisation du vecteur de répulsion\n if (d > 0.0001) {\n pushX += vTmp2.x * w / d;\n pushY += vTmp2.y * w / d;\n }\n }\n\n // Limiter la norme du push cumulé\n const MAX_PUSH_LEN = this.maxSpeed * 3;\n let pushLen = Math.hypot(pushX, pushY);\n if (pushLen > MAX_PUSH_LEN) {\n pushX = pushX * MAX_PUSH_LEN / pushLen;\n pushY = pushY * MAX_PUSH_LEN / pushLen;\n }\n\n // 3) Vitesse désirée = pull + push, puis clamp à maxSpeed\n const desired = Matter.Vector.create(\n vTmp1.x * this.maxSpeed + pushX,\n vTmp1.y * this.maxSpeed + pushY\n );\n const len = Matter.Vector.magnitude(desired);\n if (len > this.maxSpeed) Matter.Vector.mult(desired, this.maxSpeed / len, desired);\n \n Matter.Body.setVelocity(body, desired);\n }\n \n /**\n * Update the target to follow\n * \n * @param newTarget - Function returning the new target position\n */\n setTarget(newTarget: () => Matter.Vector): void {\n this.target = newTarget;\n }\n \n /**\n * Update movement parameters\n * \n * @param maxSpeed - New maximum speed\n * @param repulseRadius - New repulsion radius\n * @param repulseWeight - New repulsion weight\n */\n setParameters(maxSpeed?: number, repulseRadius?: number, repulseWeight?: number): void {\n if (maxSpeed !== undefined) this.maxSpeed = maxSpeed;\n if (repulseRadius !== undefined) {\n this.repulseRadius = repulseRadius;\n this.repulseRadius2 = this.repulseRadius * this.repulseRadius;\n }\n if (repulseWeight !== undefined) this.repulseWeight = repulseWeight;\n }\n} ","import * as Matter from 'matter-js';\nimport { MovementStrategy } from '../MovementStrategy';\n\n/**\n * Implements a slippery movement for icy surfaces\n * \n * Creates a realistic ice-physics effect with:\n * - Slow acceleration when starting to move\n * - Slippery inertia when stopping\n * - Gradual turning with momentum\n * \n * @example\n * ```ts\n * // Apply ice movement to player on ice terrain\n * movementManager.add('player1', new IceMovement({ x: 1, y: 0 }, 5));\n * \n * // Update direction when player changes direction\n * iceMovement.setTargetDirection({ x: 0, y: 1 });\n * ```\n */\nexport class IceMovement implements MovementStrategy {\n // Current velocity components\n private currentVx: number = 0;\n private currentVy: number = 0;\n \n // Flags\n private stopped: boolean = false;\n private elapsed: number = 0;\n \n /**\n * Create an ice movement behavior\n * \n * @param targetDirection - Desired movement direction (normalized vector)\n * @param maxSpeed - Maximum speed when fully accelerated\n * @param acceleration - Acceleration rate (0-1, lower = more slippery start)\n * @param friction - Friction rate (0-1, lower = more slippery stop)\n * @param duration - Optional duration limit for the movement\n */\n constructor(\n private targetDirection: { x: number, y: number },\n private maxSpeed: number = 4,\n private acceleration: number = 0.15,\n private friction: number = 0.05,\n private duration?: number\n ) {\n // Normalize direction\n this.normalizeDirection();\n }\n \n /**\n * Update the ice movement physics\n * \n * @param body - Matter.js body to move\n * @param dt - Time delta in milliseconds\n */\n update(body: Matter.Body, dt: number): void {\n // Update elapsed time if duration is set\n if (this.duration !== undefined) {\n this.elapsed += dt;\n if (this.elapsed >= this.duration) {\n this.stopped = true;\n }\n }\n \n // Handle acceleration and friction physics\n if (!this.stopped) {\n // Accelerate gradually toward target speed in target direction\n this.currentVx += (this.targetDirection.x * this.maxSpeed - this.currentVx) * this.acceleration;\n this.currentVy += (this.targetDirection.y * this.maxSpeed - this.currentVy) * this.acceleration;\n } else {\n // Apply friction to gradually slow down\n this.currentVx *= (1 - this.friction);\n this.currentVy *= (1 - this.friction);\n }\n \n // Apply the calculated velocity\n Matter.Body.setVelocity(body, {\n x: this.currentVx,\n y: this.currentVy\n });\n }\n \n /**\n * Check if movement is finished\n * (movement is considered finished when almost stopped)\n * \n * @returns True if movement is effectively stopped\n */\n isFinished(): boolean {\n const speed = Math.hypot(this.currentVx, this.currentVy);\n \n // Movement is finished when:\n // 1. We're in stopped state AND \n // 2. Speed is negligible (< 0.05)\n return this.stopped && speed < 0.05;\n }\n \n /**\n * Stop the movement (will start applying friction)\n */\n stop(): void {\n this.stopped = true;\n }\n \n /**\n * Resume movement in the current direction\n */\n resume(): void {\n this.stopped = false;\n }\n \n /**\n * Set a new target direction\n * The actual movement will gradually change toward this direction\n * \n * @param direction - New target direction\n */\n setTargetDirection(direction: { x: number, y: number }): void {\n this.targetDirection = direction;\n this.normalizeDirection();\n \n // If we were stopped, resume movement\n this.stopped = false;\n }\n \n /**\n * Set movement parameters\n * \n * @param maxSpeed - New maximum speed\n * @param acceleration - New acceleration rate\n * @param friction - New friction rate\n */\n setParameters(maxSpeed?: number, acceleration?: number, friction?: number): void {\n if (maxSpeed !== undefined) this.maxSpeed = maxSpeed;\n if (acceleration !== undefined) this.acceleration = acceleration;\n if (friction !== undefined) this.friction = friction;\n }\n \n /**\n * Normalize the direction vector\n */\n private normalizeDirection(): void {\n const magnitude = Math.sqrt(\n this.targetDirection.x * this.targetDirection.x + \n this.targetDirection.y * this.targetDirection.y\n );\n \n if (magnitude > 0) {\n this.targetDirection = {\n x: this.targetDirection.x / magnitude,\n y: this.targetDirection.y / magnitude\n };\n } else {\n // Default to no direction\n this.targetDirection = { x: 0, y: 0 };\n }\n }\n} ","import * as Matter from 'matter-js';\nimport { MovementStrategy } from '../MovementStrategy';\n\n/**\n * Type of projectile trajectory\n */\nexport enum ProjectileType {\n /** Straight line movement (arrows, bullets) */\n Straight = 'straight',\n \n /** Parabolic arc (grenades, bombs) */\n Arc = 'arc',\n \n /** Bouncing projectile (bouncing bombs, coins) */\n Bounce = 'bounce'\n}\n\n/**\n * Lifecycle stage of projectile\n */\nenum ProjectileStage {\n Flying,\n Bouncing,\n Finished\n}\n\n/**\n * Projectile configuration options\n */\nexport interface ProjectileOptions {\n /** Initial velocity in pixels per second */\n speed: number;\n \n /** Direction vector (will be normalized) */\n direction: { x: number, y: number };\n \n /** Maximum range in pixels before projectile disappears */\n maxRange?: number;\n \n /** Maximum lifetime in milliseconds */\n lifetime?: number;\n \n /** Initial height (Z coordinate) */\n initialHeight?: number;\n \n /** Maximum height of arc trajectory */\n maxHeight?: number;\n \n /** Gravity strength (pixels/second²) */\n gravity?: number;\n \n /** Number of bounces allowed (for bouncing projectiles) */\n maxBounces?: number;\n \n /** Energy retained after each bounce (0-1) */\n bounciness?: number;\n \n /** Air resistance/drag (0-1) */\n drag?: number;\n}\n\n/**\n * Implements projectile movement with various trajectory types\n * \n * Supports:\n * - Straight movement (arrows, bullets)\n * - Parabolic arcs (thrown objects, grenades)\n * - Bouncing projectiles (coins, bouncing bombs)\n * \n * The z-coordinate represents height above ground for 3D effects\n * \n * @example\n * ```ts\n * // Create an arrow (straight projectile)\n * const arrow = new ProjectileMovement(ProjectileType.Straight, {\n * speed: 300,\n * direction: { x: 1, y: 0 },\n * maxRange: 500\n * });\n * \n * // Create a thrown bomb (arc projectile)\n * const bomb = new ProjectileMovement(ProjectileType.Arc, {\n * speed: 150,\n * direction: { x: 0.7, y: 0.7 },\n * maxHeight: 100,\n * gravity: 400\n * });\n * \n * // Create bouncing coins (random directions with bounce)\n * function spawnCoin(x, y) {\n * const randomAngle = Math.random() * Math.PI * 2;\n * const coin = new ProjectileMovement(ProjectileType.Bounce, {\n * speed: 80 + Math.random() * 40,\n * direction: { \n * x: Math.cos(randomAngle), \n * y: Math.sin(randomAngle) \n * },\n * initialHeight: 0,\n * maxHeight: 20 + Math.random() * 30,\n * gravity: 500,\n * maxBounces: 2,\n * bounciness: 0.6\n * });\n * \n * // Create coin entity and add to the world\n * // movementManager.add(coinId, coin);\n * }\n * ```\n */\nexport class ProjectileMovement implements MovementStrategy {\n private elapsed: number = 0;\n private distanceTraveled: number = 0;\n private startPosition: Matter.Vector = { x: 0, y: 0 };\n private bounceCount: number = 0;\n private stage: ProjectileStage = ProjectileStage.Flying;\n private finished: boolean = false;\n \n // Trajectory calculation variables\n private currentHeight: number = 0;\n private verticalVelocity: number = 0;\n private normalizedDirection: { x: number, y: number };\n \n // Default options\n private readonly defaultOptions: Partial<ProjectileOptions> = {\n initialHeight: 0,\n maxHeight: 50,\n gravity: 500,\n maxBounces: 0,\n bounciness: 0.6,\n drag: 0.01\n };\n \n /**\n * Create a projectile movement\n * \n * @param type - Type of projectile trajectory\n * @param options - Projectile configuration\n */\n constructor(\n private type: ProjectileType,\n private options: ProjectileOptions\n ) {\n // Apply default options if not specified\n this.options = { ...this.defaultOptions, ...options };\n \n // Normalize direction\n const dirMagnitude = Math.sqrt(\n options.direction.x * options.direction.x + \n options.direction.y * options.direction.y\n );\n \n this.normalizedDirection = dirMagnitude > 0 \n ? { \n x: options.direction.x / dirMagnitude, \n y: options.direction.y / dirMagnitude \n }\n : { x: 1, y: 0 };\n \n // Setup initial height and vertical velocity based on type\n this.currentHeight = options.initialHeight || 0;\n \n if (type === ProjectileType.Arc || type === ProjectileType.Bounce) {\n // Calculate initial vertical velocity based on desired arc height\n const maxHeight = options.maxHeight || 50;\n const gravity = options.gravity || 500;\n \n // Physics: v₀ = √(2gh) where g is gravity and h is desired height\n this.verticalVelocity = Math.sqrt(2 * gravity * maxHeight);\n }\n }\n \n /**\n * Update projectile movement\n * \n * @param body - Matter.js body to move\n * @param dt - Time delta in milliseconds\n */\n update(body: Matter.Body, dt: number): void {\n // On first update, store start position\n if (this.elapsed === 0) {\n this.startPosition = { ...body.position };\n }\n \n // Update elapsed time\n this.elapsed += dt;\n const dtSeconds = dt / 1000; // Convert to seconds for physics calculations\n \n // Check if projectile has reached maximum lifetime\n if (this.options.lifetime !== undefined && this.elapsed >= this.options.lifetime) {\n this.finished = true;\n Matter.Body.setVelocity(body, { x: 0, y: 0 });\n return;\n }\n \n // Handle different trajectory types\n if (this.stage === ProjectileStage.Flying) {\n this.updateFlying(body, dtSeconds);\n } else if (this.stage === ProjectileStage.Bouncing) {\n this.updateBouncing(body, dtSeconds);\n }\n \n // Update total distance traveled\n const dx = body.position.x - this.startPosition.x;\n const dy = body.position.y - this.startPosition.y;\n this.distanceTraveled = Math.sqrt(dx * dx + dy * dy);\n \n // Check if projectile has reached maximum range\n if (this.options.maxRange !== undefined && this.distanceTraveled >= this.options.maxRange) {\n this.finished = true;\n Matter.Body.setVelocity(body, { x: 0, y: 0 });\n }\n }\n \n /**\n * Update projectile while in flying stage\n */\n private updateFlying(body: Matter.Body, dtSeconds: number): void {\n // Base horizontal velocity \n let vx = this.normalizedDirection.x * this.options.speed;\n let vy = this.normalizedDirection.y * this.options.speed;\n \n // Apply drag if specified\n if (this.options.drag && this.options.drag > 0) {\n vx *= (1 - this.options.drag * dtSeconds);\n vy *= (1 - this.options.drag * dtSeconds);\n }\n \n // For arc and bounce trajectories, update height and check for landing\n if (this.type === ProjectileType.Arc || this.type === ProjectileType.Bounce) {\n // Apply gravity to vertical velocity\n this.verticalVelocity -= (this.options.gravity || 500) * dtSeconds;\n \n // Update height\n this.currentHeight += this.verticalVelocity * dtSeconds;\n \n // Check if projectile has hit the ground\n if (this.currentHeight <= 0) {\n this.currentHeight = 0;\n \n if (this.type === ProjectileType.Bounce) {\n // Handle bouncing\n if (this.bounceCount < (this.options.maxBounces || 0)) {\n // Bounce with reduced energy\n this.verticalVelocity = -this.verticalVelocity * (this.options.bounciness || 0.6);\n this.bounceCount++;\n \n // Also reduce horizontal velocity slightly with each bounce\n vx *= (this.options.bounciness || 0.6);\n vy *= (this.options.bounciness || 0.6);\n } else {\n // No more bounces, enter bouncing stage (rolling/sliding)\n this.stage = ProjectileStage.Bouncing;\n }\n } else {\n // Arc projectile that hit ground - finished\n this.finished = true;\n Matter.Body.setVelocity(body, { x: 0, y: 0 });\n return;\n }\n }\n }\n \n // Apply the calculated velocity\n Matter.Body.setVelocity(body, { x: vx, y: vy });\n \n // Emit a custom event to render the height\n const renderHeightEvent = new CustomEvent('projectile:height', { \n detail: {\n id: body.id,\n height: this.currentHeight\n }\n });\n window.dispatchEvent(renderHeightEvent);\n }\n \n /**\n * Update projectile while in bouncing stage (rolling/sliding)\n */\n private updateBouncing(body: Matter.Body, dtSeconds: number): void {\n // Simple friction-based slowing down\n const friction = 0.95; // More friction when rolling\n \n let vx = body.velocity.x * friction;\n let vy = body.velocity.y * friction;\n \n // Apply the calculated velocity\n Matter.Body.setVelocity(body, { x: vx, y: vy });\n \n // Check if nearly stopped - mark as finished\n if (Math.abs(vx) < 0.5 && Math.abs(vy) < 0.5) {\n this.finished = true;\n Matter.Body.setVelocity(body, { x: 0, y: 0 });\n }\n }\n \n /**\n * Check if projectile has completed its trajectory\n */\n isFinished(): boolean {\n return this.finished;\n }\n \n /**\n * Get current height of projectile above ground\n */\n getHeight(): number {\n return this.currentHeight;\n }\n \n /**\n * Get position along trajectory (0 to 1)\n * Useful for animation progress\n */\n getProgress(): number {\n if (this.options.maxRange) {\n return Math.min(1, this.distanceTraveled / this.options.maxRange);\n } else if (this.options.lifetime) {\n return Math.min(1, this.elapsed / this.options.lifetime);\n }\n return 0;\n }\n} ","import { generateShortUUID, users } from \"@signe/sync\";\nimport { effect, Signal, signal } from \"@signe/reactive\";\nimport { Direction, RpgCommonPlayer } from \"../Player\";\nimport { RpgCommonPhysic } from \"../Physic\";\nimport { Observable, share, Subject } from \"rxjs\";\nimport { Knockback, LinearMove, MovementManager } from \"../movement\";\n\nexport abstract class RpgCommonMap<T extends RpgCommonPlayer> {\n abstract players: Signal<Record<string, T>>;\n abstract events: Signal<Record<string, any>>;\n \n data = signal<any | null>(null);\n physic = new RpgCommonPhysic();\n moveManager = new MovementManager()\n\n\n /**\n * Observable representing the game loop tick\n * \n * This observable emits the current timestamp every 16ms (approximately 60fps).\n * It's shared using the share() operator, meaning that all subscribers will receive\n * events from a single interval rather than creating multiple intervals.\n * \n * @example\n * ```ts\n * // Subscribe to the game tick to update entity positions\n * map.tick$.subscribe(timestamp => {\n * // Update game entities based on elapsed time\n * this.updateEntities(timestamp);\n * });\n * ```\n */\n tick$ = new Observable<{ delta: number, timestamp: number }>(observer => {\n const interval = setInterval(() => {\n observer.next({\n delta: 16,\n timestamp: Date.now()\n });\n }, 16);\n return () => clearInterval(interval);\n }).pipe(\n share()\n );\n\n loadPhysic() {\n const hitboxes = this.data().hitboxes ?? [];\n\n const gap = 100;\n this.physic.addStaticHitbox('map-width-left', -gap, 0, gap, this.data().height);\n this.physic.addStaticHitbox('map-width-right', this.data().width, 0, gap, this.data().height);\n this.physic.addStaticHitbox('map-height-top', 0, -gap, this.data().width, gap);\n this.physic.addStaticHitbox('map-height-bottom', 0, this.data().height, this.data().width, gap);\n\n for (let staticHitbox of hitboxes) {\n this.physic.addStaticHitbox(staticHitbox.id ?? generateShortUUID(), staticHitbox.x, staticHitbox.y, staticHitbox.width, staticHitbox.height);\n }\n\n this.events.observable.subscribe(({ value: event, type }) => {\n if (type == 'add') {\n this.physic.addMovableHitbox(event, event.x(), event.y(), event.hitbox().w, event.hitbox().h, {\n isSensor: true\n });\n this.physic.registerMovementEvents(event.id, () => {\n event.animationName.set('walk')\n }, () => {\n event.animationName.set('stand')\n })\n }\n else if (type == 'remove') {\n this.physic.removeHitbox(event.id);\n }\n });\n\n this.tick$.subscribe(({ delta }) => {\n this.physic.update(delta);\n this.moveManager.update(delta, this.physic);\n });\n }\n\n movePlayer(player: T, direction: Direction) {\n this.physic.moveBody(player, direction);\n }\n\n /**\n * Register movement events for a player or event\n * \n * Attaches event listeners to detect when an entity starts or stops moving\n * \n * @param id - ID of the entity (player or event)\n * @param onStartMoving - Callback when entity starts moving\n * @param onStopMoving - Callback when entity stops moving\n * @returns Boolean indicating success\n * \n * @example\n * ```ts\n * // Register movement events for the player\n * map.registerMovementEvents('player1', \n * () => console.log('Player started moving'),\n * () => console.log('Player stopped moving')\n * );\n * ```\n */\n registerMovementEvents(\n id: string,\n onStartMoving?: () => void,\n onStopMoving?: () => void\n ): boolean {\n // Check if the object with this ID exists\n const object = this.getObjectById(id);\n if (!object) return false;\n \n // Register with physics system\n this.physic.registerMovementEvents(id, onStartMoving, onStopMoving);\n return true;\n }\n\n /**\n * Check if an entity is currently moving\n * \n * @param id - ID of the entity to check\n * @returns Boolean indicating if the entity is in motion\n * \n * @example\n * ```ts\n * // Check if player is moving\n * if (map.isMoving('player1')) {\n * // Player is in motion\n * }\n * ```\n */\n isMoving(id: string): boolean {\n return this.physic.isMoving(id);\n }\n\n getObjectById(id: string) {\n return this.players()[id] ?? this.events()[id];\n }\n\n /**\n * Create a temporary and moving hitbox on the map\n * \n * Allows to create a temporary hitbox that moves through multiple positions sequentially.\n * For example, you can use it to explode a bomb and find all the affected players, \n * or during a sword strike, you can create a moving hitbox and find the affected players.\n * \n * The method creates a zone sensor that moves through the specified hitbox positions\n * at the given speed, detecting collisions with players and events at each step.\n * \n * @param hitboxes - Array of hitbox positions to move through sequentially\n * @param options - Configuration options for the movement\n * @returns Observable that emits arrays of hit entities and completes when movement is finished\n * \n * @example\n * ```ts\n * // Create a sword slash effect that moves through two positions\n * map.createMovingHitbox([\n * { x: 100, y: 100, width: 50, height: 50 },\n * { x: 120, y: 100, width: 50, height: 50 }\n * ], { speed: 2 }).subscribe({\n * next(hits) {\n * // hits contains RpgPlayer or RpgEvent objects that were hit\n * console.log('Hit entities:', hits);\n * },\n * complete() {\n * console.log('Movement finished');\n * }\n * });\n * ```\n */\n createMovingHitbox(\n hitboxes: Array<{ x: number; y: number; width: number; height: number }>,\n options: { speed?: number } = {}\n ): Observable<(T | any)[]> {\n const { speed = 1 } = options;\n const zoneId = `moving_hitbox_${generateShortUUID()}`;\n \n return new Observable(observer => {\n if (hitboxes.length === 0) {\n observer.complete();\n return;\n }\n\n let currentIndex = 0;\n let frameCounter = 0;\n const hitEntities = new Set<string>();\n\n // Create initial zone at first hitbox position\n const firstHitbox = hitboxes[0];\n const radius = Math.max(firstHitbox.width, firstHitbox.height) / 2;\n \n this.physic.addZone(zoneId, {\n x: firstHitbox.x + firstHitbox.width / 2,\n y: firstHitbox.y + firstHitbox.height / 2,\n radius: radius\n });\n\n // Register zone events to detect hits\n this.physic.registerZoneEvents(\n zoneId,\n (hitIds: string[]) => {\n // Convert hit IDs to actual objects and emit\n const hitObjects = hitIds\n .map(id => this.getObjectById(id))\n .filter(obj => obj !== undefined);\n \n if (hitObjects.length > 0) {\n // Track hit entities to avoid duplicates\n hitIds.forEach(id => hitEntities.add(id));\n observer.next(hitObjects);\n }\n }\n );\n\n // Subscribe to tick to handle movement\n const tickSubscription = this.tick$.subscribe(() => {\n frameCounter++;\n \n // Move to next position based on speed\n if (frameCounter >= speed) {\n frameCounter = 0;\n currentIndex++;\n \n // Check if we've reached the end\n if (currentIndex >= hitboxes.length) {\n // Clean up and complete\n this.physic.removeZone(zoneId);\n tickSubscription.unsubscribe();\n observer.complete();\n return;\n }\n \n // Move zone to next position\n const nextHitbox = hitboxes[currentIndex];\n const zone = this.physic.getZone(zoneId);\n \n if (zone) {\n // Remove current zone and create new one at next position\n this.physic.removeZone(zoneId);\n \n const newRadius = Math.max(nextHitbox.width, nextHitbox.height) / 2;\n this.physic.addZone(zoneId, {\n x: nextHitbox.x + nextHitbox.width / 2,\n y: nextHitbox.y + nextHitbox.height / 2,\n radius: newRadius\n });\n \n // Re-register zone events for the new zone\n this.physic.registerZoneEvents(\n zoneId,\n (hitIds: string[]) => {\n const hitObjects = hitIds\n .map(id => this.getObjectById(id))\n .filter(obj => obj !== undefined);\n \n if (hitObjects.length > 0) {\n hitIds.forEach(id => hitEntities.add(id));\n observer.next(hitObjects);\n }\n }\n );\n }\n }\n });\n\n // Cleanup function\n return () => {\n tickSubscription.unsubscribe();\n this.physic.removeZone(zoneId);\n };\n });\n }\n}\n","export const ModulesToken = \"ModulesToken\";\n\nimport { Context, Provider, Providers } from \"@signe/di\";\nimport { Subject, Observable, from } from \"rxjs\";\nimport { mergeMap, toArray } from \"rxjs/operators\";\n\nexport class Hooks {\n /**\n * Store of all module hooks by ID\n */\n private moduleHooks: Record<string, Subject<any>> = {};\n\n /**\n * Store of all hook functions by ID\n */\n private hookFunctions: Record<string, Function[]> = {};\n\n constructor(private modules: any[], private namespace: string) {\n this.init();\n }\n\n private init() {\n for (const module of this.modules) {\n for (const type in module) {\n const hookObject = module[type];\n for (const hook in hookObject) {\n const hookFunction = hookObject[hook];\n if (hookFunction) {\n const hookId = `${this.namespace}-${type}-${hook}`;\n\n // Créer un Subject pour ce hook s'il n'existe pas déjà\n if (!this.moduleHooks[hookId]) {\n this.moduleHooks[hookId] = new Subject<any>();\n }\n\n // Initialiser le tableau de fonctions pour cet ID si nécessaire\n if (!this.hookFunctions[hookId]) {\n this.hookFunctions[hookId] = [];\n }\n\n // Ajouter la fonction au tableau des hooks pour cet ID\n // (sans l'exécuter immédiatement)\n if (!this.hookFunctions[hookId].includes(hookFunction)) {\n this.hookFunctions[hookId].push(hookFunction);\n }\n }\n }\n }\n }\n\n return this.moduleHooks;\n }\n\n /**\n * Call hooks for a specific ID, passing arguments to all subscribed hooks\n *\n * @param hookId - The unique identifier of the module hook\n * @param args - Arguments to pass to the hook functions\n * @returns An Observable that emits an array with all hook results when subscribed\n * @example\n * ```ts\n * // Call all hook functions for the ID 'my-namespace-type-hook'\n * callHooks('my-namespace-type-hook', { x: 10, y: 20 }).subscribe(results => {\n * console.log('Hook results:', results); // Array of all hook function results\n * });\n * \n * // Hook functions are only executed when you subscribe to the returned Observable\n * const observable = callHooks('my-namespace-type-hook', player);\n * // ... later ...\n * observable.subscribe(results => {\n * // Process results array\n * });\n * ```\n */\n public callHooks(hookId: string, ...args: any[]): Observable<any[]> {\n if (!this.moduleHooks[hookId]) {\n this.moduleHooks[hookId] = new Subject<any>();\n }\n\n // Create an Observable that will execute all hook functions when subscribed\n return new Observable<any[]>((subscriber) => {\n if (this.hookFunctions[hookId] && this.hookFunctions[hookId].length > 0) {\n // Map each hook function to an Observable that can handle both synchronous values and Promises\n const hookResults$ = from(this.hookFunctions[hookId]).pipe(\n mergeMap((hookFunction) => {\n let result;\n try {\n result = hookFunction(...args);\n return from(Promise.resolve(result));\n } catch (error) {\n subscriber.error(error);\n return [];\n }\n }),\n toArray() // Collect all results into an array\n );\n\n // Subscribe to the hook results Observable\n const subscription = hookResults$.subscribe({\n next: (results) => {\n // Emit all collected results to subscribers of this hook\n this.moduleHooks[hookId].next(results);\n subscriber.next(results);\n subscriber.complete();\n },\n error: (err) => {\n subscriber.error(err);\n }\n });\n\n // Return cleanup function\n return () => {\n subscription.unsubscribe();\n };\n } else {\n // No hook functions to execute, emit an empty array\n subscriber.next([]);\n subscriber.complete();\n return () => {};\n }\n });\n }\n}\n\n/**\n * Provide modules configuration to Angular Dependency Injection\n * Registers hook functions for later execution\n *\n * @param modules - Array of modules to provide\n * @param namespace - Namespace to prefix hook IDs\n * @returns Provider configuration for Angular DI\n * @example\n * ```ts\n * // Define modules\n * const modules = [\n * {\n * player: {\n * onMove: (player) => {\n * // Handle player movement\n * }\n * }\n * }\n * ];\n *\n * // Provide modules\n * const provider = provideModules(modules, 'game');\n * ```\n */\nexport function provideModules(modules: any[], namespace: string, transform?: (modules: any, context: Context) => any) {\n return {\n provide: ModulesToken,\n useFactory: (context: Context) => {\n modules = transform ? transform(modules, context) : modules\n return new Hooks(modules, namespace);\n },\n };\n}\n\nexport function findModules(context: Context, namespace: string) {\n let modules: any[] = []\n for (let key in context['values']) {\n if (key.endsWith('Module' + namespace)) {\n modules.push(context['values'][key])\n }\n }\n return modules\n}\n\n/**\n * Create module providers from a token name and array of providers\n * Transforms objects with server/client properties into separate ModuleServer and ModuleClient providers\n *\n * @param tokenName - The base token name for the module\n * @param providers - Array of providers that can be regular providers or objects with server/client properties\n * @returns Flattened array of providers with transformed server/client objects\n * @example\n * ```ts\n * // Input: createModule('battle', [{ server: serverModule, client: clientModule }])\n * // Output: [\n * // { provide: 'battleModuleServer', useValue: { server: serverModule, client: clientModule }, meta: { server: true, isModule: true } },\n * // { provide: 'battleModuleClient', useValue: { server: serverModule, client: clientModule }, meta: { client: true, isModule: true } }\n * // ]\n * \n * // Regular providers are passed through unchanged\n * createModule('battle', [regularProvider, { server, client }])\n * ```\n */\nexport function createModule(tokenName: string, providers:(Provider | Provider[] | ({ server?: any, client?: any }))[]) {\n const results = providers.map(provider => {\n const results: any[] = [];\n\n if (!provider) {\n return []\n }\n \n if ('server' in provider) {\n results.push({\n provide: tokenName + 'ModuleServer',\n useValue: provider,\n meta: {\n server: true,\n isModule: true,\n }\n });\n }\n \n if ('client' in provider) {\n results.push({\n provide: tokenName + 'ModuleClient',\n useValue: provider,\n meta: {\n client: true,\n isModule: true,\n }\n });\n }\n \n // If neither server nor client properties, return the provider as-is\n if (!('server' in provider) && !('client' in provider)) {\n results.push(provider);\n }\n \n return results;\n }).flat(); // Flatten the array to handle multiple results per provider\n return results.flat();\n}\n\nexport function defineModule<T>(options: T) {\n return options\n}","import { Context } from \"@signe/di\";\n\nexport const UpdateMapToken = \"UpdateMapToken\";\n\nexport abstract class UpdateMapService {\n constructor(protected context: Context) {}\n\n abstract update(map: any): Promise<void>;\n}\n","export type Constructor<T = {}> = new (...args: any[]) => T;\n\nexport function random(min: number, max: number): number {\n return Math.floor(Math.random() * (max - min + 1) + min);\n}\n\nexport function isBrowser(): boolean {\n return typeof window !== \"undefined\";\n}\n\nexport function isFunction(val: unknown): boolean {\n return {}.toString.call(val) === \"[object Function]\";\n}\n\nexport function isClass(func: unknown): boolean {\n return typeof func === \"function\";\n}\n\nexport function isPromise(val: unknown) {\n return isInstanceOf<Promise<unknown>>(val, Promise);\n}\n\nexport function isArray(val: unknown) {\n return isInstanceOf<Array<unknown>>(val, Array);\n}\n\nexport function isObject(val: unknown): boolean {\n return typeof val == \"object\" && val != null && !isArray(val);\n}\n\nexport function isString(val: unknown): boolean {\n return typeof val == \"string\";\n}\n\nexport function isInstanceOf<T = any>(val: unknown, _class: any) {\n return val instanceof _class;\n}\n\nexport function arrayUniq(array: any[]): any[] {\n return [...new Set(array)];\n}\n\nexport function arrayFlat(array: any[]): any[] {\n return array.reduce((acc, val) => acc.concat(val), []);\n}\n\nexport function intersection(\n [start1, end1]: [number, number],\n [start2, end2]: [number, number]\n): boolean {\n return (\n (start1 >= start2 && start1 <= end2) || (start2 >= start1 && start2 < end1)\n );\n}\n\nexport function capitalize(s: unknown): string {\n if (typeof s !== \"string\") return \"\";\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nexport function camelToKebab(str: string): string {\n return str.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\nexport function arrayEquals(a: any[], b: any[]): boolean {\n return a.length === b.length && a.every((v, i) => v === b[i]);\n}\n\n/**\n * Combines multiple mixins into one\n *\n * @param mixins - Array of mixin functions to combine\n * @returns A single mixin function that applies all mixins\n *\n * @example\n * ```ts\n * const AllMixins = combineMixins([WithStats, WithInventory, WithComponentManager]);\n * class MyClass extends AllMixins(BaseClass) {\n * // MyClass now has all capabilities from all mixins\n * }\n * ```\n */\nexport function combineMixins(\n mixins: Array<<T extends Constructor>(Base: T) => any>\n) {\n return <T extends Constructor>(Base: T) =>\n mixins.reduce((ExtendedClass, mixin) => mixin(ExtendedClass), Base);\n}\n\nexport function applyMixins(derivedCtor: any, baseCtors: any[]) {\n baseCtors.forEach((baseCtor) => {\n Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {\n const baseCtorName = Object.getOwnPropertyDescriptor(\n baseCtor.prototype,\n name\n );\n if (!baseCtorName) {\n return;\n }\n Object.defineProperty(derivedCtor.prototype, name, baseCtorName);\n });\n });\n}\n\nexport function generateUID(): string {\n let firstPart: any = (Math.random() * 46656) | 0;\n let secondPart: any = (Math.random() * 46656) | 0;\n firstPart = (\"000\" + firstPart.toString(36)).slice(-3);\n secondPart = (\"000\" + secondPart.toString(36)).slice(-3);\n return firstPart + secondPart;\n}\n\nexport function createConstructor<T>(...propNames: any[]): T {\n return class {\n constructor(...propValues) {\n propNames.forEach((name, idx) => {\n this[name] = propValues[idx];\n });\n }\n } as unknown as T;\n}\n\nexport function sharedArrayBuffer() {\n let buffer;\n if (typeof SharedArrayBuffer != \"undefined\") {\n buffer = SharedArrayBuffer;\n } else {\n buffer = ArrayBuffer;\n }\n return buffer;\n}\n\nexport function toRadians(angle: number) {\n return angle * (Math.PI / 180);\n}\n\nexport function hexaToNumber(hexa: string): {\n value: number;\n alpha: number;\n} {\n let val = hexa.replace(\"#\", \"\");\n let alpha = 1;\n if (val.length === 3) {\n val = val\n .split(\"\")\n .map((v) => v + v)\n .join(\"\");\n }\n if (val.length === 8) {\n alpha = parseInt(val.substring(0, 2), 16) / 255;\n val = val.substring(2);\n }\n return {\n value: parseInt(val, 16),\n alpha,\n };\n}\n\nexport function extractId(path: string): string | null {\n const id = path.match(/([a-zA-Z0-9-_$!]+)\\.[a-z0-9]+$/i);\n if (!id) return null;\n return id[1];\n}\n\nexport function basename(path: string): string {\n return path.substring(path.lastIndexOf(\"/\") + 1);\n}\n\nexport function fps2ms(fps: number): number {\n return 1000 / fps;\n}\n\nexport function preciseNow(): number {\n return typeof performance !== \"undefined\" ? performance.now() : Date.now();\n}\n\nexport function round(num: number, decimals: number = 100): number {\n return Math.round(num * decimals) / decimals;\n}\n\n// https://stackoverflow.com/questions/54733539/javascript-implementation-of-lodash-set-method\nexport function set(obj, path, value, onlyPlainObject = false) {\n if (Object(obj) !== obj) return obj; // When obj is not an object\n // If not yet an array, get the keys from the string-path\n if (!Array.isArray(path)) path = path.toString().match(/[^.[\\]]+/g) || [];\n path.slice(0, -1).reduce(\n (\n a,\n c,\n i // Iterate all of them except the last one\n ) =>\n Object(a[c]) === a[c] // Does the key exist and is its value an object?\n ? // Yes: then follow that path\n a[c]\n : // No: create the key. Is the next key a potential array-index?\n (a[c] =\n Math.abs(path[i + 1]) >> 0 === +path[i + 1]\n ? onlyPlainObject\n ? {}\n : [] // Yes: assign a new array object\n : {}), // No: assign a new plain object\n obj\n )[path[path.length - 1]] = value; // Finally assign the value to the last key\n return obj; // Return the top-level object to allow chaining\n}\n\nexport function elementToPositionAbsolute(element: HTMLElement) {\n element.style.position = \"absolute\";\n element.style.top = \"0\";\n element.style.left = \"0\";\n element.style.right = \"0\";\n element.style.bottom = \"0\";\n element.style.width = \"100%\";\n element.style.height = \"100%\";\n}\n\n\nexport function mergeObjectWithMethods<T, S>(target: T, source: S): T & S {\n // Copier toutes les propriétés propres (énumérables et non-énumérables)\n const propertyNames = Object.getOwnPropertyNames(source);\n for (const name of propertyNames) {\n if (name !== 'constructor') {\n const descriptor = Object.getOwnPropertyDescriptor(source, name);\n if (descriptor) {\n Object.defineProperty(target, name, descriptor);\n }\n }\n }\n \n // Configurer le prototype pour hériter des méthodes de la classe\n const sourceProto = Object.getPrototypeOf(source);\n if (sourceProto && sourceProto !== Object.prototype) {\n Object.setPrototypeOf(target, sourceProto);\n }\n \n return target as T & S;\n}\n\nexport default {\n random,\n isBrowser,\n isPromise,\n isArray,\n isObject,\n isString,\n isFunction,\n isClass,\n isInstanceOf,\n arrayUniq,\n arrayFlat,\n arrayEquals,\n intersection,\n applyMixins,\n capitalize,\n sharedArrayBuffer,\n generateUID,\n createConstructor,\n toRadians,\n extractId,\n basename,\n fps2ms,\n preciseNow,\n hexaToNumber,\n set,\n round,\n camelToKebab,\n elementToPositionAbsolute,\n mergeObjectWithMethods\n};\n"," /** \n * \n * Pre-made GUIs already exist. For example, the command `player.showText()` displays the rpg-dialog component. It is up to you to customize the component or take advantage of the `@rpgjs/default-gui` module which already contains ready-made components\n * \n * @title Prebuilt GUI\n * @enum {string}\n * \n * PrebuiltGui.Dialog | rpg-dialog\n * PrebuiltGui.MainMenu | rpg-main-menu\n * PrebuiltGui.Shop | rpg-shop\n * PrebuiltGui.Disconnect | rpg-disconnect\n * PrebuiltGui.Gameover | rpg-gameover\n * PrebuiltGui.Save | rpg-save\n * PrebuiltGui.Controls | rpg-controls\n * PrebuiltGui.Notification | rpg-notification\n * @memberof PrebuiltGui\n * */\n export enum PrebuiltGui {\n Dialog = 'rpg-dialog',\n MainMenu = 'rpg-main-menu',\n Shop = 'rpg-shop',\n Disconnect = 'rpg-disconnect',\n Gameover = 'rpg-gameover',\n Save = 'rpg-save',\n Controls = 'rpg-controls',\n Notification = 'rpg-notification'\n}"],"names":["isFunction","Symbol_observable","isPromise","Symbol_iterator","process","iterator","isArray","__defProp","__name","BehaviorSubject2","BehaviorSubject3","isClass","isObject","isSignal2","__decorateClass","Direction","Animation","this","global","Matter.Engine","Matter.Events","Matter.Body","Matter.Bodies","Matter.Composite","width","height","Matter.Query","Matter.Vector","isOverlapping","vTmp1","vTmp2","Matter.Bounds","ProjectileType","results","PrebuiltGui"],"mappings":"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AACA;AACA;;AAEA;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;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;;AAEA;AACA;AACA;AACA;AACA;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;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;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;;AAEA;AACA;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;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAC,GAAG;;;SAGG;AACP;AACA,SAAO,SAAS,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;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ACA;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;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAC,GAAG;;;SAGG;AACP;AACA,SAAO,SAAS,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE;;AAEtD;AACA;AACA;AACA;AACA;;EAEA,IAAI,QAAQ,GAAG,EAAE;;EAEjB,MAAM,CAAC,OAAO,GAAG,QAAQ;;AAEzB,EAAA,IAAI,QAAQ,GAAG,mBAAmB,CAAC,CAAC,CAAC;AACrC,EAAA,IAAI,MAAM,GAAG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cAAY,OAAO,KAAK;;UAEhB,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI,KAAK,EAAE;AACxD,UAAQ,KAAK,CAAC,GAAG,GAAG,SAAS;;AAE7B,UAAQ,OAAO,KAAK;OACf;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAI,IAAI,gBAAgB,GAAG,SAAS,MAAM,EAAE,UAAU,EAAE;UAChD,IAAI,aAAa,GAAG,UAAU;;AAEtC,UAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7C,cAAY,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,GAAG;;UAE7C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,aAAa;UAC9C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,GAAG,SAAS;AACtD,UAAQ,MAAM,CAAC,iBAAiB,GAAG,UAAU;OACxC;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;AACA;AACA;AACA;;AAEA;AACA;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;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;;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAC,GAAG;;;SAGG;AACP;AACA,SAAO,SAAS,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAEA,IAAI,MAAM,GAAG,EAAE;;EAEf,MAAM,CAAC,OAAO,GAAG,MAAM;;AAEvB,EAAA,IAAI,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC;AACnC,EAAA,IAAI,MAAM,GAAG,mBAAmB,CAAC,EAAE,CAAC;AACpC,EAAA,IAAI,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC;;AAEnC,EAAA,CAAC,WAAW;;AAEZ,MAAI,MAAM,CAAC,cAAc,GAAG,IAAI,GAAG,EAAE;AACrC,MAAI,MAAM,CAAC,mBAAmB,GAAG,IAAI,GAAG,EAAE;AAC1C,MAAI,MAAM,CAAC,iBAAiB,GAAG,GAAG;AAClC,MAAI,MAAM,CAAC,oBAAoB,GAAG,CAAC;AACnC,MAAI,MAAM,CAAC,oBAAoB,GAAG,GAAG;AACrC,MAAI,MAAM,CAAC,oBAAoB,GAAG,GAAG;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA,MAAI,MAAM,CAAC,MAAM,GAAG,SAAS,OAAO,EAAE;UAC9B,IAAI,QAAQ,GAAG;AACvB,cAAY,KAAK,EAAE,IAAI,GAAG,EAAE;cAChB,UAAU,EAAE,IAAI;cAChB,mBAAmB,EAAE,IAAI;cACzB,kBAAkB,EAAE,IAAI;cACxB,iBAAiB,EAAE,EAAE;cACrB,qBAAqB,EAAE,GAAG;cAC1B,cAAc,EAAE,IAAI;cACpB,UAAU,EAAE,CAAC;cACb,YAAY,EAAE,IAAI;cAClB,UAAU,EAAE,IAAI;AAC5B,cAAY,YAAY,EAAE,IAAI,GAAG,EAAE;cACvB,mBAAmB,EAAE,CAAC;AAClC,cAAY,OAAO,EAAE;WACZ;;UAED,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC;;AAErD;AACA,UAAQ,MAAM,CAAC,GAAG,GAAG,CAAC;;AAEtB,UAAQ,OAAO,MAAM;OAChB;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MACI,MAAM,CAAC,GAAG,GAAG,SAAS,MAAM,EAAE,MAAM,EAAE;AAC1C;AACA,UAAQ,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,mBAAmB;;AAEtD,UAAQ,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC;cACnB,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC;;AAExE,cAAY,IAAI,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE;kBACxB,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;AACjD;AACA,WAAS,GAAG;;AAEZ,UAAQ,OAAO,MAAM;OAChB;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MACI,MAAM,CAAC,IAAI,GAAG,SAAS,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;AACjD,UAAQ,IAAI,aAAa,GAAG,MAAM,CAAC,GAAG,EAAE;AACxC,cAAY,WAAW,GAAG,MAAM,CAAC,KAAK;cAC1B,WAAW,GAAG,CAAC;;AAE3B;AACA,UAAQ,IAAI,UAAU,GAAG,IAAI,GAAG,MAAM,CAAC,YAAY;;AAEnD;UACQ,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE;AACtH;cACY,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,mBAAmB;AACxE;;AAEA,UAAQ,IAAI,MAAM,CAAC,mBAAmB,EAAE;AACxC;AACA,cAAY,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AACrD,cAAY,MAAM,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC;;AAEpG;AACA,cAAY,IAAI,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;;AAE7E;AACA,cAAY,IAAI,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC,KAAK;AACnE,kBAAgB,kBAAkB,CAAC,MAAM,GAAG,MAAM,CAAC,oBAAoB;AACvE,kBAAgB,kBAAkB,CAAC,MAAM,GAAG,MAAM,CAAC;eACtC;;AAEb;AACA,cAAY,IAAI,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC;AAC9D,cAAY,UAAU,GAAG,kBAAkB,IAAI,UAAU;AACzD;;AAEA,UAAQ,IAAI,MAAM,CAAC,kBAAkB,EAAE;AACvC;cACY,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AAC7D;;AAEA;AACA,UAAQ,MAAM,CAAC,UAAU,GAAG,UAAU;AACtC,UAAQ,MAAM,CAAC,YAAY,GAAG,IAAI;;AAElC;AACA,UAAQ,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU;;AAE9C;AACA,UAAQ,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK;AACxC,cAAY,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;WAClE;;AAET;AACA,UAAQ,MAAM,CAAC,mBAAmB,GAAG,CAAC;;AAEtC;AACA,UAAQ,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,WAAW,CAAC;;AAE1F;UACQ,IAAI,KAAK,GAAG;AACpB,cAAY,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;WAC5B;;AAET;UACQ,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC;UAC3C,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;;AAE7C,UAAQ,IAAI,eAAe,GAAG,MAAM,CAAC,GAAG,EAAE;;AAE1C;AACA,UAAQ,OAAO,WAAW,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,IAAI,WAAW,GAAG,MAAM,CAAC,iBAAiB,EAAE;AAC/F;cACY,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,CAAC;AACzD,cAAY,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;cAClC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC;;AAExD;AACA,cAAY,MAAM,CAAC,UAAU,IAAI,WAAW;cAChC,WAAW,IAAI,CAAC;;AAE5B;cACY,IAAI,gBAAgB,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,aAAa;AAC/D,kBAAgB,kBAAkB,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,eAAe;kBACnD,mBAAmB,GAAG,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,GAAG,kBAAkB,GAAG,WAAW;;AAEvH;cACY,IAAI,WAAW,IAAI,UAAU,IAAI,mBAAmB,GAAG,MAAM,CAAC,YAAY,EAAE;kBACxE,MAAM,CAAC,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,GAAG,WAAW,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC;kBAClH;AAChB;AACA;;AAEA;AACA,UAAQ,MAAM,CAAC,MAAM,CAAC,mBAAmB,GAAG,WAAW;;AAEvD;UACQ,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC;;AAElD;UACQ,IAAI,MAAM,CAAC,iBAAiB,CAAC,MAAM,IAAI,GAAG,EAAE;AACpD,cAAY,IAAI,MAAM,CAAC,mBAAmB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,UAAU,EAAE;AACxG,kBAAgB,MAAM,CAAC,QAAQ,CAAC,4DAA4D,CAAC;AAC7F,eAAa,MAAM,IAAI,MAAM,CAAC,mBAAmB,EAAE;AACnD,kBAAgB,MAAM,CAAC,QAAQ,CAAC,8DAA8D,CAAC;AAC/F;;AAEA,cAAY,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,WAAW,EAAE;AACvD,kBAAgB,MAAM,CAAC,QAAQ,CAAC,2DAA2D,CAAC;AAC5F;;cAEY,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE;AACpD,kBAAgB,MAAM,CAAC,QAAQ,CAAC,4EAA4E,CAAC;AAC7G;;AAEA,cAAY,IAAI,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE;AAClC,kBAAgB,MAAM,CAAC,QAAQ,CAAC,mEAAmE,CAAC;AACpG;AACA;OACK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,MAAI,MAAM,CAAC,IAAI,GAAG,SAAS,MAAM,EAAE;AACnC,UAAQ,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC;OAClC;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MACI,MAAM,CAAC,YAAY,GAAG,SAAS,MAAM,EAAE,QAAQ,EAAE;UAC7C,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,qBAAqB,EAAE;cAC/D,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC,QAAQ,CAAC;AAC1E,WAAS,MAAM;AACf,cAAY,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC;AACnG;;UAEQ,OAAO,MAAM,CAAC,cAAc;OAC/B;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,MAAI,MAAM,CAAC,gBAAgB,GAAG,SAAS,MAAM,EAAE;UACvC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,oBAAoB,EAAE;AAC1E,cAAY,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,cAAc,CAAC;AAC9D,WAAS,MAAM;AACf,cAAY,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC;AAClG;OACK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAI,IAAI,KAAK,GAAG,SAAS,MAAM,EAAE;UACzB,IAAI,MAAM,GAAG,CAAC;AACtB,cAAY,YAAY,GAAG,MAAM,CAAC,MAAM;;AAExC,UAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE;AAClD,cAAY,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;AAC/B;;AAEA,UAAQ,OAAO,CAAC,MAAM,GAAG,YAAY,KAAK,CAAC;OACtC;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;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;AACA;AACA;;AAEA;AACA;AACA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAC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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,61]}
|