UNPKG

excalibur

Version:

Excalibur.js is a simple JavaScript game engine with TypeScript bindings for making 2D games in HTML5 Canvas. Our mission is to make web game development as simple as possible.

1,290 lines (1,236 loc) • 1.39 MB
/*! * excalibur - 0.30.3 - 2025-1-1 * https://github.com/excaliburjs/Excalibur * Copyright (c) 2025 Excalibur.js <https://github.com/excaliburjs/Excalibur/graphs/contributors> * Licensed BSD-2-Clause * @preserve */ /******/ var __webpack_modules__ = ({ /***/ 851: /***/ ((module, __webpack_exports__, __webpack_require__) => { /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1); /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(935); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `/* Buttons styles start */ button#excalibur-play { display: inline-block; position: relative; z-index: 999; border-radius: 6px; border: none; /*border: 3px solid; border-color: white; box-shadow: 0 0 10px #ccc;*/ padding: 1rem 1.5rem 1rem 4rem; margin: 0; text-decoration: none; background: #00b233; color: #ffffff; font-family: sans-serif; font-size: 2rem; white-space: nowrap; line-height: 1; cursor: pointer; text-align: center; transition: background 250ms ease-in-out, transform 150ms ease; -webkit-appearance: none; -moz-appearance: none; -webkit-animation: excalibur-button-fadein 200ms; /* Safari, Chrome and Opera > 12.1 */ -moz-animation: excalibur-button-fadein 200ms; /* Firefox < 16 */ -ms-animation: excalibur-button-fadein 200ms; /* Internet Explorer */ -o-animation: excalibur-button-fadein 200ms; /* Opera < 12.1 */ animation: excalibur-button-fadein 200ms; } /* button#excalibur-play { display: none; }*/ button#excalibur-play:after { position: absolute; content: ''; border: 8px solid; border-color: transparent transparent transparent white; left: 35px; top: 24px; width: 0; height: 0; } button#excalibur-play:before { position: absolute; content: ''; border: 3px solid; left: 19px; top: 14px; border-radius: 20px; width: 30px; height: 30px; } button#excalibur-play:hover, button#excalibur-play:focus { background: #00982c; } button#excalibur-play:focus { outline: 1px solid #fff; outline-offset: -4px; } button#excalibur-play:active { transform: scale(0.99); } @keyframes excalibur-button-fadein { from { opacity: 0; } to { opacity: 1; } } /* Firefox < 16 */ @-moz-keyframes excalibur-button-fadein { from { opacity: 0; } to { opacity: 1; } } /* Safari, Chrome and Opera > 12.1 */ @-webkit-keyframes excalibur-button-fadein { from { opacity: 0; } to { opacity: 1; } } /* Internet Explorer */ @-ms-keyframes excalibur-button-fadein { from { opacity: 0; } to { opacity: 1; } } /* Opera < 12.1 */ @-o-keyframes excalibur-button-fadein { from { opacity: 0; } to { opacity: 1; } } `, "",{"version":3,"sources":["webpack://./Director/Loader.css"],"names":[],"mappings":"AAAA,yBAAyB;;AAEzB;EACE,qBAAqB;EACrB,kBAAkB;EAClB,YAAY;EACZ,kBAAkB;EAClB,YAAY;EACZ;;+BAE6B;EAC7B,8BAA8B;EAC9B,SAAS;EACT,qBAAqB;EACrB,mBAAmB;EACnB,cAAc;EACd,uBAAuB;EACvB,eAAe;EACf,mBAAmB;EACnB,cAAc;EACd,eAAe;EACf,kBAAkB;EAClB;;wBAEsB;EACtB,wBAAwB;EACxB,qBAAqB;;EAErB,gDAAgD,EAAE,oCAAoC;EACtF,6CAA6C,EAAE,iBAAiB;EAChE,4CAA4C,EAAE,sBAAsB;EACpE,2CAA2C,EAAE,iBAAiB;EAC9D,wCAAwC;AAC1C;;AAEA;;;EAGE;;AAEF;EACE,kBAAkB;EAClB,WAAW;EACX,iBAAiB;EACjB,uDAAuD;EACvD,UAAU;EACV,SAAS;EACT,QAAQ;EACR,SAAS;AACX;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,iBAAiB;EACjB,UAAU;EACV,SAAS;EACT,mBAAmB;EACnB,WAAW;EACX,YAAY;AACd;;AAEA;;EAEE,mBAAmB;AACrB;;AAEA;EACE,uBAAuB;EACvB,oBAAoB;AACtB;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF;;AAEA,iBAAiB;AACjB;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF;;AAEA,oCAAoC;AACpC;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF;;AAEA,sBAAsB;AACtB;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF;;AAEA,iBAAiB;AACjB;EACE;IACE,UAAU;EACZ;EACA;IACE,UAAU;EACZ;AACF","sourcesContent":["/* Buttons styles start */\r\n\r\nbutton#excalibur-play {\r\n display: inline-block;\r\n position: relative;\r\n z-index: 999;\r\n border-radius: 6px;\r\n border: none;\r\n /*border: 3px solid;\r\n border-color: white;\r\n box-shadow: 0 0 10px #ccc;*/\r\n padding: 1rem 1.5rem 1rem 4rem;\r\n margin: 0;\r\n text-decoration: none;\r\n background: #00b233;\r\n color: #ffffff;\r\n font-family: sans-serif;\r\n font-size: 2rem;\r\n white-space: nowrap;\r\n line-height: 1;\r\n cursor: pointer;\r\n text-align: center;\r\n transition:\r\n background 250ms ease-in-out,\r\n transform 150ms ease;\r\n -webkit-appearance: none;\r\n -moz-appearance: none;\r\n\r\n -webkit-animation: excalibur-button-fadein 200ms; /* Safari, Chrome and Opera > 12.1 */\r\n -moz-animation: excalibur-button-fadein 200ms; /* Firefox < 16 */\r\n -ms-animation: excalibur-button-fadein 200ms; /* Internet Explorer */\r\n -o-animation: excalibur-button-fadein 200ms; /* Opera < 12.1 */\r\n animation: excalibur-button-fadein 200ms;\r\n}\r\n\r\n/*\r\nbutton#excalibur-play {\r\n display: none;\r\n}*/\r\n\r\nbutton#excalibur-play:after {\r\n position: absolute;\r\n content: '';\r\n border: 8px solid;\r\n border-color: transparent transparent transparent white;\r\n left: 35px;\r\n top: 24px;\r\n width: 0;\r\n height: 0;\r\n}\r\n\r\nbutton#excalibur-play:before {\r\n position: absolute;\r\n content: '';\r\n border: 3px solid;\r\n left: 19px;\r\n top: 14px;\r\n border-radius: 20px;\r\n width: 30px;\r\n height: 30px;\r\n}\r\n\r\nbutton#excalibur-play:hover,\r\nbutton#excalibur-play:focus {\r\n background: #00982c;\r\n}\r\n\r\nbutton#excalibur-play:focus {\r\n outline: 1px solid #fff;\r\n outline-offset: -4px;\r\n}\r\n\r\nbutton#excalibur-play:active {\r\n transform: scale(0.99);\r\n}\r\n\r\n@keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/* Firefox < 16 */\r\n@-moz-keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/* Safari, Chrome and Opera > 12.1 */\r\n@-webkit-keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/* Internet Explorer */\r\n@-ms-keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/* Opera < 12.1 */\r\n@-o-keyframes excalibur-button-fadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n"],"sourceRoot":""}]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ 296: /***/ ((module, __webpack_exports__, __webpack_require__) => { /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1); /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(935); /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); // Imports var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); // Module ___CSS_LOADER_EXPORT___.push([module.id, `#ex-toast-container { position: absolute; height: 0; min-width: 50%; left: 50%; top: 0; } .ex-toast-message { left: -50%; position: relative; display: flex; justify-content: space-between; padding: 10px; margin-top: 5px; font-size: 18px; font-family: sans-serif; border-radius: 6px; border: 3px solid #b7b779; background-color: rgb(253, 253, 192); } .ex-toast-message button { align-self: flex-start; } `, "",{"version":3,"sources":["webpack://./Util/Toaster.css"],"names":[],"mappings":"AAAA;EACE,kBAAkB;EAClB,SAAS;EACT,cAAc;EACd,SAAS;EACT,MAAM;AACR;;AAEA;EACE,UAAU;EACV,kBAAkB;EAClB,aAAa;EACb,8BAA8B;;EAE9B,aAAa;EACb,eAAe;EACf,eAAe;EACf,uBAAuB;EACvB,kBAAkB;EAClB,yBAAyB;EACzB,oCAAoC;AACtC;;AAEA;EACE,sBAAsB;AACxB","sourcesContent":["#ex-toast-container {\r\n position: absolute;\r\n height: 0;\r\n min-width: 50%;\r\n left: 50%;\r\n top: 0;\r\n}\r\n\r\n.ex-toast-message {\r\n left: -50%;\r\n position: relative;\r\n display: flex;\r\n justify-content: space-between;\r\n\r\n padding: 10px;\r\n margin-top: 5px;\r\n font-size: 18px;\r\n font-family: sans-serif;\r\n border-radius: 6px;\r\n border: 3px solid #b7b779;\r\n background-color: rgb(253, 253, 192);\r\n}\r\n\r\n.ex-toast-message button {\r\n align-self: flex-start;\r\n}\r\n"],"sourceRoot":""}]); // Exports /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); /***/ }), /***/ 935: /***/ ((module) => { /* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ module.exports = function (cssWithMappingToString) { var list = []; // return the list of modules as css string list.toString = function toString() { return this.map(function (item) { var content = ""; var needLayer = typeof item[5] !== "undefined"; if (item[4]) { content += "@supports (".concat(item[4], ") {"); } if (item[2]) { content += "@media ".concat(item[2], " {"); } if (needLayer) { content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {"); } content += cssWithMappingToString(item); if (needLayer) { content += "}"; } if (item[2]) { content += "}"; } if (item[4]) { content += "}"; } return content; }).join(""); }; // import a list of modules into the list list.i = function i(modules, media, dedupe, supports, layer) { if (typeof modules === "string") { modules = [[null, modules, undefined]]; } var alreadyImportedModules = {}; if (dedupe) { for (var k = 0; k < this.length; k++) { var id = this[k][0]; if (id != null) { alreadyImportedModules[id] = true; } } } for (var _k = 0; _k < modules.length; _k++) { var item = [].concat(modules[_k]); if (dedupe && alreadyImportedModules[item[0]]) { continue; } if (typeof layer !== "undefined") { if (typeof item[5] === "undefined") { item[5] = layer; } else { item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}"); item[5] = layer; } } if (media) { if (!item[2]) { item[2] = media; } else { item[1] = "@media ".concat(item[2], " {").concat(item[1], "}"); item[2] = media; } } if (supports) { if (!item[4]) { item[4] = "".concat(supports); } else { item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}"); item[4] = supports; } } list.push(item); } }; return list; }; /***/ }), /***/ 1: /***/ ((module) => { module.exports = function (item) { var content = item[1]; var cssMapping = item[3]; if (!cssMapping) { return content; } if (typeof btoa === "function") { var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping)))); var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64); var sourceMapping = "/*# ".concat(data, " */"); return [content].concat([sourceMapping]).join("\n"); } return [content].join("\n"); }; /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ id: moduleId, /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ /******/ (() => { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = (module) => { /******/ var getter = module && module.__esModule ? /******/ () => (module['default']) : /******/ () => (module); /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // EXPORTS __webpack_require__.d(__webpack_exports__, { eKr: () => (/* reexport */ ActionCompleteEvent), yVm: () => (/* reexport */ ActionContext), a7j: () => (/* reexport */ ActionQueue), U_w: () => (/* reexport */ ActionSequence), JF2: () => (/* reexport */ ActionStartEvent), htg: () => (/* reexport */ ActionsComponent), HXL: () => (/* reexport */ ActionsSystem), mcg: () => (/* reexport */ ActivateEvent), Agj: () => (/* reexport */ Actor), J3_: () => (/* reexport */ ActorEvents), Wgv: () => (/* reexport */ AddEvent), u6S: () => (/* reexport */ AddedComponent), x7M: () => (/* reexport */ AffineMatrix), X55: () => (/* reexport */ Animation), m3M: () => (/* reexport */ AnimationDirection), aE5: () => (/* reexport */ AnimationEvents), YJU: () => (/* reexport */ AnimationStrategy), eZi: () => (/* reexport */ ArcadeSolver), GNv: () => (/* reexport */ AudioContextFactory), Y56: () => (/* reexport */ Axes), _0v: () => (/* reexport */ Axis), vhs: () => (/* reexport */ BaseAlign), vrQ: () => (/* reexport */ BezierCurve), Z8b: () => (/* reexport */ Blink), Yfw: () => (/* reexport */ BodyComponent), IcQ: () => (/* reexport */ BoundingBox), kgJ: () => (/* reexport */ BrowserComponent), GTT: () => (/* reexport */ BrowserEvents), ypY: () => (/* reexport */ Buttons), i7d: () => (/* reexport */ Camera), fQ3: () => (/* reexport */ CameraEvents), HlI: () => (/* reexport */ Canvas), jlt: () => (/* reexport */ Circle), VQc: () => (/* reexport */ CircleCollider), zD7: () => (/* reexport */ Clock), AUF: () => (/* reexport */ ClosestLineJumpTable), JoF: () => (/* reexport */ Collider), MlA: () => (/* reexport */ ColliderComponent), PZh: () => (/* reexport */ CollisionContact), qA: () => (/* reexport */ CollisionEndEvent), CrD: () => (/* reexport */ CollisionGroup), dQK: () => (/* reexport */ CollisionGroupManager), D3r: () => (/* reexport */ CollisionJumpTable), Qpo: () => (/* reexport */ CollisionPostSolveEvent), D9n: () => (/* reexport */ CollisionPreSolveEvent), b6v: () => (/* reexport */ CollisionStartEvent), mvh: () => (/* reexport */ CollisionSystem), Bpo: () => (/* reexport */ CollisionType), Q1f: () => (/* reexport */ Color), IKv: () => (/* reexport */ ColorBlindFlags), fcV: () => (/* reexport */ ColorBlindnessMode), Glf: () => (/* reexport */ ColorBlindnessPostProcessor), uAl: () => (/* reexport */ Component), ElT: () => (/* reexport */ CompositeCollider), Z8r: () => (/* reexport */ ConsoleAppender), QSL: () => (/* reexport */ ContactConstraintPoint), sPV: () => (/* reexport */ ContactEndEvent), nAn: () => (/* reexport */ ContactSolveBias), zCU: () => (/* reexport */ ContactStartEvent), QrV: () => (/* reexport */ CoordPlane), fF9: () => (/* reexport */ CrossFade), Jqv: () => (/* reexport */ CurveBy), d_u: () => (/* reexport */ CurveTo), xI8: () => (/* reexport */ DeactivateEvent), yar: () => (/* reexport */ Debug), SP7: () => (/* reexport */ DebugConfig), oRy: () => (/* reexport */ DebugGraphicsComponent), f5X: () => (/* reexport */ DebugSystem), V1c: () => (/* reexport */ DebugText), Mlx: () => (/* reexport */ DefaultAntialiasOptions), ZiM: () => (/* reexport */ DefaultGarbageCollectionOptions), ZCo: () => (/* reexport */ DefaultLoader), J5p: () => (/* reexport */ DefaultPixelArtOptions), mL_: () => (/* reexport */ DegreeOfFreedom), Guw: () => (/* reexport */ Delay), N5j: () => (/* reexport */ Detector), pgY: () => (/* reexport */ Die), OP3: () => (/* reexport */ Direction), rl5: () => (/* reexport */ Director), eod: () => (/* reexport */ DirectorEvents), q5Z: () => (/* reexport */ DisplayMode), YUC: () => (/* reexport */ DynamicTree), saR: () => (/* reexport */ DynamicTreeCollisionProcessor), hvr: () => (/* binding */ EX_VERSION), Qol: () => (/* reexport */ EaseBy), Wf4: () => (/* reexport */ EaseTo), JCs: () => (/* reexport */ EasingFunctions), gJV: () => (/* reexport */ EdgeCollider), fWD: () => (/* reexport */ ElasticToActorStrategy), Va_: () => (/* reexport */ EmitterType), N$8: () => (/* reexport */ Engine), _jQ: () => (/* reexport */ EngineEvents), rxj: () => (/* reexport */ EnterTriggerEvent), rhv: () => (/* reexport */ EnterViewPortEvent), wCu: () => (/* reexport */ Entity), HAp: () => (/* reexport */ EntityEvents), Zy1: () => (/* reexport */ EntityManager), bkB: () => (/* reexport */ EventEmitter), wfL: () => (/* reexport */ EventTypes), sVA: () => (/* reexport */ Events_namespaceObject), $Gs: () => (/* reexport */ ExResponse), CJ0: () => (/* reexport */ ExcaliburGraphicsContext2DCanvas), NWh: () => (/* reexport */ ExcaliburGraphicsContextWebGL), tWi: () => (/* reexport */ ExitTriggerEvent), xAj: () => (/* reexport */ ExitViewPortEvent), zWh: () => (/* reexport */ Fade), i_4: () => (/* reexport */ FadeInOut), iIx: () => (/* reexport */ Flags), Hxo: () => (/* reexport */ Flash), c9e: () => (/* reexport */ Follow), KQV: () => (/* reexport */ Font), weH: () => (/* reexport */ FontCache), jXp: () => (/* reexport */ FontSource), zzY: () => (/* reexport */ FontStyle), yRQ: () => (/* reexport */ FontUnit), MtE: () => (/* reexport */ FpsSampler), rPj: () => (/* reexport */ FrameStats), KLc: () => (/* reexport */ Future), Fir: () => (/* reexport */ GameEvent), V5f: () => (/* reexport */ GameStartEvent), Xj7: () => (/* reexport */ GameStopEvent), Wud: () => (/* reexport */ Gamepad), FVg: () => (/* reexport */ GamepadAxisEvent), g5Y: () => (/* reexport */ GamepadButtonEvent), YQB: () => (/* reexport */ GamepadConnectEvent), KPb: () => (/* reexport */ GamepadDisconnectEvent), nHK: () => (/* reexport */ Gamepads), Jrb: () => (/* reexport */ GarbageCollector), TX_: () => (/* reexport */ Gif), Olt: () => (/* reexport */ GifParser), r3n: () => (/* reexport */ GlobalCoordinates), Fvk: () => (/* reexport */ GpuParticleEmitter), gpR: () => (/* reexport */ GpuParticleRenderer), vYh: () => (/* reexport */ Graphic), hnk: () => (/* reexport */ GraphicsComponent), D2R: () => (/* reexport */ GraphicsGroup), n1o: () => (/* reexport */ GraphicsSystem), h9O: () => (/* reexport */ HashColliderProxy), X5j: () => (/* reexport */ HashGridCell), p3P: () => (/* reexport */ HashGridProxy), RLG: () => (/* reexport */ HiddenEvent), fBU: () => (/* reexport */ HorizontalFirst), Adb: () => (/* reexport */ ImageFiltering), bEs: () => (/* reexport */ ImageSource), wCy: () => (/* reexport */ ImageSourceAttributeConstants), CbD: () => (/* reexport */ ImageWrapping), x_C: () => (/* reexport */ InitializeEvent), pGf: () => (/* reexport */ InputHost), ibQ: () => (/* reexport */ InputMapper), shR: () => (/* reexport */ IsometricEntityComponent), Yjk: () => (/* reexport */ IsometricEntitySystem), _u1: () => (/* reexport */ IsometricMap), OBI: () => (/* reexport */ IsometricTile), klh: () => (/* reexport */ KeyEvent), s3S: () => (/* reexport */ Keyboard), D$R: () => (/* reexport */ Keys), xth: () => (/* reexport */ KillEvent), JU7: () => (/* reexport */ Label), h9x: () => (/* reexport */ LimitCameraBoundsStrategy), N1A: () => (/* reexport */ Line), e_k: () => (/* reexport */ LineSegment), aHM: () => (/* reexport */ Loader), tlv: () => (/* reexport */ LoaderEvents), Vi9: () => (/* reexport */ LockCameraToActorAxisStrategy), ieR: () => (/* reexport */ LockCameraToActorStrategy), $bb: () => (/* reexport */ LogLevel), VyI: () => (/* reexport */ Logger), imn: () => (/* reexport */ Material), uqu: () => (/* reexport */ Matrix), QnL: () => (/* reexport */ MatrixLocations), vnc: () => (/* reexport */ MediaEvent), wk_: () => (/* reexport */ Meet), GH0: () => (/* reexport */ MotionComponent), _1r: () => (/* reexport */ MotionSystem), l0X: () => (/* reexport */ MoveBy), bT: () => (/* reexport */ MoveByWithOptions), HHX: () => (/* reexport */ MoveTo), jtW: () => (/* reexport */ MoveToWithOptions), tjk: () => (/* reexport */ NativePointerButton), rWe: () => (/* reexport */ NativeSoundEvent), j9l: () => (/* reexport */ NativeSoundProcessedEvent), l0$: () => (/* reexport */ NineSlice), sGJ: () => (/* reexport */ NineSliceStretch), NVp: () => (/* reexport */ None), cPK: () => (/* reexport */ Observable), XoL: () => (/* reexport */ OffscreenSystem), RmF: () => (/* reexport */ Pair), DXI: () => (/* reexport */ ParallaxComponent), tCD: () => (/* reexport */ ParallelActions), J3D: () => (/* reexport */ Particle), vCJ: () => (/* reexport */ ParticleEmitter), e6k: () => (/* reexport */ ParticleRenderer), f9l: () => (/* reexport */ ParticleTransform), v9m: () => (/* reexport */ PhysicsStats), yRJ: () => (/* reexport */ PhysicsWorld), EU6: () => (/* reexport */ PointerAbstraction), m3O: () => (/* reexport */ PointerButton), Ryz: () => (/* reexport */ PointerComponent), OxP: () => (/* reexport */ PointerEvent), LEs: () => (/* reexport */ PointerEventReceiver), Ec: () => (/* reexport */ PointerScope), Pi5: () => (/* reexport */ PointerSystem), gmH: () => (/* reexport */ PointerType), tS: () => (/* reexport */ Polygon), XxX: () => (/* reexport */ PolygonCollider), bCz: () => (/* reexport */ Pool), nYS: () => (/* reexport */ PostCollisionEvent), yiT: () => (/* reexport */ PostDebugDrawEvent), NHl: () => (/* reexport */ PostDrawEvent), mO8: () => (/* reexport */ PostFrameEvent), PXI: () => (/* reexport */ PostKillEvent), bn5: () => (/* reexport */ PostTransformDrawEvent), Ywr: () => (/* reexport */ PostUpdateEvent), cMd: () => (/* reexport */ PreCollisionEvent), Bs6: () => (/* reexport */ PreDebugDrawEvent), G0k: () => (/* reexport */ PreDrawEvent), pyn: () => (/* reexport */ PreFrameEvent), QeM: () => (/* reexport */ PreKillEvent), aPX: () => (/* reexport */ PreLoadEvent), ITP: () => (/* reexport */ PreTransformDrawEvent), BY0: () => (/* reexport */ PreUpdateEvent), MFw: () => (/* reexport */ Projection), sBn: () => (/* reexport */ QuadIndexBuffer), S3L: () => (/* reexport */ QuadTree), XKQ: () => (/* reexport */ Query), ESI: () => (/* reexport */ QueryManager), uxz: () => (/* reexport */ RadiusAroundActorStrategy), o8N: () => (/* reexport */ Random), u_r: () => (/* reexport */ Raster), RlV: () => (/* reexport */ Ray), gVA: () => (/* reexport */ RealisticSolver), M_G: () => (/* reexport */ Rectangle), BpG: () => (/* reexport */ RemoveEvent), GRB: () => (/* reexport */ RemovedComponent), kM6: () => (/* reexport */ Repeat), dO8: () => (/* reexport */ RepeatForever), jgM: () => (/* reexport */ Resolution), FWq: () => (/* reexport */ Resource), s3j: () => (/* reexport */ ResourceEvents), hlw: () => (/* reexport */ RotateBy), L0q: () => (/* reexport */ RotateByWithOptions), B7e: () => (/* reexport */ RotateTo), PGN: () => (/* reexport */ RotateToWithOptions), H_X: () => (/* reexport */ RotationType), S_d: () => (/* reexport */ ScaleBy), _Tq: () => (/* reexport */ ScaleByWithOptions), U7E: () => (/* reexport */ ScaleTo), IOH: () => (/* reexport */ ScaleToWithOptions), Z58: () => (/* reexport */ Scene), yh2: () => (/* reexport */ SceneEvents), ff$: () => (/* reexport */ Screen), cWi: () => (/* reexport */ ScreenAppender), NBt: () => (/* reexport */ ScreenElement), oNz: () => (/* reexport */ ScreenEvents), QlU: () => (/* reexport */ ScreenShader), Xey: () => (/* reexport */ ScrollPreventionMode), jft: () => (/* reexport */ Semaphore), _r8: () => (/* reexport */ SeparatingAxis), bTC: () => (/* reexport */ SeparationInfo), Mtr: () => (/* reexport */ Shader), ypk: () => (/* reexport */ Shape), mnM: () => (/* reexport */ Side), q7S: () => (/* reexport */ Slide), bAZ: () => (/* reexport */ SolverStrategy), ABN: () => (/* reexport */ Sound), VK6: () => (/* reexport */ SoundEvents), Hj2: () => (/* reexport */ SparseHashGrid), Df8: () => (/* reexport */ SparseHashGridCollisionProcessor), oOx: () => (/* reexport */ SpatialPartitionStrategy), kxk: () => (/* reexport */ Sprite), DT1: () => (/* reexport */ SpriteFont), FLG: () => (/* reexport */ SpriteSheet), qN_: () => (/* reexport */ StandardClock), Z37: () => (/* reexport */ StateMachine), FtL: () => (/* reexport */ StrategyContainer), Z6X: () => (/* reexport */ Stream), iQT: () => (/* reexport */ System), ziO: () => (/* reexport */ SystemManager), OEF: () => (/* reexport */ SystemPriority), uuE: () => (/* reexport */ SystemType), tiv: () => (/* reexport */ TagQuery), T$Y: () => (/* reexport */ TestClock), EYj: () => (/* reexport */ Text), nOB: () => (/* reexport */ TextAlign), Tap: () => (/* reexport */ TextureLoader), FAs: () => (/* reexport */ Tile), B_P: () => (/* reexport */ TileMap), aA5: () => (/* reexport */ TileMapEvents), J3s: () => (/* reexport */ TiledAnimation), Y0Q: () => (/* reexport */ TiledSprite), M4G: () => (/* reexport */ Timer), l$l: () => (/* reexport */ Toaster), dLy: () => (/* reexport */ transform_Transform), WZP: () => (/* reexport */ TransformComponent), eB6: () => (/* reexport */ Transition), nFK: () => (/* reexport */ TreeNode), l9z: () => (/* reexport */ Trigger), YOF: () => (/* reexport */ TriggerEvents), yhB: () => (/* reexport */ TwoPI), J0N: () => (/* reexport */ Util_Index_namespaceObject), Miz: () => (/* reexport */ Vector), Bj4: () => (/* reexport */ VectorView), Rcs: () => (/* reexport */ VertexBuffer), vJ4: () => (/* reexport */ VertexLayout), TqC: () => (/* reexport */ VerticalFirst), nM0: () => (/* reexport */ VisibleEvent), X1u: () => (/* reexport */ WebAudio), SpZ: () => (/* reexport */ WebAudioInstance), DX8: () => (/* reexport */ WheelDeltaMode), Yx$: () => (/* reexport */ WheelEvent), HK4: () => (/* reexport */ World), yt5: () => (/* reexport */ approximatelyEqual), vAR: () => (/* reexport */ assert), SE$: () => (/* reexport */ canonicalizeAngle), qE8: () => (/* reexport */ clamp), Pz7: () => (/* reexport */ coroutine), sX_: () => (/* reexport */ createId), JuI: () => (/* reexport */ frac), pxT: () => (/* reexport */ getDefaultPhysicsConfig), Nl$: () => (/* reexport */ hasGraphicsTick), zDr: () => (/* reexport */ hasOnAdd), OwT: () => (/* reexport */ hasOnInitialize), P$G: () => (/* reexport */ hasOnPostUpdate), mHV: () => (/* reexport */ hasOnPreUpdate), kEA: () => (/* reexport */ hasOnRemove), Fx_: () => (/* reexport */ hasPostDraw), WFC: () => (/* reexport */ hasPreDraw), vKu: () => (/* reexport */ has_add), aDq: () => (/* reexport */ has_initialize), jIg: () => (/* reexport */ has_postupdate), UH3: () => (/* reexport */ has_preupdate), AJO: () => (/* reexport */ has_remove), U4: () => (/* reexport */ inverseLerp), xAc: () => (/* reexport */ inverseLerpVector), _3Y: () => (/* reexport */ isActor), K6X: () => (/* reexport */ isAddedComponent), C1Y: () => (/* reexport */ isComponentCtor), Aw1: () => (/* reexport */ isLoaderConstructor), tm8: () => (/* reexport */ isMoveByOptions), LBV: () => (/* reexport */ isMoveToOptions), A8$: () => (/* reexport */ isRemovedComponent), F5e: () => (/* reexport */ isRotateByOptions), ran: () => (/* reexport */ isRotateToOptions), c8L: () => (/* reexport */ isScaleByOptions), o6M: () => (/* reexport */ isScaleToOptions), hsx: () => (/* reexport */ isSceneConstructor), l9E: () => (/* reexport */ isScreenElement), aSf: () => (/* reexport */ isSystemConstructor), CcK: () => (/* reexport */ lerp), nU8: () => (/* reexport */ lerpAngle), td6: () => (/* reexport */ lerpVector), Zex: () => (/* reexport */ maxMessages), bkJ: () => (/* reexport */ nextActionId), mXP: () => (/* reexport */ obsolete), vt$: () => (/* reexport */ parseImageFiltering), hCA: () => (/* reexport */ parseImageWrapping), pjR: () => (/* reexport */ pixelSnapEpsilon), U43: () => (/* reexport */ randomInRange), pSZ: () => (/* reexport */ randomIntInRange), y17: () => (/* reexport */ range), Ew7: () => (/* reexport */ remap), hG1: () => (/* reexport */ remapVector), jVr: () => (/* reexport */ resetObsoleteCounter), _SZ: () => (/* reexport */ sign), xWn: () => (/* reexport */ toDegrees), ehJ: () => (/* reexport */ toRadians), t6s: () => (/* reexport */ vec), Eyn: () => (/* reexport */ webgl_util_namespaceObject) }); // NAMESPACE OBJECT: ./Graphics/Context/webgl-util.ts var webgl_util_namespaceObject = {}; __webpack_require__.r(webgl_util_namespaceObject); __webpack_require__.d(webgl_util_namespaceObject, { getAttributeComponentSize: () => (getAttributeComponentSize), getAttributePointerType: () => (getAttributePointerType), getGLTypeFromSource: () => (getGLTypeFromSource), getGlTypeSizeBytes: () => (getGlTypeSizeBytes), getMaxShaderComplexity: () => (getMaxShaderComplexity), isAttributeInSource: () => (isAttributeInSource) }); // NAMESPACE OBJECT: ./Util/DrawUtil.ts var DrawUtil_namespaceObject = {}; __webpack_require__.r(DrawUtil_namespaceObject); __webpack_require__.d(DrawUtil_namespaceObject, { circle: () => (circle), line: () => (line), point: () => (point), roundRect: () => (roundRect), vector: () => (vector) }); // NAMESPACE OBJECT: ./Events.ts var Events_namespaceObject = {}; __webpack_require__.r(Events_namespaceObject); __webpack_require__.d(Events_namespaceObject, { ActionCompleteEvent: () => (ActionCompleteEvent), ActionStartEvent: () => (ActionStartEvent), ActivateEvent: () => (ActivateEvent), AddEvent: () => (AddEvent), CollisionEndEvent: () => (CollisionEndEvent), CollisionPostSolveEvent: () => (CollisionPostSolveEvent), CollisionPreSolveEvent: () => (CollisionPreSolveEvent), CollisionStartEvent: () => (CollisionStartEvent), ContactEndEvent: () => (ContactEndEvent), ContactStartEvent: () => (ContactStartEvent), DeactivateEvent: () => (DeactivateEvent), EnterTriggerEvent: () => (EnterTriggerEvent), EnterViewPortEvent: () => (EnterViewPortEvent), EventTypes: () => (EventTypes), ExitTriggerEvent: () => (ExitTriggerEvent), ExitViewPortEvent: () => (ExitViewPortEvent), GameEvent: () => (GameEvent), GameStartEvent: () => (GameStartEvent), GameStopEvent: () => (GameStopEvent), GamepadAxisEvent: () => (GamepadAxisEvent), GamepadButtonEvent: () => (GamepadButtonEvent), GamepadConnectEvent: () => (GamepadConnectEvent), GamepadDisconnectEvent: () => (GamepadDisconnectEvent), HiddenEvent: () => (HiddenEvent), InitializeEvent: () => (InitializeEvent), KillEvent: () => (KillEvent), PostCollisionEvent: () => (PostCollisionEvent), PostDebugDrawEvent: () => (PostDebugDrawEvent), PostDrawEvent: () => (PostDrawEvent), PostFrameEvent: () => (PostFrameEvent), PostKillEvent: () => (PostKillEvent), PostTransformDrawEvent: () => (PostTransformDrawEvent), PostUpdateEvent: () => (PostUpdateEvent), PreCollisionEvent: () => (PreCollisionEvent), PreDebugDrawEvent: () => (PreDebugDrawEvent), PreDrawEvent: () => (PreDrawEvent), PreFrameEvent: () => (PreFrameEvent), PreKillEvent: () => (PreKillEvent), PreTransformDrawEvent: () => (PreTransformDrawEvent), PreUpdateEvent: () => (PreUpdateEvent), RemoveEvent: () => (RemoveEvent), VisibleEvent: () => (VisibleEvent) }); // NAMESPACE OBJECT: ./Util/Index.ts var Util_Index_namespaceObject = {}; __webpack_require__.r(Util_Index_namespaceObject); __webpack_require__.d(Util_Index_namespaceObject, { ConsoleAppender: () => (ConsoleAppender), DrawUtil: () => (DrawUtil_namespaceObject), EasingFunctions: () => (EasingFunctions), LogLevel: () => (LogLevel), Logger: () => (Logger), Observable: () => (Observable), ScreenAppender: () => (ScreenAppender), addItemToArray: () => (addItemToArray), contains: () => (contains), delay: () => (delay), fail: () => (fail), getPosition: () => (getPosition), isObject: () => (isObject), mergeDeep: () => (mergeDeep), omit: () => (omit), removeItemFromArray: () => (removeItemFromArray) }); ;// ./Polyfill.ts /** * Polyfill adding function */ function polyfill() { /* istanbul ignore next */ if (typeof window === 'undefined') { window = { audioContext: function () { return; } }; } /* istanbul ignore next */ if (typeof window !== 'undefined' && !window.requestAnimationFrame) { window.requestAnimationFrame = window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function (callback) { window.setInterval(callback, 1000 / 60); }; } /* istanbul ignore next */ if (typeof window !== 'undefined' && !window.cancelAnimationFrame) { window.cancelAnimationFrame = window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || function () { return; }; } /* istanbul ignore next */ if (typeof window !== 'undefined' && !window.AudioContext) { if (window.webkitAudioContext) { const ctx = window.webkitAudioContext; const replaceMe = ctx.prototype.decodeAudioData; window.webkitAudioContext.prototype.decodeAudioData = function (arrayBuffer) { return new Promise((resolve, reject) => { replaceMe.call(this, arrayBuffer, resolve, reject); }); }; } window.AudioContext = window.AudioContext || window.webkitAudioContext || window.mozAudioContext || window.msAudioContext || window.oAudioContext; } /* istanbul ignore next */ if (typeof window !== 'undefined' && !window.devicePixelRatio) { window.devicePixelRatio = window.devicePixelRatio || 1; } /* istanbul ignore next */ if (typeof window !== 'undefined' && !window.requestIdleCallback) { // Adapted from https://developer.chrome.com/blog/using-requestidlecallback#checking_for_requestidlecallback window.requestIdleCallback = window.requestIdleCallback || function (cb) { const start = Date.now(); return setTimeout(function () { cb({ didTimeout: false, timeRemaining: function () { return Math.max(0, 50 - (Date.now() - start)); } }); }, 1); }; window.cancelIdleCallback = window.cancelIdleCallback || function (id) { clearTimeout(id); }; } } ;// ./Flags.ts /** * Flags is a feature flag implementation for Excalibur. They can only be operated **before {@apilink Engine} construction** * after which they are frozen and are read-only. * * Flags are used to enable experimental or preview features in Excalibur. */ class Flags { /** * Force excalibur to load the Canvas 2D graphics context fallback * @warning not all features of excalibur are supported in the Canvas 2D fallback */ static useCanvasGraphicsContext() { Flags.enable('use-canvas-context'); } /** * Force excalibur to use the less optimized image renderer */ static useLegacyImageRenderer() { Flags.enable('use-legacy-image-renderer'); } /** * Freeze all flag modifications making them readonly */ static freeze() { Flags._FROZEN = true; } /** * Resets internal flag state, not meant to be called by users. Only used for testing. * * Calling this in your game is UNSUPPORTED * @internal */ static _reset() { Flags._FROZEN = false; Flags._FLAGS = {}; } /** * Enable a specific feature flag by name. **Note: can only be set before {@apilink Engine} constructor time** * @param flagName */ static enable(flagName) { if (this._FROZEN) { throw Error('Feature flags can only be enabled before Engine constructor time'); } Flags._FLAGS[flagName] = true; } /** * Disable a specific feature flag by name. **Note: can only be set before {@apilink Engine} constructor time** * @param flagName */ static disable(flagName) { if (this._FROZEN) { throw Error('Feature flags can only be disabled before Engine constructor time'); } Flags._FLAGS[flagName] = false; } /** * Check if a flag is enabled. If the flag is disabled or does not exist `false` is returned * @param flagName */ static isEnabled(flagName) { return !!Flags._FLAGS[flagName]; } /** * Show a list of currently known flags */ static show() { return Object.keys(Flags._FLAGS); } } Flags._FROZEN = false; Flags._FLAGS = {}; ;// ./Id.ts /** * Create a branded ID type from a number */ function createId(type, value) { return { type, value }; } ;// ./Util/Future.ts /** * Future is a wrapper around a native browser Promise to allow resolving/rejecting at any time */ class Future { constructor() { this._isCompleted = false; this.promise = new Promise((resolve, reject) => { this._resolver = resolve; this._rejecter = reject; }); } get isCompleted() { return this._isCompleted; } resolve(value) { if (this._isCompleted) { return; } this._isCompleted = true; this._resolver(value); } reject(error) { if (this._isCompleted) { return; } this._isCompleted = true; this._rejecter(error); } } ;// ./EventEmitter.ts /** * Excalibur's typed event emitter, this allows events to be sent with any string to Type mapping */ class EventEmitter { constructor() { this._paused = false; this._empty = true; this._listeners = {}; this._listenersOnce = {}; this._pipes = []; } /** * Removes all listeners and pipes */ clear() { this._listeners = {}; this._listenersOnce = {}; this._pipes.length = 0; this._empty = true; } on(eventName, handler) { var _a; this._empty = false; this._listeners[eventName] = (_a = this._listeners[eventName]) !== null && _a !== void 0 ? _a : []; this._listeners[eventName].push(handler); return { close: () => this.off(eventName, handler) }; } once(eventName, handler) { var _a; this._empty = false; this._listenersOnce[eventName] = (_a = this._listenersOnce[eventName]) !== null && _a !== void 0 ? _a : []; this._listenersOnce[eventName].push(handler); return { close: () => this.off(eventName, handler) }; } off(eventName, handler) { var _a, _b; if (handler) { const newListeners = (_a = this._listeners[eventName]) === null || _a === void 0 ? void 0 : _a.filter((h) => h !== handler); this._listeners[eventName] = newListeners; const newOnceListeners = (_b = this._listenersOnce[eventName]) === null || _b === void 0 ? void 0 : _b.filter((h) => h !== handler); this._listenersOnce[eventName] = newOnceListeners; } else { delete this._listeners[eventName]; } } emit(eventName, event) { if (this._empty) { return; } if (this._paused) { return; } const listeners = this._listeners[eventName]; if (listeners) { for (let i = 0; i < listeners.length; i++) { listeners[i](event); } } const onces = this._listenersOnce[eventName]; this._listenersOnce[eventName] = []; if (onces) { for (let i = 0; i < onces.length; i++) { onces[i](event); } } for (let i = 0; i < this._pipes.length; i++) { this._pipes[i].emit(eventName, event); } } /** * Replay events from this emitter to another * @param emitter */ pipe(emitter) { if (this === emitter) { throw Error('Cannot pipe to self'); } this._empty = false; this._pipes.push(emitter); return { close: () => { const i = this._pipes.indexOf(emitter); if (i > -1) { this._pipes.splice(i, 1); } } }; } /** * Remove any piped emitters * @param emitter */ unpipe(emitter) { const i = this._pipes.indexOf(emitter); if (i > -1) { this._pipes.splice(i, 1); } } /** * Paused event emitters do not emit events */ pause() { this._paused = true; } /** * Unpaused event emitter do emit events */ unpause() { this._paused = false; } } ;// ./Input/PointerScope.ts /** * Determines the scope of handling mouse/touch events. */ var PointerScope; (function (PointerScope) { /** * Handle events on the `canvas` element only. Events originating outside the * `canvas` will not be handled. */ PointerScope["Canvas"] = "Canvas"; /** * Handles events on the entire document. All events will be handled by Excalibur. */ PointerScope["Document"] = "Document"; })(PointerScope || (PointerScope = {})); ;// ./Math/rotation-type.ts /** * An enum that describes the strategies that rotation actions can use */ var RotationType; (function (RotationType) { /** * Rotation via `ShortestPath` will use the smallest angle * between the starting and ending points. This strategy is the default behavior. */ RotationType["ShortestPath"] = "shortest-path"; /** * Rotation via `LongestPath` will use the largest angle * between the starting and ending points. */ RotationType["LongestPath"] = "longest-path"; /** * Rotation via `Clockwise` will travel in a clockwise direction, * regardless of the starting and ending points. */ RotationType["Clockwise"] = "clockwise"; /** * Rotation via `CounterClockwise` will travel in a counterclockwise direction, * regardless of the starting and ending points. */ RotationType["CounterClockwise"] = "counter-clockwise"; })(RotationType || (RotationType = {})); ;// ./Math/Random.ts /** * @module * Pseudo-Random Utility * * A pseudo-random utility to add seeded random support for help in * generating things like terrain or reproducible randomness. Uses the * [Mersenne Twister](https://en.wikipedia.org/wiki/Mersenne_Twister) algorithm. */ /** * 32-bit mask */ const BITMASK32 = 0xffffffff; /** * Pseudo-random number generator following the Mersenne_Twister algorithm. Given a seed this generator will produce the same sequence * of numbers each time it is called. * See https://en.wikipedia.org/wiki/Mersenne_Twister for more details. * Uses the MT19937-32 (2002) implementation documented here http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html * * Api inspired by http://chancejs.com/# https://github.com/chancejs/chancejs */ class Random { /** * If no seed is specified, the Date.now() is used */ constructor(seed) { this.seed = seed; // Separation point of one one word, the number of bits in the lower bitmask 0 <= r <= w-1 this._lowerMask = 0x7fffffff; // 31 bits same as _r this._upperMask = 0x80000000; // 34 high bits // Word size, 64 bits this._w = 32; // Degree of recurrence this._n = 624; // Middle word, an offset used in the recurrence defining the series x, 1<=m<n this._m = 397; // coefficients of teh rational normal form twist matrix this._a = 0x9908b0df; // tempering bit shifts and masks this._u = 11; this._s = 7; this._b = 0x9d2c5680; this._t = 15; this._c = 0xefc60000; this._l = 18; this._f = 1812433253; this._mt = new Array(this._n); // need to mask to support higher bit machines this._mt[0] = (seed || Date.now()) >>> 0; for (let i = 1; i < this._n; i++) { const s = this._mt[i - 1] ^ (this._mt[i - 1] >>> (this._w - 2)); // numbers are bigger than the JS max safe int, add in 16-bit chunks to prevent IEEE rounding errors on high bits this._mt[i] = (((this._f * ((s & 0xffff0000) >>> 16)) << 16) + this._f * (s & 0xffff) + i) >>> 0; } this._index = this._n; } /** * Apply the twist */ _twist() { const mag01 = [0x0, this._a]; let y = 0, i = 0; for (; i < this._n - this._m; i++) { y = (this._mt[i] & this._upperMask) | (this._mt[i + 1] & this._lowerMask); this._mt[i] = this._mt[i + this._m] ^ (y >>> 1) ^ (mag01[y & 0x1] & BITMASK32); } for (; i < this._n - 1; i++) { y = (this._mt[i] & this._upperMask) | (this._mt[i + 1] & this._lowerMask); this._mt[i] = this._mt[i + (this._m - this._n)] ^ (y >>> 1) ^ (mag01[y & 0x1] & BITMASK32); } y = (this._mt[this._n - 1] & this._upperMask) | (this._mt[0] & this._lowerMask); this._mt[this._n - 1] = this._mt[this._m - 1] ^ (y >>> 1) ^ (mag01[y & 0x1] & BITMASK32); this._index = 0; } /** * Return next 32 bit integer number in sequence */ nextInt() { if (this._index >= this._n) { this._twist(); } let y = this._mt[this._index++]; y ^= y >>> this._u; y ^= (y << this._s) & this._b; y ^= (y << this._t) & this._c; y ^= y >>> this