@rpgjs/common 5.0.0-alpha.42 → 5.0.0-alpha.44

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/index.js.map CHANGED
@@ -1 +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.8.3/node_modules/@signe/reactive/dist/index.js","../../../node_modules/.pnpm/@signe+sync@2.8.3/node_modules/@signe/sync/dist/chunk-7QVYU63E.js","../../../node_modules/.pnpm/@signe+sync@2.8.3/node_modules/@signe/sync/dist/index.js","../src/database/Item.ts","../src/database/Skill.ts","../src/Player.ts","../src/Shape.ts","../../physic/dist/index2.js","../../physic/dist/index3.js","../../physic/dist/index4.js","../../physic/dist/index5.js","../../physic/dist/index6.js","../../physic/dist/index43.js","../../physic/dist/index7.js","../../physic/dist/index8.js","../../physic/dist/index9.js","../../physic/dist/index10.js","../../physic/dist/index12.js","../../physic/dist/index11.js","../../physic/dist/index13.js","../../physic/dist/index19.js","../../physic/dist/index18.js","../../physic/dist/index14.js","../../physic/dist/index21.js","../../physic/dist/index20.js","../../physic/dist/index15.js","../../physic/dist/index16.js","../../physic/dist/index17.js","../../physic/dist/index22.js","../../physic/dist/index24.js","../../physic/dist/index23.js","../../physic/dist/index25.js","../../physic/dist/index26.js","../../physic/dist/index27.js","../../physic/dist/index31.js","../../physic/dist/index30.js","../../physic/dist/index29.js","../../physic/dist/index28.js","../../physic/dist/index32.js","../../physic/dist/index33.js","../../physic/dist/index34.js","../../physic/dist/index35.js","../../physic/dist/index36.js","../../physic/dist/index37.js","../../physic/dist/index38.js","../../physic/dist/index39.js","../../physic/dist/index40.js","../../physic/dist/index41.js","../../physic/dist/index42.js","../../physic/dist/index44.js","../../physic/dist/index45.js","../src/movement/MovementManager.ts","../src/rooms/Map.ts","../src/rooms/WorldMaps.ts","../src/modules.ts","../src/services/updateMap.ts","../src/Utils.ts","../src/PrebuiltGui.ts","../src/PerlinNoise.ts","../src/Presets.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, Observable } 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, options) {\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 const currentValue = getValue();\n let shouldEmit = true;\n if (options?.equal) {\n shouldEmit = !options.equal(currentValue, value);\n } else {\n shouldEmit = currentValue !== value;\n }\n if (shouldEmit) {\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 };\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 observables = [\n ...dependencies\n ].map((dep) => {\n if (isComputed(dep) && \"dependencies\" in dep) {\n const computedDep = dep;\n if (computedDep.dependencies.size === 0) {\n return new BehaviorSubject3(computedDep()).asObservable();\n }\n }\n return dep.observable;\n });\n const computedObservable = combineLatest(observables).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\");\nfunction linkedSignal(computationOrOptions, simpleOptions) {\n const dependencies = /* @__PURE__ */ new Set();\n let init = true;\n let lastComputedValue;\n let computeFunction;\n let sourceSignal;\n let computationFn;\n let equalFn;\n let previousValue;\n let isOverridden = false;\n let overriddenValue;\n let lastComputedBeforeOverride;\n let depVersion = 0;\n let overrideDepVersion = null;\n if (typeof computationOrOptions === \"function\") {\n computeFunction = computationOrOptions;\n equalFn = simpleOptions?.equal;\n } else {\n const options = computationOrOptions;\n sourceSignal = options.source;\n computationFn = options.computation;\n equalFn = options.equal;\n if (typeof sourceSignal === \"function\" && !isSignal(sourceSignal)) {\n const sourceFn = sourceSignal;\n computeFunction = /* @__PURE__ */ __name(() => {\n const sourceValue = sourceFn();\n if (computationFn.length > 1) {\n const result = computationFn(sourceValue, previousValue);\n previousValue = {\n source: sourceValue,\n value: result\n };\n return result;\n } else {\n const result = computationFn(sourceValue);\n previousValue = {\n source: sourceValue,\n value: result\n };\n return result;\n }\n }, \"computeFunction\");\n } else {\n const source = typeof sourceSignal === \"function\" ? sourceSignal : sourceSignal;\n computeFunction = /* @__PURE__ */ __name(() => {\n const sourceValue = source();\n if (computationFn.length > 1) {\n const result = computationFn(sourceValue, previousValue);\n previousValue = {\n source: sourceValue,\n value: result\n };\n return result;\n } else {\n const result = computationFn(sourceValue);\n previousValue = {\n source: sourceValue,\n value: result\n };\n return result;\n }\n }, \"computeFunction\");\n }\n }\n const previousTracker = reactiveStore.currentDependencyTracker;\n reactiveStore.currentDependencyTracker = (signal2) => {\n dependencies.add(signal2);\n };\n if (sourceSignal && typeof sourceSignal === \"function\" && !isSignal(sourceSignal)) {\n lastComputedValue = computeFunction();\n lastComputedBeforeOverride = lastComputedValue;\n } else if (sourceSignal && isSignal(sourceSignal)) {\n dependencies.add(sourceSignal);\n lastComputedValue = computeFunction();\n lastComputedBeforeOverride = lastComputedValue;\n } else {\n lastComputedValue = computeFunction();\n lastComputedBeforeOverride = lastComputedValue;\n }\n reactiveStore.currentDependencyTracker = previousTracker;\n const subject = new BehaviorSubject3(lastComputedValue);\n const observables = [\n ...dependencies\n ].map((dep) => {\n if (isComputed(dep) && \"dependencies\" in dep) {\n const computedDep = dep;\n if (computedDep.dependencies.size === 0) {\n return new BehaviorSubject3(computedDep()).asObservable();\n }\n }\n return dep.observable;\n });\n let linkedObservable;\n if (observables.length > 0) {\n linkedObservable = combineLatest(observables).pipe(filter(() => !init), map(() => {\n const computed2 = computeFunction();\n if (equalFn) {\n if (!equalFn(lastComputedValue, computed2)) {\n lastComputedValue = computed2;\n isOverridden = false;\n }\n } else {\n if (lastComputedValue !== computed2) {\n lastComputedValue = computed2;\n isOverridden = false;\n }\n }\n return lastComputedValue;\n }));\n } else {\n linkedObservable = subject.asObservable().pipe(filter(() => !init));\n }\n const fn = /* @__PURE__ */ __name(function() {\n trackDependency(fn);\n if (isOverridden && dependencies.size > 0) {\n if (overrideDepVersion !== depVersion) {\n const computed2 = computeFunction();\n isOverridden = false;\n overriddenValue = void 0;\n lastComputedValue = computed2;\n lastComputedBeforeOverride = computed2;\n overrideDepVersion = null;\n return computed2;\n }\n return overriddenValue;\n }\n if (isOverridden) {\n return overriddenValue;\n }\n if (dependencies.size === 0) {\n const computed2 = computeFunction();\n lastComputedValue = computed2;\n lastComputedBeforeOverride = computed2;\n }\n return lastComputedValue;\n }, \"fn\");\n fn.observable = new Observable((observer) => {\n const depSubscription = linkedObservable.subscribe((value) => {\n if (dependencies.size > 0) {\n depVersion++;\n isOverridden = false;\n overrideDepVersion = null;\n lastComputedValue = value;\n lastComputedBeforeOverride = value;\n } else {\n lastComputedValue = value;\n lastComputedBeforeOverride = value;\n }\n observer.next(value);\n });\n let subjectSubscription;\n if (dependencies.size === 0) {\n subjectSubscription = subject.pipe(filter(() => !init)).subscribe((value) => {\n observer.next(value);\n });\n }\n observer.next(lastComputedValue);\n return () => {\n depSubscription.unsubscribe();\n if (subjectSubscription) {\n subjectSubscription.unsubscribe();\n }\n };\n });\n fn.subscription = fn.observable.subscribe(() => {\n });\n fn.dependencies = dependencies;\n fn._subject = subject;\n fn.set = (value) => {\n if (!isOverridden) {\n lastComputedBeforeOverride = lastComputedValue;\n overrideDepVersion = depVersion;\n if (computationFn && sourceSignal) {\n const sourceValue = untracked(() => {\n if (typeof sourceSignal === \"function\") {\n const source = sourceSignal;\n return isSignal(source) ? source() : sourceSignal();\n }\n return sourceSignal();\n });\n previousValue = {\n source: sourceValue,\n value\n };\n }\n }\n isOverridden = true;\n overriddenValue = value;\n lastComputedValue = value;\n subject.next(value);\n };\n reactiveStore.currentSubscriptionsTracker?.(fn.subscription);\n init = false;\n return fn;\n}\n__name(linkedSignal, \"linkedSignal\");\nfunction untracked(fn) {\n const prevDepTracker = reactiveStore.currentDependencyTracker;\n const prevSubTracker = reactiveStore.currentSubscriptionsTracker;\n reactiveStore.currentDependencyTracker = null;\n reactiveStore.currentSubscriptionsTracker = null;\n try {\n return fn();\n } finally {\n reactiveStore.currentDependencyTracker = prevDepTracker;\n reactiveStore.currentSubscriptionsTracker = prevSubTracker;\n }\n}\n__name(untracked, \"untracked\");\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 linkedSignal,\n signal,\n untracked\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\");\nvar SNAPSHOT_SKIP = Symbol(\"snapshot-skip\");\nvar serializeSnapshotDeep = /* @__PURE__ */ __name((value, path, options, seen) => {\n if (isSignal(value)) {\n return serializeSnapshotDeep(value(), path, options, seen);\n }\n if (value instanceof Map) {\n return SNAPSHOT_SKIP;\n }\n if (options.filter && !options.filter(value, path)) {\n return SNAPSHOT_SKIP;\n }\n if (value instanceof Date) {\n return options.dateToString ? options.dateToString(value) : value.toISOString();\n }\n if (value && typeof value === \"object\") {\n if (seen.has(value)) {\n return SNAPSHOT_SKIP;\n }\n seen.add(value);\n if (Array.isArray(value)) {\n const result2 = [];\n value.forEach((item, index) => {\n const itemPath = path ? `${path}.${index}` : String(index);\n const serialized = serializeSnapshotDeep(item, itemPath, options, seen);\n if (serialized !== SNAPSHOT_SKIP) {\n result2.push(serialized);\n }\n });\n return result2;\n }\n const result = {};\n const idKey = isInstanceOfClass(value) ? value.constructor?._propertyMetadata?.get(\"id\") : void 0;\n const entries = Object.entries(value).filter(([key]) => isInstanceOfClass(value) ? key.startsWith(\"__\") || (idKey ? key === idKey : false) : true);\n for (const [key, childValue] of entries) {\n const normalizedKey = key.startsWith(\"__\") ? key.slice(2) : key;\n const childPath = path ? `${path}.${normalizedKey}` : normalizedKey;\n const serialized = serializeSnapshotDeep(childValue, childPath, options, seen);\n if (serialized !== SNAPSHOT_SKIP) {\n result[normalizedKey] = serialized;\n }\n }\n return result;\n }\n return value;\n}, \"serializeSnapshotDeep\");\nfunction createStatesSnapshotDeep(instance, options = {}) {\n const 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 if (!persist2) {\n continue;\n }\n const value = signal();\n const serialized = serializeSnapshotDeep(value, key, options, /* @__PURE__ */ new WeakSet());\n if (serialized !== SNAPSHOT_SKIP) {\n persistObject[key] = serialized;\n }\n }\n }\n return persistObject;\n}\n__name(createStatesSnapshotDeep, \"createStatesSnapshotDeep\");\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 const transform = signal.options?.transform;\n let signalValue = signal();\n if (transform) {\n signalValue = transform(signalValue);\n }\n if (isObject(signalValue) || Array.isArray(signalValue)) {\n signalValue = {\n ...signalValue\n };\n }\n const transformedValue = signalValue;\n const newPath = (path ? path + \".\" : \"\") + key;\n if (syncToClient) {\n currentClass.$valuesChanges.set(newPath, transformedValue);\n }\n if (persist2) {\n if (parentClass) currentClass.$valuesChanges.setPersist(path, transformedValue);\n }\n if (isComputed(signal)) {\n signal.observable.subscribe((newValue) => {\n if (syncToClient) {\n const transformedNewValue = transform ? transform(newValue) : newValue;\n currentClass.$valuesChanges.set(newPath, transformedNewValue);\n }\n });\n }\n }\n }\n}, \"createSyncClass\");\nvar type = /* @__PURE__ */ __name((_signal, path, options = {}, currentInstance) => {\n const { syncToClient = true, persist: persist2 = true, transform } = 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 const transformedValue = transform && value !== DELETE_TOKEN ? transform(value) : value;\n if (syncToClient) {\n currentInstance.$valuesChanges.set(propPath, transformedValue);\n }\n if (persist2 && currentInstance.$path !== void 0) {\n currentInstance.$valuesChanges.setPersist(transformedValue == DELETE_TOKEN ? propPath : currentInstance.$path, transformedValue);\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 const transformedInitialValue = transform ? transform(initialValue) : initialValue;\n currentInstance.$valuesChanges.set(signalPath, transformedInitialValue);\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 let transform;\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 if (options.hasOwnProperty(\"transform\")) {\n transform = options.transform;\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 transform\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 if (isSignal2(current) && Array.isArray(current()) && !isNaN(Number(part))) {\n current()[Number(part)] = 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 createStatesSnapshotDeep,\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\ninterface ItemData {\n name: string;\n description: string;\n price: number;\n quantity: number;\n atk: number;\n pdef: number;\n sdef: number;\n icon: string\n onAdd: (player: RpgCommonPlayer) => void;\n}\n\nexport class Item {\n @id() id = signal('');\n @sync() name = signal('');\n description = signal('');\n price = signal(0);\n atk = signal(0);\n pdef = signal(0);\n sdef = signal(0);\n @sync() icon = signal('')\n @sync() quantity = signal(1);\n\n onAdd: (player: RpgCommonPlayer) => void = () => {};\n\n constructor(data?: ItemData) {\n this.description.set(data?.description ?? '');\n this.price.set(data?.price ?? 0);\n this.name.set(data?.name ?? '');\n this.atk.set(data?.atk ?? 0);\n this.pdef.set(data?.pdef ?? 0);\n this.sdef.set(data?.sdef ?? 0);\n this.icon.set(data?.icon ?? '')\n this.onAdd = data?.onAdd?.bind(this) ?? (() => {});\n }\n}\n","import { signal } from \"@signe/reactive\";\nimport { id, sync } from \"@signe/sync\";\n\nexport interface SkillData {\n id: string;\n name: string;\n description: string;\n spCost: number;\n hitRate: number;\n power: number;\n coefficient: Record<string, number>;\n icon: string\n}\n\nexport class Skill {\n @id() id = signal('');\n @sync() name = signal('');\n description = signal('');\n @sync() spCost = signal(0);\n @sync() icon = signal('')\n hitRate = signal(0);\n power = signal(0);\n coefficient = signal({});\n\n constructor(data?: SkillData) {\n this.id.set(data?.id ?? '');\n this.name.set(data?.name ?? '');\n this.description.set(data?.description ?? '');\n this.spCost.set(data?.spCost ?? 0);\n this.hitRate.set(data?.hitRate ?? 0);\n this.power.set(data?.power ?? 0);\n this.coefficient.set(data?.coefficient ?? {});\n this.icon.set(data?.icon ?? '')\n }\n}","import { signal } from \"@signe/reactive\";\nimport { connected, id, persist, sync, users } from \"@signe/sync\";\nimport { Item, Skill } from \"./database\";\nimport { Constructor } from \"./Utils\";\n\nexport enum Control {\n Action = 'action',\n Attack = 'attack',\n Defense = 'defense',\n Skill = 'skill',\n Back = 'back',\n Up = 1,\n Down = 3,\n Right = 2,\n Left = 4\n}\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 abstract class RpgCommonPlayer {\n @id() id: string;\n @sync() name = signal(\"\");\n @sync() type = signal(\"\");\n // x and y must be @sync() to ensure initial positions are sent to client\n // The positions represent TOP-LEFT coordinates of the character's hitbox\n // @persist() only persists server-side but doesn't sync to client\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({\n persist: false\n }) 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() hpSignal = signal(0);\n @sync() spSignal = signal(0);\n @sync() _exp = signal(0);\n @sync() _level = signal(1);\n @sync() _class = signal({});\n @sync(Item) items = signal<Item[]>([]);\n @sync() equipments = signal<any[]>([]);\n @sync() states = signal<any[]>([]);\n @sync(Skill) skills = signal<Skill[]>([]);\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 @sync() _frames = signal<{ x: number; y: number; ts: number }[]>([]);\n @sync() componentsTop = signal<string | null>(null);\n @sync() componentsBottom = signal<string | null>(null);\n @sync() componentsCenter = signal<string | null>(null);\n @sync() componentsLeft = signal<string | null>(null);\n @sync() componentsRight = signal<string | null>(null);\n @connected() isConnected = signal(false)\n\n // Store intended movement direction (not synced, only used locally)\n private _intendedDirection: Direction | null = null;\n\n // Direction and animation locking (server-side only, not synced)\n private _directionFixed = signal(false);\n private _animationFixed = signal(false);\n\n /**\n * Get whether direction changes are locked\n * \n * @returns True if direction is locked and cannot be changed automatically\n * \n * @example\n * ```ts\n * if (player.directionFixed) {\n * // Direction is locked, won't change automatically\n * }\n * ```\n */\n get directionFixed(): boolean {\n return this._directionFixed();\n }\n\n /**\n * Set whether direction changes are locked\n * \n * When set to true, the player's direction will not change automatically\n * during movement or from physics engine callbacks.\n * \n * @param value - True to lock direction, false to allow automatic changes\n * \n * @example\n * ```ts\n * // Lock direction during a special animation\n * player.directionFixed = true;\n * player.setAnimation('attack');\n * // ... later\n * player.directionFixed = false;\n * ```\n */\n set directionFixed(value: boolean) {\n this._directionFixed.set(value);\n }\n\n /**\n * Get whether animation changes are locked\n * \n * @returns True if animation is locked and cannot be changed automatically\n * \n * @example\n * ```ts\n * if (player.animationFixed) {\n * // Animation is locked, won't change automatically\n * }\n * ```\n */\n get animationFixed(): boolean {\n return this._animationFixed();\n }\n\n /**\n * Set whether animation changes are locked\n * \n * When set to true, the player's animation will not change automatically\n * during movement or from physics engine callbacks.\n * \n * @param value - True to lock animation, false to allow automatic changes\n * \n * @example\n * ```ts\n * // Lock animation during a special skill\n * player.animationFixed = true;\n * player.setAnimation('skill');\n * // ... later\n * player.animationFixed = false;\n * ```\n */\n set animationFixed(value: boolean) {\n this._animationFixed.set(value);\n }\n\n pendingInputs: any[] = [];\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 * If `directionFixed` is true, this method will not change the direction.\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 * // Lock direction to prevent automatic changes\n * player.directionFixed = true;\n * player.changeDirection(Direction.Up); // This will be ignored\n * ```\n */\n changeDirection(direction: Direction) {\n // Don't change direction if it's locked\n if (this._directionFixed()) {\n return;\n }\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 abstract isEvent(): boolean;\n}\n\nexport type PlayerCtor<T extends RpgCommonPlayer = RpgCommonPlayer> = Constructor<T>","import { RpgCommonPlayer } from \"./Player\";\n\n/**\n * Shape positioning relative to the player\n */\nexport type ShapePositioning = \"center\" | \"top\" | \"bottom\" | \"left\" | \"right\" | \"default\";\n\n/**\n * Represents a zone shape attached to a player or event\n * \n * Shapes are used for detection zones, vision cones, and area-of-effect abilities.\n * They are backed by the physic engine's zone system for accurate detection.\n * \n * @example\n * ```ts\n * // Create a shape attached to a player\n * const visionShape = player.attachShape(\"vision\", {\n * radius: 150,\n * angle: 120,\n * direction: Direction.Right,\n * name: \"Vision Zone\",\n * properties: { type: \"detection\" }\n * });\n * \n * // Check if a player is in the shape\n * if (visionShape.playerIsIn(otherPlayer)) {\n * console.log(\"Player detected!\");\n * }\n * \n * // Get the owner of the shape\n * const owner = visionShape.getPlayerOwner();\n * ```\n */\nexport class RpgShape {\n /** Name of the shape */\n public name: string;\n \n /** Positioning relative to the player */\n public positioning: ShapePositioning;\n \n /** Width of the shape in pixels */\n public width: number;\n \n /** Height of the shape in pixels */\n public height: number;\n \n /** X position of the shape center */\n public x: number;\n \n /** Y position of the shape center */\n public y: number;\n \n /** Custom properties attached to the shape */\n public properties: object;\n \n /** Internal: Player that owns this shape */\n private _playerOwner?: RpgCommonPlayer;\n \n /** Internal: Zone ID in the physic engine */\n private _physicZoneId: string;\n \n /** Internal: Map reference for zone queries */\n private _map: any;\n \n /**\n * Creates a new RpgShape instance\n * \n * @param config - Shape configuration\n */\n constructor(config: {\n name: string;\n positioning: ShapePositioning;\n width: number;\n height: number;\n x: number;\n y: number;\n properties: object;\n playerOwner?: RpgCommonPlayer;\n physicZoneId: string;\n map: any;\n }) {\n this.name = config.name;\n this.positioning = config.positioning;\n this.width = config.width;\n this.height = config.height;\n this.x = config.x;\n this.y = config.y;\n this.properties = config.properties;\n this._playerOwner = config.playerOwner;\n this._physicZoneId = config.physicZoneId;\n this._map = config.map;\n }\n \n /**\n * Checks if a player is currently inside this shape\n * \n * @param player - The player to check\n * @returns True if the player is inside the shape\n * \n * @example\n * ```ts\n * const shape = player.attachShape(\"detection\", { radius: 100 });\n * if (shape.playerIsIn(otherPlayer)) {\n * console.log(\"Player detected in zone\");\n * }\n * ```\n */\n playerIsIn(player: RpgCommonPlayer): boolean {\n if (!this._map) return false;\n \n const zoneManager = this._map.physic.getZoneManager();\n const entities = zoneManager.getEntitiesInZone(this._physicZoneId);\n \n if (!entities || entities.length === 0) return false;\n \n const playerEntity = this._map.physic.getEntityByUUID(player.id);\n if (!playerEntity) return false;\n \n return entities.some(entity => entity.uuid === playerEntity.uuid);\n }\n \n /**\n * Gets the player that owns this shape\n * \n * Returns the player on which `attachShape()` was called to create this shape.\n * \n * @returns The player owner or undefined if not available\n * \n * @example\n * ```ts\n * const shape = player.attachShape(\"vision\", { radius: 150 });\n * const owner = shape.getPlayerOwner();\n * console.log(owner?.name); // Player's name\n * ```\n */\n getPlayerOwner(): RpgCommonPlayer | undefined {\n return this._playerOwner;\n }\n \n /**\n * Updates the shape's position\n * \n * @internal\n */\n public _updatePosition(x: number, y: number): void {\n this.x = x;\n this.y = y;\n }\n}\n","const _Vector2 = class _Vector2 {\n /**\n * Creates a new Vector2\n * \n * @param x - X component (default: 0)\n * @param y - Y component (default: 0)\n */\n constructor(x = 0, y = 0) {\n this.x = x;\n this.y = y;\n }\n /**\n * Creates a copy of this vector\n * \n * @returns A new Vector2 with the same values\n */\n clone() {\n return new _Vector2(this.x, this.y);\n }\n /**\n * Sets the components of this vector\n * \n * @param x - X component\n * @param y - Y component\n * @returns This vector for chaining\n */\n set(x, y) {\n this.x = x;\n this.y = y;\n return this;\n }\n /**\n * Copies values from another vector\n * \n * @param other - Vector to copy from\n * @returns This vector for chaining\n */\n copyFrom(other) {\n this.x = other.x;\n this.y = other.y;\n return this;\n }\n /**\n * Adds another vector to this vector (immutable)\n * \n * @param other - Vector to add\n * @returns New vector with the result\n */\n add(other) {\n return new _Vector2(this.x + other.x, this.y + other.y);\n }\n /**\n * Adds another vector to this vector (in-place)\n * \n * @param other - Vector to add\n * @returns This vector for chaining\n */\n addInPlace(other) {\n this.x += other.x;\n this.y += other.y;\n return this;\n }\n /**\n * Subtracts another vector from this vector (immutable)\n * \n * @param other - Vector to subtract\n * @returns New vector with the result\n */\n sub(other) {\n return new _Vector2(this.x - other.x, this.y - other.y);\n }\n /**\n * Subtracts another vector from this vector (in-place)\n * \n * @param other - Vector to subtract\n * @returns This vector for chaining\n */\n subInPlace(other) {\n this.x -= other.x;\n this.y -= other.y;\n return this;\n }\n /**\n * Multiplies this vector by a scalar (immutable)\n * \n * @param scalar - Scalar value\n * @returns New vector with the result\n */\n mul(scalar) {\n return new _Vector2(this.x * scalar, this.y * scalar);\n }\n /**\n * Multiplies this vector by a scalar (in-place)\n * \n * @param scalar - Scalar value\n * @returns This vector for chaining\n */\n mulInPlace(scalar) {\n this.x *= scalar;\n this.y *= scalar;\n return this;\n }\n /**\n * Divides this vector by a scalar (immutable)\n * \n * @param scalar - Scalar value (must not be zero)\n * @returns New vector with the result\n */\n div(scalar) {\n return new _Vector2(this.x / scalar, this.y / scalar);\n }\n /**\n * Divides this vector by a scalar (in-place)\n * \n * @param scalar - Scalar value (must not be zero)\n * @returns This vector for chaining\n */\n divInPlace(scalar) {\n this.x /= scalar;\n this.y /= scalar;\n return this;\n }\n /**\n * Calculates the dot product with another vector\n * \n * @param other - Vector to dot with\n * @returns Dot product value\n */\n dot(other) {\n return this.x * other.x + this.y * other.y;\n }\n /**\n * Calculates the 2D cross product (scalar result)\n * \n * @param other - Vector to cross with\n * @returns Cross product value (z-component of 3D cross product)\n */\n cross(other) {\n return this.x * other.y - this.y * other.x;\n }\n /**\n * Calculates the squared length (faster than length, avoids sqrt)\n * \n * @returns Squared length\n */\n lengthSquared() {\n return this.x * this.x + this.y * this.y;\n }\n /**\n * Calculates the length (magnitude) of the vector\n * \n * @returns Length\n */\n length() {\n return Math.sqrt(this.lengthSquared());\n }\n /**\n * Normalizes this vector to unit length (immutable)\n * \n * @returns New normalized vector\n */\n normalize() {\n const len = this.length();\n if (len === 0) {\n return new _Vector2(0, 0);\n }\n return this.div(len);\n }\n /**\n * Normalizes this vector to unit length (in-place)\n * \n * @returns This vector for chaining\n */\n normalizeInPlace() {\n const len = this.length();\n if (len === 0) {\n this.x = 0;\n this.y = 0;\n } else {\n this.divInPlace(len);\n }\n return this;\n }\n /**\n * Calculates the distance to another vector\n * \n * @param other - Target vector\n * @returns Distance\n */\n distanceTo(other) {\n return this.sub(other).length();\n }\n /**\n * Calculates the squared distance to another vector (faster)\n * \n * @param other - Target vector\n * @returns Squared distance\n */\n distanceToSquared(other) {\n return this.sub(other).lengthSquared();\n }\n /**\n * Rotates this vector by an angle in radians (immutable)\n * \n * @param angle - Angle in radians\n * @returns New rotated vector\n */\n rotate(angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n return new _Vector2(\n this.x * cos - this.y * sin,\n this.x * sin + this.y * cos\n );\n }\n /**\n * Rotates this vector by an angle in radians (in-place)\n * \n * @param angle - Angle in radians\n * @returns This vector for chaining\n */\n rotateInPlace(angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const x = this.x * cos - this.y * sin;\n const y = this.x * sin + this.y * cos;\n this.x = x;\n this.y = y;\n return this;\n }\n /**\n * Calculates the angle of this vector in radians\n * \n * @returns Angle in radians (range: -π to π)\n */\n angle() {\n return Math.atan2(this.y, this.x);\n }\n /**\n * Linearly interpolates between this vector and another\n * \n * @param other - Target vector\n * @param t - Interpolation factor (0 to 1)\n * @returns New interpolated vector\n */\n lerp(other, t) {\n return new _Vector2(\n this.x + (other.x - this.x) * t,\n this.y + (other.y - this.y) * t\n );\n }\n /**\n * Checks if this vector equals another (with epsilon tolerance)\n * \n * @param other - Vector to compare\n * @param epsilon - Tolerance for comparison (default: 1e-5)\n * @returns True if vectors are approximately equal\n */\n equals(other, epsilon = 1e-5) {\n return Math.abs(this.x - other.x) < epsilon && Math.abs(this.y - other.y) < epsilon;\n }\n /**\n * Returns a string representation of this vector\n * \n * @returns String representation\n */\n toString() {\n return `Vector2(${this.x}, ${this.y})`;\n }\n};\n_Vector2.ZERO = new _Vector2(0, 0);\n_Vector2.UNIT_X = new _Vector2(1, 0);\n_Vector2.UNIT_Y = new _Vector2(0, 1);\nlet Vector2 = _Vector2;\nexport {\n Vector2\n};\n//# sourceMappingURL=index2.js.map\n","class Matrix2 {\n /**\n * Creates a new 2x2 matrix\n * \n * @param m00 - Element at row 0, column 0\n * @param m01 - Element at row 0, column 1\n * @param m10 - Element at row 1, column 0\n * @param m11 - Element at row 1, column 1\n */\n constructor(m00 = 1, m01 = 0, m10 = 0, m11 = 1) {\n this.m00 = m00;\n this.m01 = m01;\n this.m10 = m10;\n this.m11 = m11;\n }\n /**\n * Creates an identity matrix\n * \n * @returns Identity matrix\n */\n static identity() {\n return new Matrix2(1, 0, 0, 1);\n }\n /**\n * Creates a rotation matrix from an angle\n * \n * @param angle - Rotation angle in radians\n * @returns Rotation matrix\n */\n static fromAngle(angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n return new Matrix2(cos, sin, -sin, cos);\n }\n /**\n * Creates a copy of this matrix\n * \n * @returns New matrix with the same values\n */\n clone() {\n return new Matrix2(this.m00, this.m01, this.m10, this.m11);\n }\n /**\n * Copies values from another matrix\n * \n * @param other - Matrix to copy from\n * @returns This matrix for chaining\n */\n copyFrom(other) {\n this.m00 = other.m00;\n this.m01 = other.m01;\n this.m10 = other.m10;\n this.m11 = other.m11;\n return this;\n }\n /**\n * Multiplies this matrix by another matrix\n * \n * @param other - Matrix to multiply with\n * @returns New matrix with the result\n */\n multiply(other) {\n return new Matrix2(\n this.m00 * other.m00 + this.m01 * other.m10,\n this.m00 * other.m01 + this.m01 * other.m11,\n this.m10 * other.m00 + this.m11 * other.m10,\n this.m10 * other.m01 + this.m11 * other.m11\n );\n }\n /**\n * Multiplies this matrix by another matrix (in-place)\n * \n * @param other - Matrix to multiply with\n * @returns This matrix for chaining\n */\n multiplyInPlace(other) {\n const m00 = this.m00 * other.m00 + this.m01 * other.m10;\n const m01 = this.m00 * other.m01 + this.m01 * other.m11;\n const m10 = this.m10 * other.m00 + this.m11 * other.m10;\n const m11 = this.m10 * other.m01 + this.m11 * other.m11;\n this.m00 = m00;\n this.m01 = m01;\n this.m10 = m10;\n this.m11 = m11;\n return this;\n }\n /**\n * Multiplies a vector by this matrix (transforms the vector)\n * \n * @param x - Vector X component\n * @param y - Vector Y component\n * @returns Object with transformed x and y\n */\n multiplyVector(x, y) {\n return {\n x: this.m00 * x + this.m01 * y,\n y: this.m10 * x + this.m11 * y\n };\n }\n /**\n * Calculates the determinant of this matrix\n * \n * @returns Determinant value\n */\n determinant() {\n return this.m00 * this.m11 - this.m01 * this.m10;\n }\n /**\n * Calculates the inverse of this matrix\n * \n * @returns New inverted matrix\n * @throws Error if matrix is singular (determinant is zero)\n */\n inverse() {\n const det = this.determinant();\n if (Math.abs(det) < 1e-10) {\n throw new Error(\"Matrix is singular and cannot be inverted\");\n }\n const invDet = 1 / det;\n return new Matrix2(\n this.m11 * invDet,\n -this.m01 * invDet,\n -this.m10 * invDet,\n this.m00 * invDet\n );\n }\n /**\n * Transposes this matrix\n * \n * @returns New transposed matrix\n */\n transpose() {\n return new Matrix2(this.m00, this.m10, this.m01, this.m11);\n }\n /**\n * Sets this matrix to a rotation matrix\n * \n * @param angle - Rotation angle in radians\n * @returns This matrix for chaining\n */\n setRotation(angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n this.m00 = cos;\n this.m01 = sin;\n this.m10 = -sin;\n this.m11 = cos;\n return this;\n }\n /**\n * Extracts the rotation angle from this matrix\n * \n * @returns Rotation angle in radians\n */\n getAngle() {\n return Math.atan2(this.m01, this.m00);\n }\n /**\n * Checks if this matrix equals another (with epsilon tolerance)\n * \n * @param other - Matrix to compare\n * @param epsilon - Tolerance for comparison (default: 1e-5)\n * @returns True if matrices are approximately equal\n */\n equals(other, epsilon = 1e-5) {\n return Math.abs(this.m00 - other.m00) < epsilon && Math.abs(this.m01 - other.m01) < epsilon && Math.abs(this.m10 - other.m10) < epsilon && Math.abs(this.m11 - other.m11) < epsilon;\n }\n /**\n * Returns a string representation of this matrix\n * \n * @returns String representation\n */\n toString() {\n return `Matrix2([${this.m00}, ${this.m01}], [${this.m10}, ${this.m11}])`;\n }\n}\nexport {\n Matrix2\n};\n//# sourceMappingURL=index3.js.map\n","import { Vector2 } from \"./index2.js\";\nclass AABB {\n /**\n * Creates a new AABB\n * \n * @param minX - Minimum X coordinate\n * @param minY - Minimum Y coordinate\n * @param maxX - Maximum X coordinate\n * @param maxY - Maximum Y coordinate\n */\n constructor(minX, minY, maxX, maxY) {\n this.minX = minX;\n this.minY = minY;\n this.maxX = maxX;\n this.maxY = maxY;\n }\n /**\n * Creates an AABB from center and size\n * \n * @param centerX - Center X coordinate\n * @param centerY - Center Y coordinate\n * @param width - Width of the box\n * @param height - Height of the box\n * @returns New AABB\n */\n static fromCenterSize(centerX, centerY, width, height) {\n const halfWidth = width / 2;\n const halfHeight = height / 2;\n return new AABB(\n centerX - halfWidth,\n centerY - halfHeight,\n centerX + halfWidth,\n centerY + halfHeight\n );\n }\n /**\n * Creates an AABB from a center point and size\n * \n * @param center - Center point\n * @param width - Width of the box\n * @param height - Height of the box\n * @returns New AABB\n */\n static fromCenterSizeVector(center, width, height) {\n return AABB.fromCenterSize(center.x, center.y, width, height);\n }\n /**\n * Creates a copy of this AABB\n * \n * @returns New AABB with the same values\n */\n clone() {\n return new AABB(this.minX, this.minY, this.maxX, this.maxY);\n }\n /**\n * Copies values from another AABB\n * \n * @param other - AABB to copy from\n * @returns This AABB for chaining\n */\n copyFrom(other) {\n this.minX = other.minX;\n this.minY = other.minY;\n this.maxX = other.maxX;\n this.maxY = other.maxY;\n return this;\n }\n /**\n * Gets the width of the AABB\n * \n * @returns Width\n */\n getWidth() {\n return this.maxX - this.minX;\n }\n /**\n * Gets the height of the AABB\n * \n * @returns Height\n */\n getHeight() {\n return this.maxY - this.minY;\n }\n /**\n * Gets the center point of the AABB\n * \n * @returns Center point\n */\n getCenter() {\n return new Vector2(\n (this.minX + this.maxX) / 2,\n (this.minY + this.maxY) / 2\n );\n }\n /**\n * Gets the center X coordinate\n * \n * @returns Center X\n */\n getCenterX() {\n return (this.minX + this.maxX) / 2;\n }\n /**\n * Gets the center Y coordinate\n * \n * @returns Center Y\n */\n getCenterY() {\n return (this.minY + this.maxY) / 2;\n }\n /**\n * Gets the area of the AABB\n * \n * @returns Area\n */\n getArea() {\n return this.getWidth() * this.getHeight();\n }\n /**\n * Checks if a point is inside this AABB\n * \n * @param x - Point X coordinate\n * @param y - Point Y coordinate\n * @returns True if point is inside\n */\n containsPoint(x, y) {\n return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY;\n }\n /**\n * Checks if a vector point is inside this AABB\n * \n * @param point - Point to check\n * @returns True if point is inside\n */\n contains(point) {\n return this.containsPoint(point.x, point.y);\n }\n /**\n * Checks if another AABB is completely inside this AABB\n * \n * @param other - AABB to check\n * @returns True if other AABB is inside\n */\n containsAABB(other) {\n return this.minX <= other.minX && this.minY <= other.minY && this.maxX >= other.maxX && this.maxY >= other.maxY;\n }\n /**\n * Checks if this AABB intersects with another AABB\n * \n * @param other - AABB to check intersection with\n * @returns True if AABBs intersect\n */\n intersects(other) {\n return !(this.maxX < other.minX || this.minX > other.maxX || this.maxY < other.minY || this.minY > other.maxY);\n }\n /**\n * Calculates the intersection AABB with another AABB\n * \n * @param other - AABB to intersect with\n * @returns Intersection AABB, or null if no intersection\n */\n intersection(other) {\n if (!this.intersects(other)) {\n return null;\n }\n return new AABB(\n Math.max(this.minX, other.minX),\n Math.max(this.minY, other.minY),\n Math.min(this.maxX, other.maxX),\n Math.min(this.maxY, other.maxY)\n );\n }\n /**\n * Calculates the union AABB with another AABB\n * \n * @param other - AABB to union with\n * @returns Union AABB\n */\n union(other) {\n return new AABB(\n Math.min(this.minX, other.minX),\n Math.min(this.minY, other.minY),\n Math.max(this.maxX, other.maxX),\n Math.max(this.maxY, other.maxY)\n );\n }\n /**\n * Expands this AABB by a given amount in all directions\n * \n * @param amount - Amount to expand by\n * @returns New expanded AABB\n */\n expand(amount) {\n return new AABB(\n this.minX - amount,\n this.minY - amount,\n this.maxX + amount,\n this.maxY + amount\n );\n }\n /**\n * Expands this AABB by a given amount (in-place)\n * \n * @param amount - Amount to expand by\n * @returns This AABB for chaining\n */\n expandInPlace(amount) {\n this.minX -= amount;\n this.minY -= amount;\n this.maxX += amount;\n this.maxY += amount;\n return this;\n }\n /**\n * Translates this AABB by a given offset\n * \n * @param dx - X offset\n * @param dy - Y offset\n * @returns New translated AABB\n */\n translate(dx, dy) {\n return new AABB(\n this.minX + dx,\n this.minY + dy,\n this.maxX + dx,\n this.maxY + dy\n );\n }\n /**\n * Translates this AABB by a given offset (in-place)\n * \n * @param dx - X offset\n * @param dy - Y offset\n * @returns This AABB for chaining\n */\n translateInPlace(dx, dy) {\n this.minX += dx;\n this.minY += dy;\n this.maxX += dx;\n this.maxY += dy;\n return this;\n }\n /**\n * Checks if this AABB equals another (with epsilon tolerance)\n * \n * @param other - AABB to compare\n * @param epsilon - Tolerance for comparison (default: 1e-5)\n * @returns True if AABBs are approximately equal\n */\n equals(other, epsilon = 1e-5) {\n return Math.abs(this.minX - other.minX) < epsilon && Math.abs(this.minY - other.minY) < epsilon && Math.abs(this.maxX - other.maxX) < epsilon && Math.abs(this.maxY - other.maxY) < epsilon;\n }\n /**\n * Returns a string representation of this AABB\n * \n * @returns String representation\n */\n toString() {\n return `AABB(${this.minX}, ${this.minY}, ${this.maxX}, ${this.maxY})`;\n }\n /**\n * Clamps a point to be inside the AABB\n * \n * @param point - Point to clamp\n * @returns Clamped point\n */\n clamp(point) {\n return new Vector2(\n Math.max(this.minX, Math.min(this.maxX, point.x)),\n Math.max(this.minY, Math.min(this.maxY, point.y))\n );\n }\n}\nexport {\n AABB\n};\n//# sourceMappingURL=index4.js.map\n","import { Vector2 } from \"./index2.js\";\nconst EPSILON = 1e-5;\nfunction approximatelyEqual(a, b, epsilon = EPSILON) {\n return Math.abs(a - b) < epsilon;\n}\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\nfunction lerp(a, b, t) {\n return a + (b - a) * t;\n}\nfunction distance(x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n return Math.sqrt(dx * dx + dy * dy);\n}\nfunction distanceSquared(x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n return dx * dx + dy * dy;\n}\nfunction angleBetween(x1, y1, x2, y2) {\n return Math.atan2(y2 - y1, x2 - x1);\n}\nfunction normalizeAngle(angle) {\n while (angle > Math.PI) {\n angle -= 2 * Math.PI;\n }\n while (angle < -Math.PI) {\n angle += 2 * Math.PI;\n }\n return angle;\n}\nfunction angularDistance(from, to) {\n let diff = to - from;\n while (diff > Math.PI) {\n diff -= 2 * Math.PI;\n }\n while (diff < -Math.PI) {\n diff += 2 * Math.PI;\n }\n return diff;\n}\nfunction projectPointOnLineSegment(point, lineStart, lineEnd) {\n const line = lineEnd.sub(lineStart);\n const pointVec = point.sub(lineStart);\n const lineLengthSq = line.lengthSquared();\n if (lineLengthSq < EPSILON) {\n return lineStart.clone();\n }\n const t = clamp(pointVec.dot(line) / lineLengthSq, 0, 1);\n return lineStart.add(line.mul(t));\n}\nfunction closestPointOnAABB(point, aabb) {\n return new Vector2(\n clamp(point.x, aabb.minX, aabb.maxX),\n clamp(point.y, aabb.minY, aabb.maxY)\n );\n}\nfunction pointInCircle(point, center, radius) {\n return point.distanceToSquared(center) <= radius * radius;\n}\nfunction degToRad(degrees) {\n return degrees * Math.PI / 180;\n}\nfunction radToDeg(radians) {\n return radians * 180 / Math.PI;\n}\nexport {\n EPSILON,\n angleBetween,\n angularDistance,\n approximatelyEqual,\n clamp,\n closestPointOnAABB,\n degToRad,\n distance,\n distanceSquared,\n lerp,\n normalizeAngle,\n pointInCircle,\n projectPointOnLineSegment,\n radToDeg\n};\n//# sourceMappingURL=index5.js.map\n","var EntityState = /* @__PURE__ */ ((EntityState2) => {\n EntityState2[EntityState2[\"Static\"] = 1] = \"Static\";\n EntityState2[EntityState2[\"Dynamic\"] = 2] = \"Dynamic\";\n EntityState2[EntityState2[\"Sleeping\"] = 4] = \"Sleeping\";\n EntityState2[EntityState2[\"Kinematic\"] = 8] = \"Kinematic\";\n return EntityState2;\n})(EntityState || {});\nexport {\n EntityState\n};\n//# sourceMappingURL=index6.js.map\n","function generateUUID() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = Math.random() * 16 | 0;\n const v = c === \"x\" ? r : r & 3 | 8;\n return v.toString(16);\n });\n}\nfunction generateDeterministicUUID(seed) {\n let hash = seed;\n hash = (hash << 5) - hash + seed;\n hash = hash & hash;\n const hex = Math.abs(hash).toString(16).padStart(8, \"0\");\n return `00000000-0000-4000-8000-${hex.padStart(12, \"0\")}`;\n}\nexport {\n generateDeterministicUUID,\n generateUUID\n};\n//# sourceMappingURL=index43.js.map\n","import { Vector2 } from \"./index2.js\";\nimport { EntityState } from \"./index6.js\";\nimport { generateUUID } from \"./index43.js\";\nconst MOVEMENT_EPSILON = 1e-3;\nconst MOVEMENT_EPSILON_SQ = MOVEMENT_EPSILON * MOVEMENT_EPSILON;\nconst DIRECTION_CHANGE_THRESHOLD = 1;\nconst DIRECTION_CHANGE_THRESHOLD_SQ = DIRECTION_CHANGE_THRESHOLD * DIRECTION_CHANGE_THRESHOLD;\nclass Entity {\n /**\n * Creates a new entity\n * \n * @param config - Entity configuration\n */\n constructor(config = {}) {\n this.lastCardinalDirection = \"idle\";\n this.uuid = config.uuid ?? generateUUID();\n if (config.position instanceof Vector2) {\n this.position = config.position.clone();\n } else if (config.position) {\n this.position = new Vector2(config.position.x, config.position.y);\n } else {\n this.position = new Vector2(0, 0);\n }\n this.currentTile = new Vector2(0, 0);\n if (config.velocity instanceof Vector2) {\n this.velocity = config.velocity.clone();\n } else if (config.velocity) {\n this.velocity = new Vector2(config.velocity.x, config.velocity.y);\n } else {\n this.velocity = new Vector2(0, 0);\n }\n this.rotation = config.rotation ?? 0;\n this.angularVelocity = config.angularVelocity ?? 0;\n this.mass = config.mass ?? 1;\n this.invMass = this.mass > 0 ? 1 / this.mass : 0;\n this.radius = config.radius ?? 0;\n this.width = config.width ?? 0;\n this.height = config.height ?? 0;\n if (config.capsule !== void 0) {\n this.capsule = config.capsule;\n }\n this.continuous = config.continuous ?? false;\n this.state = config.state ?? EntityState.Dynamic;\n this.restitution = config.restitution ?? 0.2;\n this.friction = config.friction ?? 0.3;\n this.linearDamping = config.linearDamping ?? 0.01;\n this.angularDamping = config.angularDamping ?? 0.01;\n this.maxLinearVelocity = config.maxLinearVelocity ?? Infinity;\n this.maxAngularVelocity = config.maxAngularVelocity ?? Infinity;\n this.force = new Vector2(0, 0);\n this.torque = 0;\n this.collisionMask = config.collisionMask ?? 4294967295;\n this.collisionCategory = config.collisionCategory ?? 1;\n this.timeSinceMovement = 0;\n this.sleepThreshold = 0.5;\n this.collisionEnterHandlers = /* @__PURE__ */ new Set();\n this.collisionExitHandlers = /* @__PURE__ */ new Set();\n this.positionSyncHandlers = /* @__PURE__ */ new Set();\n this.directionSyncHandlers = /* @__PURE__ */ new Set();\n this.positionSyncHandlers = /* @__PURE__ */ new Set();\n this.directionSyncHandlers = /* @__PURE__ */ new Set();\n this.movementChangeHandlers = /* @__PURE__ */ new Set();\n this.enterTileHandlers = /* @__PURE__ */ new Set();\n this.leaveTileHandlers = /* @__PURE__ */ new Set();\n this.canEnterTileHandlers = /* @__PURE__ */ new Set();\n this.collisionFilterHandlers = /* @__PURE__ */ new Set();\n this.resolutionFilterHandlers = /* @__PURE__ */ new Set();\n this.wasMoving = this.velocity.lengthSquared() > MOVEMENT_EPSILON_SQ;\n }\n /**\n * Registers a handler fired when this entity starts colliding with another one.\n *\n * - **Purpose:** offer per-entity collision hooks without subscribing to the global event system.\n * - **Design:** lightweight Set-based listeners returning an unsubscribe closure to keep GC pressure low.\n *\n * @param handler - Collision enter listener\n * @returns Unsubscribe closure\n * @example\n * ```typescript\n * const unsubscribe = entity.onCollisionEnter(({ other }) => {\n * console.log('Started colliding with', other.uuid);\n * });\n * ```\n */\n onCollisionEnter(handler) {\n this.collisionEnterHandlers.add(handler);\n return () => this.collisionEnterHandlers.delete(handler);\n }\n /**\n * Registers a handler fired when this entity stops colliding with another one.\n *\n * - **Purpose:** detect collision separation at the entity level for local gameplay reactions.\n * - **Design:** mirrors `onCollisionEnter` with identical lifecycle management semantics.\n *\n * @param handler - Collision exit listener\n * @returns Unsubscribe closure\n * @example\n * ```typescript\n * const unsubscribe = entity.onCollisionExit(({ other }) => {\n * console.log('Stopped colliding with', other.uuid);\n * });\n * ```\n */\n onCollisionExit(handler) {\n this.collisionExitHandlers.add(handler);\n return () => this.collisionExitHandlers.delete(handler);\n }\n /**\n * Registers a handler fired when the entity position changes (x, y).\n *\n * - **Purpose:** synchronize position changes for logging, rendering, network sync, etc.\n * - **Design:** lightweight Set-based listeners returning an unsubscribe closure to keep GC pressure low.\n *\n * @param handler - Position change listener\n * @returns Unsubscribe closure\n * @example\n * ```typescript\n * const unsubscribe = entity.onPositionChange(({ x, y }) => {\n * console.log('Position changed to', x, y);\n * // Update rendering, sync network, etc.\n * });\n * ```\n */\n onPositionChange(handler) {\n this.positionSyncHandlers.add(handler);\n return () => this.positionSyncHandlers.delete(handler);\n }\n /**\n * Registers a handler fired when the entity direction changes.\n *\n * - **Purpose:** synchronize direction changes for logging, rendering, network sync, etc.\n * - **Design:** lightweight Set-based listeners returning an unsubscribe closure to keep GC pressure low.\n *\n * @param handler - Direction change listener\n * @returns Unsubscribe closure\n * @example\n * ```typescript\n * const unsubscribe = entity.onDirectionChange(({ direction, cardinalDirection }) => {\n * console.log('Direction changed to', cardinalDirection);\n * // Update rendering, sync network, etc.\n * });\n * ```\n */\n onDirectionChange(handler) {\n this.directionSyncHandlers.add(handler);\n return () => this.directionSyncHandlers.delete(handler);\n }\n /**\n * Manually notifies that the position has changed.\n *\n * - **Purpose:** allow external code to trigger position sync hooks when position is modified directly.\n * - **Design:** can be called after direct position modifications (e.g., `entity.position.set()`).\n *\n * @example\n * ```typescript\n * entity.position.set(100, 200);\n * entity.notifyPositionChange(); // Trigger sync hooks\n * ```\n */\n notifyPositionChange() {\n if (this.positionSyncHandlers.size === 0) {\n return;\n }\n const payload = {\n entity: this,\n x: this.position.x,\n y: this.position.y\n };\n for (const handler of this.positionSyncHandlers) {\n handler(payload);\n }\n }\n /**\n * Manually notifies that the direction has changed.\n *\n * - **Purpose:** allow external code to trigger direction sync hooks when direction is modified directly.\n * - **Design:** computes direction from velocity and cardinal direction.\n *\n * @example\n * ```typescript\n * entity.velocity.set(5, 0);\n * entity.notifyDirectionChange(); // Trigger sync hooks\n * ```\n */\n notifyDirectionChange() {\n const isMoving = this.velocity.lengthSquared() > DIRECTION_CHANGE_THRESHOLD_SQ;\n const direction = isMoving ? this.velocity.clone().normalize() : new Vector2(0, 0);\n const cardinalDirection = this.computeCardinalDirection(direction);\n if (cardinalDirection !== \"idle\") {\n this.lastCardinalDirection = cardinalDirection;\n }\n if (this.directionSyncHandlers.size === 0) {\n return;\n }\n const payload = {\n entity: this,\n direction,\n cardinalDirection\n };\n for (const handler of this.directionSyncHandlers) {\n handler(payload);\n }\n }\n /**\n * Gets the current cardinal direction.\n * \n * This value is updated whenever `notifyDirectionChange()` is called (e.g. by `setVelocity`).\n * It includes hysteresis logic to prevent rapid direction flipping during collisions.\n * \n * @returns The current cardinal direction ('up', 'down', 'left', 'right', 'idle')\n * \n * @example\n * ```typescript\n * const dir = entity.cardinalDirection;\n * if (dir === 'left') {\n * // Render left-facing sprite\n * }\n * ```\n */\n get cardinalDirection() {\n return this.lastCardinalDirection;\n }\n /**\n * Registers a handler fired when the entity movement state changes (moving/stopped).\n *\n * - **Purpose:** detect when an entity starts or stops moving for gameplay reactions, animations, or network sync.\n * - **Design:** lightweight Set-based listeners returning an unsubscribe closure to keep GC pressure low.\n * - **Movement detection:** uses `MOVEMENT_EPSILON` threshold to determine if entity is moving.\n * - **Intensity:** provides the movement speed magnitude to allow fine-grained animation control (e.g., walk vs run).\n *\n * @param handler - Movement state change listener\n * @returns Unsubscribe closure\n * @example\n * ```typescript\n * const unsubscribe = entity.onMovementChange(({ isMoving, intensity }) => {\n * console.log('Entity is', isMoving ? 'moving' : 'stopped', 'at speed', intensity);\n * // Update animations based on intensity\n * if (isMoving && intensity > 100) {\n * // Fast movement - use run animation\n * } else if (isMoving) {\n * // Slow movement - use walk animation\n * }\n * });\n * ```\n */\n onMovementChange(handler) {\n this.movementChangeHandlers.add(handler);\n return () => this.movementChangeHandlers.delete(handler);\n }\n /**\n * Manually notifies that the movement state has changed.\n *\n * - **Purpose:** allow external code to trigger movement state sync hooks when velocity is modified directly.\n * - **Design:** checks if movement state (moving/stopped) has changed and notifies handlers with movement intensity.\n * - **Intensity:** calculated as the magnitude of the velocity vector (speed in pixels per second).\n *\n * @example\n * ```typescript\n * entity.velocity.set(5, 0);\n * entity.notifyMovementChange(); // Trigger sync hooks if state changed\n * ```\n */\n notifyMovementChange() {\n const isMoving = this.velocity.lengthSquared() > MOVEMENT_EPSILON_SQ;\n const intensity = this.velocity.length();\n if (this.movementChangeHandlers.size === 0) {\n this.wasMoving = isMoving;\n return;\n }\n if (isMoving !== this.wasMoving) {\n this.wasMoving = isMoving;\n const payload = {\n entity: this,\n isMoving,\n intensity\n };\n for (const handler of this.movementChangeHandlers) {\n handler(payload);\n }\n } else {\n this.wasMoving = isMoving;\n }\n }\n /**\n * Registers a handler fired when the entity enters a new tile.\n * \n * @param handler - Tile enter listener\n * @returns Unsubscribe closure\n */\n onEnterTile(handler) {\n this.enterTileHandlers.add(handler);\n return () => this.enterTileHandlers.delete(handler);\n }\n /**\n * Registers a handler fired when the entity leaves a tile.\n * \n * @param handler - Tile leave listener\n * @returns Unsubscribe closure\n */\n onLeaveTile(handler) {\n this.leaveTileHandlers.add(handler);\n return () => this.leaveTileHandlers.delete(handler);\n }\n /**\n * Registers a handler to check if the entity can enter a tile.\n * If any handler returns false, the entity cannot enter.\n * \n * @param handler - Can enter tile listener\n * @returns Unsubscribe closure\n */\n canEnterTile(handler) {\n this.canEnterTileHandlers.add(handler);\n return () => this.canEnterTileHandlers.delete(handler);\n }\n /**\n * @internal\n * Notifies that the entity has entered a tile.\n */\n notifyEnterTile(x, y) {\n if (this.enterTileHandlers.size === 0) return;\n const event = { entity: this, x, y };\n for (const handler of this.enterTileHandlers) {\n handler(event);\n }\n }\n /**\n * @internal\n * Notifies that the entity has left a tile.\n */\n notifyLeaveTile(x, y) {\n if (this.leaveTileHandlers.size === 0) return;\n const event = { entity: this, x, y };\n for (const handler of this.leaveTileHandlers) {\n handler(event);\n }\n }\n /**\n * @internal\n * Checks if the entity can enter a tile.\n */\n checkCanEnterTile(x, y) {\n if (this.canEnterTileHandlers.size === 0) return true;\n const event = { entity: this, x, y };\n for (const handler of this.canEnterTileHandlers) {\n if (handler(event) === false) {\n return false;\n }\n }\n return true;\n }\n /**\n * Applies a force to the entity\n * \n * Force is accumulated and applied during integration.\n * \n * @param force - Force vector to apply\n * @returns This entity for chaining\n * \n * @example\n * ```typescript\n * entity.applyForce(new Vector2(10, 0)); // Push right\n * ```\n */\n applyForce(force) {\n if (this.isStatic() || this.isSleeping()) {\n return this;\n }\n this.force.addInPlace(force);\n return this;\n }\n /**\n * Applies a force at a specific point (creates torque)\n * \n * @param force - Force vector to apply\n * @param point - Point of application in world space\n * @returns This entity for chaining\n */\n applyForceAtPoint(force, point) {\n if (this.isStatic() || this.isSleeping()) {\n return this;\n }\n this.force.addInPlace(force);\n const r = point.sub(this.position);\n this.torque += r.cross(force);\n return this;\n }\n /**\n * Applies an impulse (instantaneous change in velocity)\n * \n * @param impulse - Impulse vector\n * @returns This entity for chaining\n * \n * @example\n * ```typescript\n * entity.applyImpulse(new Vector2(5, 0)); // Instant push\n * ```\n */\n applyImpulse(impulse) {\n if (this.isStatic() || this.isSleeping()) {\n return this;\n }\n this.velocity.addInPlace(impulse.mul(this.invMass));\n this.notifyMovementChange();\n this.notifyDirectionChange();\n return this;\n }\n /**\n * Applies an angular impulse (instantaneous change in angular velocity)\n * \n * @param impulse - Angular impulse value\n * @returns This entity for chaining\n */\n applyAngularImpulse(impulse) {\n if (this.isStatic() || this.isSleeping()) {\n return this;\n }\n const momentOfInertia = this.mass * this.radius * this.radius;\n if (momentOfInertia > 0) {\n this.angularVelocity += impulse / momentOfInertia;\n }\n return this;\n }\n /**\n * Teleports the entity to a new position\n * \n * @param position - New position\n * @returns This entity for chaining\n */\n teleport(position) {\n if (position instanceof Vector2) {\n this.position.copyFrom(position);\n } else {\n this.position.set(position.x, position.y);\n }\n this.wakeUp();\n this.notifyPositionChange();\n return this;\n }\n /**\n * Sets the velocity directly\n * \n * @param velocity - New velocity\n * @returns This entity for chaining\n */\n setVelocity(velocity) {\n const oldVelocity = this.velocity.clone();\n if (velocity instanceof Vector2) {\n this.velocity.copyFrom(velocity);\n } else {\n this.velocity.set(velocity.x, velocity.y);\n }\n this.wakeUp();\n const oldDirection = oldVelocity.lengthSquared() > MOVEMENT_EPSILON_SQ ? oldVelocity.clone().normalize() : new Vector2(0, 0);\n const newDirection = this.velocity.lengthSquared() > MOVEMENT_EPSILON_SQ ? this.velocity.clone().normalize() : new Vector2(0, 0);\n const oldCardinal = this.computeCardinalDirection(oldDirection);\n const newCardinal = this.computeCardinalDirection(newDirection);\n if (oldCardinal !== newCardinal || Math.abs(oldDirection.dot(newDirection) - 1) > 0.01) {\n this.notifyDirectionChange();\n }\n this.notifyMovementChange();\n return this;\n }\n /**\n * Freezes the entity (makes it static)\n * \n * @returns This entity for chaining\n */\n freeze() {\n this.state = EntityState.Static;\n this.velocity.set(0, 0);\n this.angularVelocity = 0;\n this.force.set(0, 0);\n this.torque = 0;\n this.notifyMovementChange();\n return this;\n }\n /**\n * Unfreezes the entity (makes it dynamic)\n * \n * @returns This entity for chaining\n */\n unfreeze() {\n if (this.mass > 0) {\n this.state = EntityState.Dynamic;\n }\n return this;\n }\n /**\n * Puts the entity to sleep (stops updating)\n * \n * @returns This entity for chaining\n */\n sleep() {\n if (!this.isStatic()) {\n this.state |= EntityState.Sleeping;\n this.velocity.set(0, 0);\n this.angularVelocity = 0;\n this.force.set(0, 0);\n this.torque = 0;\n this.notifyMovementChange();\n }\n return this;\n }\n /**\n * Wakes up the entity (resumes updating)\n * \n * @returns This entity for chaining\n */\n wakeUp() {\n this.state &= ~EntityState.Sleeping;\n this.timeSinceMovement = 0;\n return this;\n }\n /**\n * Checks if the entity is static\n * \n * An entity is considered static if:\n * - It has the Static state flag, OR\n * - It has infinite mass (mass = Infinity), OR\n * - It has zero inverse mass (invMass = 0)\n * \n * @returns True if static\n */\n isStatic() {\n return (this.state & EntityState.Static) !== 0 || this.invMass === 0;\n }\n /**\n * Checks if the entity is dynamic\n * \n * @returns True if dynamic\n */\n isDynamic() {\n return (this.state & EntityState.Dynamic) !== 0 && this.mass > 0;\n }\n /**\n * Checks if the entity is sleeping\n * \n * @returns True if sleeping\n */\n isSleeping() {\n return (this.state & EntityState.Sleeping) !== 0;\n }\n /**\n * Checks if the entity is kinematic\n * \n * @returns True if kinematic\n */\n isKinematic() {\n return (this.state & EntityState.Kinematic) !== 0;\n }\n /**\n * Resets accumulated forces and torques\n * \n * Called at the start of each physics step.\n */\n clearForces() {\n this.force.set(0, 0);\n this.torque = 0;\n }\n /**\n * Stops all movement immediately\n * \n * Completely stops the entity's movement by:\n * - Setting velocity to zero\n * - Setting angular velocity to zero\n * - Clearing accumulated forces and torques\n * - Waking up the entity if it was sleeping\n * - Notifying movement state change\n * \n * Unlike `freeze()`, this method keeps the entity dynamic and does not\n * change its state. It's useful for stopping movement when changing maps,\n * teleporting, or when you need to halt an entity without making it static.\n * \n * @returns This entity for chaining\n * \n * @example\n * ```ts\n * // Stop movement when changing maps\n * if (mapChanged) {\n * entity.stopMovement();\n * }\n * \n * // Stop movement after teleporting\n * entity.position.set(100, 200);\n * entity.stopMovement();\n * \n * // Stop movement when player dies\n * if (player.isDead()) {\n * playerEntity.stopMovement();\n * }\n * ```\n */\n stopMovement() {\n this.velocity.set(0, 0);\n this.angularVelocity = 0;\n this.clearForces();\n this.wakeUp();\n this.notifyMovementChange();\n this.notifyDirectionChange();\n return this;\n }\n /**\n * Clamps velocities to maximum values\n */\n clampVelocities() {\n const speed = this.velocity.length();\n if (speed > this.maxLinearVelocity) {\n this.velocity.normalizeInPlace().mulInPlace(this.maxLinearVelocity);\n }\n if (Math.abs(this.angularVelocity) > this.maxAngularVelocity) {\n this.angularVelocity = Math.sign(this.angularVelocity) * this.maxAngularVelocity;\n }\n }\n /**\n * Adds a collision filter to this entity\n * \n * Collision filters allow dynamic, conditional collision filtering beyond static bitmasks.\n * Each filter is called when checking if this entity can collide with another.\n * If any filter returns `false`, the collision is ignored.\n * \n * This enables scenarios like:\n * - Players passing through other players (`throughOtherPlayer`)\n * - Entities passing through all characters (`through`)\n * - Custom game-specific collision rules\n * \n * @param filter - Function that returns `true` to allow collision, `false` to ignore\n * @returns Unsubscribe function to remove the filter\n * \n * @example\n * ```typescript\n * // Allow entity to pass through other players\n * const unsubscribe = entity.addCollisionFilter((self, other) => {\n * const otherOwner = (other as any).owner;\n * if (otherOwner?.type === 'player') {\n * return false; // No collision with players\n * }\n * return true; // Collide with everything else\n * });\n * \n * // Later, remove the filter\n * unsubscribe();\n * ```\n */\n addCollisionFilter(filter) {\n this.collisionFilterHandlers.add(filter);\n return () => this.collisionFilterHandlers.delete(filter);\n }\n /**\n * Checks if this entity can collide with another entity\n * \n * First checks collision masks (bitmask filtering), then executes all registered\n * collision filters. If any filter returns `false`, the collision is ignored.\n * \n * @param other - Other entity to check\n * @returns True if collision is possible\n */\n canCollideWith(other) {\n const categoryA = this.collisionCategory;\n const maskA = this.collisionMask;\n const categoryB = other.collisionCategory;\n const maskB = other.collisionMask;\n if ((categoryA & maskB) === 0 || (categoryB & maskA) === 0) {\n return false;\n }\n for (const filter of this.collisionFilterHandlers) {\n if (!filter(this, other)) {\n return false;\n }\n }\n for (const filter of other.collisionFilterHandlers) {\n if (!filter(other, this)) {\n return false;\n }\n }\n return true;\n }\n /**\n * Adds a resolution filter to this entity\n * \n * Resolution filters determine whether a collision should be **resolved** (blocking)\n * or just **detected** (notification only). Unlike collision filters which prevent\n * detection entirely, resolution filters allow collision events to fire while\n * optionally skipping the physical blocking.\n * \n * This enables scenarios like:\n * - Players passing through other players but still triggering touch events\n * - Entities passing through characters but still calling onPlayerTouch hooks\n * - Ghost mode where collisions are detected but not resolved\n * \n * @param filter - Function that returns `true` to resolve (block), `false` to skip\n * @returns Unsubscribe function to remove the filter\n * \n * @example\n * ```typescript\n * // Allow entity to pass through players but still trigger events\n * const unsubscribe = entity.addResolutionFilter((self, other) => {\n * const otherOwner = (other as any).owner;\n * if (otherOwner?.type === 'player') {\n * return false; // Pass through but events still fire\n * }\n * return true; // Block other entities\n * });\n * \n * // Later, remove the filter\n * unsubscribe();\n * ```\n */\n addResolutionFilter(filter) {\n this.resolutionFilterHandlers.add(filter);\n return () => this.resolutionFilterHandlers.delete(filter);\n }\n /**\n * Checks if this entity should resolve (block) a collision with another entity\n * \n * This is called by the CollisionResolver to determine if the collision should\n * result in physical blocking or just notification.\n * \n * @param other - Other entity to check\n * @returns True if collision should be resolved (blocking), false to pass through\n */\n shouldResolveCollisionWith(other) {\n for (const filter of this.resolutionFilterHandlers) {\n if (!filter(this, other)) {\n return false;\n }\n }\n for (const filter of other.resolutionFilterHandlers) {\n if (!filter(other, this)) {\n return false;\n }\n }\n return true;\n }\n /**\n * @internal\n *\n * Notifies the entity that a collision has started.\n *\n * @param collision - Collision information shared by the world\n * @param other - The counterpart entity\n */\n notifyCollisionEnter(collision, other) {\n if (this.collisionEnterHandlers.size === 0) {\n return;\n }\n const payload = {\n entity: this,\n other,\n collision\n };\n for (const handler of this.collisionEnterHandlers) {\n handler(payload);\n }\n }\n /**\n * @internal\n *\n * Notifies the entity that a collision has ended.\n *\n * @param collision - Collision information stored before separation\n * @param other - The counterpart entity\n */\n notifyCollisionExit(collision, other) {\n if (this.collisionExitHandlers.size === 0) {\n return;\n }\n const payload = {\n entity: this,\n other,\n collision\n };\n for (const handler of this.collisionExitHandlers) {\n handler(payload);\n }\n }\n computeCardinalDirection(direction) {\n if (direction.lengthSquared() <= MOVEMENT_EPSILON_SQ) {\n return \"idle\";\n }\n if (this.lastCardinalDirection === \"idle\") {\n const absX2 = Math.abs(direction.x);\n const absY2 = Math.abs(direction.y);\n if (absX2 >= absY2) {\n return direction.x >= 0 ? \"right\" : \"left\";\n }\n return direction.y >= 0 ? \"down\" : \"up\";\n }\n const isOpposite = this.lastCardinalDirection === \"left\" && direction.x > 0.5 || this.lastCardinalDirection === \"right\" && direction.x < -0.5 || this.lastCardinalDirection === \"up\" && direction.y > 0.5 || this.lastCardinalDirection === \"down\" && direction.y < -0.5;\n const speedSq = this.velocity.lengthSquared();\n if (isOpposite && speedSq < 100) {\n return this.lastCardinalDirection;\n }\n const absX = Math.abs(direction.x);\n const absY = Math.abs(direction.y);\n const bias = 2;\n if ([\"left\", \"right\"].includes(this.lastCardinalDirection)) {\n if (absY > absX * bias) {\n if (Math.abs(this.velocity.y) > 5) {\n return direction.y >= 0 ? \"down\" : \"up\";\n }\n }\n if (speedSq > 1) {\n return direction.x >= 0 ? \"right\" : \"left\";\n }\n return this.lastCardinalDirection;\n } else {\n if (absX > absY * bias) {\n if (Math.abs(this.velocity.x) > 5) {\n return direction.x >= 0 ? \"right\" : \"left\";\n }\n }\n if (speedSq > 1) {\n return direction.y >= 0 ? \"down\" : \"up\";\n }\n return this.lastCardinalDirection;\n }\n }\n /**\n * Creates a copy of this entity\n * \n * @returns New entity with copied properties\n */\n clone() {\n const entity = new Entity({\n position: this.position.clone(),\n velocity: this.velocity.clone(),\n rotation: this.rotation,\n angularVelocity: this.angularVelocity,\n mass: this.mass,\n radius: this.radius,\n width: this.width,\n height: this.height,\n state: this.state,\n restitution: this.restitution,\n friction: this.friction,\n linearDamping: this.linearDamping,\n angularDamping: this.angularDamping,\n maxLinearVelocity: this.maxLinearVelocity,\n maxAngularVelocity: this.maxAngularVelocity,\n collisionMask: this.collisionMask,\n collisionCategory: this.collisionCategory,\n uuid: this.uuid\n });\n return entity;\n }\n}\nexport {\n Entity\n};\n//# sourceMappingURL=index7.js.map\n","import { Vector2 } from \"./index2.js\";\nvar IntegrationMethod = /* @__PURE__ */ ((IntegrationMethod2) => {\n IntegrationMethod2[\"Euler\"] = \"euler\";\n IntegrationMethod2[\"Verlet\"] = \"verlet\";\n return IntegrationMethod2;\n})(IntegrationMethod || {});\nclass Integrator {\n /**\n * Creates a new integrator\n * \n * @param config - Integrator configuration\n */\n constructor(config) {\n this.config = config;\n this.gravity = config.gravity?.clone() ?? new Vector2(0, 0);\n }\n /**\n * Integrates an entity's motion\n * \n * Updates position, velocity, and rotation based on forces and torques.\n * \n * @param entity - Entity to integrate\n */\n integrate(entity) {\n if (entity.isStatic() || entity.isSleeping()) {\n return;\n }\n switch (this.config.method ?? \"euler\") {\n case \"euler\":\n this.integrateEuler(entity);\n break;\n case \"verlet\":\n this.integrateVerlet(entity);\n break;\n }\n }\n /**\n * Semi-implicit Euler integration\n * \n * Updates velocity first, then position. More stable than explicit Euler.\n * \n * @param entity - Entity to integrate\n */\n integrateEuler(entity) {\n const dt = this.config.deltaTime;\n const invMass = entity.invMass;\n if (invMass > 0) {\n entity.force.addInPlace(this.gravity.mul(entity.mass));\n }\n const acceleration = entity.force.mul(invMass);\n entity.velocity.addInPlace(acceleration.mul(dt));\n const linearDampingFactor = 1 - entity.linearDamping;\n entity.velocity.mulInPlace(linearDampingFactor);\n entity.clampVelocities();\n entity.notifyMovementChange();\n const oldPosition = entity.position.clone();\n entity.position.addInPlace(entity.velocity.mul(dt));\n const delta = entity.position.sub(oldPosition);\n if (delta.lengthSquared() > 1e-6) {\n entity.notifyPositionChange();\n }\n const momentOfInertia = entity.mass * entity.radius * entity.radius;\n if (momentOfInertia > 0) {\n const angularAcceleration = entity.torque / momentOfInertia;\n entity.angularVelocity += angularAcceleration * dt;\n }\n const angularDampingFactor = 1 - entity.angularDamping;\n entity.angularVelocity *= angularDampingFactor;\n if (Math.abs(entity.angularVelocity) > entity.maxAngularVelocity) {\n entity.angularVelocity = Math.sign(entity.angularVelocity) * entity.maxAngularVelocity;\n }\n entity.rotation += entity.angularVelocity * dt;\n while (entity.rotation > Math.PI) {\n entity.rotation -= 2 * Math.PI;\n }\n while (entity.rotation < -Math.PI) {\n entity.rotation += 2 * Math.PI;\n }\n entity.clearForces();\n }\n /**\n * Verlet integration\n * \n * More stable than Euler, better energy conservation.\n * Requires storing previous position.\n * \n * @param entity - Entity to integrate\n */\n integrateVerlet(entity) {\n const dt = this.config.deltaTime;\n const dt2 = dt * dt;\n const invMass = entity.invMass;\n if (invMass > 0) {\n entity.force.addInPlace(this.gravity.mul(entity.mass));\n }\n const acceleration = entity.force.mul(invMass);\n const newPosition = entity.position.add(entity.velocity.mul(dt)).add(acceleration.mul(0.5 * dt2));\n const newVelocity = newPosition.sub(entity.position).div(dt);\n const linearDampingFactor = 1 - entity.linearDamping;\n newVelocity.mulInPlace(linearDampingFactor);\n const oldPosition = entity.position.clone();\n entity.position = newPosition;\n entity.velocity = newVelocity;\n entity.clampVelocities();\n entity.notifyMovementChange();\n const delta = entity.position.sub(oldPosition);\n if (delta.lengthSquared() > 1e-6) {\n entity.notifyPositionChange();\n }\n const momentOfInertia = entity.mass * entity.radius * entity.radius;\n if (momentOfInertia > 0) {\n const angularAcceleration = entity.torque / momentOfInertia;\n entity.angularVelocity += angularAcceleration * dt;\n }\n const angularDampingFactor = 1 - entity.angularDamping;\n entity.angularVelocity *= angularDampingFactor;\n if (Math.abs(entity.angularVelocity) > entity.maxAngularVelocity) {\n entity.angularVelocity = Math.sign(entity.angularVelocity) * entity.maxAngularVelocity;\n }\n entity.rotation += entity.angularVelocity * dt;\n while (entity.rotation > Math.PI) {\n entity.rotation -= 2 * Math.PI;\n }\n while (entity.rotation < -Math.PI) {\n entity.rotation += 2 * Math.PI;\n }\n entity.clearForces();\n }\n /**\n * Updates the gravity vector\n * \n * @param gravity - New gravity vector\n */\n setGravity(gravity) {\n this.gravity.copyFrom(gravity);\n }\n /**\n * Gets the current gravity vector\n * \n * @returns Gravity vector\n */\n getGravity() {\n return this.gravity.clone();\n }\n}\nexport {\n IntegrationMethod,\n Integrator\n};\n//# sourceMappingURL=index8.js.map\n","function applyConstantForce(entity, force) {\n entity.applyForce(force);\n}\nfunction applyAttraction(entity, target, strength, maxDistance) {\n const direction = target.sub(entity.position);\n const distance = direction.length();\n if (maxDistance !== void 0 && distance > maxDistance) {\n return;\n }\n if (distance < 1e-3) {\n return;\n }\n direction.normalizeInPlace();\n const force = direction.mul(strength);\n entity.applyForce(force);\n}\nfunction applyRepulsion(entity, source, strength, maxDistance) {\n const direction = entity.position.sub(source);\n const distance = direction.length();\n if (maxDistance !== void 0 && distance > maxDistance) {\n return;\n }\n if (distance < 1e-3) {\n return;\n }\n direction.normalizeInPlace();\n const force = direction.mul(strength);\n entity.applyForce(force);\n}\nfunction applyDirectionalForce(entity, direction, strength) {\n const normalized = direction.normalize();\n const force = normalized.mul(strength);\n entity.applyForce(force);\n}\nfunction applyExplosion(entity, center, strength, radius, falloff = 1) {\n const direction = entity.position.sub(center);\n const distance = direction.length();\n if (distance > radius || distance < 1e-3) {\n return;\n }\n const normalizedDistance = distance / radius;\n const forceStrength = strength * Math.pow(1 - normalizedDistance, falloff);\n direction.normalizeInPlace();\n const force = direction.mul(forceStrength);\n entity.applyImpulse(force);\n}\nfunction applySpring(entityA, entityB, restLength, springConstant, damping) {\n const direction = entityB.position.sub(entityA.position);\n const distance = direction.length();\n if (distance < 1e-3) {\n return;\n }\n const displacement = distance - restLength;\n const springForce = springConstant * displacement;\n direction.normalizeInPlace();\n const force = direction.mul(springForce);\n entityA.applyForce(force.mul(-1));\n entityB.applyForce(force);\n if (damping > 0) {\n const relativeVelocity = entityB.velocity.sub(entityA.velocity);\n const dampingForce = direction.mul(-damping * relativeVelocity.dot(direction));\n entityA.applyForce(dampingForce.mul(-1));\n entityB.applyForce(dampingForce);\n }\n}\nexport {\n applyAttraction,\n applyConstantForce,\n applyDirectionalForce,\n applyExplosion,\n applyRepulsion,\n applySpring\n};\n//# sourceMappingURL=index9.js.map\n","class SpringConstraint {\n /**\n * Creates a new spring constraint\n * \n * @param entityA - First entity\n * @param entityB - Second entity\n * @param restLength - Rest length of the spring\n * @param springConstant - Spring constant (stiffness)\n * @param damping - Damping coefficient\n */\n constructor(entityA, entityB, restLength, springConstant, damping) {\n this.entityA = entityA;\n this.entityB = entityB;\n this.restLength = restLength;\n this.springConstant = springConstant;\n this.damping = damping;\n }\n /**\n * @inheritdoc\n */\n update(_deltaTime) {\n const direction = this.entityB.position.sub(this.entityA.position);\n const distance = direction.length();\n if (distance < 1e-3) {\n return;\n }\n const displacement = distance - this.restLength;\n const springForce = this.springConstant * displacement;\n direction.normalizeInPlace();\n const force = direction.mul(springForce);\n this.entityA.applyForce(force.mul(-1));\n this.entityB.applyForce(force);\n if (this.damping > 0) {\n const relativeVelocity = this.entityB.velocity.sub(this.entityA.velocity);\n const dampingForce = direction.mul(-this.damping * relativeVelocity.dot(direction));\n this.entityA.applyForce(dampingForce.mul(-1));\n this.entityB.applyForce(dampingForce);\n }\n }\n /**\n * Gets the current length of the spring\n * \n * @returns Current length\n */\n getCurrentLength() {\n return this.entityA.position.distanceTo(this.entityB.position);\n }\n}\nclass DistanceConstraint {\n /**\n * Creates a new distance constraint\n * \n * @param entityA - First entity\n * @param entityB - Second entity\n * @param targetDistance - Target distance to maintain\n * @param stiffness - Constraint stiffness (0-1, higher = stiffer)\n */\n constructor(entityA, entityB, targetDistance, stiffness = 0.9) {\n this.entityA = entityA;\n this.entityB = entityB;\n this.targetDistance = targetDistance;\n this.stiffness = stiffness;\n }\n /**\n * @inheritdoc\n */\n update(_deltaTime) {\n const direction = this.entityB.position.sub(this.entityA.position);\n const distance = direction.length();\n if (distance < 1e-3) {\n return;\n }\n const error = distance - this.targetDistance;\n if (Math.abs(error) < 1e-3) {\n return;\n }\n direction.normalizeInPlace();\n const totalInvMass = this.entityA.invMass + this.entityB.invMass;\n if (totalInvMass === 0) {\n return;\n }\n const correction = error * this.stiffness / totalInvMass;\n const correctionA = direction.mul(-correction * this.entityA.invMass);\n const correctionB = direction.mul(correction * this.entityB.invMass);\n if (!this.entityA.isStatic()) {\n this.entityA.position.addInPlace(correctionA);\n }\n if (!this.entityB.isStatic()) {\n this.entityB.position.addInPlace(correctionB);\n }\n }\n /**\n * Gets the current distance\n * \n * @returns Current distance\n */\n getCurrentDistance() {\n return this.entityA.position.distanceTo(this.entityB.position);\n }\n}\nclass AnchorConstraint {\n /**\n * Creates a new anchor constraint\n * \n * @param entity - Entity to anchor\n * @param anchorPoint - Anchor point in world space\n * @param stiffness - Constraint stiffness (0-1)\n */\n constructor(entity, anchorPoint, stiffness = 0.9) {\n this.entity = entity;\n this.anchorPoint = anchorPoint.clone();\n this.stiffness = stiffness;\n }\n /**\n * @inheritdoc\n */\n update(_deltaTime) {\n if (this.entity.isStatic()) {\n return;\n }\n const direction = this.anchorPoint.sub(this.entity.position);\n const distance = direction.length();\n if (distance < 1e-3) {\n return;\n }\n direction.normalizeInPlace();\n const correction = direction.mul(distance * this.stiffness);\n this.entity.position.addInPlace(correction);\n }\n /**\n * Sets the anchor point\n * \n * @param point - New anchor point\n */\n setAnchorPoint(point) {\n this.anchorPoint.copyFrom(point);\n }\n /**\n * Gets the anchor point\n * \n * @returns Anchor point\n */\n getAnchorPoint() {\n return this.anchorPoint.clone();\n }\n}\nexport {\n AnchorConstraint,\n DistanceConstraint,\n SpringConstraint\n};\n//# sourceMappingURL=index10.js.map\n","import { AABB } from \"./index4.js\";\nimport { Vector2 } from \"./index2.js\";\nimport { CircleCollider } from \"./index11.js\";\nclass AABBCollider {\n /**\n * Creates a new AABB collider\n * \n * @param entity - Entity this collider belongs to\n */\n constructor(entity) {\n this.entity = entity;\n }\n /**\n * Gets the AABB bounds\n * \n * @returns AABB\n */\n getBounds() {\n const center = this.entity.position;\n const halfWidth = this.entity.width / 2;\n const halfHeight = this.entity.height / 2;\n return new AABB(\n center.x - halfWidth,\n center.y - halfHeight,\n center.x + halfWidth,\n center.y + halfHeight\n );\n }\n /**\n * @inheritdoc\n */\n testCollision(other) {\n if (other instanceof CircleCollider) {\n const collision = other.testCollision(this);\n if (collision) {\n return {\n entityA: collision.entityB,\n entityB: collision.entityA,\n contacts: collision.contacts.map((c) => ({\n point: c.point,\n normal: c.normal.mul(-1),\n depth: c.depth\n })),\n normal: collision.normal.mul(-1),\n depth: collision.depth\n };\n }\n return null;\n } else if (other instanceof AABBCollider) {\n return this.testAABBAABB(other);\n }\n return null;\n }\n /**\n * Tests collision with another AABB\n * \n * @param other - Other AABB collider\n * @returns Collision info or null\n */\n testAABBAABB(other) {\n const aabbA = this.getBounds();\n const aabbB = other.getBounds();\n if (!aabbA.intersects(aabbB)) {\n return null;\n }\n const intersection = aabbA.intersection(aabbB);\n if (!intersection) {\n return null;\n }\n const overlapX = Math.min(\n aabbA.maxX - aabbB.minX,\n aabbB.maxX - aabbA.minX\n );\n const overlapY = Math.min(\n aabbA.maxY - aabbB.minY,\n aabbB.maxY - aabbA.minY\n );\n let normal;\n let depth;\n if (overlapX < overlapY) {\n depth = overlapX;\n normal = aabbA.getCenterX() < aabbB.getCenterX() ? new Vector2(1, 0) : new Vector2(-1, 0);\n } else {\n depth = overlapY;\n normal = aabbA.getCenterY() < aabbB.getCenterY() ? new Vector2(0, 1) : new Vector2(0, -1);\n }\n const contactPoint = intersection.getCenter();\n return {\n entityA: this.entity,\n entityB: other.entity,\n contacts: [\n {\n point: contactPoint,\n normal,\n depth\n }\n ],\n normal,\n depth\n };\n }\n /**\n * @inheritdoc\n */\n getContactPoints(other) {\n const collision = this.testCollision(other);\n return collision?.contacts ?? [];\n }\n /**\n * @inheritdoc\n */\n getEntity() {\n return this.entity;\n }\n /**\n * @inheritdoc\n */\n raycast(ray) {\n const bounds = this.getBounds();\n const tMin = (bounds.minX - ray.origin.x) / ray.direction.x;\n const tMax = (bounds.maxX - ray.origin.x) / ray.direction.x;\n const tymin = (bounds.minY - ray.origin.y) / ray.direction.y;\n const tymax = (bounds.maxY - ray.origin.y) / ray.direction.y;\n const t1 = Math.min(tMin, tMax);\n const t2 = Math.max(tMin, tMax);\n const t3 = Math.min(tymin, tymax);\n const t4 = Math.max(tymin, tymax);\n const tNear = Math.max(t1, t3);\n const tFar = Math.min(t2, t4);\n if (tNear > tFar || tFar < 0) {\n return null;\n }\n if (tNear > ray.length) {\n return null;\n }\n const t = tNear < 0 ? tFar : tNear;\n if (t < 0) return null;\n const point = ray.getPoint(t);\n let normal = new Vector2(0, 0);\n if (Math.abs(point.x - bounds.minX) < 1e-5) normal.set(-1, 0);\n else if (Math.abs(point.x - bounds.maxX) < 1e-5) normal.set(1, 0);\n else if (Math.abs(point.y - bounds.minY) < 1e-5) normal.set(0, -1);\n else if (Math.abs(point.y - bounds.maxY) < 1e-5) normal.set(0, 1);\n return {\n entity: this.entity,\n point,\n normal,\n distance: t\n };\n }\n}\nexport {\n AABBCollider\n};\n//# sourceMappingURL=index12.js.map\n","import { Vector2 } from \"./index2.js\";\nimport { AABB } from \"./index4.js\";\nimport { AABBCollider } from \"./index12.js\";\nclass CircleCollider {\n /**\n * Creates a new circle collider\n * \n * @param entity - Entity this collider belongs to\n */\n constructor(entity) {\n this.entity = entity;\n }\n /**\n * Gets the radius of the circle\n * \n * @returns Radius\n */\n getRadius() {\n return this.entity.radius;\n }\n /**\n * Gets the center position of the circle\n * \n * @returns Center position\n */\n getCenter() {\n return this.entity.position;\n }\n /**\n * @inheritdoc\n */\n getBounds() {\n const radius = this.entity.radius;\n const center = this.entity.position;\n return new AABB(\n center.x - radius,\n center.y - radius,\n center.x + radius,\n center.y + radius\n );\n }\n /**\n * @inheritdoc\n */\n testCollision(other) {\n if (other instanceof CircleCollider) {\n return this.testCircleCircle(other);\n } else if (other instanceof AABBCollider) {\n return this.testCircleAABB(other);\n }\n return null;\n }\n /**\n * Tests collision with another circle\n * \n * @param other - Other circle collider\n * @returns Collision info or null\n */\n testCircleCircle(other) {\n const centerA = this.getCenter();\n const centerB = other.getCenter();\n const radiusA = this.getRadius();\n const radiusB = other.getRadius();\n const distance = centerA.distanceTo(centerB);\n const minDistance = radiusA + radiusB;\n if (distance >= minDistance) {\n return null;\n }\n const depth = minDistance - distance;\n let normal;\n if (distance < 1e-5) {\n normal = new Vector2(1, 0);\n } else {\n normal = centerB.sub(centerA).normalize();\n }\n const contactPoint = centerA.add(normal.mul(radiusA));\n return {\n entityA: this.entity,\n entityB: other.entity,\n contacts: [\n {\n point: contactPoint,\n normal,\n depth\n }\n ],\n normal,\n depth\n };\n }\n /**\n * Tests collision with an AABB\n * \n * @param other - AABB collider\n * @returns Collision info or null\n */\n testCircleAABB(other) {\n const circleCenter = this.getCenter();\n const circleRadius = this.getRadius();\n const aabb = other.getBounds();\n const closestX = Math.max(aabb.minX, Math.min(circleCenter.x, aabb.maxX));\n const closestY = Math.max(aabb.minY, Math.min(circleCenter.y, aabb.maxY));\n const distanceSq = (circleCenter.x - closestX) ** 2 + (circleCenter.y - closestY) ** 2;\n if (distanceSq > circleRadius * circleRadius) {\n return null;\n }\n const distance = Math.sqrt(distanceSq);\n const depth = circleRadius - distance;\n let normal;\n if (distance < 1e-5) {\n const distToLeft = circleCenter.x - aabb.minX;\n const distToRight = aabb.maxX - circleCenter.x;\n const distToBottom = circleCenter.y - aabb.minY;\n const distToTop = aabb.maxY - circleCenter.y;\n const minDist = Math.min(distToLeft, distToRight, distToBottom, distToTop);\n if (minDist === distToLeft) {\n normal = new Vector2(-1, 0);\n } else if (minDist === distToRight) {\n normal = new Vector2(1, 0);\n } else if (minDist === distToBottom) {\n normal = new Vector2(0, -1);\n } else {\n normal = new Vector2(0, 1);\n }\n } else {\n normal = new Vector2(closestX - circleCenter.x, closestY - circleCenter.y).normalize();\n }\n const contactPoint = new Vector2(closestX, closestY);\n return {\n entityA: this.entity,\n entityB: other.getEntity(),\n contacts: [\n {\n point: contactPoint,\n normal,\n depth\n }\n ],\n normal,\n depth\n };\n }\n /**\n * @inheritdoc\n */\n getContactPoints(other) {\n const collision = this.testCollision(other);\n return collision?.contacts ?? [];\n }\n /**\n * @inheritdoc\n */\n getEntity() {\n return this.entity;\n }\n /**\n * @inheritdoc\n */\n raycast(ray) {\n const center = this.getCenter();\n const radius = this.getRadius();\n const m = ray.origin.sub(center);\n const b = m.dot(ray.direction);\n const c = m.dot(m) - radius * radius;\n if (c > 0 && b > 0) return null;\n const discr = b * b - c;\n if (discr < 0) return null;\n let t = -b - Math.sqrt(discr);\n if (t < 0) t = 0;\n if (t > ray.length) return null;\n const point = ray.getPoint(t);\n const normal = point.sub(center).normalize();\n return {\n entity: this.entity,\n point,\n normal,\n distance: t\n };\n }\n}\nexport {\n CircleCollider\n};\n//# sourceMappingURL=index11.js.map\n","import { Vector2 } from \"./index2.js\";\nimport { AABB } from \"./index4.js\";\nimport { CircleCollider } from \"./index11.js\";\nimport { AABBCollider } from \"./index12.js\";\nclass CapsuleCollider {\n constructor(entity) {\n this.entity = entity;\n }\n getBounds() {\n const { radius, height } = this.getCapsuleConfig();\n const pos = this.entity.position;\n const halfHeight = Math.max(0, height / 2 - radius);\n return new AABB(\n pos.x - radius,\n pos.y - halfHeight - radius,\n pos.x + radius,\n pos.y + halfHeight + radius\n );\n }\n getEntity() {\n return this.entity;\n }\n raycast(ray) {\n const bounds = this.getBounds();\n const tMin = (bounds.minX - ray.origin.x) / ray.direction.x;\n const tMax = (bounds.maxX - ray.origin.x) / ray.direction.x;\n const tymin = (bounds.minY - ray.origin.y) / ray.direction.y;\n const tymax = (bounds.maxY - ray.origin.y) / ray.direction.y;\n const t1 = Math.min(tMin, tMax);\n const t2 = Math.max(tMin, tMax);\n const t3 = Math.min(tymin, tymax);\n const t4 = Math.max(tymin, tymax);\n const tNear = Math.max(t1, t3);\n const tFar = Math.min(t2, t4);\n if (tNear > tFar || tFar < 0) return null;\n if (tNear > ray.length) return null;\n const t = tNear < 0 ? tFar : tNear;\n if (t < 0) return null;\n const point = ray.getPoint(t);\n let normal = new Vector2(0, 0);\n if (Math.abs(point.x - bounds.minX) < 1e-5) normal.set(-1, 0);\n else if (Math.abs(point.x - bounds.maxX) < 1e-5) normal.set(1, 0);\n else if (Math.abs(point.y - bounds.minY) < 1e-5) normal.set(0, -1);\n else if (Math.abs(point.y - bounds.maxY) < 1e-5) normal.set(0, 1);\n return {\n entity: this.entity,\n point,\n normal,\n distance: t\n };\n }\n testCollision(other) {\n if (other instanceof CircleCollider) {\n return this.testCircle(other);\n } else if (other instanceof AABBCollider) {\n return this.testAABB(other);\n } else if (other instanceof CapsuleCollider) {\n return this.testCapsule(other);\n }\n return other.testCollision(this);\n }\n getContactPoints(other) {\n const collision = this.testCollision(other);\n return collision ? collision.contacts : [];\n }\n getCapsuleConfig() {\n if (this.entity.capsule) {\n return this.entity.capsule;\n }\n return { radius: this.entity.radius || 10, height: this.entity.height || 30 };\n }\n getSegment() {\n const { radius, height } = this.getCapsuleConfig();\n const pos = this.entity.position;\n const halfSegment = Math.max(0, height / 2 - radius);\n return {\n a: new Vector2(pos.x, pos.y - halfSegment),\n b: new Vector2(pos.x, pos.y + halfSegment)\n };\n }\n testCircle(circle) {\n const seg = this.getSegment();\n const circleCenter = circle.getCenter();\n const circleRadius = circle.getRadius();\n const capRadius = this.getCapsuleConfig().radius;\n const closest = this.closestPointOnSegment(seg.a, seg.b, circleCenter);\n const distSq = closest.distanceToSquared(circleCenter);\n const minDist = capRadius + circleRadius;\n if (distSq > minDist * minDist) {\n return null;\n }\n const dist = Math.sqrt(distSq);\n const normal = dist > 0 ? circleCenter.sub(closest).normalize() : new Vector2(1, 0);\n const depth = minDist - dist;\n return {\n entityA: this.entity,\n entityB: circle.getEntity(),\n // Convention: Normal points from A to B.\n // Here A is Capsule, B is Circle.\n // Vector from closest (on capsule) to center (circle) is B - A.\n // So normal should be (circleCenter - closest).normalized().\n // Wait, if I return normal, it should be the direction to push B out of A?\n // Usually normal points from A to B.\n // Let's stick to: normal points from A to B.\n contacts: [{\n point: closest.add(normal.mul(capRadius)),\n normal,\n depth\n }],\n normal,\n depth\n };\n }\n testAABB(box) {\n const seg = this.getSegment();\n const capRadius = this.getCapsuleConfig().radius;\n const boxBounds = box.getBounds();\n const closestOnSeg = this.closestPointOnSegment(seg.a, seg.b, box.getBounds().getCenter());\n const closestOnBox = boxBounds.clamp(closestOnSeg);\n const distSq = closestOnSeg.distanceToSquared(closestOnBox);\n if (distSq > capRadius * capRadius) {\n return null;\n }\n const dist = Math.sqrt(distSq);\n const normal = dist > 0 ? closestOnBox.sub(closestOnSeg).normalize() : new Vector2(0, 1);\n const depth = capRadius - dist;\n return {\n entityA: this.entity,\n entityB: box.getEntity(),\n contacts: [{\n point: closestOnBox,\n normal,\n depth\n }],\n normal,\n depth\n };\n }\n testCapsule(other) {\n const segA = this.getSegment();\n const segB = other.getSegment();\n const rA = this.getCapsuleConfig().radius;\n const rB = other.getCapsuleConfig().radius;\n const { p1, p2 } = this.closestPointsSegmentSegment(segA.a, segA.b, segB.a, segB.b);\n const distSq = p1.distanceToSquared(p2);\n const minDist = rA + rB;\n if (distSq > minDist * minDist) {\n return null;\n }\n const dist = Math.sqrt(distSq);\n const normal = dist > 0 ? p2.sub(p1).normalize() : new Vector2(1, 0);\n const depth = minDist - dist;\n return {\n entityA: this.entity,\n entityB: other.getEntity(),\n contacts: [{\n point: p1.add(normal.mul(rA)),\n normal,\n depth\n }],\n normal,\n depth\n };\n }\n closestPointOnSegment(a, b, p) {\n const ab = b.sub(a);\n const t = p.sub(a).dot(ab) / ab.dot(ab);\n return a.add(ab.mul(Math.max(0, Math.min(1, t))));\n }\n // http://geomalgorithms.com/a07-_distance.html\n closestPointsSegmentSegment(p1, p2, p3, p4) {\n const u = p2.sub(p1);\n const v = p4.sub(p3);\n const w = p1.sub(p3);\n const a = u.dot(u);\n const b = u.dot(v);\n const c = v.dot(v);\n const d = u.dot(w);\n const e = v.dot(w);\n const D = a * c - b * b;\n let sc, sN, sD = D;\n let tc, tN, tD = D;\n if (D < 1e-8) {\n sN = 0;\n sD = 1;\n tN = e;\n tD = c;\n } else {\n sN = b * e - c * d;\n tN = a * e - b * d;\n if (sN < 0) {\n sN = 0;\n tN = e;\n tD = c;\n } else if (sN > sD) {\n sN = sD;\n tN = e + b;\n tD = c;\n }\n }\n if (tN < 0) {\n tN = 0;\n if (-d < 0) sN = 0;\n else if (-d > a) sN = sD;\n else {\n sN = -d;\n sD = a;\n }\n } else if (tN > tD) {\n tN = tD;\n if (-d + b < 0) sN = 0;\n else if (-d + b > a) sN = sD;\n else {\n sN = -d + b;\n sD = a;\n }\n }\n sc = Math.abs(sN) < 1e-8 ? 0 : sN / sD;\n tc = Math.abs(tN) < 1e-8 ? 0 : tN / tD;\n return {\n p1: p1.add(u.mul(sc)),\n p2: p3.add(v.mul(tc))\n };\n }\n}\nexport {\n CapsuleCollider\n};\n//# sourceMappingURL=index13.js.map\n","import { AABB } from \"./index4.js\";\nimport { Vector2 } from \"./index2.js\";\nimport { Entity } from \"./index7.js\";\nimport { AABBCollider } from \"./index12.js\";\nimport { CircleCollider } from \"./index11.js\";\nconst entityToPolygonConfig = /* @__PURE__ */ new WeakMap();\nfunction assignPolygonCollider(entity, config) {\n entityToPolygonConfig.set(entity, config);\n}\nclass PolygonCollider {\n // local-space convex polygons\n constructor(entity) {\n this.entity = entity;\n const cfg = entityToPolygonConfig.get(entity);\n if (!cfg) {\n this.convexParts = [];\n return;\n }\n if (cfg.parts && cfg.parts.length > 0) {\n this.convexParts = cfg.parts.map((p) => p.slice());\n } else if (cfg.vertices && cfg.vertices.length >= 3) {\n this.convexParts = [cfg.vertices.slice()];\n } else {\n this.convexParts = [];\n }\n }\n getEntity() {\n return this.entity;\n }\n getBounds() {\n const rotation = this.entity.rotation;\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n for (const part of this.convexParts) {\n for (const v of part) {\n const x = v.x * cos - v.y * sin + this.entity.position.x;\n const y = v.x * sin + v.y * cos + this.entity.position.y;\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n }\n if (minX === Number.POSITIVE_INFINITY) {\n minX = maxX = this.entity.position.x;\n minY = maxY = this.entity.position.y;\n }\n return new AABB(minX, minY, maxX, maxY);\n }\n getContactPoints(other) {\n const info = this.testCollision(other);\n return info ? info.contacts : [];\n }\n testCollision(other) {\n if (other instanceof CircleCollider) {\n return this.testPolygonCircle(other);\n }\n if (other instanceof AABBCollider) {\n return this.testPolygonAABB(other);\n }\n if (other instanceof PolygonCollider) {\n return this.testPolygonPolygon(other);\n }\n return null;\n }\n testPolygonAABB(other) {\n const b = other.getBounds();\n const halfW = (b.maxX - b.minX) / 2;\n const halfH = (b.maxY - b.minY) / 2;\n const center = new Vector2((b.minX + b.maxX) / 2, (b.minY + b.maxY) / 2);\n const aabbPolyLocal = [\n new Vector2(-halfW, -halfH),\n new Vector2(halfW, -halfH),\n new Vector2(halfW, halfH),\n new Vector2(-halfW, halfH)\n ];\n const tempEntity = new Entity({ position: center, rotation: 0, mass: 0 });\n entityToPolygonConfig.set(tempEntity, { vertices: aabbPolyLocal, isConvex: true });\n const tempPoly = new PolygonCollider(tempEntity);\n const result = this.testPolygonPolygon(tempPoly);\n if (!result) return null;\n return {\n entityA: result.entityA === tempEntity ? this.entity : result.entityA,\n entityB: other.getEntity(),\n contacts: result.contacts,\n normal: result.normal,\n depth: result.depth\n };\n }\n testPolygonCircle(other) {\n let bestInfo = null;\n const center = other.getCenter();\n const r = other.getRadius();\n for (const part of this.getWorldParts()) {\n let minDistSq = Number.POSITIVE_INFINITY;\n let closestPoint = null;\n for (let i = 0; i < part.length; i++) {\n const a = part[i];\n const b = part[(i + 1) % part.length];\n if (!a || !b) continue;\n const cp = closestPointOnSegment(a, b, center);\n const dsq = center.distanceToSquared(cp);\n if (dsq < minDistSq) {\n minDistSq = dsq;\n closestPoint = cp;\n }\n }\n if (!closestPoint) continue;\n const dist = Math.sqrt(minDistSq);\n if (dist <= r) {\n const normal = dist > 1e-6 ? center.sub(closestPoint).normalize() : new Vector2(1, 0);\n const depth = r - dist;\n const info = {\n entityA: this.entity,\n entityB: other.getEntity(),\n contacts: [{ point: closestPoint, normal, depth }],\n normal,\n depth\n };\n if (!bestInfo || info.depth > bestInfo.depth) bestInfo = info;\n }\n }\n return bestInfo;\n }\n testPolygonPolygon(other) {\n let bestDepth = Number.POSITIVE_INFINITY;\n let bestAxis = null;\n let flipNormal = false;\n const partsA = this.getWorldParts();\n const partsB = other.getWorldParts();\n let collided = false;\n for (const a of partsA) {\n for (const b of partsB) {\n const axes = gatherSATAxes(a, b);\n let overlapDepth = Number.POSITIVE_INFINITY;\n let axisForPair = null;\n for (const axis of axes) {\n const projA = projectOntoAxis(a, axis);\n const projB = projectOntoAxis(b, axis);\n const overlap = intervalOverlap(projA.min, projA.max, projB.min, projB.max);\n if (overlap <= 0) {\n overlapDepth = -1;\n break;\n }\n if (overlap < overlapDepth) {\n overlapDepth = overlap;\n axisForPair = axis;\n }\n }\n if (overlapDepth > 0 && axisForPair) {\n collided = true;\n if (overlapDepth < bestDepth) {\n bestDepth = overlapDepth;\n bestAxis = axisForPair;\n const cA = polygonCentroid(a);\n const cB = polygonCentroid(b);\n flipNormal = cA.sub(cB).dot(bestAxis) > 0;\n }\n }\n }\n }\n if (!collided || !bestAxis) return null;\n const normal = flipNormal ? bestAxis.mul(-1) : bestAxis.clone();\n const depth = bestDepth;\n const centroidA = polygonCentroid(partsA[0]);\n const contactPoint = centroidA.add(normal.mul(0));\n return {\n entityA: this.entity,\n entityB: other.getEntity(),\n contacts: [{ point: contactPoint, normal, depth }],\n normal,\n depth\n };\n }\n /**\n * @inheritdoc\n */\n raycast(ray) {\n const bounds = this.getBounds();\n const tMin = (bounds.minX - ray.origin.x) / ray.direction.x;\n const tMax = (bounds.maxX - ray.origin.x) / ray.direction.x;\n const tymin = (bounds.minY - ray.origin.y) / ray.direction.y;\n const tymax = (bounds.maxY - ray.origin.y) / ray.direction.y;\n const t1 = Math.min(tMin, tMax);\n const t2 = Math.max(tMin, tMax);\n const t3 = Math.min(tymin, tymax);\n const t4 = Math.max(tymin, tymax);\n const tNear = Math.max(t1, t3);\n const tFar = Math.min(t2, t4);\n if (tNear > tFar || tFar < 0) return null;\n if (tNear > ray.length) return null;\n let closestHit = null;\n const parts = this.getWorldParts();\n for (const part of parts) {\n for (let i = 0; i < part.length; i++) {\n const p1 = part[i];\n const p2 = part[(i + 1) % part.length];\n if (!p1 || !p2) continue;\n const hit = this.rayCastSegment(ray, p1, p2);\n if (hit) {\n if (!closestHit || hit.distance < closestHit.distance) {\n closestHit = hit;\n }\n }\n }\n }\n return closestHit;\n }\n rayCastSegment(ray, p1, p2) {\n const v1 = ray.origin;\n const v2 = ray.origin.add(ray.direction);\n const v3 = p1;\n const v4 = p2;\n const den = (v1.x - v2.x) * (v3.y - v4.y) - (v1.y - v2.y) * (v3.x - v4.x);\n if (den === 0) return null;\n const t = ((v1.x - v3.x) * (v3.y - v4.y) - (v1.y - v3.y) * (v3.x - v4.x)) / den;\n const u = -((v1.x - v2.x) * (v1.y - v3.y) - (v1.y - v2.y) * (v1.x - v3.x)) / den;\n if (t >= 0 && t <= ray.length && u >= 0 && u <= 1) {\n const point = new Vector2(\n v1.x + t * (v2.x - v1.x),\n v1.y + t * (v2.y - v1.y)\n );\n const segmentDir = p2.sub(p1).normalize();\n let normal = new Vector2(-segmentDir.y, segmentDir.x);\n if (normal.dot(ray.direction) > 0) {\n normal = normal.mul(-1);\n }\n return {\n entity: this.entity,\n point,\n normal,\n distance: t\n };\n }\n return null;\n }\n getWorldParts() {\n const rotation = this.entity.rotation;\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n const px = this.entity.position.x;\n const py = this.entity.position.y;\n const worldParts = [];\n for (const part of this.convexParts) {\n const w = new Array(part.length);\n for (let i = 0; i < part.length; i++) {\n const v = part[i];\n if (!v) continue;\n w[i] = new Vector2(v.x * cos - v.y * sin + px, v.x * sin + v.y * cos + py);\n }\n worldParts.push(w);\n }\n return worldParts;\n }\n}\nfunction closestPointOnSegment(a, b, p) {\n const ab = b.sub(a);\n const ap = p.sub(a);\n const t = Math.max(0, Math.min(1, ap.dot(ab) / ab.dot(ab)));\n return a.add(ab.mul(t));\n}\nfunction gatherSATAxes(a, b) {\n const axes = [];\n const pushAxis = (p, i) => {\n const p0 = p[i];\n const p1 = p[(i + 1) % p.length];\n if (!p0 || !p1) return;\n const edge = p1.sub(p0);\n const axis = new Vector2(-edge.y, edge.x).normalize();\n axes.push(axis);\n };\n for (let i = 0; i < a.length; i++) pushAxis(a, i);\n for (let i = 0; i < b.length; i++) pushAxis(b, i);\n return axes;\n}\nfunction projectOntoAxis(poly, axis) {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n for (const v of poly) {\n const p = v.dot(axis);\n if (p < min) min = p;\n if (p > max) max = p;\n }\n return { min, max };\n}\nfunction intervalOverlap(minA, maxA, minB, maxB) {\n return Math.min(maxA, maxB) - Math.max(minA, minB);\n}\nfunction polygonCentroid(poly) {\n let cx = 0;\n let cy = 0;\n for (const v of poly) {\n cx += v.x;\n cy += v.y;\n }\n const n = poly.length > 0 ? poly.length : 1;\n return new Vector2(cx / n, cy / n);\n}\nexport {\n PolygonCollider,\n assignPolygonCollider,\n entityToPolygonConfig\n};\n//# sourceMappingURL=index19.js.map\n","import { CircleCollider } from \"./index11.js\";\nimport { AABBCollider } from \"./index12.js\";\nimport { entityToPolygonConfig, PolygonCollider } from \"./index19.js\";\nimport { CapsuleCollider } from \"./index13.js\";\nconst colliderCache = /* @__PURE__ */ new WeakMap();\nfunction createCollider(entity) {\n const cached = colliderCache.get(entity);\n if (cached) {\n return cached;\n }\n let collider = null;\n if (entityToPolygonConfig.has(entity)) {\n collider = new PolygonCollider(entity);\n } else if (entity.capsule) {\n collider = new CapsuleCollider(entity);\n } else if (entity.radius > 0) {\n collider = new CircleCollider(entity);\n } else if (entity.width > 0 && entity.height > 0) {\n collider = new AABBCollider(entity);\n }\n if (collider) {\n colliderCache.set(entity, collider);\n }\n return collider;\n}\nfunction testCollision(entityA, entityB) {\n if (!entityA.canCollideWith(entityB)) {\n return null;\n }\n if (entityA.isStatic() && entityB.isStatic()) {\n return null;\n }\n const colliderA = createCollider(entityA);\n const colliderB = createCollider(entityB);\n if (!colliderA || !colliderB) {\n return null;\n }\n return colliderA.testCollision(colliderB);\n}\nfunction findCollisions(entities) {\n const collisions = [];\n for (let i = 0; i < entities.length; i++) {\n const entityA = entities[i];\n if (!entityA) continue;\n for (let j = i + 1; j < entities.length; j++) {\n const entityB = entities[j];\n if (!entityB) continue;\n const collision = testCollision(entityA, entityB);\n if (collision) {\n collisions.push(collision);\n }\n }\n }\n return collisions;\n}\nexport {\n createCollider,\n findCollisions,\n testCollision\n};\n//# sourceMappingURL=index18.js.map\n","import { createCollider } from \"./index18.js\";\nclass SpatialHashCell {\n constructor() {\n this.entities = [];\n }\n /**\n * Adds an entity to this cell\n * \n * @param entity - Entity to add\n */\n add(entity) {\n if (this.entities.indexOf(entity) === -1) {\n this.entities.push(entity);\n }\n }\n /**\n * Removes an entity from this cell\n * \n * @param entity - Entity to remove\n */\n remove(entity) {\n const index = this.entities.indexOf(entity);\n if (index !== -1) {\n const last = this.entities[this.entities.length - 1];\n if (last) {\n this.entities[index] = last;\n }\n this.entities.pop();\n }\n }\n /**\n * Clears all entities from this cell\n */\n clear() {\n this.entities.length = 0;\n }\n}\nclass SpatialHash {\n /**\n * Creates a new spatial hash\n * \n * @param cellSize - Size of each cell in world units\n * @param gridWidth - Number of cells horizontally\n * @param gridHeight - Number of cells vertically (default: same as width)\n */\n constructor(cellSize, gridWidth, gridHeight) {\n this.cellSize = cellSize;\n this.gridWidth = gridWidth;\n this.gridHeight = gridHeight ?? gridWidth;\n this.cells = /* @__PURE__ */ new Map();\n this.entityCells = /* @__PURE__ */ new WeakMap();\n }\n /**\n * Converts world coordinates to grid coordinates\n * \n * @param x - World X coordinate\n * @param y - World Y coordinate\n * @returns Grid coordinates\n */\n worldToGrid(x, y) {\n return {\n x: Math.floor(x / this.cellSize),\n y: Math.floor(y / this.cellSize)\n };\n }\n /**\n * Creates a cell key from grid coordinates\n * \n * @param gridX - Grid X coordinate\n * @param gridY - Grid Y coordinate\n * @returns Numeric cell key\n */\n getKey(gridX, gridY) {\n return (gridX & 65535) << 16 | gridY & 65535;\n }\n /**\n * Gets or creates a cell at grid coordinates\n * \n * @param key - Cell key\n * @returns Cell instance\n */\n getCell(key) {\n let cell = this.cells.get(key);\n if (!cell) {\n cell = new SpatialHashCell();\n this.cells.set(key, cell);\n }\n return cell;\n }\n /**\n * Gets all cell keys that an entity's AABB overlaps\n * \n * @param entity - Entity to get cells for\n * @param outKeys - Array to store keys in (to avoid allocation)\n * @returns Number of keys added\n */\n getEntityKeys(entity, outKeys) {\n const collider = createCollider(entity);\n if (!collider) {\n return 0;\n }\n const bounds = collider.getBounds();\n const minGrid = this.worldToGrid(bounds.minX, bounds.minY);\n const maxGrid = this.worldToGrid(bounds.maxX, bounds.maxY);\n let count = 0;\n outKeys.length = 0;\n for (let x = minGrid.x; x <= maxGrid.x; x++) {\n for (let y = minGrid.y; y <= maxGrid.y; y++) {\n const wrappedX = (x % this.gridWidth + this.gridWidth) % this.gridWidth;\n const wrappedY = (y % this.gridHeight + this.gridHeight) % this.gridHeight;\n outKeys.push(this.getKey(wrappedX, wrappedY));\n count++;\n }\n }\n return count;\n }\n /**\n * Inserts an entity into the spatial hash\n * \n * @param entity - Entity to insert\n */\n insert(entity) {\n const newKeys = [];\n this.getEntityKeys(entity, newKeys);\n this.entityCells.set(entity, newKeys);\n for (const key of newKeys) {\n const cell = this.getCell(key);\n cell.add(entity);\n }\n }\n /**\n * Removes an entity from the spatial hash\n * \n * @param entity - Entity to remove\n */\n remove(entity) {\n const keys = this.entityCells.get(entity);\n if (!keys) {\n return;\n }\n for (const key of keys) {\n const cell = this.cells.get(key);\n if (cell) {\n cell.remove(entity);\n }\n }\n this.entityCells.delete(entity);\n }\n /**\n * Updates an entity's position in the spatial hash\n * \n * Removes and re-inserts the entity if it moved to different cells.\n * \n * @param entity - Entity to update\n */\n update(entity) {\n const oldKeys = this.entityCells.get(entity);\n const newKeys = [];\n this.getEntityKeys(entity, newKeys);\n if (oldKeys && oldKeys.length === newKeys.length) {\n let match = true;\n for (let i = 0; i < oldKeys.length; i++) {\n if (oldKeys[i] !== newKeys[i]) {\n match = false;\n break;\n }\n }\n if (match) return;\n }\n if (oldKeys) {\n for (const key of oldKeys) {\n const cell = this.cells.get(key);\n if (cell) {\n cell.remove(entity);\n }\n }\n }\n this.entityCells.set(entity, newKeys);\n for (const key of newKeys) {\n const cell = this.getCell(key);\n cell.add(entity);\n }\n }\n /**\n * Queries entities near a given entity\n * \n * @param entity - Entity to query around\n * @param results - Optional Set to store results in (avoids allocation)\n * @returns Set of nearby entities (excluding the query entity)\n */\n query(entity, results = /* @__PURE__ */ new Set()) {\n let keys = this.entityCells.get(entity);\n if (!keys) {\n keys = [];\n this.getEntityKeys(entity, keys);\n }\n results.clear();\n for (const key of keys) {\n const cell = this.cells.get(key);\n if (cell) {\n const entities = cell.entities;\n for (let i = 0; i < entities.length; i++) {\n const other = entities[i];\n if (other && other !== entity) {\n results.add(other);\n }\n }\n }\n }\n return results;\n }\n /**\n * Queries entities in an AABB region\n * \n * @param bounds - AABB to query\n * @returns Set of entities in the region\n */\n queryAABB(bounds) {\n const minGrid = this.worldToGrid(bounds.minX, bounds.minY);\n const maxGrid = this.worldToGrid(bounds.maxX, bounds.maxY);\n const results = /* @__PURE__ */ new Set();\n for (let x = minGrid.x; x <= maxGrid.x; x++) {\n for (let y = minGrid.y; y <= maxGrid.y; y++) {\n const wrappedX = (x % this.gridWidth + this.gridWidth) % this.gridWidth;\n const wrappedY = (y % this.gridHeight + this.gridHeight) % this.gridHeight;\n const key = this.getKey(wrappedX, wrappedY);\n const cell = this.cells.get(key);\n if (cell) {\n for (const entity of cell.entities) {\n results.add(entity);\n }\n }\n }\n }\n return results;\n }\n /**\n * Clears all entities from the spatial hash\n */\n clear() {\n this.cells.clear();\n }\n /**\n * Gets statistics about the spatial hash\n * \n * @returns Statistics object\n */\n getStats() {\n let totalEntities = 0;\n for (const cell of this.cells.values()) {\n totalEntities += cell.entities.length;\n }\n return {\n totalCells: this.gridWidth * this.gridHeight,\n usedCells: this.cells.size,\n totalEntities,\n averageEntitiesPerCell: this.cells.size > 0 ? totalEntities / this.cells.size : 0\n };\n }\n /**\n * Casts a ray against entities in the spatial hash\n * \n * @param ray - Ray to cast\n * @param mask - Optional collision mask (layer)\n * @param filter - Optional filter function (return true to include entity)\n * @returns Raycast hit info if hit, null otherwise\n */\n raycast(ray, mask, filter) {\n const start = ray.origin;\n const end = ray.getPoint(Math.min(ray.length, 1e4));\n let x0 = start.x;\n let y0 = start.y;\n const x1 = end.x;\n const y1 = end.y;\n let gx0 = Math.floor(x0 / this.cellSize);\n let gy0 = Math.floor(y0 / this.cellSize);\n const gx1 = Math.floor(x1 / this.cellSize);\n const gy1 = Math.floor(y1 / this.cellSize);\n const sx = x0 < x1 ? 1 : -1;\n const sy = y0 < y1 ? 1 : -1;\n const visitedEntities = /* @__PURE__ */ new Set();\n let closestHit = null;\n const checkCell = (gx, gy) => {\n const wrappedX = (gx % this.gridWidth + this.gridWidth) % this.gridWidth;\n const wrappedY = (gy % this.gridHeight + this.gridHeight) % this.gridHeight;\n const key = this.getKey(wrappedX, wrappedY);\n const cell = this.cells.get(key);\n if (cell) {\n for (const entity of cell.entities) {\n if (visitedEntities.has(entity)) continue;\n visitedEntities.add(entity);\n if (mask !== void 0 && (entity.collisionCategory & mask) === 0) continue;\n if (filter && !filter(entity)) {\n continue;\n }\n const collider = createCollider(entity);\n if (collider) {\n const hit = collider.raycast(ray);\n if (hit) {\n if (!closestHit || hit.distance < closestHit.distance) {\n closestHit = hit;\n }\n }\n }\n }\n }\n };\n let x = gx0;\n let y = gy0;\n const stepX = sx;\n const stepY = sy;\n const tDeltaX = this.cellSize / Math.abs(ray.direction.x);\n const tDeltaY = this.cellSize / Math.abs(ray.direction.y);\n let tMaxX = ray.direction.x > 0 ? ((x + 1) * this.cellSize - start.x) / ray.direction.x : (start.x - x * this.cellSize) / -ray.direction.x;\n if (ray.direction.x < 0) {\n tMaxX = (start.x - x * this.cellSize) / -ray.direction.x;\n } else {\n tMaxX = ((x + 1) * this.cellSize - start.x) / ray.direction.x;\n }\n let tMaxY = ray.direction.y > 0 ? ((y + 1) * this.cellSize - start.y) / ray.direction.y : (start.y - y * this.cellSize) / -ray.direction.y;\n if (ray.direction.y < 0) {\n tMaxY = (start.y - y * this.cellSize) / -ray.direction.y;\n } else {\n tMaxY = ((y + 1) * this.cellSize - start.y) / ray.direction.y;\n }\n if (Math.abs(ray.direction.x) < 1e-9) {\n tMaxX = Infinity;\n }\n if (Math.abs(ray.direction.y) < 1e-9) {\n tMaxY = Infinity;\n }\n let steps = 0;\n const maxSteps = Math.abs(gx1 - gx0) + Math.abs(gy1 - gy0) + 10;\n while (steps < maxSteps) {\n checkCell(x, y);\n if (closestHit) {\n if (closestHit.distance < Math.min(tMaxX, tMaxY)) {\n return closestHit;\n }\n }\n if (tMaxX < tMaxY) {\n tMaxX += tDeltaX;\n x += stepX;\n } else {\n tMaxY += tDeltaY;\n y += stepY;\n }\n steps++;\n if (closestHit && closestHit.distance < ray.length) ;\n }\n return closestHit;\n }\n}\nexport {\n SpatialHash\n};\n//# sourceMappingURL=index14.js.map\n","class Ray {\n /**\n * Creates a new ray\n * \n * @param origin - Ray origin\n * @param direction - Ray direction\n * @param length - Maximum length (default: Infinity)\n */\n constructor(origin, direction, length = Infinity) {\n this.origin = origin.clone();\n this.direction = direction.clone().normalizeInPlace();\n this.length = length;\n }\n /**\n * Gets a point along the ray\n * \n * @param distance - Distance from origin\n * @returns Point at distance\n */\n getPoint(distance) {\n return this.origin.add(this.direction.mul(distance));\n }\n}\nexport {\n Ray\n};\n//# sourceMappingURL=index21.js.map\n","import { Vector2 } from \"./index2.js\";\nimport { AABB } from \"./index4.js\";\nimport { Ray } from \"./index21.js\";\nimport { AABBCollider } from \"./index12.js\";\nimport { CircleCollider } from \"./index11.js\";\nimport { PolygonCollider } from \"./index19.js\";\nimport { createCollider } from \"./index18.js\";\nfunction raycast(partition, origin, direction, maxDistance, mask, filter) {\n const dir = direction.length() > 0 ? direction.normalize() : new Vector2(1, 0);\n const end = origin.add(dir.mul(maxDistance));\n const candidates = partition.raycast(new Ray(origin, dir, maxDistance), mask, filter);\n if (candidates) return candidates;\n const bounds = new AABB(\n Math.min(origin.x, end.x),\n Math.min(origin.y, end.y),\n Math.max(origin.x, end.x),\n Math.max(origin.y, end.y)\n );\n const entities = partition.queryAABB(bounds);\n let best = null;\n for (const e of entities) {\n if (mask !== void 0 && (e.collisionCategory & mask) === 0) continue;\n if (filter && !filter(e)) continue;\n const collider = createCollider(e);\n if (!collider) continue;\n const hit = raycastCollider(collider, origin, dir, maxDistance);\n if (!hit) continue;\n if (!best || hit.distance < best.distance) best = hit;\n }\n return best;\n}\nfunction raycastCollider(collider, origin, dir, maxDistance) {\n if (collider instanceof CircleCollider) return raycastCircle(collider, origin, dir, maxDistance);\n if (collider instanceof AABBCollider) return raycastAABB(collider, origin, dir, maxDistance);\n if (collider instanceof PolygonCollider) return raycastPolygon(collider, origin, dir, maxDistance);\n return null;\n}\nfunction raycastCircle(circle, origin, dir, maxDistance) {\n const c = circle.getCenter();\n const r = circle.getRadius();\n const m = origin.sub(c);\n const b = m.dot(dir);\n const cval = m.dot(m) - r * r;\n if (cval > 0 && b > 0) return null;\n const discr = b * b - cval;\n if (discr < 0) return null;\n const t = -b - Math.sqrt(discr);\n if (t < 0) return null;\n if (t > maxDistance) return null;\n const point = origin.add(dir.mul(t));\n const normal = point.sub(c).normalize();\n return { entity: circle.getEntity(), point, normal, distance: t };\n}\nfunction raycastAABB(box, origin, dir, maxDistance) {\n const b = box.getBounds();\n let tmin = 0;\n let tmax = maxDistance;\n const invDx = 1 / (dir.x === 0 ? 1e-9 : dir.x);\n const invDy = 1 / (dir.y === 0 ? 1e-9 : dir.y);\n let tx1 = (b.minX - origin.x) * invDx;\n let tx2 = (b.maxX - origin.x) * invDx;\n let ty1 = (b.minY - origin.y) * invDy;\n let ty2 = (b.maxY - origin.y) * invDy;\n const tminX = Math.min(tx1, tx2);\n const tmaxX = Math.max(tx1, tx2);\n const tminY = Math.min(ty1, ty2);\n const tmaxY = Math.max(ty1, ty2);\n tmin = Math.max(tmin, Math.max(tminX, tminY));\n tmax = Math.min(tmax, Math.min(tmaxX, tmaxY));\n if (tmax < tmin || tmin < 0 || tmin > maxDistance) return null;\n const point = origin.add(dir.mul(tmin));\n let normal;\n if (tmin === tminX) normal = new Vector2(dir.x > 0 ? -1 : 1, 0);\n else normal = new Vector2(0, dir.y > 0 ? -1 : 1);\n return { entity: box.getEntity(), point, normal, distance: tmin };\n}\nfunction raycastPolygon(poly, origin, dir, maxDistance) {\n const end = origin.add(dir.mul(maxDistance));\n let bestT = Number.POSITIVE_INFINITY;\n let bestPoint = null;\n let bestNormal = null;\n const any = poly;\n const parts = any[\"getWorldParts\"] ? any[\"getWorldParts\"]() : [];\n for (const part of parts) {\n for (let i = 0; i < part.length; i++) {\n const a = part[i];\n const b = part[(i + 1) % part.length];\n if (!a || !b) continue;\n const hit = segmentRayIntersection(a, b, origin, end);\n if (!hit) continue;\n const t = hit.distance;\n if (t >= 0 && t <= maxDistance && t < bestT) {\n bestT = t;\n bestPoint = hit.point;\n const edge = b.sub(a);\n const n = new Vector2(-edge.y, edge.x).normalize();\n bestNormal = n;\n }\n }\n }\n if (!bestPoint || !bestNormal || bestT === Number.POSITIVE_INFINITY) return null;\n return { entity: poly.getEntity(), point: bestPoint, normal: bestNormal, distance: bestT };\n}\nfunction segmentRayIntersection(a, b, r0, r1) {\n const v1 = r0.sub(a);\n const v2 = b.sub(a);\n const v3 = new Vector2(-(r1.y - r0.y), r1.x - r0.x);\n const denom = v2.dot(v3);\n if (Math.abs(denom) < 1e-9) return null;\n const t1 = v2.cross(v1) / denom;\n const t2 = v1.dot(v3) / denom;\n if (t1 >= 0 && t1 <= 1 && t2 >= 0 && t2 <= 1) {\n const hitPoint = new Vector2(r0.x + (r1.x - r0.x) * t1, r0.y + (r1.y - r0.y) * t1);\n const dist = hitPoint.sub(r0).length();\n return { point: hitPoint, distance: dist };\n }\n return null;\n}\nexport {\n raycast,\n raycastCollider\n};\n//# sourceMappingURL=index20.js.map\n","import { AABB } from \"./index4.js\";\nimport { createCollider } from \"./index18.js\";\nimport { raycastCollider } from \"./index20.js\";\nclass QuadNode {\n constructor(bounds) {\n this.items = [];\n this.children = null;\n this.bounds = bounds;\n }\n}\nclass Quadtree {\n constructor(worldBounds, capacity = 8, maxDepth = 8) {\n this.entityMap = /* @__PURE__ */ new Map();\n this.root = new QuadNode(worldBounds);\n this.capacity = capacity;\n this.maxDepth = maxDepth;\n }\n clear() {\n this.root = new QuadNode(this.root.bounds);\n this.entityMap.clear();\n }\n insert(entity) {\n const collider = createCollider(entity);\n if (!collider) return;\n const bounds = collider.getBounds();\n const item = { entity, bounds };\n this.entityMap.set(entity, item);\n this.insertItem(this.root, item, 0);\n }\n remove(entity) {\n if (!this.entityMap.has(entity)) return;\n this.entityMap.delete(entity);\n const items = Array.from(this.entityMap.values());\n this.clear();\n for (const it of items) this.insertItem(this.root, it, 0);\n }\n update(entity) {\n const it = this.entityMap.get(entity);\n const collider = createCollider(entity);\n if (!collider) return;\n const newBounds = collider.getBounds();\n if (!it) {\n this.entityMap.set(entity, { entity, bounds: newBounds });\n this.insertItem(this.root, { entity, bounds: newBounds }, 0);\n return;\n }\n const b = it.bounds;\n if (b.minX !== newBounds.minX || b.minY !== newBounds.minY || b.maxX !== newBounds.maxX || b.maxY !== newBounds.maxY) {\n it.bounds = newBounds;\n const items = Array.from(this.entityMap.values());\n this.clear();\n for (const item of items) this.insertItem(this.root, item, 0);\n }\n }\n query(entity) {\n const collider = createCollider(entity);\n if (!collider) return /* @__PURE__ */ new Set();\n const bounds = collider.getBounds();\n const results = /* @__PURE__ */ new Set();\n this.queryBounds(this.root, bounds, results);\n results.delete(entity);\n return results;\n }\n queryAABB(bounds) {\n const results = /* @__PURE__ */ new Set();\n this.queryBounds(this.root, bounds, results);\n return results;\n }\n raycast(ray, mask, filter) {\n const origin = ray.origin;\n const end = ray.getPoint(ray.length);\n const bounds = new AABB(\n Math.min(origin.x, end.x),\n Math.min(origin.y, end.y),\n Math.max(origin.x, end.x),\n Math.max(origin.y, end.y)\n );\n const candidates = this.queryAABB(bounds);\n let closestHit = null;\n for (const entity of candidates) {\n if (mask !== void 0 && (entity.collisionCategory & mask) === 0) continue;\n if (filter && !filter(entity)) continue;\n const collider = createCollider(entity);\n if (collider) {\n const hit = raycastCollider(collider, ray.origin, ray.direction, ray.length);\n if (hit) {\n if (!closestHit || hit.distance < closestHit.distance) {\n closestHit = hit;\n }\n }\n }\n }\n return closestHit;\n }\n insertItem(node, item, depth) {\n if (!node.children && (node.items.length < this.capacity || depth >= this.maxDepth)) {\n node.items.push(item);\n return;\n }\n if (!node.children) this.subdivide(node);\n const child = this.findChild(node, item.bounds);\n if (child) {\n this.insertItem(child, item, depth + 1);\n } else {\n node.items.push(item);\n }\n }\n queryBounds(node, bounds, out) {\n if (!node.bounds.intersects(bounds)) return;\n for (const it of node.items) {\n if (it.bounds.intersects(bounds)) out.add(it.entity);\n }\n if (node.children) {\n for (const c of node.children) this.queryBounds(c, bounds, out);\n }\n }\n subdivide(node) {\n const b = node.bounds;\n const midX = (b.minX + b.maxX) * 0.5;\n const midY = (b.minY + b.maxY) * 0.5;\n node.children = [\n new QuadNode(new AABB(b.minX, b.minY, midX, midY)),\n // SW\n new QuadNode(new AABB(midX, b.minY, b.maxX, midY)),\n // SE\n new QuadNode(new AABB(b.minX, midY, midX, b.maxY)),\n // NW\n new QuadNode(new AABB(midX, midY, b.maxX, b.maxY))\n // NE\n ];\n }\n findChild(node, bounds) {\n if (!node.children) return null;\n for (const c of node.children) {\n if (containsAABB(c.bounds, bounds)) return c;\n }\n return null;\n }\n}\nfunction containsAABB(outer, inner) {\n return outer.minX <= inner.minX && outer.maxX >= inner.maxX && outer.minY <= inner.minY && outer.maxY >= inner.maxY;\n}\nexport {\n Quadtree\n};\n//# sourceMappingURL=index15.js.map\n","import { AABB } from \"./index4.js\";\nimport { createCollider } from \"./index18.js\";\nimport { raycastCollider } from \"./index20.js\";\nclass BVHNode {\n constructor(bounds) {\n this.left = null;\n this.right = null;\n this.leaf = null;\n this.bounds = bounds;\n }\n}\nclass BVH {\n constructor() {\n this.entities = /* @__PURE__ */ new Map();\n this.root = null;\n }\n clear() {\n this.entities.clear();\n this.root = null;\n }\n insert(entity) {\n const collider = createCollider(entity);\n if (!collider) return;\n const leaf = { entity, bounds: collider.getBounds() };\n this.entities.set(entity, leaf);\n this.rebuild();\n }\n remove(entity) {\n this.entities.delete(entity);\n this.rebuild();\n }\n update(entity) {\n const leaf = this.entities.get(entity);\n const collider = createCollider(entity);\n if (!collider) return;\n const b = collider.getBounds();\n if (!leaf || !equalAABB(leaf.bounds, b)) {\n this.entities.set(entity, { entity, bounds: b });\n this.rebuild();\n }\n }\n query(entity) {\n const collider = createCollider(entity);\n if (!collider) return /* @__PURE__ */ new Set();\n const bounds = collider.getBounds();\n const out = /* @__PURE__ */ new Set();\n this.queryAABBInternal(bounds, out);\n out.delete(entity);\n return out;\n }\n queryAABB(bounds) {\n const out = /* @__PURE__ */ new Set();\n this.queryAABBInternal(bounds, out);\n return out;\n }\n raycast(ray, mask, filter) {\n const origin = ray.origin;\n const end = ray.getPoint(ray.length);\n const bounds = new AABB(\n Math.min(origin.x, end.x),\n Math.min(origin.y, end.y),\n Math.max(origin.x, end.x),\n Math.max(origin.y, end.y)\n );\n const candidates = this.queryAABB(bounds);\n let closestHit = null;\n for (const entity of candidates) {\n if (mask !== void 0 && (entity.collisionCategory & mask) === 0) continue;\n if (filter && !filter(entity)) continue;\n const collider = createCollider(entity);\n if (collider) {\n const hit = raycastCollider(collider, ray.origin, ray.direction, ray.length);\n if (hit) {\n if (!closestHit || hit.distance < closestHit.distance) {\n closestHit = hit;\n }\n }\n }\n }\n return closestHit;\n }\n queryAABBInternal(bounds, out) {\n if (!this.root) return;\n const stack = [this.root];\n while (stack.length) {\n const n = stack.pop();\n if (!n.bounds.intersects(bounds)) continue;\n if (n.leaf) {\n if (n.leaf.bounds.intersects(bounds)) out.add(n.leaf.entity);\n } else {\n if (n.left) stack.push(n.left);\n if (n.right) stack.push(n.right);\n }\n }\n }\n rebuild() {\n const leaves = Array.from(this.entities.values());\n this.root = buildBVH(leaves);\n }\n}\nfunction buildBVH(leaves) {\n if (leaves.length === 0) return null;\n if (leaves.length === 1) {\n const leaf = leaves[0];\n if (!leaf) return null;\n const n2 = new BVHNode(leaf.bounds);\n n2.leaf = leaf;\n return n2;\n }\n const firstLeaf = leaves[0];\n if (!firstLeaf) return null;\n const bounds = leaves.slice(1).reduce((acc, l) => {\n if (!l) return acc;\n return acc.union(l.bounds);\n }, firstLeaf.bounds);\n const extentX = bounds.maxX - bounds.minX;\n const extentY = bounds.maxY - bounds.minY;\n const axis = extentX >= extentY ? 0 : 1;\n leaves.sort((a, b) => {\n if (!a || !b) return 0;\n return centerOf(a.bounds, axis) - centerOf(b.bounds, axis);\n });\n const mid = Math.floor(leaves.length / 2);\n const left = buildBVH(leaves.slice(0, mid));\n const right = buildBVH(leaves.slice(mid));\n if (!left || !right) return null;\n const n = new BVHNode(left.bounds.union(right.bounds));\n n.left = left;\n n.right = right;\n return n;\n}\nfunction centerOf(b, axis) {\n return axis === 0 ? (b.minX + b.maxX) * 0.5 : (b.minY + b.maxY) * 0.5;\n}\nfunction equalAABB(a, b) {\n return a.minX === b.minX && a.minY === b.minY && a.maxX === b.maxX && a.maxY === b.maxY;\n}\nexport {\n BVH\n};\n//# sourceMappingURL=index16.js.map\n","class CollisionResolver {\n /**\n * Creates a new collision resolver\n * \n * @param config - Resolver configuration\n */\n constructor(config = {}) {\n this.config = {\n positionCorrectionFactor: config.positionCorrectionFactor ?? 0.8,\n minPenetrationDepth: config.minPenetrationDepth ?? 1e-4,\n maxPositionCorrection: config.maxPositionCorrection ?? 5\n };\n }\n /**\n * Resolves a collision\n * \n * Separates entities and applies collision response.\n * First checks if the collision should be resolved using resolution filters.\n * If any entity has a resolution filter that returns false, the collision\n * is skipped (entities pass through) but events are still fired.\n * \n * @param collision - Collision information to resolve\n */\n resolve(collision) {\n const { entityA, entityB, normal, depth } = collision;\n if (depth < this.config.minPenetrationDepth) {\n return;\n }\n if (!entityA.shouldResolveCollisionWith(entityB)) {\n return;\n }\n this.separateEntities(entityA, entityB, normal, depth);\n this.resolveVelocities(entityA, entityB, normal);\n }\n /**\n * Separates two entities by moving them apart\n * \n * This method applies position corrections to resolve penetration between\n * colliding entities. After applying corrections, it notifies position change\n * handlers to ensure proper synchronization with game logic (e.g., updating\n * owner.x/y signals for network sync).\n * \n * @param entityA - First entity\n * @param entityB - Second entity\n * @param normal - Separation normal (from A to B)\n * @param depth - Penetration depth\n */\n separateEntities(entityA, entityB, normal, depth) {\n const totalInvMass = entityA.invMass + entityB.invMass;\n if (totalInvMass === 0) {\n return;\n }\n const correction = Math.min(\n depth * this.config.positionCorrectionFactor,\n this.config.maxPositionCorrection\n );\n const correctionA = normal.mul(-correction * (entityA.invMass / totalInvMass));\n const correctionB = normal.mul(correction * (entityB.invMass / totalInvMass));\n if (!entityA.isStatic()) {\n entityA.position.addInPlace(correctionA);\n entityA.notifyPositionChange();\n }\n if (!entityB.isStatic()) {\n entityB.position.addInPlace(correctionB);\n entityB.notifyPositionChange();\n }\n }\n /**\n * Resolves velocities using impulse-based collision response\n * \n * @param entityA - First entity\n * @param entityB - Second entity\n * @param normal - Collision normal (from A to B)\n */\n resolveVelocities(entityA, entityB, normal) {\n const relativeVelocity = entityB.velocity.sub(entityA.velocity);\n const velocityAlongNormal = relativeVelocity.dot(normal);\n if (velocityAlongNormal > 0) {\n return;\n }\n const restitution = Math.min(entityA.restitution, entityB.restitution);\n const totalInvMass = entityA.invMass + entityB.invMass;\n if (totalInvMass === 0) {\n return;\n }\n const impulseScalar = -(1 + restitution) * velocityAlongNormal / totalInvMass;\n const impulse = normal.mul(impulseScalar);\n if (!entityA.isStatic()) {\n entityA.velocity.addInPlace(impulse.mul(-entityA.invMass));\n entityA.notifyMovementChange();\n }\n if (!entityB.isStatic()) {\n entityB.velocity.addInPlace(impulse.mul(entityB.invMass));\n entityB.notifyMovementChange();\n }\n const tangent = relativeVelocity.sub(normal.mul(velocityAlongNormal));\n const tangentLength = tangent.length();\n if (tangentLength > 1e-5) {\n const friction = Math.sqrt(entityA.friction * entityB.friction);\n const tangentNormalized = tangent.normalize();\n const frictionImpulse = tangentNormalized.mul(-tangentLength * friction / totalInvMass);\n const maxFriction = Math.abs(impulseScalar * friction);\n if (frictionImpulse.length() > maxFriction) {\n frictionImpulse.normalizeInPlace().mulInPlace(maxFriction);\n }\n if (!entityA.isStatic()) {\n entityA.velocity.addInPlace(frictionImpulse.mul(-entityA.invMass));\n entityA.notifyMovementChange();\n }\n if (!entityB.isStatic()) {\n entityB.velocity.addInPlace(frictionImpulse.mul(entityB.invMass));\n entityB.notifyMovementChange();\n }\n }\n }\n /**\n * Resolves multiple collisions\n * \n * @param collisions - Array of collisions to resolve\n */\n resolveAll(collisions) {\n for (const collision of collisions) {\n this.resolve(collision);\n }\n }\n}\nexport {\n CollisionResolver\n};\n//# sourceMappingURL=index17.js.map\n","import { Vector2 } from \"./index2.js\";\nimport { AABB } from \"./index4.js\";\nimport { AABBCollider } from \"./index12.js\";\nimport { CircleCollider } from \"./index11.js\";\nimport { PolygonCollider } from \"./index19.js\";\nimport { createCollider } from \"./index18.js\";\nfunction sweepEntities(a, b, delta) {\n const ca = createCollider(a);\n const cb = createCollider(b);\n if (!ca || !cb) return null;\n return sweepColliders(ca, cb, delta);\n}\nfunction sweepColliders(a, b, delta) {\n if (a instanceof CircleCollider && b instanceof CircleCollider) {\n return sweepCircleCircle(a, b, delta);\n }\n if (a instanceof CircleCollider && b instanceof AABBCollider) {\n return sweepCircleAABB(a, b, delta);\n }\n if (a instanceof AABBCollider && b instanceof CircleCollider) {\n const res = sweepCircleAABB(b, a, delta.mul(-1));\n if (!res) return null;\n return { time: res.time, normal: res.normal.mul(-1), point: res.point };\n }\n if (a instanceof AABBCollider && b instanceof AABBCollider) {\n return sweepAABBAABB(a, b, delta);\n }\n if (a instanceof PolygonCollider || b instanceof PolygonCollider) {\n const aa = a.getBounds();\n const bb = b.getBounds();\n const ca = new AABBCollider(a.getEntity());\n const cb = new AABBCollider(b.getEntity());\n ca.getBounds = () => aa;\n cb.getBounds = () => bb;\n return sweepAABBAABB(ca, cb, delta);\n }\n return null;\n}\nfunction sweepCircleCircle(a, b, delta) {\n const p0 = a.getCenter();\n const c = b.getCenter();\n const r = a.getRadius() + b.getRadius();\n const m = p0.sub(c);\n const d = delta;\n const A = d.dot(d);\n const B = 2 * m.dot(d);\n const C = m.dot(m) - r * r;\n const disc = B * B - 4 * A * C;\n if (disc < 0 || A === 0) return null;\n const t = (-B - Math.sqrt(disc)) / (2 * A);\n if (t < 0 || t > 1) return null;\n const hitPoint = p0.add(d.mul(t));\n const normal = hitPoint.sub(c).normalize();\n return { time: t, normal, point: hitPoint.sub(normal.mul(a.getRadius())) };\n}\nfunction sweepCircleAABB(circle, box, delta) {\n const r = circle.getRadius();\n const b = box.getBounds();\n const expanded = new AABB(b.minX - r, b.minY - r, b.maxX + r, b.maxY + r);\n const p0 = circle.getCenter();\n const dir = delta;\n const maxDist = 1;\n const origin = new Vector2(0, 0);\n const bb = new AABB(expanded.minX - p0.x, expanded.minY - p0.y, expanded.maxX - p0.x, expanded.maxY - p0.y);\n const res = rayVsAABB(origin, dir, bb, maxDist);\n if (!res) return null;\n const t = res.t;\n const hitPos = p0.add(dir.mul(t));\n const normal = res.normal;\n return { time: t, normal, point: hitPos.sub(normal.mul(r)) };\n}\nfunction sweepAABBAABB(a, b, delta) {\n const A = a.getBounds();\n const B = b.getBounds();\n const invDx = 1 / (delta.x === 0 ? 1e-9 : delta.x);\n const invDy = 1 / (delta.y === 0 ? 1e-9 : delta.y);\n const xEntry = (delta.x > 0 ? B.minX - A.maxX : B.maxX - A.minX) * invDx;\n const xExit = (delta.x > 0 ? B.maxX - A.minX : B.minX - A.maxX) * invDx;\n const yEntry = (delta.y > 0 ? B.minY - A.maxY : B.maxY - A.minY) * invDy;\n const yExit = (delta.y > 0 ? B.maxY - A.minY : B.minY - A.maxY) * invDy;\n const tEntry = Math.max(Math.min(xEntry, xExit), Math.min(yEntry, yExit));\n const tExit = Math.min(Math.max(xEntry, xExit), Math.max(yEntry, yExit));\n if (tEntry > tExit || tEntry < 0 || tEntry > 1) return null;\n let normal;\n if (Math.min(xEntry, xExit) > Math.min(yEntry, yExit)) {\n normal = new Vector2(delta.x > 0 ? -1 : 1, 0);\n } else {\n normal = new Vector2(0, delta.y > 0 ? -1 : 1);\n }\n const hitPoint = new Vector2(\n delta.x !== 0 ? delta.x > 0 ? A.maxX : A.minX : (A.minX + A.maxX) * 0.5,\n delta.y !== 0 ? delta.y > 0 ? A.maxY : A.minY : (A.minY + A.maxY) * 0.5\n );\n return { time: tEntry, normal, point: hitPoint };\n}\nfunction rayVsAABB(origin, dir, b, maxT) {\n const invDx = 1 / (dir.x === 0 ? 1e-9 : dir.x);\n const invDy = 1 / (dir.y === 0 ? 1e-9 : dir.y);\n let tmin = 0;\n let tmax = maxT;\n const tx1 = (b.minX - origin.x) * invDx;\n const tx2 = (b.maxX - origin.x) * invDx;\n const ty1 = (b.minY - origin.y) * invDy;\n const ty2 = (b.maxY - origin.y) * invDy;\n const tminX = Math.min(tx1, tx2);\n const tmaxX = Math.max(tx1, tx2);\n const tminY = Math.min(ty1, ty2);\n const tmaxY = Math.max(ty1, ty2);\n tmin = Math.max(tmin, Math.max(tminX, tminY));\n tmax = Math.min(tmax, Math.min(tmaxX, tmaxY));\n if (tmax < tmin || tmin < 0 || tmin > maxT) return null;\n const normal = tmin === tminX ? new Vector2(dir.x > 0 ? -1 : 1, 0) : new Vector2(0, dir.y > 0 ? -1 : 1);\n return { t: tmin, normal };\n}\nexport {\n sweepColliders,\n sweepEntities\n};\n//# sourceMappingURL=index22.js.map\n","class EventSystem {\n constructor() {\n this.collisionEnterHandlers = /* @__PURE__ */ new Set();\n this.collisionExitHandlers = /* @__PURE__ */ new Set();\n this.entityAddedHandlers = /* @__PURE__ */ new Set();\n this.entityRemovedHandlers = /* @__PURE__ */ new Set();\n this.entitySleepHandlers = /* @__PURE__ */ new Set();\n this.entityWakeHandlers = /* @__PURE__ */ new Set();\n }\n /**\n * Registers a collision enter handler\n * \n * @param handler - Handler function\n * @returns Unsubscribe function\n */\n onCollisionEnter(handler) {\n this.collisionEnterHandlers.add(handler);\n return () => this.collisionEnterHandlers.delete(handler);\n }\n /**\n * Registers a collision exit handler\n * \n * @param handler - Handler function\n * @returns Unsubscribe function\n */\n onCollisionExit(handler) {\n this.collisionExitHandlers.add(handler);\n return () => this.collisionExitHandlers.delete(handler);\n }\n /**\n * Registers an entity added handler\n * \n * @param handler - Handler function\n * @returns Unsubscribe function\n */\n onEntityAdded(handler) {\n this.entityAddedHandlers.add(handler);\n return () => this.entityAddedHandlers.delete(handler);\n }\n /**\n * Registers an entity removed handler\n * \n * @param handler - Handler function\n * @returns Unsubscribe function\n */\n onEntityRemoved(handler) {\n this.entityRemovedHandlers.add(handler);\n return () => this.entityRemovedHandlers.delete(handler);\n }\n /**\n * Registers an entity sleep handler\n * \n * @param handler - Handler function\n * @returns Unsubscribe function\n */\n onEntitySleep(handler) {\n this.entitySleepHandlers.add(handler);\n return () => this.entitySleepHandlers.delete(handler);\n }\n /**\n * Registers an entity wake handler\n * \n * @param handler - Handler function\n * @returns Unsubscribe function\n */\n onEntityWake(handler) {\n this.entityWakeHandlers.add(handler);\n return () => this.entityWakeHandlers.delete(handler);\n }\n /**\n * Emits a collision enter event\n * \n * @param collision - Collision information\n */\n emitCollisionEnter(collision) {\n for (const handler of this.collisionEnterHandlers) {\n handler(collision);\n }\n }\n /**\n * Emits a collision exit event\n * \n * @param collision - Collision information\n */\n emitCollisionExit(collision) {\n for (const handler of this.collisionExitHandlers) {\n handler(collision);\n }\n }\n /**\n * Emits an entity added event\n * \n * @param entity - Entity that was added\n */\n emitEntityAdded(entity) {\n for (const handler of this.entityAddedHandlers) {\n handler(entity);\n }\n }\n /**\n * Emits an entity removed event\n * \n * @param entity - Entity that was removed\n */\n emitEntityRemoved(entity) {\n for (const handler of this.entityRemovedHandlers) {\n handler(entity);\n }\n }\n /**\n * Emits an entity sleep event\n * \n * @param entity - Entity that went to sleep\n */\n emitEntitySleep(entity) {\n for (const handler of this.entitySleepHandlers) {\n handler(entity);\n }\n }\n /**\n * Emits an entity wake event\n * \n * @param entity - Entity that woke up\n */\n emitEntityWake(entity) {\n for (const handler of this.entityWakeHandlers) {\n handler(entity);\n }\n }\n /**\n * Clears all event handlers\n */\n clear() {\n this.collisionEnterHandlers.clear();\n this.collisionExitHandlers.clear();\n this.entityAddedHandlers.clear();\n this.entityRemovedHandlers.clear();\n this.entitySleepHandlers.clear();\n this.entityWakeHandlers.clear();\n }\n}\nexport {\n EventSystem\n};\n//# sourceMappingURL=index24.js.map\n","import { Entity } from \"./index7.js\";\nimport { IntegrationMethod, Integrator } from \"./index8.js\";\nimport { CollisionResolver } from \"./index17.js\";\nimport { SpatialHash } from \"./index14.js\";\nimport { testCollision, createCollider } from \"./index18.js\";\nimport { EventSystem } from \"./index24.js\";\nimport { Ray } from \"./index21.js\";\nimport { sweepEntities } from \"./index22.js\";\nclass World {\n /**\n * Creates a new physics world\n * \n * @param config - World configuration\n */\n constructor(config = {}) {\n this.entities = /* @__PURE__ */ new Set();\n this.staticEntities = /* @__PURE__ */ new Set();\n this.dynamicEntities = /* @__PURE__ */ new Set();\n this.previousCollisions = /* @__PURE__ */ new Map();\n this.queryResults = /* @__PURE__ */ new Set();\n this.timeStep = config.timeStep ?? 1 / 60;\n this.enableSleep = config.enableSleep ?? true;\n this.tileWidth = config.tileWidth ?? 32;\n this.tileHeight = config.tileHeight ?? 32;\n this.sleepThreshold = config.sleepThreshold ?? 0.5;\n this.sleepVelocityThreshold = config.sleepVelocityThreshold ?? 0.01;\n this.positionQuantizationStep = typeof config.positionQuantizationStep === \"number\" && config.positionQuantizationStep > 0 ? config.positionQuantizationStep : null;\n this.velocityQuantizationStep = typeof config.velocityQuantizationStep === \"number\" && config.velocityQuantizationStep > 0 ? config.velocityQuantizationStep : null;\n const integratorConfig = {\n deltaTime: this.timeStep,\n method: config.integrationMethod ?? IntegrationMethod.Euler\n };\n if (config.gravity) {\n integratorConfig.gravity = config.gravity;\n }\n this.integrator = new Integrator(integratorConfig);\n this.resolverIterations = Math.max(1, Math.floor(config.resolverIterations ?? 3));\n const resolverConfig = {};\n if (config.positionCorrectionFactor !== void 0) resolverConfig.positionCorrectionFactor = config.positionCorrectionFactor;\n if (config.maxPositionCorrection !== void 0) resolverConfig.maxPositionCorrection = config.maxPositionCorrection;\n if (config.minPenetrationDepth !== void 0) resolverConfig.minPenetrationDepth = config.minPenetrationDepth;\n this.resolver = new CollisionResolver(resolverConfig);\n if (config.spatialPartition) {\n this.spatialPartition = config.spatialPartition;\n } else {\n this.spatialPartition = new SpatialHash(\n config.spatialCellSize ?? 100,\n config.spatialGridWidth ?? 100,\n config.spatialGridHeight ?? 100\n );\n }\n this.events = new EventSystem();\n }\n /**\n * Gets the event system\n * \n * @returns Event system instance\n */\n getEvents() {\n return this.events;\n }\n /**\n * Returns the fixed simulation time step.\n *\n * @returns Time step in seconds\n */\n getTimeStep() {\n return this.timeStep;\n }\n /**\n * Adds an entity to the world\n * \n * @param entity - Entity to add\n * @returns The added entity\n */\n addEntity(entity) {\n this.entities.add(entity);\n if (entity.isStatic()) {\n this.staticEntities.add(entity);\n } else {\n this.dynamicEntities.add(entity);\n }\n this.spatialPartition.insert(entity);\n this.events.emitEntityAdded(entity);\n return entity;\n }\n /**\n * Performs a raycast against all entities in the world.\n * \n * @param origin - Starting point of the ray\n * @param direction - Direction of the ray (normalized)\n * @param length - Maximum length (default: Infinity)\n * @param mask - Optional collision mask (layer)\n * @param filter - Optional filter function (return true to include entity)\n * @returns Raycast hit info if hit, null otherwise\n */\n raycast(origin, direction, length = Infinity, mask, filter) {\n const ray = new Ray(origin, direction, length);\n return this.spatialPartition.raycast(ray, mask, filter);\n }\n /**\n * Creates and adds a new entity\n * \n * @param config - Entity configuration\n * @returns Created entity\n */\n createEntity(config) {\n const entity = new Entity(config);\n return this.addEntity(entity);\n }\n /**\n * Removes an entity from the world\n * \n * @param entity - Entity to remove\n */\n removeEntity(entity) {\n if (this.entities.delete(entity)) {\n this.staticEntities.delete(entity);\n this.dynamicEntities.delete(entity);\n this.spatialPartition.remove(entity);\n this.events.emitEntityRemoved(entity);\n }\n }\n /**\n * Gets all entities in the world\n * \n * @returns Array of entities\n */\n getEntities() {\n return Array.from(this.entities);\n }\n /**\n * Gets an entity by UUID\n * \n * @param uuid - Entity UUID\n * @returns Entity or undefined\n */\n getEntityByUUID(uuid) {\n for (const entity of this.entities) {\n if (entity.uuid === uuid) {\n return entity;\n }\n }\n return void 0;\n }\n /**\n * Steps the physics simulation forward\n * \n * Updates all entities, detects and resolves collisions.\n */\n step() {\n this.refreshDynamicEntitiesInPartition();\n for (const entity of this.dynamicEntities) {\n if (!entity.isSleeping()) {\n const startPos = entity.position.clone();\n this.integrator.integrate(entity);\n this.updateEntityTile(entity, startPos);\n if (entity.continuous) {\n this.performCCD(entity);\n }\n }\n }\n let firstPassCollisions = [];\n for (let iteration = 0; iteration < this.resolverIterations; iteration++) {\n const collisions = this.detectCollisions();\n if (iteration === 0) {\n firstPassCollisions = collisions;\n }\n if (collisions.length === 0) {\n break;\n }\n this.sortCollisionsForDeterminism(collisions);\n this.resolver.resolveAll(collisions);\n if (iteration + 1 < this.resolverIterations) {\n this.refreshDynamicEntitiesInPartition();\n }\n }\n if (this.positionQuantizationStep !== null || this.velocityQuantizationStep !== null) {\n this.quantizeEntities();\n }\n this.handleCollisionEvents(firstPassCollisions);\n if (this.enableSleep) {\n this.updateSleepState();\n }\n }\n /**\n * Detects collisions using spatial partition\n * \n * @returns Array of collision infos\n */\n /**\n * Detects collisions using spatial partition\n * \n * @returns Array of collision infos\n */\n detectCollisions() {\n const collisions = [];\n for (const entity of this.dynamicEntities) {\n const nearby = this.spatialPartition.query(entity, this.queryResults);\n for (const other of nearby) {\n if (other.isDynamic() && entity.uuid > other.uuid) {\n continue;\n }\n const collision = testCollision(entity, other);\n if (collision) {\n collisions.push(collision);\n }\n }\n }\n return collisions;\n }\n sortCollisionsForDeterminism(collisions) {\n collisions.sort((a, b) => {\n const keyA = this.getCollisionKey(a);\n const keyB = this.getCollisionKey(b);\n return keyA.localeCompare(keyB);\n });\n }\n getCollisionKey(collision) {\n const idA = collision.entityA.uuid;\n const idB = collision.entityB.uuid;\n return idA < idB ? `${idA}-${idB}` : `${idB}-${idA}`;\n }\n /**\n * Handles collision enter/exit events\n * \n * @param collisions - Current frame collisions\n */\n handleCollisionEvents(collisions) {\n const currentCollisions = /* @__PURE__ */ new Map();\n for (const collision of collisions) {\n const pairKey = collision.entityA.uuid < collision.entityB.uuid ? `${collision.entityA.uuid}-${collision.entityB.uuid}` : `${collision.entityB.uuid}-${collision.entityA.uuid}`;\n currentCollisions.set(pairKey, collision);\n if (!this.previousCollisions.has(pairKey)) {\n this.events.emitCollisionEnter(collision);\n collision.entityA.notifyCollisionEnter(collision, collision.entityB);\n collision.entityB.notifyCollisionEnter(collision, collision.entityA);\n }\n }\n for (const [pairKey, collision] of this.previousCollisions) {\n if (!currentCollisions.has(pairKey)) {\n this.events.emitCollisionExit(collision);\n collision.entityA.notifyCollisionExit(collision, collision.entityB);\n collision.entityB.notifyCollisionExit(collision, collision.entityA);\n }\n }\n this.previousCollisions = currentCollisions;\n }\n /**\n * Updates sleep state for entities\n */\n updateSleepState() {\n for (const entity of this.entities) {\n if (entity.isStatic() || entity.isSleeping()) {\n continue;\n }\n const speed = entity.velocity.length();\n const angularSpeed = Math.abs(entity.angularVelocity);\n if (speed < this.sleepVelocityThreshold && angularSpeed < this.sleepVelocityThreshold) {\n entity.timeSinceMovement += this.timeStep;\n if (entity.timeSinceMovement >= this.sleepThreshold) {\n entity.sleep();\n this.events.emitEntitySleep(entity);\n }\n } else {\n entity.timeSinceMovement = 0;\n if (entity.isSleeping()) {\n entity.wakeUp();\n this.events.emitEntityWake(entity);\n }\n }\n }\n }\n /**\n * Clears all entities from the world\n */\n clear() {\n for (const entity of this.entities) {\n this.events.emitEntityRemoved(entity);\n }\n this.entities.clear();\n this.spatialPartition.clear();\n this.previousCollisions.clear();\n }\n quantizeEntities() {\n for (const entity of this.dynamicEntities) {\n if (this.positionQuantizationStep !== null) {\n entity.position.x = this.quantizeValue(entity.position.x, this.positionQuantizationStep);\n entity.position.y = this.quantizeValue(entity.position.y, this.positionQuantizationStep);\n }\n if (this.velocityQuantizationStep !== null) {\n entity.velocity.x = this.quantizeValue(entity.velocity.x, this.velocityQuantizationStep);\n entity.velocity.y = this.quantizeValue(entity.velocity.y, this.velocityQuantizationStep);\n }\n }\n }\n quantizeValue(value, step) {\n return Math.round(value / step) * step;\n }\n refreshDynamicEntitiesInPartition() {\n for (const entity of this.dynamicEntities) {\n this.spatialPartition.update(entity);\n }\n }\n /**\n * Gets statistics about the world\n * \n * @returns Statistics object\n */\n getStats() {\n let dynamic = 0;\n let static_ = 0;\n let sleeping = 0;\n for (const entity of this.entities) {\n if (entity.isStatic()) {\n static_++;\n } else {\n dynamic++;\n }\n if (entity.isSleeping()) {\n sleeping++;\n }\n }\n return {\n totalEntities: this.entities.size,\n dynamicEntities: dynamic,\n staticEntities: static_,\n sleepingEntities: sleeping\n };\n }\n /**\n * Performs Continuous Collision Detection (CCD) for an entity\n * \n * @param entity - Entity to check\n */\n /**\n * Updates entity tile position and triggers hooks\n * \n * @param entity - Entity to update\n * @param previousPosition - Position before integration\n */\n updateEntityTile(entity, previousPosition) {\n const oldTileX = Math.floor(previousPosition.x / this.tileWidth);\n const oldTileY = Math.floor(previousPosition.y / this.tileHeight);\n const newTileX = Math.floor(entity.position.x / this.tileWidth);\n const newTileY = Math.floor(entity.position.y / this.tileHeight);\n if (entity.currentTile.x === 0 && entity.currentTile.y === 0 && (oldTileX !== 0 || oldTileY !== 0)) {\n entity.currentTile.set(oldTileX, oldTileY);\n }\n if (newTileX !== oldTileX || newTileY !== oldTileY) {\n if (!entity.checkCanEnterTile(newTileX, newTileY)) {\n entity.position.copyFrom(previousPosition);\n entity.velocity.set(0, 0);\n return;\n }\n entity.notifyLeaveTile(oldTileX, oldTileY);\n entity.currentTile.set(newTileX, newTileY);\n entity.notifyEnterTile(newTileX, newTileY);\n }\n }\n performCCD(entity) {\n const dt = this.timeStep;\n const delta = entity.velocity.mul(dt);\n const dist = delta.length();\n if (dist < entity.radius) {\n return;\n }\n const collider = createCollider(entity);\n if (!collider) return;\n const currentBounds = collider.getBounds();\n const originalBounds = currentBounds.translate(-delta.x, -delta.y);\n const sweptBounds = currentBounds.union(originalBounds);\n const nearby = this.spatialPartition.queryAABB(sweptBounds);\n let minTime = 1;\n let collision = null;\n for (const other of nearby) {\n if (other === entity || !other.isStatic()) continue;\n if (!entity.canCollideWith(other)) continue;\n const originalPos = entity.position.clone();\n entity.position.subInPlace(delta);\n const hit = sweepEntities(entity, other, delta);\n entity.position.copyFrom(originalPos);\n if (hit && hit.time < minTime) {\n minTime = hit.time;\n collision = hit;\n }\n }\n if (collision && minTime < 1) {\n const correction = collision.normal.mul(1e-3);\n entity.position.subInPlace(delta.mul(1 - minTime)).addInPlace(correction);\n const vn = entity.velocity.dot(collision.normal);\n if (vn < 0) {\n entity.velocity.subInPlace(collision.normal.mul(vn));\n }\n }\n }\n}\nexport {\n World\n};\n//# sourceMappingURL=index23.js.map\n","import { World } from \"./index23.js\";\nclass Region {\n /**\n * Creates a new region\n * \n * @param config - Region configuration\n */\n constructor(config) {\n this.entities = /* @__PURE__ */ new Set();\n this.bounds = config.bounds.clone();\n this.overlap = config.overlap ?? 0;\n this.active = config.active ?? true;\n this.world = new World({\n spatialCellSize: 50,\n spatialGridWidth: 50,\n spatialGridHeight: 50\n });\n }\n /**\n * Gets the region bounds\n * \n * @returns AABB bounds\n */\n getBounds() {\n return this.bounds.clone();\n }\n /**\n * Gets the expanded bounds including overlap\n * \n * @returns Expanded AABB\n */\n getExpandedBounds() {\n return this.bounds.expand(this.overlap);\n }\n /**\n * Checks if a point is inside this region\n * \n * @param point - Point to check\n * @returns True if point is inside\n */\n contains(point) {\n return this.bounds.contains(point);\n }\n /**\n * Checks if an entity should belong to this region\n * \n * @param entity - Entity to check\n * @returns True if entity should be in this region\n */\n shouldContain(entity) {\n return this.bounds.contains(entity.position);\n }\n /**\n * Adds an entity to this region\n * \n * @param entity - Entity to add\n */\n addEntity(entity) {\n if (this.entities.has(entity)) {\n return;\n }\n this.entities.add(entity);\n this.world.addEntity(entity);\n }\n /**\n * Removes an entity from this region\n * \n * @param entity - Entity to remove\n */\n removeEntity(entity) {\n if (this.entities.delete(entity)) {\n this.world.removeEntity(entity);\n }\n }\n /**\n * Gets all entities in this region\n * \n * @returns Array of entities\n */\n getEntities() {\n return Array.from(this.entities);\n }\n /**\n * Steps the region's physics simulation\n */\n step() {\n if (!this.active) {\n return;\n }\n this.world.step();\n }\n /**\n * Activates this region\n */\n activate() {\n this.active = true;\n }\n /**\n * Deactivates this region\n */\n deactivate() {\n this.active = false;\n }\n /**\n * Checks if this region is active\n * \n * @returns True if active\n */\n isActive() {\n return this.active;\n }\n /**\n * Gets the world instance for this region\n * \n * @returns World instance\n */\n getWorld() {\n return this.world;\n }\n /**\n * Checks if this region overlaps with another region\n * \n * @param other - Other region to check\n * @returns True if regions overlap\n */\n overlaps(other) {\n const expandedA = this.getExpandedBounds();\n const expandedB = other.getExpandedBounds();\n return expandedA.intersects(expandedB);\n }\n /**\n * Gets entities that might need migration to neighboring regions\n * \n * @returns Array of entities near region boundaries\n */\n getBoundaryEntities() {\n const boundaryEntities = [];\n const expandedBounds = this.getExpandedBounds();\n for (const entity of this.entities) {\n if (expandedBounds.contains(entity.position) && !this.bounds.contains(entity.position)) {\n boundaryEntities.push(entity);\n }\n }\n return boundaryEntities;\n }\n}\nexport {\n Region\n};\n//# sourceMappingURL=index25.js.map\n","import { Region } from \"./index25.js\";\nimport { AABB } from \"./index4.js\";\nclass RegionManager {\n /**\n * Creates a new region manager\n * \n * @param config - Manager configuration\n */\n constructor(config) {\n this.regions = [];\n this.regionMap = /* @__PURE__ */ new Map();\n this.entityRegionMap = /* @__PURE__ */ new Map();\n this.config = {\n worldBounds: config.worldBounds,\n regionSize: config.regionSize,\n overlap: config.overlap ?? 0,\n autoActivate: config.autoActivate ?? true\n };\n this.createRegions();\n }\n /**\n * Creates the grid of regions\n */\n createRegions() {\n const { worldBounds, regionSize, overlap } = this.config;\n const worldWidth = worldBounds.getWidth();\n const worldHeight = worldBounds.getHeight();\n const cols = Math.ceil(worldWidth / regionSize);\n const rows = Math.ceil(worldHeight / regionSize);\n for (let row = 0; row < rows; row++) {\n for (let col = 0; col < cols; col++) {\n const minX = worldBounds.minX + col * regionSize;\n const minY = worldBounds.minY + row * regionSize;\n const maxX = Math.min(minX + regionSize, worldBounds.maxX);\n const maxY = Math.min(minY + regionSize, worldBounds.maxY);\n const bounds = new AABB(minX, minY, maxX, maxY);\n const region = new Region({\n bounds,\n overlap,\n active: !this.config.autoActivate\n // Start inactive if auto-activate is enabled\n });\n const key = this.getRegionKey(col, row);\n this.regions.push(region);\n this.regionMap.set(key, region);\n }\n }\n }\n /**\n * Gets a region key from grid coordinates\n * \n * @param col - Column index\n * @param row - Row index\n * @returns Region key string\n */\n getRegionKey(col, row) {\n return `${col},${row}`;\n }\n /**\n * Gets the region containing a point\n * \n * @param point - Point to find region for\n * @returns Region or null\n */\n getRegionAt(point) {\n for (const region of this.regions) {\n if (region.contains(point)) {\n return region;\n }\n }\n return null;\n }\n /**\n * Gets all regions that overlap with an AABB\n * \n * @param bounds - AABB to check\n * @returns Array of overlapping regions\n */\n getRegionsInBounds(bounds) {\n const result = [];\n for (const region of this.regions) {\n if (region.getExpandedBounds().intersects(bounds)) {\n result.push(region);\n }\n }\n return result;\n }\n /**\n * Adds an entity to the appropriate region\n * \n * @param entity - Entity to add\n */\n addEntity(entity) {\n const region = this.getRegionAt(entity.position);\n if (region) {\n region.addEntity(entity);\n this.entityRegionMap.set(entity, region);\n if (this.config.autoActivate) {\n region.activate();\n }\n }\n }\n /**\n * Removes an entity from its region\n * \n * @param entity - Entity to remove\n */\n removeEntity(entity) {\n const region = this.entityRegionMap.get(entity);\n if (region) {\n region.removeEntity(entity);\n this.entityRegionMap.delete(entity);\n if (this.config.autoActivate && region.getEntities().length === 0) {\n region.deactivate();\n }\n }\n }\n /**\n * Updates entity positions and migrates them between regions if needed\n */\n updateEntities() {\n const entitiesToMigrate = [];\n for (const [entity, currentRegion] of this.entityRegionMap) {\n if (!currentRegion.shouldContain(entity)) {\n const newRegion = this.getRegionAt(entity.position);\n if (newRegion && newRegion !== currentRegion) {\n entitiesToMigrate.push({ entity, newRegion });\n }\n }\n }\n for (const { entity, newRegion } of entitiesToMigrate) {\n const oldRegion = this.entityRegionMap.get(entity);\n if (oldRegion) {\n oldRegion.removeEntity(entity);\n }\n newRegion.addEntity(entity);\n this.entityRegionMap.set(entity, newRegion);\n if (this.config.autoActivate) {\n newRegion.activate();\n }\n }\n }\n /**\n * Steps all active regions\n */\n step() {\n this.updateEntities();\n for (const region of this.regions) {\n if (region.isActive()) {\n region.step();\n }\n }\n }\n /**\n * Gets all regions\n * \n * @returns Array of all regions\n */\n getRegions() {\n return [...this.regions];\n }\n /**\n * Gets active regions\n * \n * @returns Array of active regions\n */\n getActiveRegions() {\n return this.regions.filter((r) => r.isActive());\n }\n /**\n * Gets the region containing an entity\n * \n * @param entity - Entity to find region for\n * @returns Region or null\n */\n getEntityRegion(entity) {\n return this.entityRegionMap.get(entity) ?? null;\n }\n /**\n * Clears all entities from all regions\n */\n clear() {\n for (const region of this.regions) {\n const entities = region.getEntities();\n for (const entity of entities) {\n region.removeEntity(entity);\n }\n }\n this.entityRegionMap.clear();\n }\n /**\n * Gets statistics about regions\n * \n * @returns Statistics object\n */\n getStats() {\n let totalEntities = 0;\n for (const region of this.regions) {\n totalEntities += region.getEntities().length;\n }\n return {\n totalRegions: this.regions.length,\n activeRegions: this.getActiveRegions().length,\n totalEntities\n };\n }\n}\nexport {\n RegionManager\n};\n//# sourceMappingURL=index26.js.map\n","function migrateEntity(entity, fromRegion, toRegion, handler) {\n fromRegion.removeEntity(entity);\n toRegion.addEntity(entity);\n if (handler) {\n handler({\n entity,\n fromRegion,\n toRegion\n });\n }\n}\nfunction migrateEntities(migrations, handler) {\n for (const migration of migrations) {\n migrateEntity(\n migration.entity,\n migration.fromRegion,\n migration.toRegion,\n handler\n );\n }\n}\nexport {\n migrateEntities,\n migrateEntity\n};\n//# sourceMappingURL=index27.js.map\n","import { Vector2 } from \"./index2.js\";\nclass EntityMovementBody {\n constructor(entity) {\n this.entity = entity;\n }\n get id() {\n return this.entity.uuid;\n }\n get position() {\n return this.entity.position;\n }\n get velocity() {\n return this.entity.velocity;\n }\n setVelocity(velocity) {\n this.entity.setVelocity(velocity);\n }\n translate(delta) {\n this.entity.position.addInPlace(new Vector2(delta.x, delta.y));\n }\n isStatic() {\n return this.entity.isStatic();\n }\n /**\n * Returns the underlying entity reference.\n */\n getEntity() {\n return this.entity;\n }\n}\nexport {\n EntityMovementBody\n};\n//# sourceMappingURL=index31.js.map\n","import { Entity } from \"./index7.js\";\nimport { EntityMovementBody } from \"./index31.js\";\nclass MovementManager {\n constructor(resolveEntity) {\n this.resolveEntity = resolveEntity;\n this.entries = /* @__PURE__ */ new Map();\n this.entityWrappers = /* @__PURE__ */ new WeakMap();\n }\n /**\n * Convenience factory that binds the manager to a physics engine.\n *\n * @param engine - Physics engine whose entities will be controlled\n * @returns A movement manager configured with an entity resolver\n */\n static forEngine(engine) {\n let manager;\n manager = new MovementManager((id) => {\n const entity = engine.getEntityByUUID(id);\n return entity ? manager.wrapEntity(entity) : void 0;\n });\n return manager;\n }\n /**\n * Adds a movement strategy to an entity.\n * \n * Returns a Promise that resolves when the movement completes (when `isFinished()` returns true).\n * If the strategy doesn't implement `isFinished()`, the Promise resolves immediately after adding.\n *\n * @param target - Entity instance or entity UUID when a resolver is configured\n * @param strategy - Strategy to execute\n * @param options - Optional callbacks for movement lifecycle events\n * @returns Promise that resolves when the movement completes\n * \n * @example\n * ```typescript\n * // Simple usage - fire and forget\n * manager.add(player, new Dash(8, { x: 1, y: 0 }, 200));\n * \n * // Wait for completion\n * await manager.add(player, new Dash(8, { x: 1, y: 0 }, 200));\n * console.log('Dash finished!');\n * \n * // With callbacks\n * await manager.add(player, new Knockback({ x: -1, y: 0 }, 5, 300), {\n * onStart: () => {\n * player.directionFixed = true;\n * player.animationFixed = true;\n * },\n * onComplete: () => {\n * player.directionFixed = false;\n * player.animationFixed = false;\n * }\n * });\n * ```\n */\n add(target, strategy, options) {\n const body = this.resolveTarget(target);\n const key = body.id;\n if (!this.entries.has(key)) {\n this.entries.set(key, { body, strategies: [] });\n }\n if (!strategy.isFinished) {\n const entry = { strategy, started: false };\n if (options) {\n entry.options = options;\n }\n this.entries.get(key).strategies.push(entry);\n return Promise.resolve();\n }\n return new Promise((resolve) => {\n const entry = { strategy, resolve, started: false };\n if (options) {\n entry.options = options;\n }\n this.entries.get(key).strategies.push(entry);\n });\n }\n /**\n * Removes a specific strategy from an entity.\n * \n * Note: This will NOT trigger the onComplete callback or resolve the Promise.\n * Use this when you want to cancel a movement without completion.\n *\n * @param target - Entity instance or identifier\n * @param strategy - Strategy instance to remove\n * @returns True when the strategy has been removed\n */\n remove(target, strategy) {\n const body = this.resolveTarget(target);\n const entry = this.entries.get(body.id);\n if (!entry) {\n return false;\n }\n const index = entry.strategies.findIndex((e) => e.strategy === strategy);\n if (index === -1) {\n return false;\n }\n entry.strategies.splice(index, 1);\n if (entry.strategies.length === 0) {\n this.entries.delete(body.id);\n }\n return true;\n }\n /**\n * Removes all strategies from an entity.\n *\n * @param target - Entity or identifier\n */\n clear(target) {\n const body = this.resolveTarget(target);\n this.entries.delete(body.id);\n }\n /**\n * Stops all movement for an entity immediately\n * \n * This method completely stops an entity's movement by:\n * - Removing all active movement strategies (dash, linear moves, etc.)\n * - Stopping the entity's velocity and angular velocity\n * - Clearing accumulated forces\n * - Waking up the entity if it was sleeping\n * \n * This is useful when changing maps, teleporting, or when you need\n * to halt an entity's movement completely without making it static.\n * \n * @param target - Entity, MovementBody, or identifier\n * \n * @example\n * ```ts\n * // Stop movement when changing maps\n * if (mapChanged) {\n * movement.stopMovement(playerEntity);\n * }\n * \n * // Stop movement after teleporting\n * entity.position.set(100, 200);\n * movement.stopMovement(entity);\n * \n * // Stop movement when player dies\n * if (player.isDead()) {\n * movement.stopMovement(playerEntity);\n * }\n * ```\n */\n stopMovement(target) {\n const body = this.resolveTarget(target);\n this.clear(target);\n if (\"getEntity\" in body && typeof body.getEntity === \"function\") {\n const entity = body.getEntity();\n if (entity && typeof entity.stopMovement === \"function\") {\n entity.stopMovement();\n }\n }\n }\n /**\n * Checks if an entity has active strategies.\n *\n * @param target - Entity or identifier\n * @returns True when strategies are registered\n */\n hasActiveStrategies(target) {\n const body = this.resolveTarget(target);\n return (this.entries.get(body.id)?.strategies.length ?? 0) > 0;\n }\n /**\n * Returns a snapshot of the strategies assigned to an entity.\n *\n * @param target - Entity or identifier\n * @returns Copy of the strategies array (empty array when none)\n */\n getStrategies(target) {\n const body = this.resolveTarget(target);\n const entry = this.entries.get(body.id);\n return entry ? entry.strategies.map((e) => e.strategy) : [];\n }\n /**\n * Updates all registered strategies.\n *\n * Call this method once per frame before `PhysicsEngine.step()` so that the\n * physics simulation integrates the velocities that strategies configure.\n * \n * This method handles the movement lifecycle:\n * - Triggers `onStart` callback on first update\n * - Calls `strategy.update()` each frame\n * - When `isFinished()` returns true:\n * - Calls `strategy.onFinished()` if defined\n * - Triggers `onComplete` callback\n * - Resolves the Promise returned by `add()`\n *\n * @param dt - Time delta in seconds\n */\n update(dt) {\n for (const [key, entry] of this.entries) {\n const { body, strategies } = entry;\n if (strategies.length === 0) {\n this.entries.delete(key);\n continue;\n }\n for (let i = strategies.length - 1; i >= 0; i -= 1) {\n const strategyEntry = strategies[i];\n if (!strategyEntry) {\n continue;\n }\n const { strategy, options, resolve } = strategyEntry;\n if (!strategyEntry.started) {\n strategyEntry.started = true;\n options?.onStart?.();\n }\n strategy.update(body, dt);\n const isFinished = strategy.isFinished?.();\n if (isFinished) {\n strategies.splice(i, 1);\n strategy.onFinished?.();\n options?.onComplete?.();\n resolve?.();\n }\n }\n if (strategies.length === 0) {\n this.entries.delete(key);\n }\n }\n }\n /**\n * Removes all strategies from all entities.\n */\n clearAll() {\n this.entries.clear();\n }\n resolveTarget(target) {\n if (this.isMovementBody(target)) {\n return target;\n }\n if (target instanceof Entity) {\n return this.wrapEntity(target);\n }\n if (!this.resolveEntity) {\n throw new Error(\"MovementManager: cannot resolve entity from identifier without a resolver.\");\n }\n const entity = this.resolveEntity(target);\n if (!entity) {\n throw new Error(`MovementManager: unable to resolve entity for identifier ${target}.`);\n }\n return entity;\n }\n wrapEntity(entity) {\n let wrapper = this.entityWrappers.get(entity);\n if (!wrapper) {\n wrapper = new EntityMovementBody(entity);\n this.entityWrappers.set(entity, wrapper);\n }\n return wrapper;\n }\n isMovementBody(value) {\n return Boolean(\n value && typeof value === \"object\" && \"id\" in value && \"setVelocity\" in value && typeof value.setVelocity === \"function\"\n );\n }\n}\nexport {\n MovementManager\n};\n//# sourceMappingURL=index30.js.map\n","import { Vector2 } from \"./index2.js\";\nimport { AABB } from \"./index4.js\";\nimport { generateUUID } from \"./index43.js\";\nclass ZoneManager {\n /**\n * Creates a new zone manager\n *\n * @param engine - Physics engine instance\n */\n constructor(engine) {\n this.zones = /* @__PURE__ */ new Map();\n this.engine = engine;\n }\n /**\n * Creates a new zone\n *\n * @param config - Zone configuration\n * @param callbacks - Optional event callbacks\n * @returns Zone identifier\n *\n * @example\n * ```typescript\n * const zoneId = zones.createZone({\n * position: { x: 100, y: 100 },\n * radius: 50,\n * angle: 180,\n * direction: 'right',\n * }, {\n * onEnter: (entities) => console.log('Entered:', entities),\n * onExit: (entities) => console.log('Exited:', entities),\n * });\n * ```\n */\n createZone(config, callbacks) {\n const id = generateUUID();\n const radius = config.radius;\n if (typeof radius !== \"number\" || radius <= 0) {\n throw new Error(\"Zone radius must be a positive number\");\n }\n const angle = config.angle ?? 360;\n const direction = config.direction ?? \"down\";\n const limitedByWalls = config.limitedByWalls ?? false;\n let position;\n let type;\n let attachedEntity;\n let offset;\n if (\"entity\" in config) {\n type = \"attached\";\n attachedEntity = config.entity;\n const entityPos = attachedEntity.position;\n const offsetValue = config.offset ?? { x: 0, y: 0 };\n if (offsetValue instanceof Vector2) {\n offset = offsetValue.clone();\n } else {\n offset = new Vector2(offsetValue.x, offsetValue.y);\n }\n position = new Vector2(entityPos.x + offset.x, entityPos.y + offset.y);\n } else {\n type = \"static\";\n const pos = config.position;\n if (pos instanceof Vector2) {\n position = pos.clone();\n } else {\n position = new Vector2(pos.x, pos.y);\n }\n }\n const record = {\n id,\n type,\n position,\n radius,\n angle,\n direction,\n limitedByWalls,\n metadata: config.metadata,\n attachedEntity,\n offset,\n callbacks,\n inside: /* @__PURE__ */ new Set()\n };\n this.zones.set(id, record);\n return id;\n }\n /**\n * Creates a zone attached to an entity (convenience method)\n *\n * @param entity - Entity to attach the zone to\n * @param config - Zone configuration\n * @param callbacks - Optional event callbacks\n * @returns Zone identifier\n *\n * @example\n * ```typescript\n * const visionZone = zones.createAttachedZone(player, {\n * radius: 100,\n * angle: 90,\n * direction: 'right',\n * offset: { x: 0, y: -10 },\n * }, {\n * onEnter: (entities) => console.log('Player sees:', entities),\n * });\n * ```\n */\n createAttachedZone(entity, config, callbacks) {\n return this.createZone({ ...config, entity }, callbacks);\n }\n /**\n * Updates a zone's configuration\n *\n * @param id - Zone identifier\n * @param updates - Partial configuration updates\n * @returns True if the zone was found and updated\n *\n * @example\n * ```typescript\n * zones.updateZone(zoneId, { radius: 75, angle: 120 });\n * ```\n */\n updateZone(id, updates) {\n const zone = this.zones.get(id);\n if (!zone) return false;\n if (updates.radius !== void 0) {\n if (typeof updates.radius !== \"number\" || updates.radius <= 0) {\n throw new Error(\"Zone radius must be a positive number\");\n }\n zone.radius = updates.radius;\n }\n if (updates.angle !== void 0) {\n zone.angle = updates.angle;\n }\n if (updates.direction !== void 0) {\n zone.direction = updates.direction;\n }\n if (updates.limitedByWalls !== void 0) {\n zone.limitedByWalls = updates.limitedByWalls;\n }\n if (updates.metadata !== void 0) {\n zone.metadata = updates.metadata;\n }\n if (\"offset\" in updates && updates.offset !== void 0 && zone.type === \"attached\") {\n const offsetValue = updates.offset;\n if (offsetValue instanceof Vector2) {\n zone.offset = offsetValue.clone();\n } else {\n zone.offset = new Vector2(offsetValue.x, offsetValue.y);\n }\n }\n return true;\n }\n /**\n * Registers or updates callbacks for a zone\n *\n * @param id - Zone identifier\n * @param callbacks - Event callbacks\n * @returns True if the zone was found\n *\n * @example\n * ```typescript\n * zones.registerCallbacks(zoneId, {\n * onEnter: (entities) => console.log('Entered:', entities),\n * onExit: (entities) => console.log('Exited:', entities),\n * });\n * ```\n */\n registerCallbacks(id, callbacks) {\n const zone = this.zones.get(id);\n if (!zone) return false;\n zone.callbacks = callbacks;\n return true;\n }\n /**\n * Removes a zone\n *\n * @param id - Zone identifier\n * @returns True if the zone was found and removed\n */\n removeZone(id) {\n return this.zones.delete(id);\n }\n /**\n * Gets zone information\n *\n * @param id - Zone identifier\n * @returns Zone information or undefined\n */\n getZone(id) {\n const zone = this.zones.get(id);\n if (!zone) return void 0;\n return {\n id: zone.id,\n type: zone.type,\n position: zone.position.clone(),\n radius: zone.radius,\n angle: zone.angle,\n direction: zone.direction,\n limitedByWalls: zone.limitedByWalls,\n metadata: zone.metadata\n };\n }\n /**\n * Gets all entities currently inside a zone\n *\n * @param id - Zone identifier\n * @returns Array of entities inside the zone\n */\n getEntitiesInZone(id) {\n const zone = this.zones.get(id);\n if (!zone) return [];\n const entities = [];\n for (const uuid of zone.inside) {\n const entity = this.engine.getEntityByUUID(uuid);\n if (entity) {\n entities.push(entity);\n }\n }\n return entities;\n }\n /**\n * Gets all zone identifiers\n *\n * @returns Array of zone IDs\n */\n getAllZoneIds() {\n return Array.from(this.zones.keys());\n }\n /**\n * Clears all zones\n */\n clear() {\n this.zones.clear();\n }\n /**\n * Updates all zones, detecting entities entering/exiting\n *\n * This should be called after each physics step to keep zones synchronized.\n *\n * @param _deltaTime - Optional delta time (not used currently, but kept for future use)\n *\n * @example\n * ```typescript\n * engine.step();\n * zones.update();\n * ```\n */\n update(_deltaTime) {\n for (const zone of this.zones.values()) {\n if (zone.type === \"attached\" && zone.attachedEntity) {\n const entityPos = zone.attachedEntity.position;\n const offset = zone.offset ?? new Vector2(0, 0);\n zone.position.set(entityPos.x + offset.x, entityPos.y + offset.y);\n }\n const aabb = new AABB(\n zone.position.x - zone.radius,\n zone.position.y - zone.radius,\n zone.position.x + zone.radius,\n zone.position.y + zone.radius\n );\n const candidates = this.engine.queryAABB(aabb);\n const hits = /* @__PURE__ */ new Set();\n for (const entity of candidates) {\n if (zone.attachedEntity && entity.uuid === zone.attachedEntity.uuid) {\n continue;\n }\n if (this.isEntityInsideZone(zone, entity)) {\n hits.add(entity.uuid);\n }\n }\n const previous = zone.inside;\n const entered = [];\n const exited = [];\n for (const uuid of hits) {\n if (!previous.has(uuid)) {\n const entity = this.engine.getEntityByUUID(uuid);\n if (entity) {\n entered.push(entity);\n }\n }\n }\n for (const uuid of previous) {\n if (!hits.has(uuid)) {\n const entity = this.engine.getEntityByUUID(uuid);\n if (entity) {\n exited.push(entity);\n }\n }\n }\n zone.inside = hits;\n if (entered.length > 0 && zone.callbacks?.onEnter) {\n zone.callbacks.onEnter(entered);\n }\n if (exited.length > 0 && zone.callbacks?.onExit) {\n zone.callbacks.onExit(exited);\n }\n }\n }\n /**\n * Checks if an entity is inside a zone\n *\n * @param zone - Zone record\n * @param entity - Entity to check\n * @returns True if the entity is inside the zone\n */\n isEntityInsideZone(zone, entity) {\n const zonePos = zone.position;\n const entityPos = entity.position;\n const dx = entityPos.x - zonePos.x;\n const dy = entityPos.y - zonePos.y;\n const distance = Math.hypot(dx, dy);\n const entityRadius = entity.radius > 0 ? entity.radius : Math.max(entity.width, entity.height) / 2;\n if (distance - entityRadius > zone.radius) {\n return false;\n }\n if (zone.angle < 360) {\n const facing = this.directionToAngle(zone.direction);\n const angle = Math.atan2(dy, dx);\n const delta = this.normalizeAngle(angle - facing);\n const halfAperture = zone.angle * Math.PI / 360;\n if (Math.abs(delta) > halfAperture) {\n return false;\n }\n }\n if (zone.limitedByWalls) {\n if (!this.hasLineOfSight(zonePos, entityPos, entity.uuid)) {\n return false;\n }\n }\n return true;\n }\n /**\n * Checks if there's a clear line of sight between two points\n *\n * @param start - Start position\n * @param end - End position\n * @param ignoreEntityId - Entity UUID to ignore (usually the target entity)\n * @returns True if line of sight is clear\n */\n hasLineOfSight(start, end, ignoreEntityId) {\n const direction = end.sub(start);\n const distance = direction.length();\n if (distance < 1e-5) return true;\n direction.normalizeInPlace();\n const hit = this.engine.raycast(start, direction, distance, void 0, (entity) => {\n if (!entity.isStatic()) return false;\n if (ignoreEntityId && entity.uuid === ignoreEntityId) return false;\n return true;\n });\n return hit === null;\n }\n /**\n * Converts direction string to angle in radians\n *\n * @param dir - Direction\n * @returns Angle in radians\n */\n directionToAngle(dir) {\n switch (dir) {\n case \"up\":\n return -Math.PI / 2;\n case \"down\":\n return Math.PI / 2;\n case \"left\":\n return Math.PI;\n case \"right\":\n default:\n return 0;\n }\n }\n /**\n * Normalizes angle to [-π, π]\n *\n * @param angle - Angle in radians\n * @returns Normalized angle\n */\n normalizeAngle(angle) {\n let a = angle;\n while (a > Math.PI) a -= Math.PI * 2;\n while (a < -Math.PI) a += Math.PI * 2;\n return a;\n }\n}\nexport {\n ZoneManager\n};\n//# sourceMappingURL=index29.js.map\n","import { World } from \"./index23.js\";\nimport { Entity } from \"./index7.js\";\nimport { RegionManager } from \"./index26.js\";\nimport { assignPolygonCollider } from \"./index19.js\";\nimport { raycast } from \"./index20.js\";\nimport { sweepEntities } from \"./index22.js\";\nimport { MovementManager } from \"./index30.js\";\nimport { ZoneManager } from \"./index29.js\";\nclass PhysicsEngine {\n /**\n * Creates a new physics engine\n * \n * @param config - Engine configuration\n */\n constructor(config = {}) {\n this.regionManager = null;\n this.movementManager = null;\n this.zoneManager = null;\n this.tick = 0;\n this.useRegions = config.enableRegions ?? false;\n if (this.useRegions) {\n if (!config.regionConfig) {\n throw new Error(\"Region configuration is required when enableRegions is true\");\n }\n this.regionManager = new RegionManager(config.regionConfig);\n this.world = new World({\n ...config,\n enableSleep: false\n // Regions handle sleep\n });\n } else {\n this.world = new World(config);\n }\n }\n /**\n * Gets the movement manager bound to this engine.\n *\n * The manager is lazily created and reused.\n *\n * @returns Movement manager instance\n */\n getMovementManager() {\n if (!this.movementManager) {\n this.movementManager = MovementManager.forEngine(this);\n }\n return this.movementManager;\n }\n /**\n * Gets the zone manager bound to this engine.\n *\n * The manager is lazily created and reused. Zones allow detecting entities\n * within circular or cone-shaped areas without physical collisions (useful\n * for vision, skill ranges, explosions, etc.).\n *\n * **Important:** Call `zoneManager.update()` after each physics step to\n * keep zones synchronized:\n *\n * ```typescript\n * engine.step();\n * engine.getZoneManager().update();\n * ```\n *\n * @returns Zone manager instance\n *\n * @example\n * ```typescript\n * const zones = engine.getZoneManager();\n * const visionZone = zones.createAttachedZone(player, {\n * radius: 100,\n * angle: 90,\n * direction: 'right',\n * }, {\n * onEnter: (entities) => console.log('Player sees:', entities),\n * });\n *\n * engine.step();\n * zones.update();\n * ```\n */\n getZoneManager() {\n if (!this.zoneManager) {\n this.zoneManager = new ZoneManager(this);\n }\n return this.zoneManager;\n }\n /**\n * Updates all registered movement strategies.\n *\n * @param dt - Time delta in seconds (defaults to the world's time step)\n */\n updateMovements(dt) {\n const manager = this.getMovementManager();\n const delta = dt ?? this.world.getTimeStep();\n manager.update(delta);\n }\n /**\n * Updates movements and then steps the simulation.\n *\n * @param dt - Time delta in seconds (defaults to the world's time step)\n */\n stepWithMovements(dt) {\n this.updateMovements(dt);\n this.step();\n }\n /**\n * Advances the simulation by exactly one fixed tick.\n *\n * This helper is equivalent to {@link step} but returns the tick index after the step,\n * making it convenient for client-side prediction loops.\n *\n * @returns Current tick index after stepping\n */\n stepOneTick() {\n this.step();\n return this.tick;\n }\n /**\n * Advances the simulation by a fixed number of ticks.\n *\n * @param ticks - Number of ticks to simulate (>= 1)\n * @returns Current tick index after stepping\n */\n stepTicks(ticks) {\n if (!Number.isFinite(ticks) || ticks <= 0) {\n return this.tick;\n }\n const total = Math.floor(ticks);\n for (let i = 0; i < total; i += 1) {\n this.step();\n }\n return this.tick;\n }\n /**\n * Creates a new entity\n * \n * @param config - Entity configuration\n * @returns Created entity\n * \n * @example\n * ```typescript\n * const entity = engine.createEntity({\n * position: { x: 100, y: 100 },\n * radius: 15,\n * mass: 1,\n * velocity: { x: 5, y: 0 }\n * });\n * ```\n */\n createEntity(config) {\n const entity = new Entity(config);\n if (this.useRegions && this.regionManager) {\n this.regionManager.addEntity(entity);\n } else {\n this.world.addEntity(entity);\n }\n return entity;\n }\n /**\n * Adds an existing entity to the engine\n * \n * @param entity - Entity to add\n * @returns The added entity\n */\n addEntity(entity) {\n if (this.useRegions && this.regionManager) {\n this.regionManager.addEntity(entity);\n } else {\n this.world.addEntity(entity);\n }\n return entity;\n }\n /**\n * Removes an entity from the engine\n * \n * @param entity - Entity to remove\n */\n removeEntity(entity) {\n if (this.useRegions && this.regionManager) {\n this.regionManager.removeEntity(entity);\n } else {\n this.world.removeEntity(entity);\n }\n }\n /**\n * Gets all entities\n * \n * @returns Array of all entities\n */\n getEntities() {\n if (this.useRegions && this.regionManager) {\n const entities = [];\n for (const region of this.regionManager.getRegions()) {\n entities.push(...region.getEntities());\n }\n return entities;\n }\n return this.world.getEntities();\n }\n /**\n * Gets an entity by UUID\n * \n * @param uuid - Entity UUID\n * @returns Entity or undefined\n */\n getEntityByUUID(uuid) {\n if (this.useRegions && this.regionManager) {\n for (const region of this.regionManager.getRegions()) {\n const entity = region.getWorld().getEntityByUUID(uuid);\n if (entity) {\n return entity;\n }\n }\n return void 0;\n }\n return this.world.getEntityByUUID(uuid);\n }\n /**\n * Steps the physics simulation forward\n * \n * Updates all entities, detects and resolves collisions.\n */\n step() {\n if (this.useRegions && this.regionManager) {\n this.regionManager.step();\n } else {\n this.world.step();\n }\n this.tick += 1;\n }\n /**\n * Gets the event system\n * \n * @returns Event system instance\n */\n getEvents() {\n return this.world.getEvents();\n }\n /**\n * Applies a force to an entity\n * \n * @param entity - Entity to apply force to\n * @param force - Force vector\n */\n applyForce(entity, force) {\n entity.applyForce(force);\n }\n /**\n * Applies an impulse to an entity\n * \n * @param entity - Entity to apply impulse to\n * @param impulse - Impulse vector\n */\n applyImpulse(entity, impulse) {\n entity.applyImpulse(impulse);\n }\n /**\n * Teleports an entity to a new position\n * \n * @param entity - Entity to teleport\n * @param position - New position\n */\n teleport(entity, position) {\n entity.teleport(position);\n if (this.useRegions && this.regionManager) {\n this.regionManager.updateEntities();\n }\n }\n /**\n * Freezes an entity (makes it static)\n * \n * @param entity - Entity to freeze\n */\n freeze(entity) {\n entity.freeze();\n }\n /**\n * Unfreezes an entity (makes it dynamic)\n * \n * @param entity - Entity to unfreeze\n */\n unfreeze(entity) {\n entity.unfreeze();\n }\n /**\n * Queries entities in an AABB region\n * \n * @param bounds - AABB to query\n * @returns Array of entities in the region\n */\n queryAABB(bounds) {\n if (this.useRegions && this.regionManager) {\n const entities = [];\n const regions = this.regionManager.getRegionsInBounds(bounds);\n for (const region of regions) {\n const world2 = region.getWorld();\n const worldEntities = world2.getEntities();\n for (const entity of worldEntities) {\n if (bounds.contains(entity.position)) {\n entities.push(entity);\n }\n }\n }\n return entities;\n }\n const world = this.world;\n if (world.spatialPartition) {\n return Array.from(world.spatialPartition.queryAABB(bounds));\n }\n return this.world.getEntities().filter((e) => bounds.contains(e.position));\n }\n /**\n * Clears all entities from the engine\n */\n clear() {\n if (this.useRegions && this.regionManager) {\n this.regionManager.clear();\n } else {\n this.world.clear();\n }\n this.tick = 0;\n }\n /**\n * Assigns a polygon collider to an entity (supports convex or concave via convex parts).\n *\n * Design: the collider is attached via a registry and used by the detector on demand.\n * This keeps entities lightweight and preserves the separation of detection/resolution.\n *\n * @param entity - Target entity\n * @param config - Polygon configuration\n * @example\n * ```typescript\n * engine.assignPolygonCollider(entity, { vertices: [new Vector2(-1,-1), new Vector2(1,-1), new Vector2(1,1), new Vector2(-1,1)], isConvex: true });\n * ```\n */\n assignPolygonCollider(entity, config) {\n assignPolygonCollider(entity, config);\n }\n /**\n * Casts a ray in the physics world and returns the nearest hit, if any.\n * Uses the world's spatial partition for broad-phase and shape-specific narrow-phase tests.\n *\n * @param origin - Ray origin\n * @param direction - Ray direction (any length)\n * @param maxDistance - Maximum cast length\n * @param mask - Optional collision mask (layer)\n * @param filter - Optional filter function (return true to include entity)\n * @returns Raycast hit or null\n * @example\n * ```typescript\n * const hit = engine.raycast(new Vector2(0,0), new Vector2(1,0), 1000);\n * ```\n */\n raycast(origin, direction, maxDistance, mask, filter) {\n const world = this.world;\n const partition = world.spatialPartition;\n if (!partition) return null;\n return raycast(partition, origin, direction, maxDistance, mask, filter);\n }\n /**\n * Computes continuous collision detection (sweep test) time-of-impact between two entities\n * over the next step of duration `dt`, using relative motion.\n *\n * @param a - First entity\n * @param b - Second entity\n * @param dt - Time step duration\n * @returns Sweep result or null if no hit in [0,1]\n * @example\n * ```typescript\n * const toi = engine.sweep(entityA, entityB, 1/60);\n * if (toi) {\n * // pre-resolve or clamp motion\n * }\n * ```\n */\n sweep(a, b, dt) {\n const rel = a.velocity.sub(b.velocity).mul(dt);\n return sweepEntities(a, b, rel);\n }\n /**\n * Gets statistics about the engine\n * \n * @returns Statistics object\n */\n getStats() {\n if (this.useRegions && this.regionManager) {\n const regionStats = this.regionManager.getStats();\n const worldStats = this.world.getStats();\n return {\n ...worldStats,\n regions: {\n total: regionStats.totalRegions,\n active: regionStats.activeRegions\n }\n };\n }\n return this.world.getStats();\n }\n /**\n * Gets the underlying world instance\n * \n * @returns World instance\n */\n getWorld() {\n return this.world;\n }\n /**\n * Gets the current simulation tick.\n *\n * @returns Tick counter (starts at 0 and increments after each {@link step})\n */\n getTick() {\n return this.tick;\n }\n /**\n * Captures a lightweight snapshot of the current world state.\n *\n * The snapshot only stores the minimum data required for client-side prediction:\n * position, velocity, rotation, angular velocity and sleeping flag per entity.\n *\n * @returns Snapshot object\n */\n takeSnapshot() {\n return {\n tick: this.tick,\n entities: this.getEntities().map((entity) => ({\n uuid: entity.uuid,\n position: { x: entity.position.x, y: entity.position.y },\n velocity: { x: entity.velocity.x, y: entity.velocity.y },\n rotation: entity.rotation,\n angularVelocity: entity.angularVelocity,\n sleeping: entity.isSleeping()\n }))\n };\n }\n /**\n * Restores a snapshot previously produced by {@link takeSnapshot}.\n *\n * Entities that cannot be found in the current engine are skipped silently.\n *\n * @param snapshot - Snapshot to restore\n */\n restoreSnapshot(snapshot) {\n const entities = new Map(this.getEntities().map((entity) => [entity.uuid, entity]));\n for (const state of snapshot.entities) {\n const entity = entities.get(state.uuid);\n if (!entity) continue;\n entity.position.set(state.position.x, state.position.y);\n entity.velocity.set(state.velocity.x, state.velocity.y);\n entity.rotation = state.rotation;\n entity.angularVelocity = state.angularVelocity;\n if (state.sleeping) {\n entity.sleep();\n } else {\n entity.wakeUp();\n }\n }\n this.tick = snapshot.tick;\n }\n /**\n * Gets the region manager (if regions are enabled)\n * \n * @returns Region manager or null\n */\n getRegionManager() {\n return this.regionManager;\n }\n}\nexport {\n PhysicsEngine\n};\n//# sourceMappingURL=index28.js.map\n","class CompositeMovement {\n /**\n * Creates a composite movement.\n *\n * @param mode - Parallel or sequence execution\n * @param strategies - Strategies to aggregate\n */\n constructor(mode, strategies) {\n this.mode = mode;\n this.strategies = strategies;\n this.currentIndex = 0;\n }\n update(body, dt) {\n if (this.strategies.length === 0) {\n return;\n }\n if (this.mode === \"parallel\") {\n this.updateParallel(body, dt);\n } else {\n this.updateSequence(body, dt);\n }\n }\n isFinished() {\n if (this.mode === \"parallel\") {\n return this.strategies.length === 0;\n }\n return this.currentIndex >= this.strategies.length;\n }\n add(strategy) {\n this.strategies.push(strategy);\n }\n remove(strategy) {\n const index = this.strategies.indexOf(strategy);\n if (index === -1) {\n return false;\n }\n this.strategies.splice(index, 1);\n if (this.currentIndex >= this.strategies.length) {\n this.currentIndex = Math.max(0, this.strategies.length - 1);\n }\n return true;\n }\n reset() {\n this.currentIndex = 0;\n }\n updateParallel(body, dt) {\n const originalVelocity = { x: body.velocity.x, y: body.velocity.y };\n let changes = 0;\n for (let i = this.strategies.length - 1; i >= 0; i -= 1) {\n const strategy = this.strategies[i];\n if (!strategy) {\n continue;\n }\n const beforeX = body.velocity.x;\n const beforeY = body.velocity.y;\n strategy.update(body, dt);\n if (beforeX !== body.velocity.x || beforeY !== body.velocity.y) {\n changes += 1;\n }\n if (strategy.isFinished?.()) {\n this.strategies.splice(i, 1);\n strategy.onFinished?.();\n }\n }\n if (changes > 1) {\n body.setVelocity({\n x: (body.velocity.x + originalVelocity.x) / 2,\n y: (body.velocity.y + originalVelocity.y) / 2\n });\n }\n }\n updateSequence(body, dt) {\n if (this.currentIndex >= this.strategies.length) {\n return;\n }\n const current = this.strategies[this.currentIndex];\n if (!current) {\n return;\n }\n current.update(body, dt);\n if (current.isFinished?.()) {\n current.onFinished?.();\n this.currentIndex += 1;\n }\n }\n}\nexport {\n CompositeMovement\n};\n//# sourceMappingURL=index32.js.map\n","class Dash {\n /**\n * Creates a dash movement.\n *\n * @param speed - Movement speed in units per second\n * @param direction - Direction vector (will be normalized)\n * @param duration - Duration in seconds\n */\n constructor(speed, direction, duration) {\n this.speed = speed;\n this.duration = duration;\n this.elapsed = 0;\n this.finished = false;\n const magnitude = Math.hypot(direction.x, direction.y);\n this.direction = magnitude > 0 ? { x: direction.x / magnitude, y: direction.y / magnitude } : { x: 1, y: 0 };\n }\n update(body, dt) {\n if (this.finished) {\n return;\n }\n this.elapsed += dt;\n if (this.elapsed <= this.duration) {\n body.setVelocity({\n x: this.direction.x * this.speed,\n y: this.direction.y * this.speed\n });\n } else {\n body.setVelocity({ x: 0, y: 0 });\n this.finished = true;\n }\n }\n isFinished() {\n return this.finished;\n }\n}\nexport {\n Dash\n};\n//# sourceMappingURL=index33.js.map\n","class IceMovement {\n /**\n * Creates an ice-like movement behaviour.\n *\n * @param direction - Initial desired direction (normalized automatically)\n * @param maxSpeed - Maximum speed in units per second\n * @param acceleration - Fraction of the gap closed per second (0-1)\n * @param friction - Fraction of velocity retained per second when stopping (0-1)\n * @param duration - Optional duration in seconds\n */\n constructor(direction, maxSpeed = 4, acceleration = 0.2, friction = 0.08, duration) {\n this.maxSpeed = maxSpeed;\n this.acceleration = acceleration;\n this.friction = friction;\n this.duration = duration;\n this.currentVelocity = { x: 0, y: 0 };\n this.elapsed = 0;\n this.stopped = false;\n const magnitude = Math.hypot(direction.x, direction.y);\n this.targetDirection = magnitude > 0 ? { x: direction.x / magnitude, y: direction.y / magnitude } : { x: 0, y: 0 };\n }\n update(body, dt) {\n if (this.duration !== void 0) {\n this.elapsed += dt;\n if (this.elapsed >= this.duration) {\n this.stopped = true;\n }\n }\n if (!this.stopped) {\n const accelFactor = this.perSecondFactor(this.acceleration, dt);\n const targetVx = this.targetDirection.x * this.maxSpeed;\n const targetVy = this.targetDirection.y * this.maxSpeed;\n this.currentVelocity.x += (targetVx - this.currentVelocity.x) * accelFactor;\n this.currentVelocity.y += (targetVy - this.currentVelocity.y) * accelFactor;\n } else {\n const frictionFactor = this.perSecondFactor(this.friction, dt);\n this.currentVelocity.x *= 1 - frictionFactor;\n this.currentVelocity.y *= 1 - frictionFactor;\n }\n body.setVelocity({\n x: this.currentVelocity.x,\n y: this.currentVelocity.y\n });\n }\n isFinished() {\n if (!this.stopped) {\n return false;\n }\n const speed = Math.hypot(this.currentVelocity.x, this.currentVelocity.y);\n return speed < 0.05;\n }\n stop() {\n this.stopped = true;\n }\n resume() {\n this.stopped = false;\n }\n setTargetDirection(direction) {\n const magnitude = Math.hypot(direction.x, direction.y);\n this.targetDirection.x = magnitude > 0 ? direction.x / magnitude : 0;\n this.targetDirection.y = magnitude > 0 ? direction.y / magnitude : 0;\n this.stopped = false;\n }\n setParameters(maxSpeed, acceleration, friction) {\n if (maxSpeed !== void 0) {\n this.maxSpeed = maxSpeed;\n }\n if (acceleration !== void 0) {\n this.acceleration = acceleration;\n }\n if (friction !== void 0) {\n this.friction = friction;\n }\n }\n perSecondFactor(value, dt) {\n const clamped = Math.max(0, Math.min(1, value));\n if (dt <= 0) {\n return clamped;\n }\n return 1 - Math.pow(1 - clamped, dt);\n }\n}\nexport {\n IceMovement\n};\n//# sourceMappingURL=index34.js.map\n","class Knockback {\n /**\n * Creates a knockback movement.\n *\n * @param direction - Direction of the impulse (will be normalized)\n * @param initialSpeed - Initial speed in units per second\n * @param duration - Duration in seconds\n * @param decayFactor - Fraction of speed preserved per second (0-1)\n */\n constructor(direction, initialSpeed, duration, decayFactor = 0.35) {\n this.duration = duration;\n this.decayFactor = decayFactor;\n this.elapsed = 0;\n const magnitude = Math.hypot(direction.x, direction.y);\n this.direction = magnitude > 0 ? { x: direction.x / magnitude, y: direction.y / magnitude } : { x: 1, y: 0 };\n this.currentSpeed = initialSpeed;\n }\n update(body, dt) {\n this.elapsed += dt;\n if (this.elapsed <= this.duration) {\n body.setVelocity({\n x: this.direction.x * this.currentSpeed,\n y: this.direction.y * this.currentSpeed\n });\n const decay = Math.max(0, Math.min(1, this.decayFactor));\n if (decay === 0) {\n this.currentSpeed = 0;\n } else if (decay === 1) ;\n else {\n this.currentSpeed *= Math.pow(decay, dt);\n }\n } else {\n body.setVelocity({ x: 0, y: 0 });\n }\n }\n isFinished() {\n return this.elapsed >= this.duration;\n }\n}\nexport {\n Knockback\n};\n//# sourceMappingURL=index35.js.map\n","class LinearMove {\n /**\n * Creates a linear movement strategy.\n *\n * @param velocity - Velocity to apply (units per second)\n * @param duration - Optional duration in seconds (undefined for infinite)\n */\n constructor(velocity, duration) {\n this.velocity = velocity;\n this.duration = duration;\n this.elapsed = 0;\n }\n update(body, dt) {\n if (this.duration !== void 0) {\n this.elapsed += dt;\n }\n body.setVelocity(this.velocity);\n }\n isFinished() {\n return this.duration !== void 0 && this.elapsed >= this.duration;\n }\n}\nexport {\n LinearMove\n};\n//# sourceMappingURL=index36.js.map\n","import { AABB } from \"./index4.js\";\nimport { Vector2 } from \"./index2.js\";\nclass LinearRepulsion {\n /**\n * @param engine - Physics engine used for spatial queries\n * @param targetProvider - Function returning the target position\n * @param maxSpeed - Maximum speed in units per second\n * @param repulseRadius - Radius used to sample nearby obstacles\n * @param repulseWeight - Weight of the repulsion force\n * @param ignoredEntity - Optional entity to exclude from avoidance (e.g. the target)\n */\n constructor(engine, targetProvider, maxSpeed = 2.5, repulseRadius = 2, repulseWeight = 4, ignoredEntity) {\n this.engine = engine;\n this.targetProvider = targetProvider;\n this.maxSpeed = maxSpeed;\n this.repulseRadius = repulseRadius;\n this.repulseWeight = repulseWeight;\n this.ignoredEntity = ignoredEntity;\n this.repulseRadiusSq = repulseRadius * repulseRadius;\n }\n update(body, _dt) {\n const entity = body.getEntity?.();\n if (!entity) {\n throw new Error(\"LinearRepulsion requires a movement body backed by a physics entity.\");\n }\n const targetPosition = this.targetProvider();\n const toTarget = new Vector2(targetPosition.x - entity.position.x, targetPosition.y - entity.position.y);\n const distance = toTarget.length();\n if (distance > 0) {\n toTarget.divInPlace(distance);\n } else {\n toTarget.set(0, 0);\n }\n const bounds = AABB.fromCenterSize(entity.position.x, entity.position.y, this.repulseRadius * 2, this.repulseRadius * 2);\n const neighbors = this.engine.queryAABB(bounds);\n const ignored = this.ignoredEntity?.();\n const push = new Vector2(0, 0);\n for (const other of neighbors) {\n if (other === entity || other === ignored || other.isStatic()) {\n continue;\n }\n const diff = new Vector2(entity.position.x - other.position.x, entity.position.y - other.position.y);\n const d2 = diff.lengthSquared();\n if (d2 > this.repulseRadiusSq || d2 === 0) {\n continue;\n }\n const d = Math.sqrt(d2);\n const weight = this.repulseWeight * (this.repulseRadius - Math.min(d, this.repulseRadius)) / this.repulseRadius;\n push.addInPlace(diff.mul(weight / d));\n }\n const maxPush = this.maxSpeed * 3;\n const pushLength = push.length();\n if (pushLength > maxPush && pushLength > 0) {\n push.mulInPlace(maxPush / pushLength);\n }\n const desired = toTarget.mul(this.maxSpeed).add(push);\n const desiredLength = desired.length();\n if (desiredLength > this.maxSpeed && desiredLength > 0) {\n desired.mulInPlace(this.maxSpeed / desiredLength);\n }\n if (!Number.isFinite(desired.x) || !Number.isFinite(desired.y)) {\n entity.setVelocity({ x: 0, y: 0 });\n return;\n }\n body.setVelocity(desired);\n }\n setParameters(maxSpeed, repulseRadius, repulseWeight) {\n if (maxSpeed !== void 0) {\n this.maxSpeed = maxSpeed;\n }\n if (repulseRadius !== void 0) {\n this.repulseRadius = repulseRadius;\n this.repulseRadiusSq = repulseRadius * repulseRadius;\n }\n if (repulseWeight !== void 0) {\n this.repulseWeight = repulseWeight;\n }\n }\n}\nexport {\n LinearRepulsion\n};\n//# sourceMappingURL=index37.js.map\n","class Oscillate {\n /**\n * Creates an oscillating movement.\n *\n * @param direction - Base direction (will be normalized)\n * @param amplitude - Maximum displacement from the anchor position\n * @param period - Duration of a full cycle in seconds\n * @param type - Oscillation pattern\n * @param duration - Total life time in seconds (undefined for infinite)\n */\n constructor(direction, amplitude, period, type = \"sine\", duration) {\n this.amplitude = amplitude;\n this.period = period;\n this.type = type;\n this.duration = duration;\n this.elapsed = 0;\n this.anchor = null;\n const magnitude = Math.hypot(direction.x, direction.y);\n this.direction = magnitude > 0 ? { x: direction.x / magnitude, y: direction.y / magnitude } : { x: 1, y: 0 };\n }\n update(body, dt) {\n if (this.anchor === null) {\n this.anchor = { x: body.position.x, y: body.position.y };\n }\n this.elapsed += dt;\n if (this.duration !== void 0 && this.elapsed >= this.duration) {\n body.setVelocity({ x: 0, y: 0 });\n return;\n }\n const cycle = this.period <= 0 ? 0 : this.elapsed % this.period / this.period;\n const frequency = this.period > 0 ? 2 * Math.PI / this.period : 0;\n let velocityScale;\n switch (this.type) {\n case \"sine\":\n velocityScale = Math.cos(cycle * Math.PI * 2) * frequency * this.amplitude;\n break;\n case \"circular\":\n velocityScale = Math.cos(cycle * Math.PI * 2) * frequency * this.amplitude;\n break;\n case \"linear\":\n const halfCycle = cycle < 0.5;\n velocityScale = (halfCycle ? 1 : -1) * (2 * this.amplitude) / (this.period / 2);\n break;\n default:\n velocityScale = 0;\n }\n const vx = this.direction.x * velocityScale;\n const vy = this.direction.y * velocityScale;\n if (this.type === \"circular\") {\n const perpendicularScale = -Math.sin(cycle * Math.PI * 2) * frequency * this.amplitude;\n body.setVelocity({\n x: vx - this.direction.y * perpendicularScale,\n y: vy + this.direction.x * perpendicularScale\n });\n } else {\n body.setVelocity({ x: vx, y: vy });\n }\n }\n isFinished() {\n return this.duration !== void 0 && this.elapsed >= this.duration;\n }\n reset() {\n this.elapsed = 0;\n this.anchor = null;\n }\n}\nexport {\n Oscillate\n};\n//# sourceMappingURL=index38.js.map\n","class PathFollow {\n /**\n * Creates a path-following strategy.\n *\n * @param waypoints - List of waypoints to traverse\n * @param speed - Travel speed in units per second\n * @param loop - When true, restart from the first waypoint\n * @param pauseAtWaypoints - Optional pause duration (seconds) at each waypoint\n * @param tolerance - Distance tolerance to consider a waypoint reached\n */\n constructor(waypoints, speed, loop = false, pauseAtWaypoints = 0, tolerance = 0.1) {\n this.waypoints = waypoints;\n this.speed = speed;\n this.loop = loop;\n this.pauseAtWaypoints = pauseAtWaypoints;\n this.tolerance = tolerance;\n this.currentWaypoint = 0;\n this.elapsedPause = 0;\n this.paused = false;\n this.finished = false;\n this.direction = { x: 0, y: 0 };\n if (waypoints.length === 0) {\n this.finished = true;\n }\n }\n update(body, dt) {\n if (this.finished || this.waypoints.length === 0) {\n body.setVelocity({ x: 0, y: 0 });\n return;\n }\n if (this.paused) {\n this.elapsedPause += dt;\n body.setVelocity({ x: 0, y: 0 });\n if (this.elapsedPause >= this.pauseAtWaypoints) {\n this.paused = false;\n this.elapsedPause = 0;\n } else {\n return;\n }\n }\n const target = this.waypoints[this.currentWaypoint];\n if (!target) {\n this.finished = true;\n body.setVelocity({ x: 0, y: 0 });\n return;\n }\n const dx = target.x - body.position.x;\n const dy = target.y - body.position.y;\n const distance = Math.hypot(dx, dy);\n if (distance <= this.tolerance) {\n this.currentWaypoint += 1;\n if (this.currentWaypoint >= this.waypoints.length) {\n if (this.loop) {\n this.currentWaypoint = 0;\n } else {\n this.finished = true;\n body.setVelocity({ x: 0, y: 0 });\n return;\n }\n }\n if (this.pauseAtWaypoints > 0) {\n this.paused = true;\n this.elapsedPause = 0;\n body.setVelocity({ x: 0, y: 0 });\n return;\n }\n }\n if (distance > 0) {\n this.direction = { x: dx / distance, y: dy / distance };\n }\n body.setVelocity({\n x: this.direction.x * this.speed,\n y: this.direction.y * this.speed\n });\n }\n isFinished() {\n return this.finished;\n }\n getCurrentWaypoint() {\n return this.currentWaypoint;\n }\n setWaypoints(waypoints, reset = true) {\n this.waypoints = waypoints;\n this.finished = waypoints.length === 0;\n if (reset) {\n this.currentWaypoint = 0;\n this.paused = false;\n this.elapsedPause = 0;\n }\n }\n}\nexport {\n PathFollow\n};\n//# sourceMappingURL=index39.js.map\n","import { Vector2 } from \"./index2.js\";\nvar ProjectileType = /* @__PURE__ */ ((ProjectileType2) => {\n ProjectileType2[\"Straight\"] = \"straight\";\n ProjectileType2[\"Arc\"] = \"arc\";\n ProjectileType2[\"Bounce\"] = \"bounce\";\n return ProjectileType2;\n})(ProjectileType || {});\nclass ProjectileMovement {\n constructor(type, options) {\n this.type = type;\n this.elapsed = 0;\n this.distanceTraveled = 0;\n this.startPosition = null;\n this.bounceCount = 0;\n this.stage = 0;\n this.finished = false;\n this.currentHeight = 0;\n this.verticalVelocity = 0;\n const defaults = {\n speed: options.speed,\n direction: options.direction,\n initialHeight: 0,\n maxHeight: 2,\n gravity: 30,\n maxBounces: 0,\n bounciness: 0.6,\n drag: 0\n };\n this.options = { ...defaults, ...options };\n const magnitude = Math.hypot(this.options.direction.x, this.options.direction.y);\n this.direction = magnitude > 0 ? { x: this.options.direction.x / magnitude, y: this.options.direction.y / magnitude } : { x: 1, y: 0 };\n this.currentHeight = this.options.initialHeight ?? 0;\n if (this.type === \"arc\" || this.type === \"bounce\") {\n const gravity = this.options.gravity ?? 30;\n const maxHeight = this.options.maxHeight ?? 2;\n this.verticalVelocity = Math.sqrt(Math.max(0, 2 * gravity * maxHeight));\n }\n }\n update(body, dt) {\n if (this.finished || dt <= 0) {\n body.setVelocity({ x: 0, y: 0 });\n return;\n }\n if (this.startPosition === null) {\n this.startPosition = new Vector2(body.position.x, body.position.y);\n }\n this.elapsed += dt;\n if (this.options.lifetime !== void 0 && this.elapsed >= this.options.lifetime) {\n this.finish(body);\n return;\n }\n switch (this.stage) {\n case 0:\n this.updateFlying(body, dt);\n break;\n case 1:\n this.updateRolling(body, dt);\n break;\n case 2:\n this.finish(body);\n return;\n }\n if (this.startPosition) {\n this.distanceTraveled = new Vector2(body.position.x, body.position.y).distanceTo(this.startPosition);\n if (this.options.maxRange !== void 0 && this.distanceTraveled >= this.options.maxRange) {\n this.finish(body);\n }\n }\n }\n isFinished() {\n return this.finished;\n }\n getHeight() {\n return this.currentHeight;\n }\n getProgress() {\n if (this.options.maxRange) {\n return Math.min(1, this.distanceTraveled / this.options.maxRange);\n }\n if (this.options.lifetime) {\n return Math.min(1, this.elapsed / this.options.lifetime);\n }\n return 0;\n }\n updateFlying(body, dt) {\n let vx = this.direction.x * this.options.speed;\n let vy = this.direction.y * this.options.speed;\n const drag = Math.max(0, Math.min(1, this.options.drag ?? 0));\n if (drag > 0) {\n const dragFactor = Math.pow(1 - drag, dt);\n vx *= dragFactor;\n vy *= dragFactor;\n }\n if (this.type === \"arc\" || this.type === \"bounce\") {\n const gravity = this.options.gravity ?? 30;\n this.verticalVelocity -= gravity * dt;\n this.currentHeight += this.verticalVelocity * dt;\n if (this.options.onHeightUpdate) {\n this.options.onHeightUpdate(this.currentHeight, body);\n } else {\n const dispatcher = globalThis;\n if (typeof dispatcher.dispatchEvent === \"function\" && typeof CustomEvent !== \"undefined\") {\n const event = new CustomEvent(\"projectile:height\", {\n detail: {\n id: body.id,\n height: this.currentHeight\n }\n });\n dispatcher.dispatchEvent(event);\n }\n }\n if (this.currentHeight <= 0) {\n this.currentHeight = 0;\n if (this.type === \"bounce\") {\n if (this.bounceCount < (this.options.maxBounces ?? 0)) {\n const bounceEnergy = this.options.bounciness ?? 0.6;\n this.verticalVelocity = Math.abs(this.verticalVelocity) * bounceEnergy;\n vx *= bounceEnergy;\n vy *= bounceEnergy;\n this.bounceCount += 1;\n } else {\n this.stage = 1;\n }\n } else {\n this.finish(body);\n return;\n }\n }\n }\n body.setVelocity({ x: vx, y: vy });\n }\n updateRolling(body, dt) {\n const friction = 0.85;\n const vx = body.velocity.x * Math.pow(friction, dt * 60);\n const vy = body.velocity.y * Math.pow(friction, dt * 60);\n body.setVelocity({ x: vx, y: vy });\n if (Math.abs(vx) < 0.1 && Math.abs(vy) < 0.1) {\n this.finish(body);\n }\n }\n finish(body) {\n this.finished = true;\n this.stage = 2;\n body.setVelocity({ x: 0, y: 0 });\n }\n}\nexport {\n ProjectileMovement,\n ProjectileType\n};\n//# sourceMappingURL=index40.js.map\n","import { AABB } from \"./index4.js\";\nimport { Vector2 } from \"./index2.js\";\nconst EPSILON = 1e-3;\nclass SeekAvoid {\n /**\n * @param engine - Physics engine used for spatial queries\n * @param targetProvider - Function returning the target entity (or null)\n * @param maxSpeed - Maximum speed in units per second\n * @param repulseRadius - Radius in which obstacles apply repulsion\n * @param repulseWeight - Strength of the repulsion force\n * @param arriveRadius - Distance considered as arrival\n */\n constructor(engine, targetProvider, maxSpeed = 2.5, repulseRadius = 2, repulseWeight = 4, arriveRadius = 0.5) {\n this.engine = engine;\n this.targetProvider = targetProvider;\n this.maxSpeed = maxSpeed;\n this.repulseRadius = repulseRadius;\n this.repulseWeight = repulseWeight;\n this.repulseRadiusSq = repulseRadius * repulseRadius;\n this.arriveRadiusSq = arriveRadius * arriveRadius;\n }\n update(body, _dt) {\n const entity = body.getEntity?.();\n if (!entity) {\n throw new Error(\"SeekAvoid requires a movement body backed by a physics entity.\");\n }\n const target = this.targetProvider();\n if (!target) {\n body.setVelocity({ x: 0, y: 0 });\n return;\n }\n const toTarget = new Vector2(target.position.x - entity.position.x, target.position.y - entity.position.y);\n const distSq = toTarget.lengthSquared();\n let arrived = false;\n if (distSq <= this.arriveRadiusSq) {\n toTarget.set(0, 0);\n arrived = true;\n } else if (distSq > 0) {\n toTarget.divInPlace(Math.sqrt(distSq));\n }\n const bounds = AABB.fromCenterSize(entity.position.x, entity.position.y, this.repulseRadius * 2, this.repulseRadius * 2);\n const neighbors = this.engine.queryAABB(bounds);\n const push = new Vector2(0, 0);\n if (!arrived) {\n for (const other of neighbors) {\n if (other === entity || other === target || other.isStatic()) {\n continue;\n }\n const diff = new Vector2(entity.position.x - other.position.x, entity.position.y - other.position.y);\n let d2 = diff.lengthSquared();\n if (d2 > this.repulseRadiusSq) {\n continue;\n }\n if (d2 < EPSILON) {\n d2 = EPSILON;\n }\n const weight = this.repulseWeight / d2;\n push.addInPlace(diff.mul(weight));\n }\n }\n const pushLength = push.length();\n const maxPush = this.maxSpeed * 0.5;\n if (pushLength > maxPush && pushLength > 0) {\n push.mulInPlace(maxPush / pushLength);\n }\n const desired = toTarget.mul(this.maxSpeed).add(push);\n const desiredLength = desired.length();\n const maxCombinedSpeed = this.maxSpeed * 1.5;\n if (desiredLength > maxCombinedSpeed && desiredLength > 0) {\n desired.mulInPlace(maxCombinedSpeed / desiredLength);\n }\n if (!Number.isFinite(desired.x) || !Number.isFinite(desired.y)) {\n body.setVelocity({ x: 0, y: 0 });\n return;\n }\n body.setVelocity(desired);\n }\n setParameters(maxSpeed, repulseRadius, repulseWeight, arriveRadius) {\n if (maxSpeed !== void 0) {\n this.maxSpeed = maxSpeed;\n }\n if (repulseRadius !== void 0) {\n this.repulseRadius = repulseRadius;\n this.repulseRadiusSq = repulseRadius * repulseRadius;\n }\n if (repulseWeight !== void 0) {\n this.repulseWeight = repulseWeight;\n }\n if (arriveRadius !== void 0) {\n this.arriveRadiusSq = arriveRadius * arriveRadius;\n }\n }\n}\nexport {\n SeekAvoid\n};\n//# sourceMappingURL=index41.js.map\n","class ObjectPool {\n /**\n * Creates a new object pool\n * \n * @param createFn - Function to create new objects\n * @param maxSize - Maximum pool size (default: 100)\n * @param resetFn - Optional function to reset objects before reuse\n */\n constructor(createFn, maxSize = 100, resetFn) {\n this.pool = [];\n this.createFn = createFn;\n this.resetFn = resetFn;\n this.maxSize = maxSize;\n }\n /**\n * Acquires an object from the pool\n * \n * @returns Object from pool or newly created\n */\n acquire() {\n if (this.pool.length > 0) {\n const obj = this.pool.pop();\n if (this.resetFn) {\n this.resetFn(obj);\n }\n return obj;\n }\n return this.createFn();\n }\n /**\n * Releases an object back to the pool\n * \n * @param obj - Object to release\n */\n release(obj) {\n if (this.pool.length < this.maxSize) {\n this.pool.push(obj);\n }\n }\n /**\n * Clears the pool\n */\n clear() {\n this.pool.length = 0;\n }\n /**\n * Gets the current pool size\n * \n * @returns Number of objects in pool\n */\n size() {\n return this.pool.length;\n }\n}\nexport {\n ObjectPool\n};\n//# sourceMappingURL=index42.js.map\n","class PredictionController {\n constructor(config) {\n this.config = config;\n this.frameCounter = 0;\n this.history = [];\n this.pendingSnapshot = null;\n this.lastAckFrame = 0;\n this.lastAckTick = 0;\n this.correctionThreshold = config.correctionThreshold ?? 5;\n this.historyTtlMs = config.historyTtlMs ?? 1e4;\n this.maxHistoryEntries = config.maxHistoryEntries ?? 1200;\n }\n recordInput(direction, timestamp) {\n const frame = ++this.frameCounter;\n const tick = this.config.getPhysicsTick();\n this.history.push({ frame, tick, timestamp, direction });\n this.trimHistory(timestamp);\n return { frame, tick };\n }\n attachPredictedState(frame, state) {\n const entry = this.history.find((item) => item.frame === frame);\n if (entry) {\n entry.state = state;\n }\n }\n hasPendingInputs() {\n return this.history.length > 0;\n }\n getPendingInputs() {\n return [...this.history];\n }\n queueServerSnapshot(snapshot) {\n if (this.hasPendingInputs()) {\n this.pendingSnapshot = snapshot;\n return;\n }\n this.applySnapshot(snapshot);\n }\n tryApplyPendingSnapshot() {\n if (!this.pendingSnapshot || this.hasPendingInputs()) {\n return;\n }\n this.applySnapshot(this.pendingSnapshot);\n this.pendingSnapshot = null;\n }\n applyServerAck(ack) {\n if (typeof ack.frame !== \"number\") {\n const result2 = {\n acknowledgedFrame: this.lastAckFrame,\n acknowledgedTick: this.lastAckTick,\n pendingInputs: [...this.history],\n needsReconciliation: false\n };\n if (ack.state) {\n result2.state = ack.state;\n }\n return result2;\n }\n if (ack.frame < this.lastAckFrame) {\n const result2 = {\n acknowledgedFrame: this.lastAckFrame,\n acknowledgedTick: this.lastAckTick,\n pendingInputs: [...this.history],\n needsReconciliation: false\n };\n if (ack.state) {\n result2.state = ack.state;\n }\n return result2;\n }\n const nextAckFrame = Math.max(this.lastAckFrame, ack.frame);\n const nextAckTick = typeof ack.serverTick === \"number\" ? Math.max(this.lastAckTick, ack.serverTick) : this.lastAckTick;\n let needsReconciliation = false;\n if (ack.state) {\n const acknowledgedEntry = this.history.find(\n (entry) => entry.frame === nextAckFrame && !!entry.state\n );\n const comparisonState = acknowledgedEntry?.state ?? this.config.getCurrentState();\n const dx = comparisonState.x - ack.state.x;\n const dy = comparisonState.y - ack.state.y;\n const distance = Math.hypot(dx, dy);\n needsReconciliation = distance > this.correctionThreshold;\n }\n this.lastAckFrame = nextAckFrame;\n this.lastAckTick = nextAckTick;\n this.history = this.history.filter((entry) => entry.frame > this.lastAckFrame);\n if (!needsReconciliation && this.pendingSnapshot && !this.hasPendingInputs()) {\n this.applySnapshot(this.pendingSnapshot);\n this.pendingSnapshot = null;\n }\n const result = {\n acknowledgedFrame: this.lastAckFrame,\n acknowledgedTick: this.lastAckTick,\n pendingInputs: [...this.history],\n needsReconciliation\n };\n if (ack.state) {\n result.state = ack.state;\n }\n return result;\n }\n cleanup(now) {\n this.trimHistory(now);\n }\n trimHistory(now) {\n const cutoff = now - this.historyTtlMs;\n this.history = this.history.filter((entry) => entry.timestamp >= cutoff);\n if (this.history.length > this.maxHistoryEntries) {\n this.history = this.history.slice(-this.maxHistoryEntries);\n }\n }\n applySnapshot(snapshot) {\n const current = this.config.getCurrentState();\n const dx = current.x - snapshot.x;\n const dy = current.y - snapshot.y;\n const distance = Math.hypot(dx, dy);\n if (distance > this.correctionThreshold) {\n this.config.setAuthoritativeState(snapshot);\n this.history = [];\n return;\n }\n this.history = [];\n }\n}\nexport {\n PredictionController\n};\n//# sourceMappingURL=index44.js.map\n","class DeterministicInputBuffer {\n constructor() {\n this.queues = /* @__PURE__ */ new Map();\n }\n enqueue(playerId, input) {\n if (!this.queues.has(playerId)) {\n this.queues.set(playerId, /* @__PURE__ */ new Map());\n }\n const queue = this.queues.get(playerId);\n queue.set(input.frame, input);\n }\n consume(playerId) {\n const queue = this.queues.get(playerId);\n if (!queue || queue.size === 0) {\n return [];\n }\n const entries = Array.from(queue.values()).sort((a, b) => a.frame - b.frame);\n queue.clear();\n return entries;\n }\n pendingCount(playerId) {\n return this.queues.get(playerId)?.size ?? 0;\n }\n clear(playerId) {\n this.queues.delete(playerId);\n }\n clearAll() {\n this.queues.clear();\n }\n}\nexport {\n DeterministicInputBuffer\n};\n//# sourceMappingURL=index45.js.map\n","import {\n MovementManager as PhysicMovementManager,\n MovementStrategy,\n MovementOptions,\n PhysicsEngine,\n} from '@rpgjs/physic';\n\n/**\n * Thin proxy around the physics movement manager.\n *\n * Delegates every operation to the deterministic engine provided by `PhysicsEngine`\n * so strategies operate on the exact same entities as the physics simulation.\n */\nexport class MovementManager {\n constructor(private readonly physicProvider: () => PhysicsEngine) {}\n\n private get core(): PhysicMovementManager {\n return this.physicProvider().getMovementManager();\n }\n\n /**\n * Adds a movement strategy and returns a Promise that resolves when it completes.\n * \n * @param id - Entity identifier\n * @param strategy - Movement strategy to add\n * @param options - Optional callbacks for movement lifecycle events\n * @returns Promise that resolves when the movement completes\n */\n add(id: string, strategy: MovementStrategy, options?: MovementOptions): Promise<void> {\n return this.core.add(id, strategy, options);\n }\n\n remove(id: string, strategy: MovementStrategy): boolean {\n return this.core.remove(id, strategy);\n }\n\n clear(id: string): void {\n this.core.clear(id);\n }\n\n stopMovement(id: string): void {\n this.core.stopMovement(id);\n }\n\n hasActiveStrategies(id: string): boolean {\n return this.core.hasActiveStrategies(id);\n }\n\n getStrategies(id: string): MovementStrategy[] {\n return this.core.getStrategies(id);\n }\n\n update(dtMs: number): void {\n this.core.update(dtMs / 1000);\n }\n\n clearAll(): void {\n this.core.clearAll();\n }\n}\n\n","import { generateShortUUID, users } from \"@signe/sync\";\nimport { effect, Signal, signal } from \"@signe/reactive\";\nimport { Direction, RpgCommonPlayer } from \"../Player\";\nimport {\n PhysicsEngine,\n Vector2,\n Entity,\n EntityState,\n assignPolygonCollider,\n AABB,\n createCollider,\n} from \"@rpgjs/physic\";\nimport { combineLatest, Observable, share, Subject, Subscription } from \"rxjs\";\nimport { MovementManager } from \"../movement\";\nimport { WorldMapsManager, type RpgWorldMaps } from \"./WorldMaps\";\n\nexport type PhysicsEntityKind = \"hero\" | \"npc\" | \"generic\";\n\nexport interface MapPhysicsInitContext {\n mapData: any;\n}\n\nexport interface MapPhysicsEntityContext {\n owner: any;\n entity: Entity;\n kind: PhysicsEntityKind;\n}\n\ninterface ZoneOptions {\n x?: number;\n y?: number;\n radius: number;\n angle?: number;\n direction?: \"up\" | \"down\" | \"left\" | \"right\";\n linkedTo?: string;\n limitedByWalls?: boolean;\n}\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 PhysicsEngine({\n timeStep: 1 / 60,\n gravity: new Vector2(0, 0),\n enableSleep: false,\n });\n moveManager = new MovementManager(() => this.physic);\n\n private speedScalar = 50; // Default speed scalar for movement\n\n // World Maps properties\n tileWidth: number = 32;\n tileHeight: number = 32;\n worldMapsManager?: WorldMapsManager;\n\n // Synchronization throttling properties\n throttleSync?: number;\n throttleStorage?: number;\n sessionExpiryTime?: number;\n\n tickSubscription?: Subscription | null;\n playersSubscription?: Subscription | null;\n eventsSubscription?: Subscription | null;\n private physicsAccumulatorMs = 0;\n private physicsSyncDepth = 0;\n\n /**\n * Whether to automatically subscribe to tick$ for physics updates\n * Set to false in test environments for manual control with nextTick()\n */\n protected autoTickEnabled: boolean = true;\n\n get isStandalone() {\n return typeof window !== 'undefined'\n }\n \n\n /**\n * Get the width of the map in pixels\n * \n * @returns The width of the map in pixels, or 0 if not loaded\n * \n * @example\n * ```ts\n * const width = map.widthPx;\n * console.log(`Map width: ${width}px`);\n * ```\n */\n get widthPx(): number {\n return this.data()?.width ?? 0\n }\n\n /**\n * Get the height of the map in pixels\n * \n * @returns The height of the map in pixels, or 0 if not loaded\n * \n * @example\n * ```ts\n * const height = map.heightPx;\n * console.log(`Map height: ${height}px`);\n * ```\n */\n get heightPx(): number {\n return this.data()?.height ?? 0\n }\n\n /**\n * Get the unique identifier of the map\n * \n * @returns The map ID, or empty string if not loaded\n * \n * @example\n * ```ts\n * const mapId = map.id;\n * console.log(`Current map: ${mapId}`);\n * ```\n */\n get id(): string {\n return this.data()?.id ?? ''\n }\n\n /**\n * Get the X position of this map in the world coordinate system\n * \n * This is used when maps are part of a larger world map. The world position\n * indicates where this map is located relative to other maps.\n * \n * @returns The X position in world coordinates, or 0 if not in a world\n * \n * @example\n * ```ts\n * const worldX = map.worldX;\n * console.log(`Map is at world position (${worldX}, ${map.worldY})`);\n * ```\n */\n get worldX(): number {\n const worldMaps = this.getWorldMapsManager?.();\n if (!worldMaps) return 0;\n // Extract real map ID (remove \"map-\" prefix if present)\n const mapId = this.id.startsWith('map-') ? this.id.slice(4) : this.id;\n return worldMaps.getMapInfo(mapId)?.worldX ?? 0\n }\n \n /**\n * Get the Y position of this map in the world coordinate system\n * \n * This is used when maps are part of a larger world map. The world position\n * indicates where this map is located relative to other maps.\n * \n * @returns The Y position in world coordinates, or 0 if not in a world\n * \n * @example\n * ```ts\n * const worldY = map.worldY;\n * console.log(`Map is at world position (${map.worldX}, ${worldY})`);\n * ```\n */\n get worldY(): number {\n const worldMaps = this.getWorldMapsManager?.();\n if (!worldMaps) return 0;\n // Extract real map ID (remove \"map-\" prefix if present)\n const mapId = this.id.startsWith('map-') ? this.id.slice(4) : this.id;\n return worldMaps.getMapInfo(mapId)?.worldY ?? 0\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 * ## Physics Loop Architecture\n * \n * The physics simulation is centralized in this game loop:\n * \n * 1. **Input Processing** (`processInput`): Only updates entity velocities, does NOT step physics\n * 2. **Game Loop** (`tick$` -> `runFixedTicks`): Executes physics simulation with fixed timestep\n * 3. **Fixed Timestep Pattern**: Accumulator-based approach ensures deterministic physics\n * \n * ```\n * Input Events ─────────────────────────────────────────────────────────────►\n * │ \n * ▼ (update velocity only) \n * ┌─────────────────────────────────────────────────────────────────────────┐\n * │ Game Loop (tick$) │\n * │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │\n * │ │ updateMovements │ → │ stepOneTick │ → │ postTickUpdates │ │\n * │ │ (apply velocity)│ │ (physics step) │ │ (zones, sync) │ │\n * │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │\n * └─────────────────────────────────────────────────────────────────────────┘\n * ```\n * \n * @example\n * ```ts\n * // Subscribe to the game tick for custom updates\n * map.tick$.subscribe(({ delta, timestamp }) => {\n * // Custom game logic runs alongside physics\n * this.updateCustomEntities(delta);\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 /**\n * Clear all physics content and reset to initial state\n * \n * This method completely clears the physics system by:\n * - Removing all hitboxes (static and movable)\n * - Removing all zones\n * - Clearing all collision data and events\n * - Clearing all movement events and sliding data\n * - Unsubscribing from the tick subscription\n * - Resetting the physics engine to a clean state\n * \n * Use this method when you need to completely reset the map's physics\n * system, such as when changing maps or restarting a level.\n * \n * @example\n * ```ts\n * // Clear all physics when changing maps\n * map.clearPhysic();\n * \n * // Then reload physics for the new map\n * map.loadPhysic();\n * ```\n */\n clearPhysic() {\n // Unsubscribe from tick to stop physics updates\n if (this.tickSubscription) {\n this.tickSubscription.unsubscribe();\n this.tickSubscription = null;\n }\n\n if (this.playersSubscription) {\n this.playersSubscription.unsubscribe();\n this.playersSubscription = null;\n }\n\n if (this.eventsSubscription) {\n this.eventsSubscription.unsubscribe();\n this.eventsSubscription = null;\n }\n\n // Clear all hitboxes and zones from physics system\n this.clearAll();\n\n // Reset movement manager\n this.moveManager.clearAll();\n this.emitPhysicsReset();\n\n this.physicsAccumulatorMs = 0;\n }\n\n /**\n * Clear all physics entities and internal state\n * @private\n */\n private clearAll(): void {\n // Remove all entities from physics engine\n const entities = this.physic.getEntities();\n for (const entity of entities) {\n const owner = (entity as any).owner;\n if (owner) {\n this.emitPhysicsEntityRemove({\n owner,\n entity,\n kind: this.resolvePhysicsEntityKind(owner, entity.uuid),\n });\n }\n this.physic.removeEntity(entity);\n }\n\n // Clear movement manager and zone manager\n this.physic.getMovementManager().clearAll();\n this.physic.getZoneManager().clear();\n }\n\n loadPhysic() {\n this.clearPhysic();\n\n const mapData = this.data?.();\n const mapWidth = typeof mapData?.width === \"number\" ? mapData.width : 0;\n const mapHeight = typeof mapData?.height === \"number\" ? mapData.height : 0;\n const hitboxes: Array<\n | { id?: string; x: number; y: number; width: number; height: number }\n | { id?: string; points: number[][] }\n > = Array.isArray(mapData?.hitboxes) ? mapData.hitboxes : [];\n\n if (mapWidth > 0 && mapHeight > 0) {\n const gap = 100;\n this.addStaticHitbox('map-width-left', -gap, 0, gap, mapHeight);\n this.addStaticHitbox('map-width-right', mapWidth, 0, gap, mapHeight);\n this.addStaticHitbox('map-height-top', 0, -gap, mapWidth, gap);\n this.addStaticHitbox('map-height-bottom', 0, mapHeight, mapWidth, gap);\n }\n\n for (let staticHitbox of hitboxes) {\n if ('x' in staticHitbox) {\n this.addStaticHitbox(staticHitbox.id ?? generateShortUUID(), staticHitbox.x, staticHitbox.y, staticHitbox.width, staticHitbox.height);\n }\n else if ('points' in staticHitbox) {\n this.addStaticHitbox(staticHitbox.id ?? generateShortUUID(), staticHitbox.points);\n }\n }\n\n this.emitPhysicsInit({ mapData });\n\n this.playersSubscription = (this.players as any).observable.subscribe(\n ({ value: player, type, key }: any) => {\n if (type === \"remove\") {\n this.removeHitbox(key, player, \"hero\");\n return;\n }\n\n if (type == 'reset') {\n if (!player) return;\n for (let id in player) {\n const _player = player[id]\n _player.id = _player.id ?? id;\n this.createCharacterHitbox(_player, \"hero\");\n }\n return;\n }\n\n if (!player) return;\n if (type === \"add\") {\n player.id = key;\n this.createCharacterHitbox(player, \"hero\");\n } else if (type === \"update\") {\n player.id = player.id ?? key;\n if (!this.getBody(key)) {\n this.createCharacterHitbox(player, \"hero\");\n return;\n }\n if (this.isPhysicsSyncingSignals) {\n return;\n }\n this.updateCharacterHitbox(player);\n }\n },\n );\n\n this.eventsSubscription = this.events.observable.subscribe(({ value: event, type, key }) => {\n if (type === \"add\") {\n event.id = key;\n this.createCharacterHitbox(event, \"npc\", {\n mass: 100,\n });\n } else if (type === \"remove\") {\n // Clean up movement event subscriptions\n const eventObj = this.getObjectById(key);\n if (eventObj && typeof (eventObj as any)._movementUnsubscribe === 'function') {\n (eventObj as any)._movementUnsubscribe();\n }\n this.removeHitbox(key, event, \"npc\");\n } else if (type === \"update\") {\n event.id = event.id ?? key;\n if (!this.getBody(key)) {\n this.createCharacterHitbox(event, \"npc\", {\n mass: 100,\n });\n return;\n }\n this.updateCharacterHitbox(event);\n } else if (type === \"reset\") {\n for (const id in event) {\n const _event = event[id];\n if (!_event) continue;\n _event.id = _event.id ?? id;\n this.createCharacterHitbox(_event, \"npc\", {\n mass: 100,\n });\n }\n }\n });\n\n // Hydrate physics world with already-loaded scene objects.\n // This covers cases where sync state is present before subscriptions are attached.\n const players = this.players();\n for (const id in players) {\n const player = players[id];\n if (!player) continue;\n player.id = player.id ?? id;\n this.createCharacterHitbox(player, \"hero\");\n }\n\n const events = this.events();\n for (const id in events) {\n const event = events[id];\n if (!event) continue;\n event.id = event.id ?? id;\n this.createCharacterHitbox(event, \"npc\", {\n mass: 100,\n });\n }\n\n // S'abonner au ticker automatique seulement si autoTickEnabled est true\n if (this.autoTickEnabled) {\n this.tickSubscription = this.tick$.subscribe(({ delta }) => {\n this.runFixedTicks(delta);\n });\n }\n }\n\n async movePlayer(player: T, direction: Direction) {\n // Calculate next position before movement\n const currentX = player.x();\n const currentY = player.y();\n const speed = player.speed();\n\n let nextX = currentX;\n let nextY = currentY;\n \n switch (direction) {\n case Direction.Left:\n nextX = currentX - speed;\n break;\n case Direction.Right:\n nextX = currentX + speed;\n break;\n case Direction.Up:\n nextY = currentY - speed;\n break;\n case Direction.Down:\n nextY = currentY + speed;\n break;\n }\n\n player.changeDirection(direction);\n\n // Check for automatic map change if the method exists\n if (typeof (player as any).autoChangeMap === 'function' && !player.isEvent()) {\n const mapChanged = await (player as any).autoChangeMap({ x: nextX, y: nextY }, direction);\n if (mapChanged) {\n this.stopMovement(player);\n return\n }\n }\n \n this.moveBody(player, direction);\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.isEntityMoving(id);\n }\n\n getObjectById(id: string) {\n return this.players()[id] ?? this.events()[id];\n }\n\n /**\n * Execute physics simulation with fixed timestep\n * \n * This method runs the physics engine using a fixed timestep accumulator pattern.\n * It ensures deterministic physics regardless of frame rate by:\n * 1. Accumulating delta time\n * 2. Running fixed-size physics steps until the accumulator is depleted\n * 3. Calling `updateMovements()` before each step to apply velocity changes\n * 4. Running post-tick updates (zones, callbacks) after each step\n * \n * ## Architecture\n * \n * The physics loop is centralized here and called from `tick$` subscription.\n * Input processing (`processInput`) only updates entity velocities - it does NOT\n * step the physics. This ensures:\n * - Consistent physics timing (60fps fixed timestep)\n * - No double-stepping when inputs are processed\n * - Proper accumulator-based interpolation support\n * \n * @param deltaMs - Time elapsed since last call in milliseconds\n * @param hooks - Optional callbacks for before/after each physics step\n * @returns Number of physics ticks executed\n * \n * @example\n * ```ts\n * // Called automatically by tick$ subscription\n * this.tickSubscription = this.tick$.subscribe(({ delta }) => {\n * this.runFixedTicks(delta);\n * });\n * \n * // Or manually with hooks for debugging\n * this.runFixedTicks(16, {\n * beforeStep: () => console.log('Before physics step'),\n * afterStep: (tick) => console.log(`Physics tick ${tick} completed`)\n * });\n * ```\n */\n protected runFixedTicks(\n deltaMs: number,\n hooks?: {\n beforeStep?: () => void;\n afterStep?: (tick: number) => void;\n },\n ): number {\n if (!Number.isFinite(deltaMs) || deltaMs <= 0) {\n return 0;\n }\n\n const fixedStepMs = this.physic.getWorld().getTimeStep() * 1000;\n this.physicsAccumulatorMs += deltaMs;\n let executed = 0;\n\n while (this.physicsAccumulatorMs >= fixedStepMs) {\n this.physicsAccumulatorMs -= fixedStepMs;\n hooks?.beforeStep?.();\n \n // Update movements before physics step (applies velocity changes from inputs)\n this.physic.updateMovements();\n \n const tick = this.physic.stepOneTick();\n executed += 1;\n \n // Run post-tick updates (zones, position sync callbacks)\n this.runPostTickUpdates();\n \n hooks?.afterStep?.(tick);\n }\n\n return executed;\n }\n\n /**\n * Manually trigger a single game tick\n * \n * This method allows you to manually advance the game by one tick (16ms at 60fps).\n * It's primarily useful for testing where you need precise control over when\n * physics updates occur, rather than relying on the automatic tick$ subscription.\n * \n * ## Use Cases\n * \n * - **Testing**: Control exactly when physics steps occur in unit tests\n * - **Manual control**: Step through game state manually for debugging\n * - **Deterministic testing**: Ensure consistent timing in test scenarios\n * \n * ## Important\n * \n * This method should NOT be used in production code alongside the automatic `tick$`\n * subscription, as it will cause double-stepping. Use either:\n * - Automatic ticks (via `loadPhysic()` which subscribes to `tick$`)\n * - Manual ticks (via `nextTick()` without `loadPhysic()` subscription)\n * \n * @param deltaMs - Optional delta time in milliseconds (default: 16ms for 60fps)\n * @returns Number of physics ticks executed\n * \n * @example\n * ```ts\n * // In tests: manually advance game by one tick\n * map.nextTick(); // Advances by 16ms (one frame at 60fps)\n * \n * // With custom delta\n * map.nextTick(32); // Advances by 32ms (two frames at 60fps)\n * \n * // In a test loop\n * for (let i = 0; i < 60; i++) {\n * map.nextTick(); // Simulate 1 second of game time\n * }\n * ```\n */\n nextTick(deltaMs: number = 16): number {\n return this.runFixedTicks(deltaMs);\n }\n\n /**\n * Force a single physics tick outside of the normal game loop\n * \n * This method is primarily used for **client-side prediction** where the client\n * needs to immediately simulate physics in response to local input, rather than\n * waiting for the next game loop tick.\n * \n * ## Use Cases\n * \n * - **Client-side prediction**: Immediately simulate player movement for responsive feel\n * - **Testing**: Force a physics step in unit tests\n * - **Special effects**: Immediate physics response for specific game events\n * \n * ## Important\n * \n * This method should NOT be used on the server for normal input processing.\n * Server-side physics is handled by `runFixedTicks` in the main game loop to ensure\n * deterministic simulation.\n * \n * @param hooks - Optional callbacks for before/after the physics step\n * @returns The physics tick number\n * \n * @example\n * ```ts\n * // Client-side: immediately simulate predicted movement\n * class RpgClientMap extends RpgCommonMap {\n * stepPredictionTick(): void {\n * this.forceSingleTick();\n * }\n * }\n * ```\n */\n protected forceSingleTick(hooks?: { beforeStep?: () => void; afterStep?: (tick: number) => void }): number {\n hooks?.beforeStep?.();\n this.physic.updateMovements();\n const tick = this.physic.stepOneTick();\n this.runPostTickUpdates();\n hooks?.afterStep?.(tick);\n const fixedMs = this.physic.getWorld().getTimeStep() * 1000;\n this.physicsAccumulatorMs = Math.max(0, this.physicsAccumulatorMs - fixedMs);\n return tick;\n }\n\n private createCharacterHitbox(\n owner: any,\n kind: PhysicsEntityKind,\n options?: { isStatic?: boolean; mass?: number },\n ): void {\n if (!owner?.id) {\n return;\n }\n const existingEntity = this.physic.getEntityByUUID(owner.id);\n if (existingEntity) {\n // Rebind owner when the player instance is restored/replaced (e.g. map transfer).\n // Position sync callbacks read entity.owner at runtime.\n (existingEntity as any).owner = owner;\n this.updateCharacterHitbox(owner);\n return;\n }\n\n const hitbox = typeof owner.hitbox === \"function\" ? owner.hitbox() : owner.hitbox;\n const width = hitbox?.w ?? 32;\n const height = hitbox?.h ?? 32;\n const radius = Math.max(width, height) / 2;\n this.addCharacter({\n owner,\n radius,\n kind,\n maxSpeed: owner.speed(),\n collidesWithCharacters: !this.shouldDisableCharacterCollisions(owner),\n isStatic: options?.isStatic,\n mass: options?.mass,\n });\n const entity = this.getBody(owner.id);\n if (entity) {\n this.emitPhysicsEntityAdd({\n owner,\n entity,\n kind,\n });\n }\n }\n\n private updateCharacterHitbox(owner: any): void {\n if (!owner?.id) return;\n const entity = this.physic.getEntityByUUID(owner.id);\n if (!entity) return;\n\n // Rebind owner on every update to keep physics callbacks attached to the\n // current player instance after room/session transfers.\n (entity as any).owner = owner;\n\n const hitbox = typeof owner.hitbox === \"function\" ? owner.hitbox() : owner.hitbox;\n const width = hitbox?.w ?? 32;\n const height = hitbox?.h ?? 32;\n const topLeftX = this.resolveNumeric(owner.x);\n const topLeftY = this.resolveNumeric(owner.y);\n this.updateHitbox(owner.id, topLeftX, topLeftY, width, height);\n this.setCharacterCollisionEnabled(owner.id, !this.shouldDisableCharacterCollisions(owner));\n }\n\n private resolveNumeric(source: any, fallback = 0): number {\n if (typeof source === \"function\") {\n try {\n return Number(source()) ?? fallback;\n } catch {\n return fallback;\n }\n }\n if (typeof source === \"number\") {\n return source;\n }\n return fallback;\n }\n\n private shouldDisableCharacterCollisions(owner: any): boolean {\n if (typeof owner._through === \"function\") {\n try {\n return !!owner._through();\n } catch {\n return false;\n }\n }\n if (typeof owner.through === \"boolean\") {\n return owner.through;\n }\n return false;\n }\n\n private resolvePhysicsEntityKind(owner: any, id?: string): PhysicsEntityKind {\n if (typeof owner?.isEvent === \"function\") {\n try {\n if (owner.isEvent()) {\n return \"npc\";\n }\n } catch {\n // Ignore owner inspection errors and fallback below\n }\n }\n\n const ownerId = typeof owner?.id === \"string\" ? owner.id : id;\n if (ownerId && this.players()?.[ownerId]) {\n return \"hero\";\n }\n if (ownerId && this.events()?.[ownerId]) {\n return \"npc\";\n }\n return \"generic\";\n }\n\n protected emitPhysicsInit(_context: MapPhysicsInitContext): void {}\n\n protected emitPhysicsEntityAdd(_context: MapPhysicsEntityContext): void {}\n\n protected emitPhysicsEntityRemove(_context: MapPhysicsEntityContext): void {}\n\n protected emitPhysicsReset(): void {}\n\n protected withPhysicsSync<T>(run: () => T): T {\n this.physicsSyncDepth += 1;\n try {\n return run();\n } finally {\n this.physicsSyncDepth -= 1;\n }\n }\n\n protected get isPhysicsSyncingSignals(): boolean {\n return this.physicsSyncDepth > 0;\n }\n\n /**\n * Get the world maps manager\n * \n * @returns WorldMapsManager instance or null if not configured\n * \n * @example\n * ```ts\n * const worldMaps = map.getWorldMapsManager();\n * if (worldMaps) {\n * const adjacentMaps = worldMaps.getAdjacentMaps(currentMap, coordinates);\n * }\n * ```\n */\n getWorldMapsManager(): WorldMapsManager | null {\n return this.worldMapsManager ?? null;\n }\n\n /**\n * Get attached World\n * \n * Recover the world attached to this map (undefined if no world attached)\n * \n * @since 3.0.0-beta.8\n * @returns {RpgWorldMaps | undefined} The world maps manager instance if attached, otherwise undefined\n * \n * @example\n * ```ts\n * const world = map.getInWorldMaps();\n * if (world) {\n * console.log(world.getAllMaps());\n * }\n * ```\n */\n getInWorldMaps(): RpgWorldMaps | undefined {\n return this.worldMapsManager ?? undefined;\n }\n\n /**\n * Remove this map from the world\n * \n * Remove this map from the world\n * \n * @since 3.0.0-beta.8\n * @returns {boolean | undefined} True if removed, false if not found, undefined if no world attached\n * \n * @example\n * ```ts\n * const removed = map.removeFromWorldMaps();\n * ```\n */\n removeFromWorldMaps(): boolean | undefined {\n if (!this.worldMapsManager) return undefined;\n const id = (this as any).id as string | undefined;\n if (!id) return false;\n return this.worldMapsManager.removeMap(id);\n }\n\n /**\n * Assign the map to a world\n * \n * Assign the map to a world\n * \n * @since 3.0.0-beta.8\n * @param {RpgWorldMaps} worldMap world maps\n * @returns {void}\n * \n * @example\n * ```ts\n * const world = new WorldMapsManager();\n * world.configure([{ id: 'm1', worldX: 0, worldY: 0, width: 1024, height: 1024 }]);\n * map.setInWorldMaps(world);\n * ```\n */\n setInWorldMaps(worldMap: RpgWorldMaps): void {\n this.worldMapsManager = worldMap;\n }\n\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.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.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.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.getZone(zoneId);\n\n if (zone) {\n // Remove current zone and create new one at next position\n this.removeZone(zoneId);\n\n const newRadius = Math.max(nextHitbox.width, nextHitbox.height) / 2;\n this.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.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.removeZone(zoneId);\n };\n });\n }\n\n /**\n * Add a static hitbox to the physics world\n * @private\n */\n private addStaticHitbox(\n id: string,\n xOrPoints: number | number[][],\n y?: number,\n width?: number,\n height?: number,\n ): string {\n // Check if entity already exists\n if (this.physic.getEntityByUUID(id)) {\n throw new Error(`Hitbox with id ${id} already exists`);\n }\n\n let entity: Entity;\n let boxWidth: number;\n let boxHeight: number;\n\n if (Array.isArray(xOrPoints)) {\n const points = xOrPoints;\n if (points.length < 3) {\n throw new Error(`Polygon must have at least 3 points, got ${points.length}`);\n }\n\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n\n for (const point of points) {\n if (!Array.isArray(point) || point.length !== 2 || typeof point[0] !== \"number\" || typeof point[1] !== \"number\") {\n throw new Error(`Invalid point ${JSON.stringify(point)}. Expected [x, y].`);\n }\n minX = Math.min(minX, point[0]);\n maxX = Math.max(maxX, point[0]);\n minY = Math.min(minY, point[1]);\n maxY = Math.max(maxY, point[1]);\n }\n\n const centerX = (minX + maxX) / 2;\n const centerY = (minY + maxY) / 2;\n boxWidth = Math.max(maxX - minX, 1);\n boxHeight = Math.max(maxY - minY, 1);\n\n entity = this.physic.createEntity({\n uuid: id,\n position: { x: centerX, y: centerY },\n width: boxWidth,\n height: boxHeight,\n mass: Infinity,\n state: EntityState.Static,\n restitution: 0\n });\n entity.freeze();\n\n const localVertices = points.map((point) => {\n const [px, py] = point as [number, number];\n return new Vector2(px - centerX, py - centerY);\n });\n assignPolygonCollider(entity, { vertices: localVertices });\n } else {\n if (typeof y !== \"number\" || typeof width !== \"number\" || typeof height !== \"number\") {\n throw new Error(\"Rectangle hitbox requires x, y, width and height parameters\");\n }\n\n const centerX = xOrPoints + width / 2;\n const centerY = y + height / 2;\n boxWidth = Math.max(width, 1);\n boxHeight = Math.max(height, 1);\n\n entity = this.physic.createEntity({\n uuid: id,\n position: { x: centerX, y: centerY },\n width: boxWidth,\n height: boxHeight,\n mass: Infinity,\n state: EntityState.Static,\n restitution: 0\n });\n entity.freeze();\n }\n\n return id;\n }\n\n /**\n * Add a character to the physics world\n * @private\n */\n /**\n * Add a character entity to the physics world\n * \n * Creates a physics entity for a character (player or NPC) with proper position handling.\n * The owner's x/y signals represent **top-left** coordinates, while the physics entity\n * uses **center** coordinates internally.\n * \n * ## Position System\n * \n * - `owner.x()` / `owner.y()` → **top-left** corner of the character's hitbox\n * - `entity.position` → **center** of the physics collider\n * - Conversion: `center = topLeft + (size / 2)`\n * \n * @param options - Character configuration\n * @returns The character's unique ID\n * \n * @example\n * ```ts\n * // Player at top-left position (100, 100) with 32x32 hitbox\n * // Physics entity will be at center (116, 116)\n * this.addCharacter({\n * owner: player,\n * x: 116, // center X (ignored, uses owner.x())\n * y: 116, // center Y (ignored, uses owner.y())\n * kind: \"hero\"\n * });\n * ```\n * \n * @private\n */\n private addCharacter(options: {\n owner: any;\n radius?: number;\n kind?: PhysicsEntityKind;\n collidesWithCharacters?: boolean;\n maxSpeed?: number;\n isStatic?: boolean;\n friction?: number;\n mass?: number;\n }): string {\n if (!options || typeof options.owner?.id !== \"string\") {\n throw new Error(\"Character requires an owner object with a string id\");\n }\n\n const owner = options.owner;\n const id = owner.id;\n\n // Get hitbox dimensions - hitbox.w/h are the FULL dimensions, not radius\n const hitbox = typeof owner.hitbox === \"function\" ? owner.hitbox() : owner.hitbox;\n const width = hitbox?.w ?? 32;\n const height = hitbox?.h ?? 32;\n\n // Calculate radius from dimensions (use the larger dimension for circular collider)\n const radius = Math.max(width, height) / 2;\n\n // owner.x() and owner.y() are TOP-LEFT positions\n const topLeftX = owner.x();\n const topLeftY = owner.y();\n\n // Convert to CENTER for physics engine\n const centerX = topLeftX + width / 2;\n const centerY = topLeftY + height / 2;\n\n const isStatic = !!options.isStatic;\n\n const entity = this.physic.createEntity({\n uuid: id,\n position: { x: centerX, y: centerY },\n // Use radius for circular collision detection\n radius: Math.max(radius, 1),\n // Also store explicit width/height for consistent position conversions\n // This ensures getBodyPosition/setBodyPosition use the same dimensions\n width: width,\n height: height,\n mass: options.mass ?? (isStatic ? Infinity : 1),\n friction: options.friction ?? 0.4,\n linearDamping: isStatic ? 1 : 0.2,\n maxLinearVelocity: options.maxSpeed ? options.maxSpeed * this.speedScalar : 200,\n restitution: 0\n });\n\n if (isStatic) {\n entity.freeze();\n } else {\n entity.unfreeze();\n }\n\n // Store owner reference directly on entity for syncing positions\n (entity as any).owner = owner;\n\n entity.onDirectionChange(({ cardinalDirection }) => {\n // hack to prevent direction in client side\n if (!('$send' in this)) return;\n const owner = (entity as any).owner;\n if (!owner) return;\n if (cardinalDirection === 'idle') return;\n // Don't change direction if it's locked\n if (owner.directionFixed) return;\n owner.changeDirection(cardinalDirection as Direction);\n });\n\n entity.onMovementChange(({ isMoving, intensity }) => {\n // Prevent animation changes on client side (same as onDirectionChange)\n if (!('$send' in this)) return;\n \n // Get owner from entity (same pattern as onDirectionChange)\n const owner = (entity as any).owner;\n if (!owner) return;\n \n // Don't change animation if it's locked\n if (owner.animationFixed) return;\n \n // Only change animation if intensity is low (avoid animation flicker on micro-movements)\n // Intensity threshold: 10 pixels/second (adjust based on your game's needs)\n const LOW_INTENSITY_THRESHOLD = 10;\n \n // Try to use setAnimation method if available (preferred method)\n // Otherwise, try to access animationName signal directly\n const hasSetAnimation = typeof owner.setAnimation === 'function';\n const animationNameSignal = owner.animationName;\n const ownerHasAnimationName = animationNameSignal && typeof animationNameSignal === 'object' && typeof animationNameSignal.set === 'function';\n \n if (isMoving && intensity > LOW_INTENSITY_THRESHOLD) {\n if (hasSetAnimation) {\n owner.setGraphicAnimation(\"walk\");\n } else if (ownerHasAnimationName) {\n animationNameSignal.set(\"walk\");\n }\n } else if (!isMoving) {\n if (hasSetAnimation) {\n owner.setGraphicAnimation(\"stand\");\n } else if (ownerHasAnimationName) {\n animationNameSignal.set(\"stand\");\n }\n }\n // If moving with high intensity, keep current animation (e.g., already running)\n });\n\n // Register position sync handler to update owner.x and owner.y.\n // Read owner dynamically from entity to avoid stale references after map transfer.\n \n entity.onPositionChange(({ x, y }) => {\n const currentOwner = (entity as any).owner;\n if (!currentOwner) {\n return;\n }\n\n const entityWidth = entity.width || width;\n const entityHeight = entity.height || height;\n // Calculate top-left from center using the original hitbox dimensions\n // This ensures consistency: center = topLeft + (size / 2)\n // Therefore: topLeft = center - (size / 2)\n const topLeftX = x - entityWidth / 2;\n const topLeftY = y - entityHeight / 2;\n let changed = false;\n\n if (typeof currentOwner.x === \"function\" && typeof currentOwner.x.set === \"function\") {\n currentOwner.x.set(Math.round(topLeftX));\n changed = true;\n }\n if (typeof currentOwner.y === \"function\" && typeof currentOwner.y.set === \"function\") {\n currentOwner.y.set(Math.round(topLeftY));\n changed = true;\n }\n if (changed) {\n currentOwner.applyFrames?.();\n }\n });\n\n // Add resolution filter for through/throughOtherPlayer/throughEvent\n // This filter determines if collisions should be RESOLVED (blocking) or just DETECTED.\n // When returning false, entities pass through each other but collision events still fire.\n entity.addResolutionFilter((self, other) => {\n const selfOwner = (self as any).owner;\n const otherOwner = (other as any).owner;\n\n // If either entity has no owner, resolve collision (e.g., walls, obstacles must block)\n if (!selfOwner || !otherOwner) {\n return true;\n }\n\n \n if (selfOwner.z() !== otherOwner.z()) {\n return false; // Don't resolve collision\n }\n\n // Check if selfOwner has _through property (passes through everything)\n // This applies to both players and events\n if (typeof selfOwner._through === \"function\") {\n try {\n if (selfOwner._through() === true) {\n return false; // Pass through but events still fire\n }\n } catch {\n // Ignore errors\n }\n } else if (selfOwner.through === true) {\n return false;\n }\n\n // Determine the type of both entities via lookup in players/events\n const playersMap = this.players();\n const eventsMap = this.events();\n const isSelfPlayer = !!playersMap[self.uuid];\n const isOtherPlayer = !!playersMap[other.uuid];\n const isSelfEvent = !!eventsMap[self.uuid];\n const isOtherEvent = !!eventsMap[other.uuid];\n const readScenarioOwnerId = (owner: any): string | undefined => {\n const scenarioOwnerId = owner?._scenarioOwnerId ?? owner?.scenarioOwnerId;\n return typeof scenarioOwnerId === \"string\" && scenarioOwnerId.length > 0\n ? scenarioOwnerId\n : undefined;\n };\n const selfScenarioOwnerId = readScenarioOwnerId(selfOwner);\n const otherScenarioOwnerId = readScenarioOwnerId(otherOwner);\n\n // Scenario events are isolated per player:\n // they only collide with their owner and scenario events of the same owner.\n if (selfScenarioOwnerId) {\n if (isOtherPlayer && other.uuid !== selfScenarioOwnerId) {\n return false;\n }\n if (isOtherEvent && otherScenarioOwnerId !== selfScenarioOwnerId) {\n return false;\n }\n }\n if (otherScenarioOwnerId) {\n if (isSelfPlayer && self.uuid !== otherScenarioOwnerId) {\n return false;\n }\n if (isSelfEvent && selfScenarioOwnerId !== otherScenarioOwnerId) {\n return false;\n }\n }\n\n // throughOtherPlayer only applies when SELF is a player and OTHER is also a player\n // (players passing through other players)\n if (isSelfPlayer && isOtherPlayer) {\n if (typeof selfOwner._throughOtherPlayer === \"function\") {\n try {\n if (selfOwner._throughOtherPlayer() === true) {\n return false; // Pass through players but events still fire\n }\n } catch {\n // Ignore errors\n }\n } else if (selfOwner.throughOtherPlayer === true) {\n return false;\n }\n }\n\n // throughEvent only applies when SELF is a player and OTHER is an event\n // (players passing through events)\n if (isSelfPlayer && isOtherEvent) {\n if (typeof selfOwner._throughEvent === \"function\") {\n try {\n if (selfOwner._throughEvent() === true) {\n return false; // Pass through events but events still fire\n }\n } catch {\n // Ignore errors\n }\n } else if (selfOwner.throughEvent === true) {\n return false;\n }\n }\n\n return true; // Resolve collision (block movement)\n });\n\n return id;\n }\n\n /**\n * Update hitbox position and size\n * \n * @param id - Entity ID\n * @param x - Top-left X coordinate\n * @param y - Top-left Y coordinate\n * @param width - Optional width\n * @param height - Optional height\n * @returns True if hitbox was updated successfully\n */\n updateHitbox(id: string, x: number, y: number, width?: number, height?: number): boolean {\n const entity = this.physic.getEntityByUUID(id);\n if (!entity) return false;\n\n if (typeof width === \"number\" && typeof height === \"number\") {\n entity.width = Math.max(width, 1);\n entity.height = Math.max(height, 1);\n }\n\n // Calculate center from top-left\n const entityWidth = entity.width || entity.radius * 2 || 32;\n const entityHeight = entity.height || entity.radius * 2 || 32;\n const centerX = x + entityWidth / 2;\n const centerY = y + entityHeight / 2;\n entity.position.set(centerX, centerY);\n\n return true;\n }\n\n /**\n * Remove a hitbox from the physics world\n * @private\n */\n private removeHitbox(id: string, owner?: any, kind?: PhysicsEntityKind): boolean {\n const entity = this.physic.getEntityByUUID(id);\n if (!entity) {\n return false;\n }\n const resolvedOwner = owner ?? (entity as any).owner;\n if (resolvedOwner) {\n this.emitPhysicsEntityRemove({\n owner: resolvedOwner,\n entity,\n kind: kind ?? this.resolvePhysicsEntityKind(resolvedOwner, id),\n });\n }\n this.physic.removeEntity(entity);\n return true;\n }\n\n /**\n * Check if an entity is moving\n * @private\n */\n private isEntityMoving(id: string): boolean {\n const entity = this.physic.getEntityByUUID(id);\n if (!entity) return false;\n // Check if entity has velocity\n return entity.velocity.length() > 0.1;\n }\n\n /**\n * Move a body in a direction\n * @private\n */\n private moveBody(player: any, direction: Direction): boolean {\n const entity = this.physic.getEntityByUUID(player.id);\n if (!entity) return false;\n\n const speedValue = player.speed()\n\n let vx = 0, vy = 0;\n switch (direction) {\n case Direction.Left:\n vx = -speedValue * this.speedScalar;\n break;\n case Direction.Right:\n vx = speedValue * this.speedScalar;\n break;\n case Direction.Up:\n vy = -speedValue * this.speedScalar;\n break;\n case Direction.Down:\n vy = speedValue * this.speedScalar;\n break;\n }\n\n // Input sets the base velocity. Movement strategies (dash/knockback/AI, etc.)\n // are responsible for adding or overriding velocity when needed.\n entity.setVelocity({ x: vx, y: vy });\n entity.wakeUp();\n return true;\n }\n\n /**\n * Stop movement for a player\n * \n * Completely stops all movement for a player, including:\n * - Clearing all active movement strategies (dash, linear moves, etc.)\n * - Setting velocity to zero\n * - Resetting intended direction\n * \n * This method is particularly useful when changing maps to ensure\n * the player doesn't carry over movement from the previous map.\n * \n * @param player - The player to stop\n * @returns True if the player was found and movement was stopped\n * \n * @example\n * ```ts\n * // Stop player movement when changing maps\n * if (mapChanged) {\n * map.stopMovement(player);\n * }\n * \n * // Stop movement when player dies\n * if (player.isDead()) {\n * map.stopMovement(player);\n * }\n * ```\n * @protected\n */\n protected stopMovement(player: any): boolean {\n const entity = this.physic.getEntityByUUID(player.id);\n if (!entity) return false;\n\n // Stop all movement using the MovementManager (clears strategies and stops entity movement)\n this.moveManager.stopMovement(player.id);\n\n player.pendingInputs = [];\n \n return true;\n }\n\n /**\n * Set character collision enabled\n * @private\n */\n private setCharacterCollisionEnabled(id: string, collides: boolean): boolean {\n const entity = this.physic.getEntityByUUID(id);\n if (!entity) {\n return false;\n }\n // Collision filtering is handled by PhysicsEngine's collision system\n // This method is kept for API compatibility but doesn't need to do anything\n // as PhysicsEngine handles collisions automatically\n return true;\n }\n\n /**\n * Get collisions for an entity\n * \n * Returns all entities that are colliding with the specified entity.\n * Uses the entity's actual AABB bounds to detect collisions in all directions.\n * \n * @param id - Entity UUID to check collisions for\n * @returns Array of entity UUIDs that are colliding with the specified entity\n * \n * @example\n * ```ts\n * // Get all entities colliding with player\n * const collisions = map.getCollisions('player1');\n * collisions.forEach(id => {\n * console.log(`Entity ${id} is colliding with player`);\n * });\n * ```\n */\n protected getCollisions(id: string): string[] {\n const entity = this.physic.getEntityByUUID(id);\n if (!entity) return [];\n\n // Get the entity's actual collider and AABB bounds\n const collider = createCollider(entity);\n if (!collider) return [];\n\n const entityAABB = collider.getBounds();\n \n // Expand AABB slightly to ensure we catch nearby entities\n // This helps with edge cases where entities are just touching\n const expandedAABB = entityAABB.expand(1);\n\n // Query nearby entities using the expanded AABB\n const nearby = this.physic.queryAABB(expandedAABB);\n const collisions: string[] = [];\n\n // Check actual AABB intersections for each nearby entity\n for (const other of nearby) {\n if (other.uuid === id) continue;\n\n const otherCollider = createCollider(other);\n if (!otherCollider) continue;\n\n const otherAABB = otherCollider.getBounds();\n \n // Check if AABBs actually intersect\n if (entityAABB.intersects(otherAABB)) {\n collisions.push(other.uuid);\n }\n }\n\n return collisions;\n }\n\n /**\n * Get physics body (entity) for an id\n * @protected\n */\n public getBody(id: string): Entity | undefined {\n return this.physic.getEntityByUUID(id);\n }\n\n /**\n * Get the current physics tick\n * @returns Current tick number\n */\n getTick(): number {\n return this.physic.getTick();\n }\n\n /**\n * Get body position in different modes\n * \n * @param id - Entity ID\n * @param mode - Position mode: \"center\" or \"top-left\"\n * @returns Position coordinates or undefined if entity not found\n */\n getBodyPosition(\n id: string,\n mode: \"center\" | \"top-left\" = \"center\",\n ): { x: number; y: number } | undefined {\n const entity = this.physic.getEntityByUUID(id);\n if (!entity) return undefined;\n\n const centerX = entity.position.x;\n const centerY = entity.position.y;\n if (mode === \"center\") {\n return { x: centerX, y: centerY };\n }\n\n // Calculate top-left from center\n const width = entity.width || (entity.radius ? entity.radius * 2 : 32);\n const height = entity.height || (entity.radius ? entity.radius * 2 : 32);\n return {\n x: centerX - width / 2,\n y: centerY - height / 2,\n };\n }\n\n /**\n * Set body position\n * \n * @param id - Entity ID\n * @param x - X coordinate\n * @param y - Y coordinate\n * @param mode - Position mode: \"center\" or \"top-left\"\n * @returns True if position was set successfully\n */\n setBodyPosition(\n id: string,\n x: number,\n y: number,\n mode: \"center\" | \"top-left\" = \"center\",\n ): Entity | undefined {\n const entity = this.physic.getEntityByUUID(id);\n if (!entity) return;\n\n const width = entity.width || (entity.radius ? entity.radius * 2 : 32);\n const height = entity.height || (entity.radius ? entity.radius * 2 : 32);\n\n let centerX = x;\n let centerY = y;\n if (mode === \"top-left\") {\n centerX = x + width / 2;\n centerY = y + height / 2;\n }\n\n entity.position.set(centerX, centerY);\n entity.notifyPositionChange();\n \n return entity;\n }\n\n /**\n * Handle collision enter\n * @private\n */\n // Collision handling is now done directly via entity hooks in addCharacter\n // These methods are no longer needed as PhysicsEngine handles collisions internally\n\n /**\n * Add a zone\n * @private\n */\n private addZone(id: string, options: ZoneOptions): string {\n // Check if zone or entity already exists\n const zoneManager = this.physic.getZoneManager();\n if (this.physic.getEntityByUUID(id)) {\n throw new Error(`Zone with id ${id} already exists as entity`);\n }\n\n const radius = options.radius;\n if (typeof radius !== \"number\" || radius <= 0) {\n throw new Error(\"Zone radius must be a positive number\");\n }\n\n // If linkedTo is specified, get the entity\n let attachedEntity: Entity | undefined;\n if (options.linkedTo) {\n attachedEntity = this.physic.getEntityByUUID(options.linkedTo);\n if (!attachedEntity) {\n throw new Error(`Cannot link zone to unknown entity ${options.linkedTo}`);\n }\n }\n\n const callbacks: { onEnter?: (entities: Entity[]) => void; onExit?: (entities: Entity[]) => void } = {};\n\n // Store callbacks for later updates\n (callbacks as any)._onEnterString = undefined;\n (callbacks as any)._onExitString = undefined;\n\n const zoneId = attachedEntity\n ? zoneManager.createAttachedZone(attachedEntity, {\n radius,\n angle: options.angle ?? 360,\n direction: options.direction ?? 'down',\n limitedByWalls: options.limitedByWalls ?? false,\n }, callbacks)\n : zoneManager.createZone({\n position: { x: options.x ?? 0, y: options.y ?? 0 },\n radius,\n angle: options.angle ?? 360,\n direction: options.direction ?? 'down',\n limitedByWalls: options.limitedByWalls ?? false,\n }, callbacks);\n\n // Store zone ID mapping\n (this as any)._zoneIdMap = (this as any)._zoneIdMap || new Map();\n (this as any)._zoneIdMap.set(id, zoneId);\n\n return id;\n }\n\n /**\n * Remove a zone\n * @private\n */\n private removeZone(id: string): boolean {\n const zoneIdMap = (this as any)._zoneIdMap;\n if (!zoneIdMap) return false;\n\n const zoneId = zoneIdMap.get(id);\n if (!zoneId) return false;\n\n const zoneManager = this.physic.getZoneManager();\n zoneManager.removeZone(zoneId);\n zoneIdMap.delete(id);\n return true;\n }\n\n /**\n * Get a zone\n * @private\n */\n private getZone(id: string): any {\n const zoneIdMap = (this as any)._zoneIdMap;\n if (!zoneIdMap) return undefined;\n\n const zoneId = zoneIdMap.get(id);\n if (!zoneId) return undefined;\n\n const zoneManager = this.physic.getZoneManager();\n return zoneManager.getZone(zoneId);\n }\n\n /**\n * Register zone events\n * @private\n */\n private registerZoneEvents(\n id: string,\n onEnter?: (hitIds: string[]) => void,\n onExit?: (hitIds: string[]) => void,\n ): boolean {\n const zoneIdMap = (this as any)._zoneIdMap;\n if (!zoneIdMap) return false;\n\n const zoneId = zoneIdMap.get(id);\n if (!zoneId) return false;\n\n const zoneManager = this.physic.getZoneManager();\n\n // Use registerCallbacks to update callbacks\n const callbacks: { onEnter?: (entities: Entity[]) => void; onExit?: (entities: Entity[]) => void } = {};\n if (onEnter) {\n callbacks.onEnter = (entities: Entity[]) => {\n onEnter(entities.map(e => e.uuid));\n };\n }\n if (onExit) {\n callbacks.onExit = (entities: Entity[]) => {\n onExit(entities.map(e => e.uuid));\n };\n }\n\n return zoneManager.registerCallbacks(zoneId, callbacks);\n }\n\n /**\n * Run post-tick updates (update zones)\n * @private\n */\n private runPostTickUpdates(): void {\n // Position sync is now handled automatically by entity.onPositionChange hooks\n // Movement callbacks are also handled in the onPositionChange handler\n\n // Update zones\n const zoneManager = this.physic.getZoneManager();\n zoneManager.update();\n }\n}\n","import { Direction } from \"../Player\";\n\n/**\n * Interface for world map information\n */\nexport interface WorldMapInfo {\n id: string;\n x: number; // World X position \n y: number; // World Y position\n width: number; // Width in pixels\n height: number; // Height in pixels\n worldX: number; // World X coordinate (alias for x)\n worldY: number; // World Y coordinate (alias for y)\n widthPx: number; // Width in pixels (alias for width)\n heightPx: number; // Height in pixels (alias for height)\n tileWidth: number; // Tile width\n tileHeight: number; // Tile height\n}\n\n/**\n * Configuration for a world map\n */\nexport interface WorldMapConfig {\n id: string;\n worldX: number;\n worldY: number;\n width: number;\n height: number;\n tileWidth?: number;\n tileHeight?: number;\n}\n\n/**\n * World Maps Manager\n * \n * Manages a collection of interconnected maps and their spatial relationships\n */\nexport class WorldMapsManager {\n private maps: Map<string, WorldMapInfo> = new Map();\n private spatialIndex: Map<string, string> = new Map(); // \"x,y\" -> mapId\n\n /**\n * Configure the world maps\n * \n * @param configs - Array of map configurations\n * \n * @example\n * ```ts\n * const worldMaps = new WorldMapsManager();\n * worldMaps.configure([\n * { id: \"town\", worldX: 0, worldY: 0, width: 1024, height: 768 },\n * { id: \"forest\", worldX: 1024, worldY: 0, width: 1024, height: 768 }\n * ]);\n * ```\n */\n configure(configs: WorldMapConfig[]) {\n this.maps.clear();\n this.spatialIndex.clear();\n\n for (const config of configs) {\n const worldMap: WorldMapInfo = {\n id: config.id,\n x: config.worldX,\n y: config.worldY,\n width: config.width,\n height: config.height,\n worldX: config.worldX,\n worldY: config.worldY,\n widthPx: config.width,\n heightPx: config.height,\n tileWidth: config.tileWidth ?? 32,\n tileHeight: config.tileHeight ?? 32,\n };\n\n this.maps.set(config.id, worldMap);\n this.spatialIndex.set(`${config.worldX},${config.worldY}`, config.id);\n }\n }\n\n /**\n * Remove a map from the world by its id\n * \n * Deletes the map from the internal registry and spatial index.\n * \n * @param mapId - Map identifier\n * @returns True if a map was removed, false otherwise\n * \n * @example\n * ```ts\n * const removed = world.removeMap(\"forest\");\n * ```\n */\n removeMap(mapId: string): boolean {\n const map = this.maps.get(mapId);\n if (!map) return false;\n this.maps.delete(mapId);\n this.spatialIndex.delete(`${map.worldX},${map.worldY}`);\n return true;\n }\n\n /**\n * Find adjacent maps based on various search strategies\n * \n * Supports three search modes:\n * - PositionBox: collect maps intersecting the given box\n * - Direction: collect maps adjacent in the given direction\n * - Point: collect the map containing the given world point\n * \n * The given `map` can be any object exposing `worldX`, `worldY`, `width`, `height` properties\n * (e.g. your `RpgMap` instance or a `WorldMapInfo`).\n * \n * @param map - The source map\n * @param search - Search strategy (box, direction or point)\n * @returns Array of matching adjacent map infos\n * \n * @example\n * ```ts\n * // Point\n * world.getAdjacentMaps(currentMap, { x: 1024, y: 0 });\n * \n * // Direction\n * world.getAdjacentMaps(currentMap, Direction.Up);\n * \n * // Box\n * world.getAdjacentMaps(currentMap, { minX: 0, minY: 0, maxX: 2048, maxY: 1024 });\n * ```\n */\n getAdjacentMaps(\n map: { worldX: number; worldY: number; widthPx: number; heightPx: number },\n search:\n | { minX: number; minY: number; maxX: number; maxY: number }\n | { x: number; y: number }\n | number\n ): WorldMapInfo[] {\n const maps = Array.from(this.maps.values());\n\n // Direction lookup (number) --------------------------------------------\n if (typeof search === 'number') {\n const src = map;\n return maps.filter(m => {\n // Check if maps overlap or touch in the perpendicular direction\n // For vertical directions (Up/Down), we need horizontal overlap or touch\n // For horizontal directions (Left/Right), we need vertical overlap or touch\n const horizontallyOverlapsOrTouches =\n Math.max(src.worldX, m.worldX) <= Math.min(src.worldX + src.widthPx, m.worldX + m.widthPx);\n const verticallyOverlapsOrTouches =\n Math.max(src.worldY, m.worldY) <= Math.min(src.worldY + src.heightPx, m.worldY + m.heightPx);\n\n const marginLeftRight = src.tileWidth / 2\n const marginTopDown = src.tileHeight / 2\n \n switch (search) {\n case 0: // Up\n return verticallyOverlapsOrTouches && m.worldY + m.heightPx - marginTopDown === src.worldY;\n case 1: // Down\n return verticallyOverlapsOrTouches && m.worldY + marginTopDown === src.worldY + src.heightPx;\n case 2: // Left\n return horizontallyOverlapsOrTouches && m.worldX + m.widthPx - marginLeftRight === src.worldX;\n case 3: // Right\n return horizontallyOverlapsOrTouches && m.worldX + marginLeftRight === src.worldX + src.widthPx;\n default:\n return false;\n }\n });\n }\n\n // Point lookup ----------------------------------------------------------\n if ('x' in search && 'y' in search) {\n const found = maps.find(m =>\n search.x >= m.worldX && search.x < m.worldX + m.widthPx &&\n search.y >= m.worldY && search.y < m.worldY + m.heightPx\n );\n return found ? [found] : [];\n }\n\n // Box lookup ------------------------------------------------------------\n if ('minX' in search) {\n const { minX, minY, maxX, maxY } = search;\n return maps.filter(m => {\n const aLeft = m.worldX;\n const aRight = m.worldX + m.widthPx;\n const aTop = m.worldY;\n const aBottom = m.worldY + m.heightPx;\n const bLeft = minX;\n const bRight = maxX;\n const bTop = minY;\n const bBottom = maxY;\n const overlapX = aLeft < bRight && aRight > bLeft;\n const overlapY = aTop < bBottom && aBottom > bTop;\n return overlapX && overlapY;\n });\n }\n\n return [];\n }\n\n /**\n * Get map information by ID\n * \n * @param mapId - Map ID\n * @returns Map information or null if not found\n * \n * @example\n * ```ts\n * const mapInfo = worldMaps.getMapInfo(\"forest\");\n * ```\n */\n getMapInfo(mapId: string): WorldMapInfo | null {\n return this.maps.get(mapId) ?? null;\n }\n\n /**\n * Get all configured maps\n * \n * @returns Array of all world maps\n */\n getAllMaps(): WorldMapInfo[] {\n return Array.from(this.maps.values());\n }\n\n /**\n * Find map by world coordinates\n * \n * @param worldX - World X coordinate\n * @param worldY - World Y coordinate\n * @returns Map found or null\n */\n getMapByWorldCoordinates(worldX: number, worldY: number): WorldMapInfo | null {\n const mapId = this.spatialIndex.get(`${worldX},${worldY}`);\n return mapId ? this.maps.get(mapId) ?? null : null;\n }\n\n /**\n * Calculate absolute world position of a player\n * \n * @param map - Current map\n * @param localX - Local X position in the map\n * @param localY - Local Y position in the map\n * @returns Absolute coordinates in the world\n */\n getWorldPosition(map: WorldMapInfo, localX: number, localY: number): {x: number, y: number} {\n return {\n x: map.worldX + localX,\n y: map.worldY + localY\n };\n }\n\n /**\n * Calculate local position from world position\n * \n * @param worldX - World X position\n * @param worldY - World Y position\n * @param targetMap - Target map\n * @returns Local position in the target map\n */\n getLocalPosition(worldX: number, worldY: number, targetMap: WorldMapInfo): {x: number, y: number} {\n return {\n x: worldX - targetMap.worldX,\n y: worldY - targetMap.worldY\n };\n }\n}\n\n/**\n * Public alias for the world maps manager\n * \n * This alias is provided for API readability in map methods.\n */\nexport type RpgWorldMaps = WorldMapsManager;","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 enum Side {\n Server = 'server',\n Client = 'client'\n}\n\ntype ModuleSide = {\n client?: any,\n server?: any\n}\n\nexport type ModuleType = ModuleSide | [ModuleSide, {\n client?: any,\n server?: any\n}]\n\nexport function RpgModule<T>(options: T) {\n return (target) => {\n if ((options as any).hooks) {\n target.hooks = (options as any).hooks\n }\n for (let key in options) {\n target.prototype[key] = options[key]\n }\n }\n}\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\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].values.get('__default__'))\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\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 delay(cb: () => void, ms: number = 50): void {\n setTimeout(cb, ms);\n}\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 * PrebuiltGui.TitleScreen | rpg-title-screen\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 TitleScreen = 'rpg-title-screen'\n}\n","/**\n * Perlin Noise 2D Generator\n * \n * A simple, efficient, and performant implementation of 2D Perlin noise.\n * Perlin noise generates smooth, natural-looking random values that are coherent\n * across space, making it ideal for procedural generation and smooth random movements.\n * \n * ## Features\n * - **Deterministic**: Same seed and coordinates always produce the same value\n * - **Smooth**: Values change gradually, creating natural-looking patterns\n * - **Performant**: Optimized for real-time use in movement systems\n * - **Seeded**: Optional seed for reproducible results\n * \n * ## Usage\n * ```ts\n * const noise = new PerlinNoise2D();\n * const value = noise.get(x, y); // Returns value between -1 and 1\n * \n * // With seed for deterministic results\n * const seededNoise = new PerlinNoise2D(12345);\n * ```\n * \n * @example\n * ```ts\n * // Use in movement system for smooth random directions\n * const noise = new PerlinNoise2D();\n * const time = Date.now() * 0.001;\n * const direction = Math.floor(noise.get(player.x(), player.y(), time) * 4) % 4;\n * ```\n */\nexport class PerlinNoise2D {\n private readonly permutation: number[];\n private readonly p: number[];\n\n /**\n * Creates a new Perlin noise generator\n * \n * @param seed - Optional seed for deterministic noise generation. If not provided, uses a default seed.\n * \n * @example\n * ```ts\n * const noise = new PerlinNoise2D(12345);\n * const value = noise.get(10, 20);\n * ```\n */\n constructor(seed: number = 0) {\n // Create permutation table (256 values)\n this.permutation = this.generatePermutation(seed);\n \n // Double the permutation array for easier wrapping\n this.p = [...this.permutation, ...this.permutation];\n }\n\n /**\n * Generates a permutation table based on seed\n * \n * @param seed - Seed value for permutation generation\n * @returns Array of 256 shuffled values\n */\n private generatePermutation(seed: number): number[] {\n const p: number[] = [];\n \n // Initialize with sequential values\n for (let i = 0; i < 256; i++) {\n p[i] = i;\n }\n \n // Simple seeded shuffle using linear congruential generator\n let state = seed;\n const lcg = () => {\n state = (state * 1103515245 + 12345) & 0x7fffffff;\n return state;\n };\n \n // Fisher-Yates shuffle with seeded random\n for (let i = 255; i > 0; i--) {\n const j = lcg() % (i + 1);\n [p[i], p[j]] = [p[j], p[i]];\n }\n \n return p;\n }\n\n /**\n * Fade function for smooth interpolation (ease curve)\n * \n * @param t - Value between 0 and 1\n * @returns Smoothed value between 0 and 1\n */\n private fade(t: number): number {\n return t * t * t * (t * (t * 6 - 15) + 10);\n }\n\n /**\n * Linear interpolation\n * \n * @param a - Start value\n * @param b - End value\n * @param t - Interpolation factor (0 to 1)\n * @returns Interpolated value\n */\n private lerp(a: number, b: number, t: number): number {\n return a + t * (b - a);\n }\n\n /**\n * Gradient function - generates a pseudo-random gradient vector\n * \n * @param hash - Hash value from permutation table\n * @param x - X component\n * @param y - Y component\n * @returns Dot product of gradient and position\n */\n private grad(hash: number, x: number, y: number): number {\n // Convert hash to one of 4 gradient directions\n const h = hash & 3;\n \n // Return dot product with gradient vector\n switch (h) {\n case 0: return x + y; // (1, 1)\n case 1: return -x + y; // (-1, 1)\n case 2: return x - y; // (1, -1)\n case 3: return -x - y; // (-1, -1)\n default: return 0;\n }\n }\n\n /**\n * Gets the noise value at the specified 2D coordinates\n * \n * Returns a value between approximately -1 and 1, though values near the edges\n * are less common. For practical use, you may want to clamp or normalize the result.\n * \n * @param x - X coordinate\n * @param y - Y coordinate\n * @param scale - Optional scale factor (default: 0.1). Lower values create smoother, larger patterns.\n * @returns Noise value between approximately -1 and 1\n * \n * @example\n * ```ts\n * const noise = new PerlinNoise2D();\n * const value = noise.get(10, 20); // Basic usage\n * const scaled = noise.get(10, 20, 0.05); // Smoother pattern\n * ```\n */\n get(x: number, y: number, scale: number = 0.1): number {\n // Apply scale\n x *= scale;\n y *= scale;\n\n // Find unit grid cell containing point\n const X = Math.floor(x) & 255;\n const Y = Math.floor(y) & 255;\n\n // Get relative x,y coordinates within that cell\n x -= Math.floor(x);\n y -= Math.floor(y);\n\n // Compute fade curves for x and y\n const u = this.fade(x);\n const v = this.fade(y);\n\n // Hash coordinates of the 4 square corners\n const A = this.p[X] + Y;\n const AA = this.p[A];\n const AB = this.p[A + 1];\n const B = this.p[X + 1] + Y;\n const BA = this.p[B];\n const BB = this.p[B + 1];\n\n // And add blended results from 4 corners of the square\n return this.lerp(\n this.lerp(\n this.grad(this.p[AA], x, y),\n this.grad(this.p[BA], x - 1, y),\n u\n ),\n this.lerp(\n this.grad(this.p[AB], x, y - 1),\n this.grad(this.p[BB], x - 1, y - 1),\n u\n ),\n v\n );\n }\n\n /**\n * Gets a normalized noise value between 0 and 1\n * \n * Convenience method that normalizes the noise output to a 0-1 range.\n * \n * @param x - X coordinate\n * @param y - Y coordinate\n * @param scale - Optional scale factor (default: 0.1)\n * @returns Noise value between 0 and 1\n * \n * @example\n * ```ts\n * const noise = new PerlinNoise2D();\n * const normalized = noise.getNormalized(10, 20);\n * // Returns value between 0 and 1\n * ```\n */\n getNormalized(x: number, y: number, scale: number = 0.1): number {\n return (this.get(x, y, scale) + 1) * 0.5;\n }\n\n /**\n * Gets a noise value mapped to a specific range\n * \n * Maps the noise output to a custom min-max range.\n * \n * @param x - X coordinate\n * @param y - Y coordinate\n * @param min - Minimum output value\n * @param max - Maximum output value\n * @param scale - Optional scale factor (default: 0.1)\n * @returns Noise value between min and max\n * \n * @example\n * ```ts\n * const noise = new PerlinNoise2D();\n * const direction = noise.getRange(10, 20, 0, 3); // Returns 0, 1, 2, or 3\n * ```\n */\n getRange(x: number, y: number, min: number, max: number, scale: number = 0.1): number {\n const normalized = this.getNormalized(x, y, scale);\n return min + normalized * (max - min);\n }\n\n /**\n * Gets an integer noise value in a specific range (inclusive)\n * \n * Useful for selecting discrete values like array indices or enum values.\n * \n * @param x - X coordinate\n * @param y - Y coordinate\n * @param min - Minimum integer value (inclusive)\n * @param max - Maximum integer value (inclusive)\n * @param scale - Optional scale factor (default: 0.1)\n * @returns Integer noise value between min and max (inclusive)\n * \n * @example\n * ```ts\n * const noise = new PerlinNoise2D();\n * const directionIndex = noise.getInt(10, 20, 0, 3); // Returns 0, 1, 2, or 3\n * ```\n */\n getInt(x: number, y: number, min: number, max: number, scale: number = 0.1): number {\n const value = this.getRange(x, y, min, max + 1, scale);\n return Math.floor(value);\n }\n}\n\n/**\n * Creates a shared Perlin noise instance for global use\n * \n * Useful when you want consistent noise across different parts of your application\n * without passing the instance around.\n * \n * @param seed - Optional seed for the shared instance\n * @returns Shared PerlinNoise2D instance\n * \n * @example\n * ```ts\n * const noise = getSharedPerlinNoise(12345);\n * const value = noise.get(10, 20);\n * ```\n */\nlet sharedInstance: PerlinNoise2D | null = null;\n\nexport function getSharedPerlinNoise(seed?: number): PerlinNoise2D {\n if (!sharedInstance) {\n sharedInstance = new PerlinNoise2D(seed);\n }\n return sharedInstance;\n}\n\n/**\n * Resets the shared Perlin noise instance\n * \n * Useful for testing or when you need to change the seed.\n * \n * @param seed - Optional new seed for the instance\n * \n * @example\n * ```ts\n * resetSharedPerlinNoise(12345);\n * ```\n */\nexport function resetSharedPerlinNoise(seed?: number): void {\n sharedInstance = new PerlinNoise2D(seed);\n}\n\n","export const MAXHP: string = 'maxHp'\nexport const MAXSP: string = 'maxSp'\nexport const ATK: string = 'atk'\nexport const PDEF: string = 'pdef'\nexport const SDEF: string = 'sdef'\nexport const STR: string = 'str'\nexport const AGI: string = 'agi'\nexport const INT: string = 'int'\nexport const DEX: string = 'dex'"],"names":["isFunction","Symbol_observable","isPromise","Symbol_iterator","process","iterator","isArray","__defProp","__name","BehaviorSubject2","BehaviorSubject3","isClass","isObject","isSignal2","__decorateClass","Control","Direction","Animation","EPSILON","MovementManager","owner","topLeftX","topLeftY","Side","results","PrebuiltGui"],"mappings":"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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]}
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.8.3/node_modules/@signe/reactive/dist/index.js","../../../node_modules/.pnpm/@signe+sync@2.8.3/node_modules/@signe/sync/dist/chunk-7QVYU63E.js","../../../node_modules/.pnpm/@signe+sync@2.8.3/node_modules/@signe/sync/dist/index.js","../src/database/Item.ts","../src/database/Skill.ts","../src/Player.ts","../src/Shape.ts","../../physic/dist/index2.js","../../physic/dist/index3.js","../../physic/dist/index4.js","../../physic/dist/index5.js","../../physic/dist/index6.js","../../physic/dist/index43.js","../../physic/dist/index7.js","../../physic/dist/index8.js","../../physic/dist/index9.js","../../physic/dist/index10.js","../../physic/dist/index12.js","../../physic/dist/index11.js","../../physic/dist/index13.js","../../physic/dist/index19.js","../../physic/dist/index18.js","../../physic/dist/index14.js","../../physic/dist/index21.js","../../physic/dist/index20.js","../../physic/dist/index15.js","../../physic/dist/index16.js","../../physic/dist/index17.js","../../physic/dist/index22.js","../../physic/dist/index24.js","../../physic/dist/index23.js","../../physic/dist/index25.js","../../physic/dist/index26.js","../../physic/dist/index27.js","../../physic/dist/index31.js","../../physic/dist/index30.js","../../physic/dist/index29.js","../../physic/dist/index28.js","../../physic/dist/index32.js","../../physic/dist/index33.js","../../physic/dist/index34.js","../../physic/dist/index35.js","../../physic/dist/index36.js","../../physic/dist/index37.js","../../physic/dist/index38.js","../../physic/dist/index39.js","../../physic/dist/index40.js","../../physic/dist/index41.js","../../physic/dist/index42.js","../../physic/dist/index44.js","../../physic/dist/index45.js","../src/movement/MovementManager.ts","../src/rooms/Map.ts","../src/rooms/WorldMaps.ts","../src/modules.ts","../src/services/updateMap.ts","../src/Utils.ts","../src/PrebuiltGui.ts","../src/PerlinNoise.ts","../src/Presets.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, Observable } 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, options) {\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 const currentValue = getValue();\n let shouldEmit = true;\n if (options?.equal) {\n shouldEmit = !options.equal(currentValue, value);\n } else {\n shouldEmit = currentValue !== value;\n }\n if (shouldEmit) {\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 };\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 observables = [\n ...dependencies\n ].map((dep) => {\n if (isComputed(dep) && \"dependencies\" in dep) {\n const computedDep = dep;\n if (computedDep.dependencies.size === 0) {\n return new BehaviorSubject3(computedDep()).asObservable();\n }\n }\n return dep.observable;\n });\n const computedObservable = combineLatest(observables).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\");\nfunction linkedSignal(computationOrOptions, simpleOptions) {\n const dependencies = /* @__PURE__ */ new Set();\n let init = true;\n let lastComputedValue;\n let computeFunction;\n let sourceSignal;\n let computationFn;\n let equalFn;\n let previousValue;\n let isOverridden = false;\n let overriddenValue;\n let lastComputedBeforeOverride;\n let depVersion = 0;\n let overrideDepVersion = null;\n if (typeof computationOrOptions === \"function\") {\n computeFunction = computationOrOptions;\n equalFn = simpleOptions?.equal;\n } else {\n const options = computationOrOptions;\n sourceSignal = options.source;\n computationFn = options.computation;\n equalFn = options.equal;\n if (typeof sourceSignal === \"function\" && !isSignal(sourceSignal)) {\n const sourceFn = sourceSignal;\n computeFunction = /* @__PURE__ */ __name(() => {\n const sourceValue = sourceFn();\n if (computationFn.length > 1) {\n const result = computationFn(sourceValue, previousValue);\n previousValue = {\n source: sourceValue,\n value: result\n };\n return result;\n } else {\n const result = computationFn(sourceValue);\n previousValue = {\n source: sourceValue,\n value: result\n };\n return result;\n }\n }, \"computeFunction\");\n } else {\n const source = typeof sourceSignal === \"function\" ? sourceSignal : sourceSignal;\n computeFunction = /* @__PURE__ */ __name(() => {\n const sourceValue = source();\n if (computationFn.length > 1) {\n const result = computationFn(sourceValue, previousValue);\n previousValue = {\n source: sourceValue,\n value: result\n };\n return result;\n } else {\n const result = computationFn(sourceValue);\n previousValue = {\n source: sourceValue,\n value: result\n };\n return result;\n }\n }, \"computeFunction\");\n }\n }\n const previousTracker = reactiveStore.currentDependencyTracker;\n reactiveStore.currentDependencyTracker = (signal2) => {\n dependencies.add(signal2);\n };\n if (sourceSignal && typeof sourceSignal === \"function\" && !isSignal(sourceSignal)) {\n lastComputedValue = computeFunction();\n lastComputedBeforeOverride = lastComputedValue;\n } else if (sourceSignal && isSignal(sourceSignal)) {\n dependencies.add(sourceSignal);\n lastComputedValue = computeFunction();\n lastComputedBeforeOverride = lastComputedValue;\n } else {\n lastComputedValue = computeFunction();\n lastComputedBeforeOverride = lastComputedValue;\n }\n reactiveStore.currentDependencyTracker = previousTracker;\n const subject = new BehaviorSubject3(lastComputedValue);\n const observables = [\n ...dependencies\n ].map((dep) => {\n if (isComputed(dep) && \"dependencies\" in dep) {\n const computedDep = dep;\n if (computedDep.dependencies.size === 0) {\n return new BehaviorSubject3(computedDep()).asObservable();\n }\n }\n return dep.observable;\n });\n let linkedObservable;\n if (observables.length > 0) {\n linkedObservable = combineLatest(observables).pipe(filter(() => !init), map(() => {\n const computed2 = computeFunction();\n if (equalFn) {\n if (!equalFn(lastComputedValue, computed2)) {\n lastComputedValue = computed2;\n isOverridden = false;\n }\n } else {\n if (lastComputedValue !== computed2) {\n lastComputedValue = computed2;\n isOverridden = false;\n }\n }\n return lastComputedValue;\n }));\n } else {\n linkedObservable = subject.asObservable().pipe(filter(() => !init));\n }\n const fn = /* @__PURE__ */ __name(function() {\n trackDependency(fn);\n if (isOverridden && dependencies.size > 0) {\n if (overrideDepVersion !== depVersion) {\n const computed2 = computeFunction();\n isOverridden = false;\n overriddenValue = void 0;\n lastComputedValue = computed2;\n lastComputedBeforeOverride = computed2;\n overrideDepVersion = null;\n return computed2;\n }\n return overriddenValue;\n }\n if (isOverridden) {\n return overriddenValue;\n }\n if (dependencies.size === 0) {\n const computed2 = computeFunction();\n lastComputedValue = computed2;\n lastComputedBeforeOverride = computed2;\n }\n return lastComputedValue;\n }, \"fn\");\n fn.observable = new Observable((observer) => {\n const depSubscription = linkedObservable.subscribe((value) => {\n if (dependencies.size > 0) {\n depVersion++;\n isOverridden = false;\n overrideDepVersion = null;\n lastComputedValue = value;\n lastComputedBeforeOverride = value;\n } else {\n lastComputedValue = value;\n lastComputedBeforeOverride = value;\n }\n observer.next(value);\n });\n let subjectSubscription;\n if (dependencies.size === 0) {\n subjectSubscription = subject.pipe(filter(() => !init)).subscribe((value) => {\n observer.next(value);\n });\n }\n observer.next(lastComputedValue);\n return () => {\n depSubscription.unsubscribe();\n if (subjectSubscription) {\n subjectSubscription.unsubscribe();\n }\n };\n });\n fn.subscription = fn.observable.subscribe(() => {\n });\n fn.dependencies = dependencies;\n fn._subject = subject;\n fn.set = (value) => {\n if (!isOverridden) {\n lastComputedBeforeOverride = lastComputedValue;\n overrideDepVersion = depVersion;\n if (computationFn && sourceSignal) {\n const sourceValue = untracked(() => {\n if (typeof sourceSignal === \"function\") {\n const source = sourceSignal;\n return isSignal(source) ? source() : sourceSignal();\n }\n return sourceSignal();\n });\n previousValue = {\n source: sourceValue,\n value\n };\n }\n }\n isOverridden = true;\n overriddenValue = value;\n lastComputedValue = value;\n subject.next(value);\n };\n reactiveStore.currentSubscriptionsTracker?.(fn.subscription);\n init = false;\n return fn;\n}\n__name(linkedSignal, \"linkedSignal\");\nfunction untracked(fn) {\n const prevDepTracker = reactiveStore.currentDependencyTracker;\n const prevSubTracker = reactiveStore.currentSubscriptionsTracker;\n reactiveStore.currentDependencyTracker = null;\n reactiveStore.currentSubscriptionsTracker = null;\n try {\n return fn();\n } finally {\n reactiveStore.currentDependencyTracker = prevDepTracker;\n reactiveStore.currentSubscriptionsTracker = prevSubTracker;\n }\n}\n__name(untracked, \"untracked\");\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 linkedSignal,\n signal,\n untracked\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\");\nvar SNAPSHOT_SKIP = Symbol(\"snapshot-skip\");\nvar serializeSnapshotDeep = /* @__PURE__ */ __name((value, path, options, seen) => {\n if (isSignal(value)) {\n return serializeSnapshotDeep(value(), path, options, seen);\n }\n if (value instanceof Map) {\n return SNAPSHOT_SKIP;\n }\n if (options.filter && !options.filter(value, path)) {\n return SNAPSHOT_SKIP;\n }\n if (value instanceof Date) {\n return options.dateToString ? options.dateToString(value) : value.toISOString();\n }\n if (value && typeof value === \"object\") {\n if (seen.has(value)) {\n return SNAPSHOT_SKIP;\n }\n seen.add(value);\n if (Array.isArray(value)) {\n const result2 = [];\n value.forEach((item, index) => {\n const itemPath = path ? `${path}.${index}` : String(index);\n const serialized = serializeSnapshotDeep(item, itemPath, options, seen);\n if (serialized !== SNAPSHOT_SKIP) {\n result2.push(serialized);\n }\n });\n return result2;\n }\n const result = {};\n const idKey = isInstanceOfClass(value) ? value.constructor?._propertyMetadata?.get(\"id\") : void 0;\n const entries = Object.entries(value).filter(([key]) => isInstanceOfClass(value) ? key.startsWith(\"__\") || (idKey ? key === idKey : false) : true);\n for (const [key, childValue] of entries) {\n const normalizedKey = key.startsWith(\"__\") ? key.slice(2) : key;\n const childPath = path ? `${path}.${normalizedKey}` : normalizedKey;\n const serialized = serializeSnapshotDeep(childValue, childPath, options, seen);\n if (serialized !== SNAPSHOT_SKIP) {\n result[normalizedKey] = serialized;\n }\n }\n return result;\n }\n return value;\n}, \"serializeSnapshotDeep\");\nfunction createStatesSnapshotDeep(instance, options = {}) {\n const 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 if (!persist2) {\n continue;\n }\n const value = signal();\n const serialized = serializeSnapshotDeep(value, key, options, /* @__PURE__ */ new WeakSet());\n if (serialized !== SNAPSHOT_SKIP) {\n persistObject[key] = serialized;\n }\n }\n }\n return persistObject;\n}\n__name(createStatesSnapshotDeep, \"createStatesSnapshotDeep\");\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 const transform = signal.options?.transform;\n let signalValue = signal();\n if (transform) {\n signalValue = transform(signalValue);\n }\n if (isObject(signalValue) || Array.isArray(signalValue)) {\n signalValue = {\n ...signalValue\n };\n }\n const transformedValue = signalValue;\n const newPath = (path ? path + \".\" : \"\") + key;\n if (syncToClient) {\n currentClass.$valuesChanges.set(newPath, transformedValue);\n }\n if (persist2) {\n if (parentClass) currentClass.$valuesChanges.setPersist(path, transformedValue);\n }\n if (isComputed(signal)) {\n signal.observable.subscribe((newValue) => {\n if (syncToClient) {\n const transformedNewValue = transform ? transform(newValue) : newValue;\n currentClass.$valuesChanges.set(newPath, transformedNewValue);\n }\n });\n }\n }\n }\n}, \"createSyncClass\");\nvar type = /* @__PURE__ */ __name((_signal, path, options = {}, currentInstance) => {\n const { syncToClient = true, persist: persist2 = true, transform } = 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 const transformedValue = transform && value !== DELETE_TOKEN ? transform(value) : value;\n if (syncToClient) {\n currentInstance.$valuesChanges.set(propPath, transformedValue);\n }\n if (persist2 && currentInstance.$path !== void 0) {\n currentInstance.$valuesChanges.setPersist(transformedValue == DELETE_TOKEN ? propPath : currentInstance.$path, transformedValue);\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 const transformedInitialValue = transform ? transform(initialValue) : initialValue;\n currentInstance.$valuesChanges.set(signalPath, transformedInitialValue);\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 let transform;\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 if (options.hasOwnProperty(\"transform\")) {\n transform = options.transform;\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 transform\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 if (isSignal2(current) && Array.isArray(current()) && !isNaN(Number(part))) {\n current()[Number(part)] = 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 createStatesSnapshotDeep,\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\ninterface ItemData {\n name: string;\n description: string;\n price: number;\n quantity: number;\n atk: number;\n pdef: number;\n sdef: number;\n icon: string\n onAdd: (player: RpgCommonPlayer) => void;\n}\n\nexport class Item {\n @id() id = signal('');\n @sync() name = signal('');\n description = signal('');\n price = signal(0);\n atk = signal(0);\n pdef = signal(0);\n sdef = signal(0);\n @sync() icon = signal('')\n @sync() quantity = signal(1);\n\n onAdd: (player: RpgCommonPlayer) => void = () => {};\n\n constructor(data?: ItemData) {\n this.description.set(data?.description ?? '');\n this.price.set(data?.price ?? 0);\n this.name.set(data?.name ?? '');\n this.atk.set(data?.atk ?? 0);\n this.pdef.set(data?.pdef ?? 0);\n this.sdef.set(data?.sdef ?? 0);\n this.icon.set(data?.icon ?? '')\n this.onAdd = data?.onAdd?.bind(this) ?? (() => {});\n }\n}\n","import { signal } from \"@signe/reactive\";\nimport { id, sync } from \"@signe/sync\";\n\nexport interface SkillData {\n id: string;\n name: string;\n description: string;\n spCost: number;\n hitRate: number;\n power: number;\n coefficient: Record<string, number>;\n icon: string\n}\n\nexport class Skill {\n @id() id = signal('');\n @sync() name = signal('');\n description = signal('');\n @sync() spCost = signal(0);\n @sync() icon = signal('')\n hitRate = signal(0);\n power = signal(0);\n coefficient = signal({});\n\n constructor(data?: SkillData) {\n this.id.set(data?.id ?? '');\n this.name.set(data?.name ?? '');\n this.description.set(data?.description ?? '');\n this.spCost.set(data?.spCost ?? 0);\n this.hitRate.set(data?.hitRate ?? 0);\n this.power.set(data?.power ?? 0);\n this.coefficient.set(data?.coefficient ?? {});\n this.icon.set(data?.icon ?? '')\n }\n}","import { signal } from \"@signe/reactive\";\nimport { connected, id, persist, sync, users } from \"@signe/sync\";\nimport { Item, Skill } from \"./database\";\nimport { Constructor } from \"./Utils\";\n\nexport enum Control {\n Action = 'action',\n Attack = 'attack',\n Defense = 'defense',\n Skill = 'skill',\n Back = 'back',\n Up = 1,\n Down = 3,\n Right = 2,\n Left = 4\n}\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 abstract class RpgCommonPlayer {\n @id() id: string;\n @sync() name = signal(\"\");\n @sync() type = signal(\"\");\n // x and y must be @sync() to ensure initial positions are sent to client\n // The positions represent TOP-LEFT coordinates of the character's hitbox\n // @persist() only persists server-side but doesn't sync to client\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({\n persist: false\n }) 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() hpSignal = signal(0);\n @sync() spSignal = signal(0);\n @sync() _exp = signal(0);\n @sync() _level = signal(1);\n @sync() _class = signal({});\n @sync(Item) items = signal<Item[]>([]);\n @sync() equipments = signal<any[]>([]);\n @sync() states = signal<any[]>([]);\n @sync(Skill) skills = signal<Skill[]>([]);\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 @sync() _frames = signal<{ x: number; y: number; ts: number }[]>([]);\n @sync() componentsTop = signal<string | null>(null);\n @sync() componentsBottom = signal<string | null>(null);\n @sync() componentsCenter = signal<string | null>(null);\n @sync() componentsLeft = signal<string | null>(null);\n @sync() componentsRight = signal<string | null>(null);\n @connected() isConnected = signal(false)\n\n // Store intended movement direction (not synced, only used locally)\n private _intendedDirection: Direction | null = null;\n\n // Direction and animation locking (server-side only, not synced)\n private _directionFixed = signal(false);\n private _animationFixed = signal(false);\n\n /**\n * Get whether direction changes are locked\n * \n * @returns True if direction is locked and cannot be changed automatically\n * \n * @example\n * ```ts\n * if (player.directionFixed) {\n * // Direction is locked, won't change automatically\n * }\n * ```\n */\n get directionFixed(): boolean {\n return this._directionFixed();\n }\n\n /**\n * Set whether direction changes are locked\n * \n * When set to true, the player's direction will not change automatically\n * during movement or from physics engine callbacks.\n * \n * @param value - True to lock direction, false to allow automatic changes\n * \n * @example\n * ```ts\n * // Lock direction during a special animation\n * player.directionFixed = true;\n * player.setAnimation('attack');\n * // ... later\n * player.directionFixed = false;\n * ```\n */\n set directionFixed(value: boolean) {\n this._directionFixed.set(value);\n }\n\n /**\n * Get whether animation changes are locked\n * \n * @returns True if animation is locked and cannot be changed automatically\n * \n * @example\n * ```ts\n * if (player.animationFixed) {\n * // Animation is locked, won't change automatically\n * }\n * ```\n */\n get animationFixed(): boolean {\n return this._animationFixed();\n }\n\n /**\n * Set whether animation changes are locked\n * \n * When set to true, the player's animation will not change automatically\n * during movement or from physics engine callbacks.\n * \n * @param value - True to lock animation, false to allow automatic changes\n * \n * @example\n * ```ts\n * // Lock animation during a special skill\n * player.animationFixed = true;\n * player.setAnimation('skill');\n * // ... later\n * player.animationFixed = false;\n * ```\n */\n set animationFixed(value: boolean) {\n this._animationFixed.set(value);\n }\n\n pendingInputs: any[] = [];\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 * If `directionFixed` is true, this method will not change the direction.\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 * // Lock direction to prevent automatic changes\n * player.directionFixed = true;\n * player.changeDirection(Direction.Up); // This will be ignored\n * ```\n */\n changeDirection(direction: Direction) {\n // Don't change direction if it's locked\n if (this._directionFixed()) {\n return;\n }\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 abstract isEvent(): boolean;\n}\n\nexport type PlayerCtor<T extends RpgCommonPlayer = RpgCommonPlayer> = Constructor<T>","import { RpgCommonPlayer } from \"./Player\";\n\n/**\n * Shape positioning relative to the player\n */\nexport type ShapePositioning = \"center\" | \"top\" | \"bottom\" | \"left\" | \"right\" | \"default\";\n\n/**\n * Represents a zone shape attached to a player or event\n * \n * Shapes are used for detection zones, vision cones, and area-of-effect abilities.\n * They are backed by the physic engine's zone system for accurate detection.\n * \n * @example\n * ```ts\n * // Create a shape attached to a player\n * const visionShape = player.attachShape(\"vision\", {\n * radius: 150,\n * angle: 120,\n * direction: Direction.Right,\n * name: \"Vision Zone\",\n * properties: { type: \"detection\" }\n * });\n * \n * // Check if a player is in the shape\n * if (visionShape.playerIsIn(otherPlayer)) {\n * console.log(\"Player detected!\");\n * }\n * \n * // Get the owner of the shape\n * const owner = visionShape.getPlayerOwner();\n * ```\n */\nexport class RpgShape {\n /** Name of the shape */\n public name: string;\n \n /** Positioning relative to the player */\n public positioning: ShapePositioning;\n \n /** Width of the shape in pixels */\n public width: number;\n \n /** Height of the shape in pixels */\n public height: number;\n \n /** X position of the shape center */\n public x: number;\n \n /** Y position of the shape center */\n public y: number;\n \n /** Custom properties attached to the shape */\n public properties: object;\n \n /** Internal: Player that owns this shape */\n private _playerOwner?: RpgCommonPlayer;\n \n /** Internal: Zone ID in the physic engine */\n private _physicZoneId: string;\n \n /** Internal: Map reference for zone queries */\n private _map: any;\n \n /**\n * Creates a new RpgShape instance\n * \n * @param config - Shape configuration\n */\n constructor(config: {\n name: string;\n positioning: ShapePositioning;\n width: number;\n height: number;\n x: number;\n y: number;\n properties: object;\n playerOwner?: RpgCommonPlayer;\n physicZoneId: string;\n map: any;\n }) {\n this.name = config.name;\n this.positioning = config.positioning;\n this.width = config.width;\n this.height = config.height;\n this.x = config.x;\n this.y = config.y;\n this.properties = config.properties;\n this._playerOwner = config.playerOwner;\n this._physicZoneId = config.physicZoneId;\n this._map = config.map;\n }\n \n /**\n * Checks if a player is currently inside this shape\n * \n * @param player - The player to check\n * @returns True if the player is inside the shape\n * \n * @example\n * ```ts\n * const shape = player.attachShape(\"detection\", { radius: 100 });\n * if (shape.playerIsIn(otherPlayer)) {\n * console.log(\"Player detected in zone\");\n * }\n * ```\n */\n playerIsIn(player: RpgCommonPlayer): boolean {\n if (!this._map) return false;\n \n const zoneManager = this._map.physic.getZoneManager();\n const entities = zoneManager.getEntitiesInZone(this._physicZoneId);\n \n if (!entities || entities.length === 0) return false;\n \n const playerEntity = this._map.physic.getEntityByUUID(player.id);\n if (!playerEntity) return false;\n \n return entities.some(entity => entity.uuid === playerEntity.uuid);\n }\n \n /**\n * Gets the player that owns this shape\n * \n * Returns the player on which `attachShape()` was called to create this shape.\n * \n * @returns The player owner or undefined if not available\n * \n * @example\n * ```ts\n * const shape = player.attachShape(\"vision\", { radius: 150 });\n * const owner = shape.getPlayerOwner();\n * console.log(owner?.name); // Player's name\n * ```\n */\n getPlayerOwner(): RpgCommonPlayer | undefined {\n return this._playerOwner;\n }\n \n /**\n * Updates the shape's position\n * \n * @internal\n */\n public _updatePosition(x: number, y: number): void {\n this.x = x;\n this.y = y;\n }\n}\n","const _Vector2 = class _Vector2 {\n /**\n * Creates a new Vector2\n * \n * @param x - X component (default: 0)\n * @param y - Y component (default: 0)\n */\n constructor(x = 0, y = 0) {\n this.x = x;\n this.y = y;\n }\n /**\n * Creates a copy of this vector\n * \n * @returns A new Vector2 with the same values\n */\n clone() {\n return new _Vector2(this.x, this.y);\n }\n /**\n * Sets the components of this vector\n * \n * @param x - X component\n * @param y - Y component\n * @returns This vector for chaining\n */\n set(x, y) {\n this.x = x;\n this.y = y;\n return this;\n }\n /**\n * Copies values from another vector\n * \n * @param other - Vector to copy from\n * @returns This vector for chaining\n */\n copyFrom(other) {\n this.x = other.x;\n this.y = other.y;\n return this;\n }\n /**\n * Adds another vector to this vector (immutable)\n * \n * @param other - Vector to add\n * @returns New vector with the result\n */\n add(other) {\n return new _Vector2(this.x + other.x, this.y + other.y);\n }\n /**\n * Adds another vector to this vector (in-place)\n * \n * @param other - Vector to add\n * @returns This vector for chaining\n */\n addInPlace(other) {\n this.x += other.x;\n this.y += other.y;\n return this;\n }\n /**\n * Subtracts another vector from this vector (immutable)\n * \n * @param other - Vector to subtract\n * @returns New vector with the result\n */\n sub(other) {\n return new _Vector2(this.x - other.x, this.y - other.y);\n }\n /**\n * Subtracts another vector from this vector (in-place)\n * \n * @param other - Vector to subtract\n * @returns This vector for chaining\n */\n subInPlace(other) {\n this.x -= other.x;\n this.y -= other.y;\n return this;\n }\n /**\n * Multiplies this vector by a scalar (immutable)\n * \n * @param scalar - Scalar value\n * @returns New vector with the result\n */\n mul(scalar) {\n return new _Vector2(this.x * scalar, this.y * scalar);\n }\n /**\n * Multiplies this vector by a scalar (in-place)\n * \n * @param scalar - Scalar value\n * @returns This vector for chaining\n */\n mulInPlace(scalar) {\n this.x *= scalar;\n this.y *= scalar;\n return this;\n }\n /**\n * Divides this vector by a scalar (immutable)\n * \n * @param scalar - Scalar value (must not be zero)\n * @returns New vector with the result\n */\n div(scalar) {\n return new _Vector2(this.x / scalar, this.y / scalar);\n }\n /**\n * Divides this vector by a scalar (in-place)\n * \n * @param scalar - Scalar value (must not be zero)\n * @returns This vector for chaining\n */\n divInPlace(scalar) {\n this.x /= scalar;\n this.y /= scalar;\n return this;\n }\n /**\n * Calculates the dot product with another vector\n * \n * @param other - Vector to dot with\n * @returns Dot product value\n */\n dot(other) {\n return this.x * other.x + this.y * other.y;\n }\n /**\n * Calculates the 2D cross product (scalar result)\n * \n * @param other - Vector to cross with\n * @returns Cross product value (z-component of 3D cross product)\n */\n cross(other) {\n return this.x * other.y - this.y * other.x;\n }\n /**\n * Calculates the squared length (faster than length, avoids sqrt)\n * \n * @returns Squared length\n */\n lengthSquared() {\n return this.x * this.x + this.y * this.y;\n }\n /**\n * Calculates the length (magnitude) of the vector\n * \n * @returns Length\n */\n length() {\n return Math.sqrt(this.lengthSquared());\n }\n /**\n * Normalizes this vector to unit length (immutable)\n * \n * @returns New normalized vector\n */\n normalize() {\n const len = this.length();\n if (len === 0) {\n return new _Vector2(0, 0);\n }\n return this.div(len);\n }\n /**\n * Normalizes this vector to unit length (in-place)\n * \n * @returns This vector for chaining\n */\n normalizeInPlace() {\n const len = this.length();\n if (len === 0) {\n this.x = 0;\n this.y = 0;\n } else {\n this.divInPlace(len);\n }\n return this;\n }\n /**\n * Calculates the distance to another vector\n * \n * @param other - Target vector\n * @returns Distance\n */\n distanceTo(other) {\n return this.sub(other).length();\n }\n /**\n * Calculates the squared distance to another vector (faster)\n * \n * @param other - Target vector\n * @returns Squared distance\n */\n distanceToSquared(other) {\n return this.sub(other).lengthSquared();\n }\n /**\n * Rotates this vector by an angle in radians (immutable)\n * \n * @param angle - Angle in radians\n * @returns New rotated vector\n */\n rotate(angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n return new _Vector2(\n this.x * cos - this.y * sin,\n this.x * sin + this.y * cos\n );\n }\n /**\n * Rotates this vector by an angle in radians (in-place)\n * \n * @param angle - Angle in radians\n * @returns This vector for chaining\n */\n rotateInPlace(angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const x = this.x * cos - this.y * sin;\n const y = this.x * sin + this.y * cos;\n this.x = x;\n this.y = y;\n return this;\n }\n /**\n * Calculates the angle of this vector in radians\n * \n * @returns Angle in radians (range: -π to π)\n */\n angle() {\n return Math.atan2(this.y, this.x);\n }\n /**\n * Linearly interpolates between this vector and another\n * \n * @param other - Target vector\n * @param t - Interpolation factor (0 to 1)\n * @returns New interpolated vector\n */\n lerp(other, t) {\n return new _Vector2(\n this.x + (other.x - this.x) * t,\n this.y + (other.y - this.y) * t\n );\n }\n /**\n * Checks if this vector equals another (with epsilon tolerance)\n * \n * @param other - Vector to compare\n * @param epsilon - Tolerance for comparison (default: 1e-5)\n * @returns True if vectors are approximately equal\n */\n equals(other, epsilon = 1e-5) {\n return Math.abs(this.x - other.x) < epsilon && Math.abs(this.y - other.y) < epsilon;\n }\n /**\n * Returns a string representation of this vector\n * \n * @returns String representation\n */\n toString() {\n return `Vector2(${this.x}, ${this.y})`;\n }\n};\n_Vector2.ZERO = new _Vector2(0, 0);\n_Vector2.UNIT_X = new _Vector2(1, 0);\n_Vector2.UNIT_Y = new _Vector2(0, 1);\nlet Vector2 = _Vector2;\nexport {\n Vector2\n};\n//# sourceMappingURL=index2.js.map\n","class Matrix2 {\n /**\n * Creates a new 2x2 matrix\n * \n * @param m00 - Element at row 0, column 0\n * @param m01 - Element at row 0, column 1\n * @param m10 - Element at row 1, column 0\n * @param m11 - Element at row 1, column 1\n */\n constructor(m00 = 1, m01 = 0, m10 = 0, m11 = 1) {\n this.m00 = m00;\n this.m01 = m01;\n this.m10 = m10;\n this.m11 = m11;\n }\n /**\n * Creates an identity matrix\n * \n * @returns Identity matrix\n */\n static identity() {\n return new Matrix2(1, 0, 0, 1);\n }\n /**\n * Creates a rotation matrix from an angle\n * \n * @param angle - Rotation angle in radians\n * @returns Rotation matrix\n */\n static fromAngle(angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n return new Matrix2(cos, sin, -sin, cos);\n }\n /**\n * Creates a copy of this matrix\n * \n * @returns New matrix with the same values\n */\n clone() {\n return new Matrix2(this.m00, this.m01, this.m10, this.m11);\n }\n /**\n * Copies values from another matrix\n * \n * @param other - Matrix to copy from\n * @returns This matrix for chaining\n */\n copyFrom(other) {\n this.m00 = other.m00;\n this.m01 = other.m01;\n this.m10 = other.m10;\n this.m11 = other.m11;\n return this;\n }\n /**\n * Multiplies this matrix by another matrix\n * \n * @param other - Matrix to multiply with\n * @returns New matrix with the result\n */\n multiply(other) {\n return new Matrix2(\n this.m00 * other.m00 + this.m01 * other.m10,\n this.m00 * other.m01 + this.m01 * other.m11,\n this.m10 * other.m00 + this.m11 * other.m10,\n this.m10 * other.m01 + this.m11 * other.m11\n );\n }\n /**\n * Multiplies this matrix by another matrix (in-place)\n * \n * @param other - Matrix to multiply with\n * @returns This matrix for chaining\n */\n multiplyInPlace(other) {\n const m00 = this.m00 * other.m00 + this.m01 * other.m10;\n const m01 = this.m00 * other.m01 + this.m01 * other.m11;\n const m10 = this.m10 * other.m00 + this.m11 * other.m10;\n const m11 = this.m10 * other.m01 + this.m11 * other.m11;\n this.m00 = m00;\n this.m01 = m01;\n this.m10 = m10;\n this.m11 = m11;\n return this;\n }\n /**\n * Multiplies a vector by this matrix (transforms the vector)\n * \n * @param x - Vector X component\n * @param y - Vector Y component\n * @returns Object with transformed x and y\n */\n multiplyVector(x, y) {\n return {\n x: this.m00 * x + this.m01 * y,\n y: this.m10 * x + this.m11 * y\n };\n }\n /**\n * Calculates the determinant of this matrix\n * \n * @returns Determinant value\n */\n determinant() {\n return this.m00 * this.m11 - this.m01 * this.m10;\n }\n /**\n * Calculates the inverse of this matrix\n * \n * @returns New inverted matrix\n * @throws Error if matrix is singular (determinant is zero)\n */\n inverse() {\n const det = this.determinant();\n if (Math.abs(det) < 1e-10) {\n throw new Error(\"Matrix is singular and cannot be inverted\");\n }\n const invDet = 1 / det;\n return new Matrix2(\n this.m11 * invDet,\n -this.m01 * invDet,\n -this.m10 * invDet,\n this.m00 * invDet\n );\n }\n /**\n * Transposes this matrix\n * \n * @returns New transposed matrix\n */\n transpose() {\n return new Matrix2(this.m00, this.m10, this.m01, this.m11);\n }\n /**\n * Sets this matrix to a rotation matrix\n * \n * @param angle - Rotation angle in radians\n * @returns This matrix for chaining\n */\n setRotation(angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n this.m00 = cos;\n this.m01 = sin;\n this.m10 = -sin;\n this.m11 = cos;\n return this;\n }\n /**\n * Extracts the rotation angle from this matrix\n * \n * @returns Rotation angle in radians\n */\n getAngle() {\n return Math.atan2(this.m01, this.m00);\n }\n /**\n * Checks if this matrix equals another (with epsilon tolerance)\n * \n * @param other - Matrix to compare\n * @param epsilon - Tolerance for comparison (default: 1e-5)\n * @returns True if matrices are approximately equal\n */\n equals(other, epsilon = 1e-5) {\n return Math.abs(this.m00 - other.m00) < epsilon && Math.abs(this.m01 - other.m01) < epsilon && Math.abs(this.m10 - other.m10) < epsilon && Math.abs(this.m11 - other.m11) < epsilon;\n }\n /**\n * Returns a string representation of this matrix\n * \n * @returns String representation\n */\n toString() {\n return `Matrix2([${this.m00}, ${this.m01}], [${this.m10}, ${this.m11}])`;\n }\n}\nexport {\n Matrix2\n};\n//# sourceMappingURL=index3.js.map\n","import { Vector2 } from \"./index2.js\";\nclass AABB {\n /**\n * Creates a new AABB\n * \n * @param minX - Minimum X coordinate\n * @param minY - Minimum Y coordinate\n * @param maxX - Maximum X coordinate\n * @param maxY - Maximum Y coordinate\n */\n constructor(minX, minY, maxX, maxY) {\n this.minX = minX;\n this.minY = minY;\n this.maxX = maxX;\n this.maxY = maxY;\n }\n /**\n * Creates an AABB from center and size\n * \n * @param centerX - Center X coordinate\n * @param centerY - Center Y coordinate\n * @param width - Width of the box\n * @param height - Height of the box\n * @returns New AABB\n */\n static fromCenterSize(centerX, centerY, width, height) {\n const halfWidth = width / 2;\n const halfHeight = height / 2;\n return new AABB(\n centerX - halfWidth,\n centerY - halfHeight,\n centerX + halfWidth,\n centerY + halfHeight\n );\n }\n /**\n * Creates an AABB from a center point and size\n * \n * @param center - Center point\n * @param width - Width of the box\n * @param height - Height of the box\n * @returns New AABB\n */\n static fromCenterSizeVector(center, width, height) {\n return AABB.fromCenterSize(center.x, center.y, width, height);\n }\n /**\n * Creates a copy of this AABB\n * \n * @returns New AABB with the same values\n */\n clone() {\n return new AABB(this.minX, this.minY, this.maxX, this.maxY);\n }\n /**\n * Copies values from another AABB\n * \n * @param other - AABB to copy from\n * @returns This AABB for chaining\n */\n copyFrom(other) {\n this.minX = other.minX;\n this.minY = other.minY;\n this.maxX = other.maxX;\n this.maxY = other.maxY;\n return this;\n }\n /**\n * Gets the width of the AABB\n * \n * @returns Width\n */\n getWidth() {\n return this.maxX - this.minX;\n }\n /**\n * Gets the height of the AABB\n * \n * @returns Height\n */\n getHeight() {\n return this.maxY - this.minY;\n }\n /**\n * Gets the center point of the AABB\n * \n * @returns Center point\n */\n getCenter() {\n return new Vector2(\n (this.minX + this.maxX) / 2,\n (this.minY + this.maxY) / 2\n );\n }\n /**\n * Gets the center X coordinate\n * \n * @returns Center X\n */\n getCenterX() {\n return (this.minX + this.maxX) / 2;\n }\n /**\n * Gets the center Y coordinate\n * \n * @returns Center Y\n */\n getCenterY() {\n return (this.minY + this.maxY) / 2;\n }\n /**\n * Gets the area of the AABB\n * \n * @returns Area\n */\n getArea() {\n return this.getWidth() * this.getHeight();\n }\n /**\n * Checks if a point is inside this AABB\n * \n * @param x - Point X coordinate\n * @param y - Point Y coordinate\n * @returns True if point is inside\n */\n containsPoint(x, y) {\n return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY;\n }\n /**\n * Checks if a vector point is inside this AABB\n * \n * @param point - Point to check\n * @returns True if point is inside\n */\n contains(point) {\n return this.containsPoint(point.x, point.y);\n }\n /**\n * Checks if another AABB is completely inside this AABB\n * \n * @param other - AABB to check\n * @returns True if other AABB is inside\n */\n containsAABB(other) {\n return this.minX <= other.minX && this.minY <= other.minY && this.maxX >= other.maxX && this.maxY >= other.maxY;\n }\n /**\n * Checks if this AABB intersects with another AABB\n * \n * @param other - AABB to check intersection with\n * @returns True if AABBs intersect\n */\n intersects(other) {\n return !(this.maxX < other.minX || this.minX > other.maxX || this.maxY < other.minY || this.minY > other.maxY);\n }\n /**\n * Calculates the intersection AABB with another AABB\n * \n * @param other - AABB to intersect with\n * @returns Intersection AABB, or null if no intersection\n */\n intersection(other) {\n if (!this.intersects(other)) {\n return null;\n }\n return new AABB(\n Math.max(this.minX, other.minX),\n Math.max(this.minY, other.minY),\n Math.min(this.maxX, other.maxX),\n Math.min(this.maxY, other.maxY)\n );\n }\n /**\n * Calculates the union AABB with another AABB\n * \n * @param other - AABB to union with\n * @returns Union AABB\n */\n union(other) {\n return new AABB(\n Math.min(this.minX, other.minX),\n Math.min(this.minY, other.minY),\n Math.max(this.maxX, other.maxX),\n Math.max(this.maxY, other.maxY)\n );\n }\n /**\n * Expands this AABB by a given amount in all directions\n * \n * @param amount - Amount to expand by\n * @returns New expanded AABB\n */\n expand(amount) {\n return new AABB(\n this.minX - amount,\n this.minY - amount,\n this.maxX + amount,\n this.maxY + amount\n );\n }\n /**\n * Expands this AABB by a given amount (in-place)\n * \n * @param amount - Amount to expand by\n * @returns This AABB for chaining\n */\n expandInPlace(amount) {\n this.minX -= amount;\n this.minY -= amount;\n this.maxX += amount;\n this.maxY += amount;\n return this;\n }\n /**\n * Translates this AABB by a given offset\n * \n * @param dx - X offset\n * @param dy - Y offset\n * @returns New translated AABB\n */\n translate(dx, dy) {\n return new AABB(\n this.minX + dx,\n this.minY + dy,\n this.maxX + dx,\n this.maxY + dy\n );\n }\n /**\n * Translates this AABB by a given offset (in-place)\n * \n * @param dx - X offset\n * @param dy - Y offset\n * @returns This AABB for chaining\n */\n translateInPlace(dx, dy) {\n this.minX += dx;\n this.minY += dy;\n this.maxX += dx;\n this.maxY += dy;\n return this;\n }\n /**\n * Checks if this AABB equals another (with epsilon tolerance)\n * \n * @param other - AABB to compare\n * @param epsilon - Tolerance for comparison (default: 1e-5)\n * @returns True if AABBs are approximately equal\n */\n equals(other, epsilon = 1e-5) {\n return Math.abs(this.minX - other.minX) < epsilon && Math.abs(this.minY - other.minY) < epsilon && Math.abs(this.maxX - other.maxX) < epsilon && Math.abs(this.maxY - other.maxY) < epsilon;\n }\n /**\n * Returns a string representation of this AABB\n * \n * @returns String representation\n */\n toString() {\n return `AABB(${this.minX}, ${this.minY}, ${this.maxX}, ${this.maxY})`;\n }\n /**\n * Clamps a point to be inside the AABB\n * \n * @param point - Point to clamp\n * @returns Clamped point\n */\n clamp(point) {\n return new Vector2(\n Math.max(this.minX, Math.min(this.maxX, point.x)),\n Math.max(this.minY, Math.min(this.maxY, point.y))\n );\n }\n}\nexport {\n AABB\n};\n//# sourceMappingURL=index4.js.map\n","import { Vector2 } from \"./index2.js\";\nconst EPSILON = 1e-5;\nfunction approximatelyEqual(a, b, epsilon = EPSILON) {\n return Math.abs(a - b) < epsilon;\n}\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\nfunction lerp(a, b, t) {\n return a + (b - a) * t;\n}\nfunction distance(x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n return Math.sqrt(dx * dx + dy * dy);\n}\nfunction distanceSquared(x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n return dx * dx + dy * dy;\n}\nfunction angleBetween(x1, y1, x2, y2) {\n return Math.atan2(y2 - y1, x2 - x1);\n}\nfunction normalizeAngle(angle) {\n while (angle > Math.PI) {\n angle -= 2 * Math.PI;\n }\n while (angle < -Math.PI) {\n angle += 2 * Math.PI;\n }\n return angle;\n}\nfunction angularDistance(from, to) {\n let diff = to - from;\n while (diff > Math.PI) {\n diff -= 2 * Math.PI;\n }\n while (diff < -Math.PI) {\n diff += 2 * Math.PI;\n }\n return diff;\n}\nfunction projectPointOnLineSegment(point, lineStart, lineEnd) {\n const line = lineEnd.sub(lineStart);\n const pointVec = point.sub(lineStart);\n const lineLengthSq = line.lengthSquared();\n if (lineLengthSq < EPSILON) {\n return lineStart.clone();\n }\n const t = clamp(pointVec.dot(line) / lineLengthSq, 0, 1);\n return lineStart.add(line.mul(t));\n}\nfunction closestPointOnAABB(point, aabb) {\n return new Vector2(\n clamp(point.x, aabb.minX, aabb.maxX),\n clamp(point.y, aabb.minY, aabb.maxY)\n );\n}\nfunction pointInCircle(point, center, radius) {\n return point.distanceToSquared(center) <= radius * radius;\n}\nfunction degToRad(degrees) {\n return degrees * Math.PI / 180;\n}\nfunction radToDeg(radians) {\n return radians * 180 / Math.PI;\n}\nexport {\n EPSILON,\n angleBetween,\n angularDistance,\n approximatelyEqual,\n clamp,\n closestPointOnAABB,\n degToRad,\n distance,\n distanceSquared,\n lerp,\n normalizeAngle,\n pointInCircle,\n projectPointOnLineSegment,\n radToDeg\n};\n//# sourceMappingURL=index5.js.map\n","var EntityState = /* @__PURE__ */ ((EntityState2) => {\n EntityState2[EntityState2[\"Static\"] = 1] = \"Static\";\n EntityState2[EntityState2[\"Dynamic\"] = 2] = \"Dynamic\";\n EntityState2[EntityState2[\"Sleeping\"] = 4] = \"Sleeping\";\n EntityState2[EntityState2[\"Kinematic\"] = 8] = \"Kinematic\";\n return EntityState2;\n})(EntityState || {});\nexport {\n EntityState\n};\n//# sourceMappingURL=index6.js.map\n","function generateUUID() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n const r = Math.random() * 16 | 0;\n const v = c === \"x\" ? r : r & 3 | 8;\n return v.toString(16);\n });\n}\nfunction generateDeterministicUUID(seed) {\n let hash = seed;\n hash = (hash << 5) - hash + seed;\n hash = hash & hash;\n const hex = Math.abs(hash).toString(16).padStart(8, \"0\");\n return `00000000-0000-4000-8000-${hex.padStart(12, \"0\")}`;\n}\nexport {\n generateDeterministicUUID,\n generateUUID\n};\n//# sourceMappingURL=index43.js.map\n","import { Vector2 } from \"./index2.js\";\nimport { EntityState } from \"./index6.js\";\nimport { generateUUID } from \"./index43.js\";\nconst MOVEMENT_EPSILON = 1e-3;\nconst MOVEMENT_EPSILON_SQ = MOVEMENT_EPSILON * MOVEMENT_EPSILON;\nconst DIRECTION_CHANGE_THRESHOLD = 1;\nconst DIRECTION_CHANGE_THRESHOLD_SQ = DIRECTION_CHANGE_THRESHOLD * DIRECTION_CHANGE_THRESHOLD;\nclass Entity {\n /**\n * Creates a new entity\n * \n * @param config - Entity configuration\n */\n constructor(config = {}) {\n this.lastCardinalDirection = \"idle\";\n this.uuid = config.uuid ?? generateUUID();\n if (config.position instanceof Vector2) {\n this.position = config.position.clone();\n } else if (config.position) {\n this.position = new Vector2(config.position.x, config.position.y);\n } else {\n this.position = new Vector2(0, 0);\n }\n this.currentTile = new Vector2(0, 0);\n if (config.velocity instanceof Vector2) {\n this.velocity = config.velocity.clone();\n } else if (config.velocity) {\n this.velocity = new Vector2(config.velocity.x, config.velocity.y);\n } else {\n this.velocity = new Vector2(0, 0);\n }\n this.rotation = config.rotation ?? 0;\n this.angularVelocity = config.angularVelocity ?? 0;\n this.mass = config.mass ?? 1;\n this.invMass = this.mass > 0 ? 1 / this.mass : 0;\n this.radius = config.radius ?? 0;\n this.width = config.width ?? 0;\n this.height = config.height ?? 0;\n if (config.capsule !== void 0) {\n this.capsule = config.capsule;\n }\n this.continuous = config.continuous ?? false;\n this.state = config.state ?? EntityState.Dynamic;\n this.restitution = config.restitution ?? 0.2;\n this.friction = config.friction ?? 0.3;\n this.linearDamping = config.linearDamping ?? 0.01;\n this.angularDamping = config.angularDamping ?? 0.01;\n this.maxLinearVelocity = config.maxLinearVelocity ?? Infinity;\n this.maxAngularVelocity = config.maxAngularVelocity ?? Infinity;\n this.force = new Vector2(0, 0);\n this.torque = 0;\n this.collisionMask = config.collisionMask ?? 4294967295;\n this.collisionCategory = config.collisionCategory ?? 1;\n this.timeSinceMovement = 0;\n this.sleepThreshold = 0.5;\n this.collisionEnterHandlers = /* @__PURE__ */ new Set();\n this.collisionExitHandlers = /* @__PURE__ */ new Set();\n this.positionSyncHandlers = /* @__PURE__ */ new Set();\n this.directionSyncHandlers = /* @__PURE__ */ new Set();\n this.positionSyncHandlers = /* @__PURE__ */ new Set();\n this.directionSyncHandlers = /* @__PURE__ */ new Set();\n this.movementChangeHandlers = /* @__PURE__ */ new Set();\n this.enterTileHandlers = /* @__PURE__ */ new Set();\n this.leaveTileHandlers = /* @__PURE__ */ new Set();\n this.canEnterTileHandlers = /* @__PURE__ */ new Set();\n this.collisionFilterHandlers = /* @__PURE__ */ new Set();\n this.resolutionFilterHandlers = /* @__PURE__ */ new Set();\n this.wasMoving = this.velocity.lengthSquared() > MOVEMENT_EPSILON_SQ;\n }\n /**\n * Registers a handler fired when this entity starts colliding with another one.\n *\n * - **Purpose:** offer per-entity collision hooks without subscribing to the global event system.\n * - **Design:** lightweight Set-based listeners returning an unsubscribe closure to keep GC pressure low.\n *\n * @param handler - Collision enter listener\n * @returns Unsubscribe closure\n * @example\n * ```typescript\n * const unsubscribe = entity.onCollisionEnter(({ other }) => {\n * console.log('Started colliding with', other.uuid);\n * });\n * ```\n */\n onCollisionEnter(handler) {\n this.collisionEnterHandlers.add(handler);\n return () => this.collisionEnterHandlers.delete(handler);\n }\n /**\n * Registers a handler fired when this entity stops colliding with another one.\n *\n * - **Purpose:** detect collision separation at the entity level for local gameplay reactions.\n * - **Design:** mirrors `onCollisionEnter` with identical lifecycle management semantics.\n *\n * @param handler - Collision exit listener\n * @returns Unsubscribe closure\n * @example\n * ```typescript\n * const unsubscribe = entity.onCollisionExit(({ other }) => {\n * console.log('Stopped colliding with', other.uuid);\n * });\n * ```\n */\n onCollisionExit(handler) {\n this.collisionExitHandlers.add(handler);\n return () => this.collisionExitHandlers.delete(handler);\n }\n /**\n * Registers a handler fired when the entity position changes (x, y).\n *\n * - **Purpose:** synchronize position changes for logging, rendering, network sync, etc.\n * - **Design:** lightweight Set-based listeners returning an unsubscribe closure to keep GC pressure low.\n *\n * @param handler - Position change listener\n * @returns Unsubscribe closure\n * @example\n * ```typescript\n * const unsubscribe = entity.onPositionChange(({ x, y }) => {\n * console.log('Position changed to', x, y);\n * // Update rendering, sync network, etc.\n * });\n * ```\n */\n onPositionChange(handler) {\n this.positionSyncHandlers.add(handler);\n return () => this.positionSyncHandlers.delete(handler);\n }\n /**\n * Registers a handler fired when the entity direction changes.\n *\n * - **Purpose:** synchronize direction changes for logging, rendering, network sync, etc.\n * - **Design:** lightweight Set-based listeners returning an unsubscribe closure to keep GC pressure low.\n *\n * @param handler - Direction change listener\n * @returns Unsubscribe closure\n * @example\n * ```typescript\n * const unsubscribe = entity.onDirectionChange(({ direction, cardinalDirection }) => {\n * console.log('Direction changed to', cardinalDirection);\n * // Update rendering, sync network, etc.\n * });\n * ```\n */\n onDirectionChange(handler) {\n this.directionSyncHandlers.add(handler);\n return () => this.directionSyncHandlers.delete(handler);\n }\n /**\n * Manually notifies that the position has changed.\n *\n * - **Purpose:** allow external code to trigger position sync hooks when position is modified directly.\n * - **Design:** can be called after direct position modifications (e.g., `entity.position.set()`).\n *\n * @example\n * ```typescript\n * entity.position.set(100, 200);\n * entity.notifyPositionChange(); // Trigger sync hooks\n * ```\n */\n notifyPositionChange() {\n if (this.positionSyncHandlers.size === 0) {\n return;\n }\n const payload = {\n entity: this,\n x: this.position.x,\n y: this.position.y\n };\n for (const handler of this.positionSyncHandlers) {\n handler(payload);\n }\n }\n /**\n * Manually notifies that the direction has changed.\n *\n * - **Purpose:** allow external code to trigger direction sync hooks when direction is modified directly.\n * - **Design:** computes direction from velocity and cardinal direction.\n *\n * @example\n * ```typescript\n * entity.velocity.set(5, 0);\n * entity.notifyDirectionChange(); // Trigger sync hooks\n * ```\n */\n notifyDirectionChange() {\n const isMoving = this.velocity.lengthSquared() > DIRECTION_CHANGE_THRESHOLD_SQ;\n const direction = isMoving ? this.velocity.clone().normalize() : new Vector2(0, 0);\n const cardinalDirection = this.computeCardinalDirection(direction);\n if (cardinalDirection !== \"idle\") {\n this.lastCardinalDirection = cardinalDirection;\n }\n if (this.directionSyncHandlers.size === 0) {\n return;\n }\n const payload = {\n entity: this,\n direction,\n cardinalDirection\n };\n for (const handler of this.directionSyncHandlers) {\n handler(payload);\n }\n }\n /**\n * Gets the current cardinal direction.\n * \n * This value is updated whenever `notifyDirectionChange()` is called (e.g. by `setVelocity`).\n * It includes hysteresis logic to prevent rapid direction flipping during collisions.\n * \n * @returns The current cardinal direction ('up', 'down', 'left', 'right', 'idle')\n * \n * @example\n * ```typescript\n * const dir = entity.cardinalDirection;\n * if (dir === 'left') {\n * // Render left-facing sprite\n * }\n * ```\n */\n get cardinalDirection() {\n return this.lastCardinalDirection;\n }\n /**\n * Registers a handler fired when the entity movement state changes (moving/stopped).\n *\n * - **Purpose:** detect when an entity starts or stops moving for gameplay reactions, animations, or network sync.\n * - **Design:** lightweight Set-based listeners returning an unsubscribe closure to keep GC pressure low.\n * - **Movement detection:** uses `MOVEMENT_EPSILON` threshold to determine if entity is moving.\n * - **Intensity:** provides the movement speed magnitude to allow fine-grained animation control (e.g., walk vs run).\n *\n * @param handler - Movement state change listener\n * @returns Unsubscribe closure\n * @example\n * ```typescript\n * const unsubscribe = entity.onMovementChange(({ isMoving, intensity }) => {\n * console.log('Entity is', isMoving ? 'moving' : 'stopped', 'at speed', intensity);\n * // Update animations based on intensity\n * if (isMoving && intensity > 100) {\n * // Fast movement - use run animation\n * } else if (isMoving) {\n * // Slow movement - use walk animation\n * }\n * });\n * ```\n */\n onMovementChange(handler) {\n this.movementChangeHandlers.add(handler);\n return () => this.movementChangeHandlers.delete(handler);\n }\n /**\n * Manually notifies that the movement state has changed.\n *\n * - **Purpose:** allow external code to trigger movement state sync hooks when velocity is modified directly.\n * - **Design:** checks if movement state (moving/stopped) has changed and notifies handlers with movement intensity.\n * - **Intensity:** calculated as the magnitude of the velocity vector (speed in pixels per second).\n *\n * @example\n * ```typescript\n * entity.velocity.set(5, 0);\n * entity.notifyMovementChange(); // Trigger sync hooks if state changed\n * ```\n */\n notifyMovementChange() {\n const isMoving = this.velocity.lengthSquared() > MOVEMENT_EPSILON_SQ;\n const intensity = this.velocity.length();\n if (this.movementChangeHandlers.size === 0) {\n this.wasMoving = isMoving;\n return;\n }\n if (isMoving !== this.wasMoving) {\n this.wasMoving = isMoving;\n const payload = {\n entity: this,\n isMoving,\n intensity\n };\n for (const handler of this.movementChangeHandlers) {\n handler(payload);\n }\n } else {\n this.wasMoving = isMoving;\n }\n }\n /**\n * Registers a handler fired when the entity enters a new tile.\n * \n * @param handler - Tile enter listener\n * @returns Unsubscribe closure\n */\n onEnterTile(handler) {\n this.enterTileHandlers.add(handler);\n return () => this.enterTileHandlers.delete(handler);\n }\n /**\n * Registers a handler fired when the entity leaves a tile.\n * \n * @param handler - Tile leave listener\n * @returns Unsubscribe closure\n */\n onLeaveTile(handler) {\n this.leaveTileHandlers.add(handler);\n return () => this.leaveTileHandlers.delete(handler);\n }\n /**\n * Registers a handler to check if the entity can enter a tile.\n * If any handler returns false, the entity cannot enter.\n * \n * @param handler - Can enter tile listener\n * @returns Unsubscribe closure\n */\n canEnterTile(handler) {\n this.canEnterTileHandlers.add(handler);\n return () => this.canEnterTileHandlers.delete(handler);\n }\n /**\n * @internal\n * Notifies that the entity has entered a tile.\n */\n notifyEnterTile(x, y) {\n if (this.enterTileHandlers.size === 0) return;\n const event = { entity: this, x, y };\n for (const handler of this.enterTileHandlers) {\n handler(event);\n }\n }\n /**\n * @internal\n * Notifies that the entity has left a tile.\n */\n notifyLeaveTile(x, y) {\n if (this.leaveTileHandlers.size === 0) return;\n const event = { entity: this, x, y };\n for (const handler of this.leaveTileHandlers) {\n handler(event);\n }\n }\n /**\n * @internal\n * Checks if the entity can enter a tile.\n */\n checkCanEnterTile(x, y) {\n if (this.canEnterTileHandlers.size === 0) return true;\n const event = { entity: this, x, y };\n for (const handler of this.canEnterTileHandlers) {\n if (handler(event) === false) {\n return false;\n }\n }\n return true;\n }\n /**\n * Applies a force to the entity\n * \n * Force is accumulated and applied during integration.\n * \n * @param force - Force vector to apply\n * @returns This entity for chaining\n * \n * @example\n * ```typescript\n * entity.applyForce(new Vector2(10, 0)); // Push right\n * ```\n */\n applyForce(force) {\n if (this.isStatic() || this.isSleeping()) {\n return this;\n }\n this.force.addInPlace(force);\n return this;\n }\n /**\n * Applies a force at a specific point (creates torque)\n * \n * @param force - Force vector to apply\n * @param point - Point of application in world space\n * @returns This entity for chaining\n */\n applyForceAtPoint(force, point) {\n if (this.isStatic() || this.isSleeping()) {\n return this;\n }\n this.force.addInPlace(force);\n const r = point.sub(this.position);\n this.torque += r.cross(force);\n return this;\n }\n /**\n * Applies an impulse (instantaneous change in velocity)\n * \n * @param impulse - Impulse vector\n * @returns This entity for chaining\n * \n * @example\n * ```typescript\n * entity.applyImpulse(new Vector2(5, 0)); // Instant push\n * ```\n */\n applyImpulse(impulse) {\n if (this.isStatic() || this.isSleeping()) {\n return this;\n }\n this.velocity.addInPlace(impulse.mul(this.invMass));\n this.notifyMovementChange();\n this.notifyDirectionChange();\n return this;\n }\n /**\n * Applies an angular impulse (instantaneous change in angular velocity)\n * \n * @param impulse - Angular impulse value\n * @returns This entity for chaining\n */\n applyAngularImpulse(impulse) {\n if (this.isStatic() || this.isSleeping()) {\n return this;\n }\n const momentOfInertia = this.mass * this.radius * this.radius;\n if (momentOfInertia > 0) {\n this.angularVelocity += impulse / momentOfInertia;\n }\n return this;\n }\n /**\n * Teleports the entity to a new position\n * \n * @param position - New position\n * @returns This entity for chaining\n */\n teleport(position) {\n if (position instanceof Vector2) {\n this.position.copyFrom(position);\n } else {\n this.position.set(position.x, position.y);\n }\n this.wakeUp();\n this.notifyPositionChange();\n return this;\n }\n /**\n * Sets the velocity directly\n * \n * @param velocity - New velocity\n * @returns This entity for chaining\n */\n setVelocity(velocity) {\n const oldVelocity = this.velocity.clone();\n if (velocity instanceof Vector2) {\n this.velocity.copyFrom(velocity);\n } else {\n this.velocity.set(velocity.x, velocity.y);\n }\n this.wakeUp();\n const oldDirection = oldVelocity.lengthSquared() > MOVEMENT_EPSILON_SQ ? oldVelocity.clone().normalize() : new Vector2(0, 0);\n const newDirection = this.velocity.lengthSquared() > MOVEMENT_EPSILON_SQ ? this.velocity.clone().normalize() : new Vector2(0, 0);\n const oldCardinal = this.computeCardinalDirection(oldDirection);\n const newCardinal = this.computeCardinalDirection(newDirection);\n if (oldCardinal !== newCardinal || Math.abs(oldDirection.dot(newDirection) - 1) > 0.01) {\n this.notifyDirectionChange();\n }\n this.notifyMovementChange();\n return this;\n }\n /**\n * Freezes the entity (makes it static)\n * \n * @returns This entity for chaining\n */\n freeze() {\n this.state = EntityState.Static;\n this.velocity.set(0, 0);\n this.angularVelocity = 0;\n this.force.set(0, 0);\n this.torque = 0;\n this.notifyMovementChange();\n return this;\n }\n /**\n * Unfreezes the entity (makes it dynamic)\n * \n * @returns This entity for chaining\n */\n unfreeze() {\n if (this.mass > 0) {\n this.state = EntityState.Dynamic;\n }\n return this;\n }\n /**\n * Puts the entity to sleep (stops updating)\n * \n * @returns This entity for chaining\n */\n sleep() {\n if (!this.isStatic()) {\n this.state |= EntityState.Sleeping;\n this.velocity.set(0, 0);\n this.angularVelocity = 0;\n this.force.set(0, 0);\n this.torque = 0;\n this.notifyMovementChange();\n }\n return this;\n }\n /**\n * Wakes up the entity (resumes updating)\n * \n * @returns This entity for chaining\n */\n wakeUp() {\n this.state &= ~EntityState.Sleeping;\n this.timeSinceMovement = 0;\n return this;\n }\n /**\n * Checks if the entity is static\n * \n * An entity is considered static if:\n * - It has the Static state flag, OR\n * - It has infinite mass (mass = Infinity), OR\n * - It has zero inverse mass (invMass = 0)\n * \n * @returns True if static\n */\n isStatic() {\n return (this.state & EntityState.Static) !== 0 || this.invMass === 0;\n }\n /**\n * Checks if the entity is dynamic\n * \n * @returns True if dynamic\n */\n isDynamic() {\n return (this.state & EntityState.Dynamic) !== 0 && this.mass > 0;\n }\n /**\n * Checks if the entity is sleeping\n * \n * @returns True if sleeping\n */\n isSleeping() {\n return (this.state & EntityState.Sleeping) !== 0;\n }\n /**\n * Checks if the entity is kinematic\n * \n * @returns True if kinematic\n */\n isKinematic() {\n return (this.state & EntityState.Kinematic) !== 0;\n }\n /**\n * Resets accumulated forces and torques\n * \n * Called at the start of each physics step.\n */\n clearForces() {\n this.force.set(0, 0);\n this.torque = 0;\n }\n /**\n * Stops all movement immediately\n * \n * Completely stops the entity's movement by:\n * - Setting velocity to zero\n * - Setting angular velocity to zero\n * - Clearing accumulated forces and torques\n * - Waking up the entity if it was sleeping\n * - Notifying movement state change\n * \n * Unlike `freeze()`, this method keeps the entity dynamic and does not\n * change its state. It's useful for stopping movement when changing maps,\n * teleporting, or when you need to halt an entity without making it static.\n * \n * @returns This entity for chaining\n * \n * @example\n * ```ts\n * // Stop movement when changing maps\n * if (mapChanged) {\n * entity.stopMovement();\n * }\n * \n * // Stop movement after teleporting\n * entity.position.set(100, 200);\n * entity.stopMovement();\n * \n * // Stop movement when player dies\n * if (player.isDead()) {\n * playerEntity.stopMovement();\n * }\n * ```\n */\n stopMovement() {\n this.velocity.set(0, 0);\n this.angularVelocity = 0;\n this.clearForces();\n this.wakeUp();\n this.notifyMovementChange();\n this.notifyDirectionChange();\n return this;\n }\n /**\n * Clamps velocities to maximum values\n */\n clampVelocities() {\n const speed = this.velocity.length();\n if (speed > this.maxLinearVelocity) {\n this.velocity.normalizeInPlace().mulInPlace(this.maxLinearVelocity);\n }\n if (Math.abs(this.angularVelocity) > this.maxAngularVelocity) {\n this.angularVelocity = Math.sign(this.angularVelocity) * this.maxAngularVelocity;\n }\n }\n /**\n * Adds a collision filter to this entity\n * \n * Collision filters allow dynamic, conditional collision filtering beyond static bitmasks.\n * Each filter is called when checking if this entity can collide with another.\n * If any filter returns `false`, the collision is ignored.\n * \n * This enables scenarios like:\n * - Players passing through other players (`throughOtherPlayer`)\n * - Entities passing through all characters (`through`)\n * - Custom game-specific collision rules\n * \n * @param filter - Function that returns `true` to allow collision, `false` to ignore\n * @returns Unsubscribe function to remove the filter\n * \n * @example\n * ```typescript\n * // Allow entity to pass through other players\n * const unsubscribe = entity.addCollisionFilter((self, other) => {\n * const otherOwner = (other as any).owner;\n * if (otherOwner?.type === 'player') {\n * return false; // No collision with players\n * }\n * return true; // Collide with everything else\n * });\n * \n * // Later, remove the filter\n * unsubscribe();\n * ```\n */\n addCollisionFilter(filter) {\n this.collisionFilterHandlers.add(filter);\n return () => this.collisionFilterHandlers.delete(filter);\n }\n /**\n * Checks if this entity can collide with another entity\n * \n * First checks collision masks (bitmask filtering), then executes all registered\n * collision filters. If any filter returns `false`, the collision is ignored.\n * \n * @param other - Other entity to check\n * @returns True if collision is possible\n */\n canCollideWith(other) {\n const categoryA = this.collisionCategory;\n const maskA = this.collisionMask;\n const categoryB = other.collisionCategory;\n const maskB = other.collisionMask;\n if ((categoryA & maskB) === 0 || (categoryB & maskA) === 0) {\n return false;\n }\n for (const filter of this.collisionFilterHandlers) {\n if (!filter(this, other)) {\n return false;\n }\n }\n for (const filter of other.collisionFilterHandlers) {\n if (!filter(other, this)) {\n return false;\n }\n }\n return true;\n }\n /**\n * Adds a resolution filter to this entity\n * \n * Resolution filters determine whether a collision should be **resolved** (blocking)\n * or just **detected** (notification only). Unlike collision filters which prevent\n * detection entirely, resolution filters allow collision events to fire while\n * optionally skipping the physical blocking.\n * \n * This enables scenarios like:\n * - Players passing through other players but still triggering touch events\n * - Entities passing through characters but still calling onPlayerTouch hooks\n * - Ghost mode where collisions are detected but not resolved\n * \n * @param filter - Function that returns `true` to resolve (block), `false` to skip\n * @returns Unsubscribe function to remove the filter\n * \n * @example\n * ```typescript\n * // Allow entity to pass through players but still trigger events\n * const unsubscribe = entity.addResolutionFilter((self, other) => {\n * const otherOwner = (other as any).owner;\n * if (otherOwner?.type === 'player') {\n * return false; // Pass through but events still fire\n * }\n * return true; // Block other entities\n * });\n * \n * // Later, remove the filter\n * unsubscribe();\n * ```\n */\n addResolutionFilter(filter) {\n this.resolutionFilterHandlers.add(filter);\n return () => this.resolutionFilterHandlers.delete(filter);\n }\n /**\n * Checks if this entity should resolve (block) a collision with another entity\n * \n * This is called by the CollisionResolver to determine if the collision should\n * result in physical blocking or just notification.\n * \n * @param other - Other entity to check\n * @returns True if collision should be resolved (blocking), false to pass through\n */\n shouldResolveCollisionWith(other) {\n for (const filter of this.resolutionFilterHandlers) {\n if (!filter(this, other)) {\n return false;\n }\n }\n for (const filter of other.resolutionFilterHandlers) {\n if (!filter(other, this)) {\n return false;\n }\n }\n return true;\n }\n /**\n * @internal\n *\n * Notifies the entity that a collision has started.\n *\n * @param collision - Collision information shared by the world\n * @param other - The counterpart entity\n */\n notifyCollisionEnter(collision, other) {\n if (this.collisionEnterHandlers.size === 0) {\n return;\n }\n const payload = {\n entity: this,\n other,\n collision\n };\n for (const handler of this.collisionEnterHandlers) {\n handler(payload);\n }\n }\n /**\n * @internal\n *\n * Notifies the entity that a collision has ended.\n *\n * @param collision - Collision information stored before separation\n * @param other - The counterpart entity\n */\n notifyCollisionExit(collision, other) {\n if (this.collisionExitHandlers.size === 0) {\n return;\n }\n const payload = {\n entity: this,\n other,\n collision\n };\n for (const handler of this.collisionExitHandlers) {\n handler(payload);\n }\n }\n computeCardinalDirection(direction) {\n if (direction.lengthSquared() <= MOVEMENT_EPSILON_SQ) {\n return \"idle\";\n }\n if (this.lastCardinalDirection === \"idle\") {\n const absX2 = Math.abs(direction.x);\n const absY2 = Math.abs(direction.y);\n if (absX2 >= absY2) {\n return direction.x >= 0 ? \"right\" : \"left\";\n }\n return direction.y >= 0 ? \"down\" : \"up\";\n }\n const isOpposite = this.lastCardinalDirection === \"left\" && direction.x > 0.5 || this.lastCardinalDirection === \"right\" && direction.x < -0.5 || this.lastCardinalDirection === \"up\" && direction.y > 0.5 || this.lastCardinalDirection === \"down\" && direction.y < -0.5;\n const speedSq = this.velocity.lengthSquared();\n if (isOpposite && speedSq < 100) {\n return this.lastCardinalDirection;\n }\n const absX = Math.abs(direction.x);\n const absY = Math.abs(direction.y);\n const bias = 2;\n if ([\"left\", \"right\"].includes(this.lastCardinalDirection)) {\n if (absY > absX * bias) {\n if (Math.abs(this.velocity.y) > 5) {\n return direction.y >= 0 ? \"down\" : \"up\";\n }\n }\n if (speedSq > 1) {\n return direction.x >= 0 ? \"right\" : \"left\";\n }\n return this.lastCardinalDirection;\n } else {\n if (absX > absY * bias) {\n if (Math.abs(this.velocity.x) > 5) {\n return direction.x >= 0 ? \"right\" : \"left\";\n }\n }\n if (speedSq > 1) {\n return direction.y >= 0 ? \"down\" : \"up\";\n }\n return this.lastCardinalDirection;\n }\n }\n /**\n * Creates a copy of this entity\n * \n * @returns New entity with copied properties\n */\n clone() {\n const entity = new Entity({\n position: this.position.clone(),\n velocity: this.velocity.clone(),\n rotation: this.rotation,\n angularVelocity: this.angularVelocity,\n mass: this.mass,\n radius: this.radius,\n width: this.width,\n height: this.height,\n state: this.state,\n restitution: this.restitution,\n friction: this.friction,\n linearDamping: this.linearDamping,\n angularDamping: this.angularDamping,\n maxLinearVelocity: this.maxLinearVelocity,\n maxAngularVelocity: this.maxAngularVelocity,\n collisionMask: this.collisionMask,\n collisionCategory: this.collisionCategory,\n uuid: this.uuid\n });\n return entity;\n }\n}\nexport {\n Entity\n};\n//# sourceMappingURL=index7.js.map\n","import { Vector2 } from \"./index2.js\";\nvar IntegrationMethod = /* @__PURE__ */ ((IntegrationMethod2) => {\n IntegrationMethod2[\"Euler\"] = \"euler\";\n IntegrationMethod2[\"Verlet\"] = \"verlet\";\n return IntegrationMethod2;\n})(IntegrationMethod || {});\nclass Integrator {\n /**\n * Creates a new integrator\n * \n * @param config - Integrator configuration\n */\n constructor(config) {\n this.config = config;\n this.gravity = config.gravity?.clone() ?? new Vector2(0, 0);\n }\n /**\n * Integrates an entity's motion\n * \n * Updates position, velocity, and rotation based on forces and torques.\n * \n * @param entity - Entity to integrate\n */\n integrate(entity) {\n if (entity.isStatic() || entity.isSleeping()) {\n return;\n }\n switch (this.config.method ?? \"euler\") {\n case \"euler\":\n this.integrateEuler(entity);\n break;\n case \"verlet\":\n this.integrateVerlet(entity);\n break;\n }\n }\n /**\n * Semi-implicit Euler integration\n * \n * Updates velocity first, then position. More stable than explicit Euler.\n * \n * @param entity - Entity to integrate\n */\n integrateEuler(entity) {\n const dt = this.config.deltaTime;\n const invMass = entity.invMass;\n if (invMass > 0) {\n entity.force.addInPlace(this.gravity.mul(entity.mass));\n }\n const acceleration = entity.force.mul(invMass);\n entity.velocity.addInPlace(acceleration.mul(dt));\n const linearDampingFactor = 1 - entity.linearDamping;\n entity.velocity.mulInPlace(linearDampingFactor);\n entity.clampVelocities();\n entity.notifyMovementChange();\n const oldPosition = entity.position.clone();\n entity.position.addInPlace(entity.velocity.mul(dt));\n const delta = entity.position.sub(oldPosition);\n if (delta.lengthSquared() > 1e-6) {\n entity.notifyPositionChange();\n }\n const momentOfInertia = entity.mass * entity.radius * entity.radius;\n if (momentOfInertia > 0) {\n const angularAcceleration = entity.torque / momentOfInertia;\n entity.angularVelocity += angularAcceleration * dt;\n }\n const angularDampingFactor = 1 - entity.angularDamping;\n entity.angularVelocity *= angularDampingFactor;\n if (Math.abs(entity.angularVelocity) > entity.maxAngularVelocity) {\n entity.angularVelocity = Math.sign(entity.angularVelocity) * entity.maxAngularVelocity;\n }\n entity.rotation += entity.angularVelocity * dt;\n while (entity.rotation > Math.PI) {\n entity.rotation -= 2 * Math.PI;\n }\n while (entity.rotation < -Math.PI) {\n entity.rotation += 2 * Math.PI;\n }\n entity.clearForces();\n }\n /**\n * Verlet integration\n * \n * More stable than Euler, better energy conservation.\n * Requires storing previous position.\n * \n * @param entity - Entity to integrate\n */\n integrateVerlet(entity) {\n const dt = this.config.deltaTime;\n const dt2 = dt * dt;\n const invMass = entity.invMass;\n if (invMass > 0) {\n entity.force.addInPlace(this.gravity.mul(entity.mass));\n }\n const acceleration = entity.force.mul(invMass);\n const newPosition = entity.position.add(entity.velocity.mul(dt)).add(acceleration.mul(0.5 * dt2));\n const newVelocity = newPosition.sub(entity.position).div(dt);\n const linearDampingFactor = 1 - entity.linearDamping;\n newVelocity.mulInPlace(linearDampingFactor);\n const oldPosition = entity.position.clone();\n entity.position = newPosition;\n entity.velocity = newVelocity;\n entity.clampVelocities();\n entity.notifyMovementChange();\n const delta = entity.position.sub(oldPosition);\n if (delta.lengthSquared() > 1e-6) {\n entity.notifyPositionChange();\n }\n const momentOfInertia = entity.mass * entity.radius * entity.radius;\n if (momentOfInertia > 0) {\n const angularAcceleration = entity.torque / momentOfInertia;\n entity.angularVelocity += angularAcceleration * dt;\n }\n const angularDampingFactor = 1 - entity.angularDamping;\n entity.angularVelocity *= angularDampingFactor;\n if (Math.abs(entity.angularVelocity) > entity.maxAngularVelocity) {\n entity.angularVelocity = Math.sign(entity.angularVelocity) * entity.maxAngularVelocity;\n }\n entity.rotation += entity.angularVelocity * dt;\n while (entity.rotation > Math.PI) {\n entity.rotation -= 2 * Math.PI;\n }\n while (entity.rotation < -Math.PI) {\n entity.rotation += 2 * Math.PI;\n }\n entity.clearForces();\n }\n /**\n * Updates the gravity vector\n * \n * @param gravity - New gravity vector\n */\n setGravity(gravity) {\n this.gravity.copyFrom(gravity);\n }\n /**\n * Gets the current gravity vector\n * \n * @returns Gravity vector\n */\n getGravity() {\n return this.gravity.clone();\n }\n}\nexport {\n IntegrationMethod,\n Integrator\n};\n//# sourceMappingURL=index8.js.map\n","function applyConstantForce(entity, force) {\n entity.applyForce(force);\n}\nfunction applyAttraction(entity, target, strength, maxDistance) {\n const direction = target.sub(entity.position);\n const distance = direction.length();\n if (maxDistance !== void 0 && distance > maxDistance) {\n return;\n }\n if (distance < 1e-3) {\n return;\n }\n direction.normalizeInPlace();\n const force = direction.mul(strength);\n entity.applyForce(force);\n}\nfunction applyRepulsion(entity, source, strength, maxDistance) {\n const direction = entity.position.sub(source);\n const distance = direction.length();\n if (maxDistance !== void 0 && distance > maxDistance) {\n return;\n }\n if (distance < 1e-3) {\n return;\n }\n direction.normalizeInPlace();\n const force = direction.mul(strength);\n entity.applyForce(force);\n}\nfunction applyDirectionalForce(entity, direction, strength) {\n const normalized = direction.normalize();\n const force = normalized.mul(strength);\n entity.applyForce(force);\n}\nfunction applyExplosion(entity, center, strength, radius, falloff = 1) {\n const direction = entity.position.sub(center);\n const distance = direction.length();\n if (distance > radius || distance < 1e-3) {\n return;\n }\n const normalizedDistance = distance / radius;\n const forceStrength = strength * Math.pow(1 - normalizedDistance, falloff);\n direction.normalizeInPlace();\n const force = direction.mul(forceStrength);\n entity.applyImpulse(force);\n}\nfunction applySpring(entityA, entityB, restLength, springConstant, damping) {\n const direction = entityB.position.sub(entityA.position);\n const distance = direction.length();\n if (distance < 1e-3) {\n return;\n }\n const displacement = distance - restLength;\n const springForce = springConstant * displacement;\n direction.normalizeInPlace();\n const force = direction.mul(springForce);\n entityA.applyForce(force.mul(-1));\n entityB.applyForce(force);\n if (damping > 0) {\n const relativeVelocity = entityB.velocity.sub(entityA.velocity);\n const dampingForce = direction.mul(-damping * relativeVelocity.dot(direction));\n entityA.applyForce(dampingForce.mul(-1));\n entityB.applyForce(dampingForce);\n }\n}\nexport {\n applyAttraction,\n applyConstantForce,\n applyDirectionalForce,\n applyExplosion,\n applyRepulsion,\n applySpring\n};\n//# sourceMappingURL=index9.js.map\n","class SpringConstraint {\n /**\n * Creates a new spring constraint\n * \n * @param entityA - First entity\n * @param entityB - Second entity\n * @param restLength - Rest length of the spring\n * @param springConstant - Spring constant (stiffness)\n * @param damping - Damping coefficient\n */\n constructor(entityA, entityB, restLength, springConstant, damping) {\n this.entityA = entityA;\n this.entityB = entityB;\n this.restLength = restLength;\n this.springConstant = springConstant;\n this.damping = damping;\n }\n /**\n * @inheritdoc\n */\n update(_deltaTime) {\n const direction = this.entityB.position.sub(this.entityA.position);\n const distance = direction.length();\n if (distance < 1e-3) {\n return;\n }\n const displacement = distance - this.restLength;\n const springForce = this.springConstant * displacement;\n direction.normalizeInPlace();\n const force = direction.mul(springForce);\n this.entityA.applyForce(force.mul(-1));\n this.entityB.applyForce(force);\n if (this.damping > 0) {\n const relativeVelocity = this.entityB.velocity.sub(this.entityA.velocity);\n const dampingForce = direction.mul(-this.damping * relativeVelocity.dot(direction));\n this.entityA.applyForce(dampingForce.mul(-1));\n this.entityB.applyForce(dampingForce);\n }\n }\n /**\n * Gets the current length of the spring\n * \n * @returns Current length\n */\n getCurrentLength() {\n return this.entityA.position.distanceTo(this.entityB.position);\n }\n}\nclass DistanceConstraint {\n /**\n * Creates a new distance constraint\n * \n * @param entityA - First entity\n * @param entityB - Second entity\n * @param targetDistance - Target distance to maintain\n * @param stiffness - Constraint stiffness (0-1, higher = stiffer)\n */\n constructor(entityA, entityB, targetDistance, stiffness = 0.9) {\n this.entityA = entityA;\n this.entityB = entityB;\n this.targetDistance = targetDistance;\n this.stiffness = stiffness;\n }\n /**\n * @inheritdoc\n */\n update(_deltaTime) {\n const direction = this.entityB.position.sub(this.entityA.position);\n const distance = direction.length();\n if (distance < 1e-3) {\n return;\n }\n const error = distance - this.targetDistance;\n if (Math.abs(error) < 1e-3) {\n return;\n }\n direction.normalizeInPlace();\n const totalInvMass = this.entityA.invMass + this.entityB.invMass;\n if (totalInvMass === 0) {\n return;\n }\n const correction = error * this.stiffness / totalInvMass;\n const correctionA = direction.mul(-correction * this.entityA.invMass);\n const correctionB = direction.mul(correction * this.entityB.invMass);\n if (!this.entityA.isStatic()) {\n this.entityA.position.addInPlace(correctionA);\n }\n if (!this.entityB.isStatic()) {\n this.entityB.position.addInPlace(correctionB);\n }\n }\n /**\n * Gets the current distance\n * \n * @returns Current distance\n */\n getCurrentDistance() {\n return this.entityA.position.distanceTo(this.entityB.position);\n }\n}\nclass AnchorConstraint {\n /**\n * Creates a new anchor constraint\n * \n * @param entity - Entity to anchor\n * @param anchorPoint - Anchor point in world space\n * @param stiffness - Constraint stiffness (0-1)\n */\n constructor(entity, anchorPoint, stiffness = 0.9) {\n this.entity = entity;\n this.anchorPoint = anchorPoint.clone();\n this.stiffness = stiffness;\n }\n /**\n * @inheritdoc\n */\n update(_deltaTime) {\n if (this.entity.isStatic()) {\n return;\n }\n const direction = this.anchorPoint.sub(this.entity.position);\n const distance = direction.length();\n if (distance < 1e-3) {\n return;\n }\n direction.normalizeInPlace();\n const correction = direction.mul(distance * this.stiffness);\n this.entity.position.addInPlace(correction);\n }\n /**\n * Sets the anchor point\n * \n * @param point - New anchor point\n */\n setAnchorPoint(point) {\n this.anchorPoint.copyFrom(point);\n }\n /**\n * Gets the anchor point\n * \n * @returns Anchor point\n */\n getAnchorPoint() {\n return this.anchorPoint.clone();\n }\n}\nexport {\n AnchorConstraint,\n DistanceConstraint,\n SpringConstraint\n};\n//# sourceMappingURL=index10.js.map\n","import { AABB } from \"./index4.js\";\nimport { Vector2 } from \"./index2.js\";\nimport { CircleCollider } from \"./index11.js\";\nclass AABBCollider {\n /**\n * Creates a new AABB collider\n * \n * @param entity - Entity this collider belongs to\n */\n constructor(entity) {\n this.entity = entity;\n }\n /**\n * Gets the AABB bounds\n * \n * @returns AABB\n */\n getBounds() {\n const center = this.entity.position;\n const halfWidth = this.entity.width / 2;\n const halfHeight = this.entity.height / 2;\n return new AABB(\n center.x - halfWidth,\n center.y - halfHeight,\n center.x + halfWidth,\n center.y + halfHeight\n );\n }\n /**\n * @inheritdoc\n */\n testCollision(other) {\n if (other instanceof CircleCollider) {\n const collision = other.testCollision(this);\n if (collision) {\n return {\n entityA: collision.entityB,\n entityB: collision.entityA,\n contacts: collision.contacts.map((c) => ({\n point: c.point,\n normal: c.normal.mul(-1),\n depth: c.depth\n })),\n normal: collision.normal.mul(-1),\n depth: collision.depth\n };\n }\n return null;\n } else if (other instanceof AABBCollider) {\n return this.testAABBAABB(other);\n }\n return null;\n }\n /**\n * Tests collision with another AABB\n * \n * @param other - Other AABB collider\n * @returns Collision info or null\n */\n testAABBAABB(other) {\n const aabbA = this.getBounds();\n const aabbB = other.getBounds();\n if (!aabbA.intersects(aabbB)) {\n return null;\n }\n const intersection = aabbA.intersection(aabbB);\n if (!intersection) {\n return null;\n }\n const overlapX = Math.min(\n aabbA.maxX - aabbB.minX,\n aabbB.maxX - aabbA.minX\n );\n const overlapY = Math.min(\n aabbA.maxY - aabbB.minY,\n aabbB.maxY - aabbA.minY\n );\n let normal;\n let depth;\n if (overlapX < overlapY) {\n depth = overlapX;\n normal = aabbA.getCenterX() < aabbB.getCenterX() ? new Vector2(1, 0) : new Vector2(-1, 0);\n } else {\n depth = overlapY;\n normal = aabbA.getCenterY() < aabbB.getCenterY() ? new Vector2(0, 1) : new Vector2(0, -1);\n }\n const contactPoint = intersection.getCenter();\n return {\n entityA: this.entity,\n entityB: other.entity,\n contacts: [\n {\n point: contactPoint,\n normal,\n depth\n }\n ],\n normal,\n depth\n };\n }\n /**\n * @inheritdoc\n */\n getContactPoints(other) {\n const collision = this.testCollision(other);\n return collision?.contacts ?? [];\n }\n /**\n * @inheritdoc\n */\n getEntity() {\n return this.entity;\n }\n /**\n * @inheritdoc\n */\n raycast(ray) {\n const bounds = this.getBounds();\n const tMin = (bounds.minX - ray.origin.x) / ray.direction.x;\n const tMax = (bounds.maxX - ray.origin.x) / ray.direction.x;\n const tymin = (bounds.minY - ray.origin.y) / ray.direction.y;\n const tymax = (bounds.maxY - ray.origin.y) / ray.direction.y;\n const t1 = Math.min(tMin, tMax);\n const t2 = Math.max(tMin, tMax);\n const t3 = Math.min(tymin, tymax);\n const t4 = Math.max(tymin, tymax);\n const tNear = Math.max(t1, t3);\n const tFar = Math.min(t2, t4);\n if (tNear > tFar || tFar < 0) {\n return null;\n }\n if (tNear > ray.length) {\n return null;\n }\n const t = tNear < 0 ? tFar : tNear;\n if (t < 0) return null;\n const point = ray.getPoint(t);\n let normal = new Vector2(0, 0);\n if (Math.abs(point.x - bounds.minX) < 1e-5) normal.set(-1, 0);\n else if (Math.abs(point.x - bounds.maxX) < 1e-5) normal.set(1, 0);\n else if (Math.abs(point.y - bounds.minY) < 1e-5) normal.set(0, -1);\n else if (Math.abs(point.y - bounds.maxY) < 1e-5) normal.set(0, 1);\n return {\n entity: this.entity,\n point,\n normal,\n distance: t\n };\n }\n}\nexport {\n AABBCollider\n};\n//# sourceMappingURL=index12.js.map\n","import { Vector2 } from \"./index2.js\";\nimport { AABB } from \"./index4.js\";\nimport { AABBCollider } from \"./index12.js\";\nclass CircleCollider {\n /**\n * Creates a new circle collider\n * \n * @param entity - Entity this collider belongs to\n */\n constructor(entity) {\n this.entity = entity;\n }\n /**\n * Gets the radius of the circle\n * \n * @returns Radius\n */\n getRadius() {\n return this.entity.radius;\n }\n /**\n * Gets the center position of the circle\n * \n * @returns Center position\n */\n getCenter() {\n return this.entity.position;\n }\n /**\n * @inheritdoc\n */\n getBounds() {\n const radius = this.entity.radius;\n const center = this.entity.position;\n return new AABB(\n center.x - radius,\n center.y - radius,\n center.x + radius,\n center.y + radius\n );\n }\n /**\n * @inheritdoc\n */\n testCollision(other) {\n if (other instanceof CircleCollider) {\n return this.testCircleCircle(other);\n } else if (other instanceof AABBCollider) {\n return this.testCircleAABB(other);\n }\n return null;\n }\n /**\n * Tests collision with another circle\n * \n * @param other - Other circle collider\n * @returns Collision info or null\n */\n testCircleCircle(other) {\n const centerA = this.getCenter();\n const centerB = other.getCenter();\n const radiusA = this.getRadius();\n const radiusB = other.getRadius();\n const distance = centerA.distanceTo(centerB);\n const minDistance = radiusA + radiusB;\n if (distance >= minDistance) {\n return null;\n }\n const depth = minDistance - distance;\n let normal;\n if (distance < 1e-5) {\n normal = new Vector2(1, 0);\n } else {\n normal = centerB.sub(centerA).normalize();\n }\n const contactPoint = centerA.add(normal.mul(radiusA));\n return {\n entityA: this.entity,\n entityB: other.entity,\n contacts: [\n {\n point: contactPoint,\n normal,\n depth\n }\n ],\n normal,\n depth\n };\n }\n /**\n * Tests collision with an AABB\n * \n * @param other - AABB collider\n * @returns Collision info or null\n */\n testCircleAABB(other) {\n const circleCenter = this.getCenter();\n const circleRadius = this.getRadius();\n const aabb = other.getBounds();\n const closestX = Math.max(aabb.minX, Math.min(circleCenter.x, aabb.maxX));\n const closestY = Math.max(aabb.minY, Math.min(circleCenter.y, aabb.maxY));\n const distanceSq = (circleCenter.x - closestX) ** 2 + (circleCenter.y - closestY) ** 2;\n if (distanceSq > circleRadius * circleRadius) {\n return null;\n }\n const distance = Math.sqrt(distanceSq);\n const depth = circleRadius - distance;\n let normal;\n if (distance < 1e-5) {\n const distToLeft = circleCenter.x - aabb.minX;\n const distToRight = aabb.maxX - circleCenter.x;\n const distToBottom = circleCenter.y - aabb.minY;\n const distToTop = aabb.maxY - circleCenter.y;\n const minDist = Math.min(distToLeft, distToRight, distToBottom, distToTop);\n if (minDist === distToLeft) {\n normal = new Vector2(-1, 0);\n } else if (minDist === distToRight) {\n normal = new Vector2(1, 0);\n } else if (minDist === distToBottom) {\n normal = new Vector2(0, -1);\n } else {\n normal = new Vector2(0, 1);\n }\n } else {\n normal = new Vector2(closestX - circleCenter.x, closestY - circleCenter.y).normalize();\n }\n const contactPoint = new Vector2(closestX, closestY);\n return {\n entityA: this.entity,\n entityB: other.getEntity(),\n contacts: [\n {\n point: contactPoint,\n normal,\n depth\n }\n ],\n normal,\n depth\n };\n }\n /**\n * @inheritdoc\n */\n getContactPoints(other) {\n const collision = this.testCollision(other);\n return collision?.contacts ?? [];\n }\n /**\n * @inheritdoc\n */\n getEntity() {\n return this.entity;\n }\n /**\n * @inheritdoc\n */\n raycast(ray) {\n const center = this.getCenter();\n const radius = this.getRadius();\n const m = ray.origin.sub(center);\n const b = m.dot(ray.direction);\n const c = m.dot(m) - radius * radius;\n if (c > 0 && b > 0) return null;\n const discr = b * b - c;\n if (discr < 0) return null;\n let t = -b - Math.sqrt(discr);\n if (t < 0) t = 0;\n if (t > ray.length) return null;\n const point = ray.getPoint(t);\n const normal = point.sub(center).normalize();\n return {\n entity: this.entity,\n point,\n normal,\n distance: t\n };\n }\n}\nexport {\n CircleCollider\n};\n//# sourceMappingURL=index11.js.map\n","import { Vector2 } from \"./index2.js\";\nimport { AABB } from \"./index4.js\";\nimport { CircleCollider } from \"./index11.js\";\nimport { AABBCollider } from \"./index12.js\";\nclass CapsuleCollider {\n constructor(entity) {\n this.entity = entity;\n }\n getBounds() {\n const { radius, height } = this.getCapsuleConfig();\n const pos = this.entity.position;\n const halfHeight = Math.max(0, height / 2 - radius);\n return new AABB(\n pos.x - radius,\n pos.y - halfHeight - radius,\n pos.x + radius,\n pos.y + halfHeight + radius\n );\n }\n getEntity() {\n return this.entity;\n }\n raycast(ray) {\n const bounds = this.getBounds();\n const tMin = (bounds.minX - ray.origin.x) / ray.direction.x;\n const tMax = (bounds.maxX - ray.origin.x) / ray.direction.x;\n const tymin = (bounds.minY - ray.origin.y) / ray.direction.y;\n const tymax = (bounds.maxY - ray.origin.y) / ray.direction.y;\n const t1 = Math.min(tMin, tMax);\n const t2 = Math.max(tMin, tMax);\n const t3 = Math.min(tymin, tymax);\n const t4 = Math.max(tymin, tymax);\n const tNear = Math.max(t1, t3);\n const tFar = Math.min(t2, t4);\n if (tNear > tFar || tFar < 0) return null;\n if (tNear > ray.length) return null;\n const t = tNear < 0 ? tFar : tNear;\n if (t < 0) return null;\n const point = ray.getPoint(t);\n let normal = new Vector2(0, 0);\n if (Math.abs(point.x - bounds.minX) < 1e-5) normal.set(-1, 0);\n else if (Math.abs(point.x - bounds.maxX) < 1e-5) normal.set(1, 0);\n else if (Math.abs(point.y - bounds.minY) < 1e-5) normal.set(0, -1);\n else if (Math.abs(point.y - bounds.maxY) < 1e-5) normal.set(0, 1);\n return {\n entity: this.entity,\n point,\n normal,\n distance: t\n };\n }\n testCollision(other) {\n if (other instanceof CircleCollider) {\n return this.testCircle(other);\n } else if (other instanceof AABBCollider) {\n return this.testAABB(other);\n } else if (other instanceof CapsuleCollider) {\n return this.testCapsule(other);\n }\n return other.testCollision(this);\n }\n getContactPoints(other) {\n const collision = this.testCollision(other);\n return collision ? collision.contacts : [];\n }\n getCapsuleConfig() {\n if (this.entity.capsule) {\n return this.entity.capsule;\n }\n return { radius: this.entity.radius || 10, height: this.entity.height || 30 };\n }\n getSegment() {\n const { radius, height } = this.getCapsuleConfig();\n const pos = this.entity.position;\n const halfSegment = Math.max(0, height / 2 - radius);\n return {\n a: new Vector2(pos.x, pos.y - halfSegment),\n b: new Vector2(pos.x, pos.y + halfSegment)\n };\n }\n testCircle(circle) {\n const seg = this.getSegment();\n const circleCenter = circle.getCenter();\n const circleRadius = circle.getRadius();\n const capRadius = this.getCapsuleConfig().radius;\n const closest = this.closestPointOnSegment(seg.a, seg.b, circleCenter);\n const distSq = closest.distanceToSquared(circleCenter);\n const minDist = capRadius + circleRadius;\n if (distSq > minDist * minDist) {\n return null;\n }\n const dist = Math.sqrt(distSq);\n const normal = dist > 0 ? circleCenter.sub(closest).normalize() : new Vector2(1, 0);\n const depth = minDist - dist;\n return {\n entityA: this.entity,\n entityB: circle.getEntity(),\n // Convention: Normal points from A to B.\n // Here A is Capsule, B is Circle.\n // Vector from closest (on capsule) to center (circle) is B - A.\n // So normal should be (circleCenter - closest).normalized().\n // Wait, if I return normal, it should be the direction to push B out of A?\n // Usually normal points from A to B.\n // Let's stick to: normal points from A to B.\n contacts: [{\n point: closest.add(normal.mul(capRadius)),\n normal,\n depth\n }],\n normal,\n depth\n };\n }\n testAABB(box) {\n const seg = this.getSegment();\n const capRadius = this.getCapsuleConfig().radius;\n const boxBounds = box.getBounds();\n const closestOnSeg = this.closestPointOnSegment(seg.a, seg.b, box.getBounds().getCenter());\n const closestOnBox = boxBounds.clamp(closestOnSeg);\n const distSq = closestOnSeg.distanceToSquared(closestOnBox);\n if (distSq > capRadius * capRadius) {\n return null;\n }\n const dist = Math.sqrt(distSq);\n const normal = dist > 0 ? closestOnBox.sub(closestOnSeg).normalize() : new Vector2(0, 1);\n const depth = capRadius - dist;\n return {\n entityA: this.entity,\n entityB: box.getEntity(),\n contacts: [{\n point: closestOnBox,\n normal,\n depth\n }],\n normal,\n depth\n };\n }\n testCapsule(other) {\n const segA = this.getSegment();\n const segB = other.getSegment();\n const rA = this.getCapsuleConfig().radius;\n const rB = other.getCapsuleConfig().radius;\n const { p1, p2 } = this.closestPointsSegmentSegment(segA.a, segA.b, segB.a, segB.b);\n const distSq = p1.distanceToSquared(p2);\n const minDist = rA + rB;\n if (distSq > minDist * minDist) {\n return null;\n }\n const dist = Math.sqrt(distSq);\n const normal = dist > 0 ? p2.sub(p1).normalize() : new Vector2(1, 0);\n const depth = minDist - dist;\n return {\n entityA: this.entity,\n entityB: other.getEntity(),\n contacts: [{\n point: p1.add(normal.mul(rA)),\n normal,\n depth\n }],\n normal,\n depth\n };\n }\n closestPointOnSegment(a, b, p) {\n const ab = b.sub(a);\n const t = p.sub(a).dot(ab) / ab.dot(ab);\n return a.add(ab.mul(Math.max(0, Math.min(1, t))));\n }\n // http://geomalgorithms.com/a07-_distance.html\n closestPointsSegmentSegment(p1, p2, p3, p4) {\n const u = p2.sub(p1);\n const v = p4.sub(p3);\n const w = p1.sub(p3);\n const a = u.dot(u);\n const b = u.dot(v);\n const c = v.dot(v);\n const d = u.dot(w);\n const e = v.dot(w);\n const D = a * c - b * b;\n let sc, sN, sD = D;\n let tc, tN, tD = D;\n if (D < 1e-8) {\n sN = 0;\n sD = 1;\n tN = e;\n tD = c;\n } else {\n sN = b * e - c * d;\n tN = a * e - b * d;\n if (sN < 0) {\n sN = 0;\n tN = e;\n tD = c;\n } else if (sN > sD) {\n sN = sD;\n tN = e + b;\n tD = c;\n }\n }\n if (tN < 0) {\n tN = 0;\n if (-d < 0) sN = 0;\n else if (-d > a) sN = sD;\n else {\n sN = -d;\n sD = a;\n }\n } else if (tN > tD) {\n tN = tD;\n if (-d + b < 0) sN = 0;\n else if (-d + b > a) sN = sD;\n else {\n sN = -d + b;\n sD = a;\n }\n }\n sc = Math.abs(sN) < 1e-8 ? 0 : sN / sD;\n tc = Math.abs(tN) < 1e-8 ? 0 : tN / tD;\n return {\n p1: p1.add(u.mul(sc)),\n p2: p3.add(v.mul(tc))\n };\n }\n}\nexport {\n CapsuleCollider\n};\n//# sourceMappingURL=index13.js.map\n","import { AABB } from \"./index4.js\";\nimport { Vector2 } from \"./index2.js\";\nimport { Entity } from \"./index7.js\";\nimport { AABBCollider } from \"./index12.js\";\nimport { CircleCollider } from \"./index11.js\";\nconst entityToPolygonConfig = /* @__PURE__ */ new WeakMap();\nfunction assignPolygonCollider(entity, config) {\n entityToPolygonConfig.set(entity, config);\n}\nclass PolygonCollider {\n // local-space convex polygons\n constructor(entity) {\n this.entity = entity;\n const cfg = entityToPolygonConfig.get(entity);\n if (!cfg) {\n this.convexParts = [];\n return;\n }\n if (cfg.parts && cfg.parts.length > 0) {\n this.convexParts = cfg.parts.map((p) => p.slice());\n } else if (cfg.vertices && cfg.vertices.length >= 3) {\n this.convexParts = [cfg.vertices.slice()];\n } else {\n this.convexParts = [];\n }\n }\n getEntity() {\n return this.entity;\n }\n getBounds() {\n const rotation = this.entity.rotation;\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n for (const part of this.convexParts) {\n for (const v of part) {\n const x = v.x * cos - v.y * sin + this.entity.position.x;\n const y = v.x * sin + v.y * cos + this.entity.position.y;\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n }\n if (minX === Number.POSITIVE_INFINITY) {\n minX = maxX = this.entity.position.x;\n minY = maxY = this.entity.position.y;\n }\n return new AABB(minX, minY, maxX, maxY);\n }\n getContactPoints(other) {\n const info = this.testCollision(other);\n return info ? info.contacts : [];\n }\n testCollision(other) {\n if (other instanceof CircleCollider) {\n return this.testPolygonCircle(other);\n }\n if (other instanceof AABBCollider) {\n return this.testPolygonAABB(other);\n }\n if (other instanceof PolygonCollider) {\n return this.testPolygonPolygon(other);\n }\n return null;\n }\n testPolygonAABB(other) {\n const b = other.getBounds();\n const halfW = (b.maxX - b.minX) / 2;\n const halfH = (b.maxY - b.minY) / 2;\n const center = new Vector2((b.minX + b.maxX) / 2, (b.minY + b.maxY) / 2);\n const aabbPolyLocal = [\n new Vector2(-halfW, -halfH),\n new Vector2(halfW, -halfH),\n new Vector2(halfW, halfH),\n new Vector2(-halfW, halfH)\n ];\n const tempEntity = new Entity({ position: center, rotation: 0, mass: 0 });\n entityToPolygonConfig.set(tempEntity, { vertices: aabbPolyLocal, isConvex: true });\n const tempPoly = new PolygonCollider(tempEntity);\n const result = this.testPolygonPolygon(tempPoly);\n if (!result) return null;\n return {\n entityA: result.entityA === tempEntity ? this.entity : result.entityA,\n entityB: other.getEntity(),\n contacts: result.contacts,\n normal: result.normal,\n depth: result.depth\n };\n }\n testPolygonCircle(other) {\n let bestInfo = null;\n const center = other.getCenter();\n const r = other.getRadius();\n for (const part of this.getWorldParts()) {\n let minDistSq = Number.POSITIVE_INFINITY;\n let closestPoint = null;\n for (let i = 0; i < part.length; i++) {\n const a = part[i];\n const b = part[(i + 1) % part.length];\n if (!a || !b) continue;\n const cp = closestPointOnSegment(a, b, center);\n const dsq = center.distanceToSquared(cp);\n if (dsq < minDistSq) {\n minDistSq = dsq;\n closestPoint = cp;\n }\n }\n if (!closestPoint) continue;\n const dist = Math.sqrt(minDistSq);\n if (dist <= r) {\n const normal = dist > 1e-6 ? center.sub(closestPoint).normalize() : new Vector2(1, 0);\n const depth = r - dist;\n const info = {\n entityA: this.entity,\n entityB: other.getEntity(),\n contacts: [{ point: closestPoint, normal, depth }],\n normal,\n depth\n };\n if (!bestInfo || info.depth > bestInfo.depth) bestInfo = info;\n }\n }\n return bestInfo;\n }\n testPolygonPolygon(other) {\n let bestDepth = Number.POSITIVE_INFINITY;\n let bestAxis = null;\n let flipNormal = false;\n const partsA = this.getWorldParts();\n const partsB = other.getWorldParts();\n let collided = false;\n for (const a of partsA) {\n for (const b of partsB) {\n const axes = gatherSATAxes(a, b);\n let overlapDepth = Number.POSITIVE_INFINITY;\n let axisForPair = null;\n for (const axis of axes) {\n const projA = projectOntoAxis(a, axis);\n const projB = projectOntoAxis(b, axis);\n const overlap = intervalOverlap(projA.min, projA.max, projB.min, projB.max);\n if (overlap <= 0) {\n overlapDepth = -1;\n break;\n }\n if (overlap < overlapDepth) {\n overlapDepth = overlap;\n axisForPair = axis;\n }\n }\n if (overlapDepth > 0 && axisForPair) {\n collided = true;\n if (overlapDepth < bestDepth) {\n bestDepth = overlapDepth;\n bestAxis = axisForPair;\n const cA = polygonCentroid(a);\n const cB = polygonCentroid(b);\n flipNormal = cA.sub(cB).dot(bestAxis) > 0;\n }\n }\n }\n }\n if (!collided || !bestAxis) return null;\n const normal = flipNormal ? bestAxis.mul(-1) : bestAxis.clone();\n const depth = bestDepth;\n const centroidA = polygonCentroid(partsA[0]);\n const contactPoint = centroidA.add(normal.mul(0));\n return {\n entityA: this.entity,\n entityB: other.getEntity(),\n contacts: [{ point: contactPoint, normal, depth }],\n normal,\n depth\n };\n }\n /**\n * @inheritdoc\n */\n raycast(ray) {\n const bounds = this.getBounds();\n const tMin = (bounds.minX - ray.origin.x) / ray.direction.x;\n const tMax = (bounds.maxX - ray.origin.x) / ray.direction.x;\n const tymin = (bounds.minY - ray.origin.y) / ray.direction.y;\n const tymax = (bounds.maxY - ray.origin.y) / ray.direction.y;\n const t1 = Math.min(tMin, tMax);\n const t2 = Math.max(tMin, tMax);\n const t3 = Math.min(tymin, tymax);\n const t4 = Math.max(tymin, tymax);\n const tNear = Math.max(t1, t3);\n const tFar = Math.min(t2, t4);\n if (tNear > tFar || tFar < 0) return null;\n if (tNear > ray.length) return null;\n let closestHit = null;\n const parts = this.getWorldParts();\n for (const part of parts) {\n for (let i = 0; i < part.length; i++) {\n const p1 = part[i];\n const p2 = part[(i + 1) % part.length];\n if (!p1 || !p2) continue;\n const hit = this.rayCastSegment(ray, p1, p2);\n if (hit) {\n if (!closestHit || hit.distance < closestHit.distance) {\n closestHit = hit;\n }\n }\n }\n }\n return closestHit;\n }\n rayCastSegment(ray, p1, p2) {\n const v1 = ray.origin;\n const v2 = ray.origin.add(ray.direction);\n const v3 = p1;\n const v4 = p2;\n const den = (v1.x - v2.x) * (v3.y - v4.y) - (v1.y - v2.y) * (v3.x - v4.x);\n if (den === 0) return null;\n const t = ((v1.x - v3.x) * (v3.y - v4.y) - (v1.y - v3.y) * (v3.x - v4.x)) / den;\n const u = -((v1.x - v2.x) * (v1.y - v3.y) - (v1.y - v2.y) * (v1.x - v3.x)) / den;\n if (t >= 0 && t <= ray.length && u >= 0 && u <= 1) {\n const point = new Vector2(\n v1.x + t * (v2.x - v1.x),\n v1.y + t * (v2.y - v1.y)\n );\n const segmentDir = p2.sub(p1).normalize();\n let normal = new Vector2(-segmentDir.y, segmentDir.x);\n if (normal.dot(ray.direction) > 0) {\n normal = normal.mul(-1);\n }\n return {\n entity: this.entity,\n point,\n normal,\n distance: t\n };\n }\n return null;\n }\n getWorldParts() {\n const rotation = this.entity.rotation;\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n const px = this.entity.position.x;\n const py = this.entity.position.y;\n const worldParts = [];\n for (const part of this.convexParts) {\n const w = new Array(part.length);\n for (let i = 0; i < part.length; i++) {\n const v = part[i];\n if (!v) continue;\n w[i] = new Vector2(v.x * cos - v.y * sin + px, v.x * sin + v.y * cos + py);\n }\n worldParts.push(w);\n }\n return worldParts;\n }\n}\nfunction closestPointOnSegment(a, b, p) {\n const ab = b.sub(a);\n const ap = p.sub(a);\n const t = Math.max(0, Math.min(1, ap.dot(ab) / ab.dot(ab)));\n return a.add(ab.mul(t));\n}\nfunction gatherSATAxes(a, b) {\n const axes = [];\n const pushAxis = (p, i) => {\n const p0 = p[i];\n const p1 = p[(i + 1) % p.length];\n if (!p0 || !p1) return;\n const edge = p1.sub(p0);\n const axis = new Vector2(-edge.y, edge.x).normalize();\n axes.push(axis);\n };\n for (let i = 0; i < a.length; i++) pushAxis(a, i);\n for (let i = 0; i < b.length; i++) pushAxis(b, i);\n return axes;\n}\nfunction projectOntoAxis(poly, axis) {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n for (const v of poly) {\n const p = v.dot(axis);\n if (p < min) min = p;\n if (p > max) max = p;\n }\n return { min, max };\n}\nfunction intervalOverlap(minA, maxA, minB, maxB) {\n return Math.min(maxA, maxB) - Math.max(minA, minB);\n}\nfunction polygonCentroid(poly) {\n let cx = 0;\n let cy = 0;\n for (const v of poly) {\n cx += v.x;\n cy += v.y;\n }\n const n = poly.length > 0 ? poly.length : 1;\n return new Vector2(cx / n, cy / n);\n}\nexport {\n PolygonCollider,\n assignPolygonCollider,\n entityToPolygonConfig\n};\n//# sourceMappingURL=index19.js.map\n","import { CircleCollider } from \"./index11.js\";\nimport { AABBCollider } from \"./index12.js\";\nimport { entityToPolygonConfig, PolygonCollider } from \"./index19.js\";\nimport { CapsuleCollider } from \"./index13.js\";\nconst colliderCache = /* @__PURE__ */ new WeakMap();\nfunction createCollider(entity) {\n const cached = colliderCache.get(entity);\n if (cached) {\n return cached;\n }\n let collider = null;\n if (entityToPolygonConfig.has(entity)) {\n collider = new PolygonCollider(entity);\n } else if (entity.capsule) {\n collider = new CapsuleCollider(entity);\n } else if (entity.radius > 0) {\n collider = new CircleCollider(entity);\n } else if (entity.width > 0 && entity.height > 0) {\n collider = new AABBCollider(entity);\n }\n if (collider) {\n colliderCache.set(entity, collider);\n }\n return collider;\n}\nfunction testCollision(entityA, entityB) {\n if (!entityA.canCollideWith(entityB)) {\n return null;\n }\n if (entityA.isStatic() && entityB.isStatic()) {\n return null;\n }\n const colliderA = createCollider(entityA);\n const colliderB = createCollider(entityB);\n if (!colliderA || !colliderB) {\n return null;\n }\n return colliderA.testCollision(colliderB);\n}\nfunction findCollisions(entities) {\n const collisions = [];\n for (let i = 0; i < entities.length; i++) {\n const entityA = entities[i];\n if (!entityA) continue;\n for (let j = i + 1; j < entities.length; j++) {\n const entityB = entities[j];\n if (!entityB) continue;\n const collision = testCollision(entityA, entityB);\n if (collision) {\n collisions.push(collision);\n }\n }\n }\n return collisions;\n}\nexport {\n createCollider,\n findCollisions,\n testCollision\n};\n//# sourceMappingURL=index18.js.map\n","import { createCollider } from \"./index18.js\";\nclass SpatialHashCell {\n constructor() {\n this.entities = [];\n }\n /**\n * Adds an entity to this cell\n * \n * @param entity - Entity to add\n */\n add(entity) {\n if (this.entities.indexOf(entity) === -1) {\n this.entities.push(entity);\n }\n }\n /**\n * Removes an entity from this cell\n * \n * @param entity - Entity to remove\n */\n remove(entity) {\n const index = this.entities.indexOf(entity);\n if (index !== -1) {\n const last = this.entities[this.entities.length - 1];\n if (last) {\n this.entities[index] = last;\n }\n this.entities.pop();\n }\n }\n /**\n * Clears all entities from this cell\n */\n clear() {\n this.entities.length = 0;\n }\n}\nclass SpatialHash {\n /**\n * Creates a new spatial hash\n * \n * @param cellSize - Size of each cell in world units\n * @param gridWidth - Number of cells horizontally\n * @param gridHeight - Number of cells vertically (default: same as width)\n */\n constructor(cellSize, gridWidth, gridHeight) {\n this.cellSize = cellSize;\n this.gridWidth = gridWidth;\n this.gridHeight = gridHeight ?? gridWidth;\n this.cells = /* @__PURE__ */ new Map();\n this.entityCells = /* @__PURE__ */ new WeakMap();\n }\n /**\n * Converts world coordinates to grid coordinates\n * \n * @param x - World X coordinate\n * @param y - World Y coordinate\n * @returns Grid coordinates\n */\n worldToGrid(x, y) {\n return {\n x: Math.floor(x / this.cellSize),\n y: Math.floor(y / this.cellSize)\n };\n }\n /**\n * Creates a cell key from grid coordinates\n * \n * @param gridX - Grid X coordinate\n * @param gridY - Grid Y coordinate\n * @returns Numeric cell key\n */\n getKey(gridX, gridY) {\n return (gridX & 65535) << 16 | gridY & 65535;\n }\n /**\n * Gets or creates a cell at grid coordinates\n * \n * @param key - Cell key\n * @returns Cell instance\n */\n getCell(key) {\n let cell = this.cells.get(key);\n if (!cell) {\n cell = new SpatialHashCell();\n this.cells.set(key, cell);\n }\n return cell;\n }\n /**\n * Gets all cell keys that an entity's AABB overlaps\n * \n * @param entity - Entity to get cells for\n * @param outKeys - Array to store keys in (to avoid allocation)\n * @returns Number of keys added\n */\n getEntityKeys(entity, outKeys) {\n const collider = createCollider(entity);\n if (!collider) {\n return 0;\n }\n const bounds = collider.getBounds();\n const minGrid = this.worldToGrid(bounds.minX, bounds.minY);\n const maxGrid = this.worldToGrid(bounds.maxX, bounds.maxY);\n let count = 0;\n outKeys.length = 0;\n for (let x = minGrid.x; x <= maxGrid.x; x++) {\n for (let y = minGrid.y; y <= maxGrid.y; y++) {\n const wrappedX = (x % this.gridWidth + this.gridWidth) % this.gridWidth;\n const wrappedY = (y % this.gridHeight + this.gridHeight) % this.gridHeight;\n outKeys.push(this.getKey(wrappedX, wrappedY));\n count++;\n }\n }\n return count;\n }\n /**\n * Inserts an entity into the spatial hash\n * \n * @param entity - Entity to insert\n */\n insert(entity) {\n const newKeys = [];\n this.getEntityKeys(entity, newKeys);\n this.entityCells.set(entity, newKeys);\n for (const key of newKeys) {\n const cell = this.getCell(key);\n cell.add(entity);\n }\n }\n /**\n * Removes an entity from the spatial hash\n * \n * @param entity - Entity to remove\n */\n remove(entity) {\n const keys = this.entityCells.get(entity);\n if (!keys) {\n return;\n }\n for (const key of keys) {\n const cell = this.cells.get(key);\n if (cell) {\n cell.remove(entity);\n }\n }\n this.entityCells.delete(entity);\n }\n /**\n * Updates an entity's position in the spatial hash\n * \n * Removes and re-inserts the entity if it moved to different cells.\n * \n * @param entity - Entity to update\n */\n update(entity) {\n const oldKeys = this.entityCells.get(entity);\n const newKeys = [];\n this.getEntityKeys(entity, newKeys);\n if (oldKeys && oldKeys.length === newKeys.length) {\n let match = true;\n for (let i = 0; i < oldKeys.length; i++) {\n if (oldKeys[i] !== newKeys[i]) {\n match = false;\n break;\n }\n }\n if (match) return;\n }\n if (oldKeys) {\n for (const key of oldKeys) {\n const cell = this.cells.get(key);\n if (cell) {\n cell.remove(entity);\n }\n }\n }\n this.entityCells.set(entity, newKeys);\n for (const key of newKeys) {\n const cell = this.getCell(key);\n cell.add(entity);\n }\n }\n /**\n * Queries entities near a given entity\n * \n * @param entity - Entity to query around\n * @param results - Optional Set to store results in (avoids allocation)\n * @returns Set of nearby entities (excluding the query entity)\n */\n query(entity, results = /* @__PURE__ */ new Set()) {\n let keys = this.entityCells.get(entity);\n if (!keys) {\n keys = [];\n this.getEntityKeys(entity, keys);\n }\n results.clear();\n for (const key of keys) {\n const cell = this.cells.get(key);\n if (cell) {\n const entities = cell.entities;\n for (let i = 0; i < entities.length; i++) {\n const other = entities[i];\n if (other && other !== entity) {\n results.add(other);\n }\n }\n }\n }\n return results;\n }\n /**\n * Queries entities in an AABB region\n * \n * @param bounds - AABB to query\n * @returns Set of entities in the region\n */\n queryAABB(bounds) {\n const minGrid = this.worldToGrid(bounds.minX, bounds.minY);\n const maxGrid = this.worldToGrid(bounds.maxX, bounds.maxY);\n const results = /* @__PURE__ */ new Set();\n for (let x = minGrid.x; x <= maxGrid.x; x++) {\n for (let y = minGrid.y; y <= maxGrid.y; y++) {\n const wrappedX = (x % this.gridWidth + this.gridWidth) % this.gridWidth;\n const wrappedY = (y % this.gridHeight + this.gridHeight) % this.gridHeight;\n const key = this.getKey(wrappedX, wrappedY);\n const cell = this.cells.get(key);\n if (cell) {\n for (const entity of cell.entities) {\n results.add(entity);\n }\n }\n }\n }\n return results;\n }\n /**\n * Clears all entities from the spatial hash\n */\n clear() {\n this.cells.clear();\n }\n /**\n * Gets statistics about the spatial hash\n * \n * @returns Statistics object\n */\n getStats() {\n let totalEntities = 0;\n for (const cell of this.cells.values()) {\n totalEntities += cell.entities.length;\n }\n return {\n totalCells: this.gridWidth * this.gridHeight,\n usedCells: this.cells.size,\n totalEntities,\n averageEntitiesPerCell: this.cells.size > 0 ? totalEntities / this.cells.size : 0\n };\n }\n /**\n * Casts a ray against entities in the spatial hash\n * \n * @param ray - Ray to cast\n * @param mask - Optional collision mask (layer)\n * @param filter - Optional filter function (return true to include entity)\n * @returns Raycast hit info if hit, null otherwise\n */\n raycast(ray, mask, filter) {\n const start = ray.origin;\n const end = ray.getPoint(Math.min(ray.length, 1e4));\n let x0 = start.x;\n let y0 = start.y;\n const x1 = end.x;\n const y1 = end.y;\n let gx0 = Math.floor(x0 / this.cellSize);\n let gy0 = Math.floor(y0 / this.cellSize);\n const gx1 = Math.floor(x1 / this.cellSize);\n const gy1 = Math.floor(y1 / this.cellSize);\n const sx = x0 < x1 ? 1 : -1;\n const sy = y0 < y1 ? 1 : -1;\n const visitedEntities = /* @__PURE__ */ new Set();\n let closestHit = null;\n const checkCell = (gx, gy) => {\n const wrappedX = (gx % this.gridWidth + this.gridWidth) % this.gridWidth;\n const wrappedY = (gy % this.gridHeight + this.gridHeight) % this.gridHeight;\n const key = this.getKey(wrappedX, wrappedY);\n const cell = this.cells.get(key);\n if (cell) {\n for (const entity of cell.entities) {\n if (visitedEntities.has(entity)) continue;\n visitedEntities.add(entity);\n if (mask !== void 0 && (entity.collisionCategory & mask) === 0) continue;\n if (filter && !filter(entity)) {\n continue;\n }\n const collider = createCollider(entity);\n if (collider) {\n const hit = collider.raycast(ray);\n if (hit) {\n if (!closestHit || hit.distance < closestHit.distance) {\n closestHit = hit;\n }\n }\n }\n }\n }\n };\n let x = gx0;\n let y = gy0;\n const stepX = sx;\n const stepY = sy;\n const tDeltaX = this.cellSize / Math.abs(ray.direction.x);\n const tDeltaY = this.cellSize / Math.abs(ray.direction.y);\n let tMaxX = ray.direction.x > 0 ? ((x + 1) * this.cellSize - start.x) / ray.direction.x : (start.x - x * this.cellSize) / -ray.direction.x;\n if (ray.direction.x < 0) {\n tMaxX = (start.x - x * this.cellSize) / -ray.direction.x;\n } else {\n tMaxX = ((x + 1) * this.cellSize - start.x) / ray.direction.x;\n }\n let tMaxY = ray.direction.y > 0 ? ((y + 1) * this.cellSize - start.y) / ray.direction.y : (start.y - y * this.cellSize) / -ray.direction.y;\n if (ray.direction.y < 0) {\n tMaxY = (start.y - y * this.cellSize) / -ray.direction.y;\n } else {\n tMaxY = ((y + 1) * this.cellSize - start.y) / ray.direction.y;\n }\n if (Math.abs(ray.direction.x) < 1e-9) {\n tMaxX = Infinity;\n }\n if (Math.abs(ray.direction.y) < 1e-9) {\n tMaxY = Infinity;\n }\n let steps = 0;\n const maxSteps = Math.abs(gx1 - gx0) + Math.abs(gy1 - gy0) + 10;\n while (steps < maxSteps) {\n checkCell(x, y);\n if (closestHit) {\n if (closestHit.distance < Math.min(tMaxX, tMaxY)) {\n return closestHit;\n }\n }\n if (tMaxX < tMaxY) {\n tMaxX += tDeltaX;\n x += stepX;\n } else {\n tMaxY += tDeltaY;\n y += stepY;\n }\n steps++;\n if (closestHit && closestHit.distance < ray.length) ;\n }\n return closestHit;\n }\n}\nexport {\n SpatialHash\n};\n//# sourceMappingURL=index14.js.map\n","class Ray {\n /**\n * Creates a new ray\n * \n * @param origin - Ray origin\n * @param direction - Ray direction\n * @param length - Maximum length (default: Infinity)\n */\n constructor(origin, direction, length = Infinity) {\n this.origin = origin.clone();\n this.direction = direction.clone().normalizeInPlace();\n this.length = length;\n }\n /**\n * Gets a point along the ray\n * \n * @param distance - Distance from origin\n * @returns Point at distance\n */\n getPoint(distance) {\n return this.origin.add(this.direction.mul(distance));\n }\n}\nexport {\n Ray\n};\n//# sourceMappingURL=index21.js.map\n","import { Vector2 } from \"./index2.js\";\nimport { AABB } from \"./index4.js\";\nimport { Ray } from \"./index21.js\";\nimport { AABBCollider } from \"./index12.js\";\nimport { CircleCollider } from \"./index11.js\";\nimport { PolygonCollider } from \"./index19.js\";\nimport { createCollider } from \"./index18.js\";\nfunction raycast(partition, origin, direction, maxDistance, mask, filter) {\n const dir = direction.length() > 0 ? direction.normalize() : new Vector2(1, 0);\n const end = origin.add(dir.mul(maxDistance));\n const candidates = partition.raycast(new Ray(origin, dir, maxDistance), mask, filter);\n if (candidates) return candidates;\n const bounds = new AABB(\n Math.min(origin.x, end.x),\n Math.min(origin.y, end.y),\n Math.max(origin.x, end.x),\n Math.max(origin.y, end.y)\n );\n const entities = partition.queryAABB(bounds);\n let best = null;\n for (const e of entities) {\n if (mask !== void 0 && (e.collisionCategory & mask) === 0) continue;\n if (filter && !filter(e)) continue;\n const collider = createCollider(e);\n if (!collider) continue;\n const hit = raycastCollider(collider, origin, dir, maxDistance);\n if (!hit) continue;\n if (!best || hit.distance < best.distance) best = hit;\n }\n return best;\n}\nfunction raycastCollider(collider, origin, dir, maxDistance) {\n if (collider instanceof CircleCollider) return raycastCircle(collider, origin, dir, maxDistance);\n if (collider instanceof AABBCollider) return raycastAABB(collider, origin, dir, maxDistance);\n if (collider instanceof PolygonCollider) return raycastPolygon(collider, origin, dir, maxDistance);\n return null;\n}\nfunction raycastCircle(circle, origin, dir, maxDistance) {\n const c = circle.getCenter();\n const r = circle.getRadius();\n const m = origin.sub(c);\n const b = m.dot(dir);\n const cval = m.dot(m) - r * r;\n if (cval > 0 && b > 0) return null;\n const discr = b * b - cval;\n if (discr < 0) return null;\n const t = -b - Math.sqrt(discr);\n if (t < 0) return null;\n if (t > maxDistance) return null;\n const point = origin.add(dir.mul(t));\n const normal = point.sub(c).normalize();\n return { entity: circle.getEntity(), point, normal, distance: t };\n}\nfunction raycastAABB(box, origin, dir, maxDistance) {\n const b = box.getBounds();\n let tmin = 0;\n let tmax = maxDistance;\n const invDx = 1 / (dir.x === 0 ? 1e-9 : dir.x);\n const invDy = 1 / (dir.y === 0 ? 1e-9 : dir.y);\n let tx1 = (b.minX - origin.x) * invDx;\n let tx2 = (b.maxX - origin.x) * invDx;\n let ty1 = (b.minY - origin.y) * invDy;\n let ty2 = (b.maxY - origin.y) * invDy;\n const tminX = Math.min(tx1, tx2);\n const tmaxX = Math.max(tx1, tx2);\n const tminY = Math.min(ty1, ty2);\n const tmaxY = Math.max(ty1, ty2);\n tmin = Math.max(tmin, Math.max(tminX, tminY));\n tmax = Math.min(tmax, Math.min(tmaxX, tmaxY));\n if (tmax < tmin || tmin < 0 || tmin > maxDistance) return null;\n const point = origin.add(dir.mul(tmin));\n let normal;\n if (tmin === tminX) normal = new Vector2(dir.x > 0 ? -1 : 1, 0);\n else normal = new Vector2(0, dir.y > 0 ? -1 : 1);\n return { entity: box.getEntity(), point, normal, distance: tmin };\n}\nfunction raycastPolygon(poly, origin, dir, maxDistance) {\n const end = origin.add(dir.mul(maxDistance));\n let bestT = Number.POSITIVE_INFINITY;\n let bestPoint = null;\n let bestNormal = null;\n const any = poly;\n const parts = any[\"getWorldParts\"] ? any[\"getWorldParts\"]() : [];\n for (const part of parts) {\n for (let i = 0; i < part.length; i++) {\n const a = part[i];\n const b = part[(i + 1) % part.length];\n if (!a || !b) continue;\n const hit = segmentRayIntersection(a, b, origin, end);\n if (!hit) continue;\n const t = hit.distance;\n if (t >= 0 && t <= maxDistance && t < bestT) {\n bestT = t;\n bestPoint = hit.point;\n const edge = b.sub(a);\n const n = new Vector2(-edge.y, edge.x).normalize();\n bestNormal = n;\n }\n }\n }\n if (!bestPoint || !bestNormal || bestT === Number.POSITIVE_INFINITY) return null;\n return { entity: poly.getEntity(), point: bestPoint, normal: bestNormal, distance: bestT };\n}\nfunction segmentRayIntersection(a, b, r0, r1) {\n const v1 = r0.sub(a);\n const v2 = b.sub(a);\n const v3 = new Vector2(-(r1.y - r0.y), r1.x - r0.x);\n const denom = v2.dot(v3);\n if (Math.abs(denom) < 1e-9) return null;\n const t1 = v2.cross(v1) / denom;\n const t2 = v1.dot(v3) / denom;\n if (t1 >= 0 && t1 <= 1 && t2 >= 0 && t2 <= 1) {\n const hitPoint = new Vector2(r0.x + (r1.x - r0.x) * t1, r0.y + (r1.y - r0.y) * t1);\n const dist = hitPoint.sub(r0).length();\n return { point: hitPoint, distance: dist };\n }\n return null;\n}\nexport {\n raycast,\n raycastCollider\n};\n//# sourceMappingURL=index20.js.map\n","import { AABB } from \"./index4.js\";\nimport { createCollider } from \"./index18.js\";\nimport { raycastCollider } from \"./index20.js\";\nclass QuadNode {\n constructor(bounds) {\n this.items = [];\n this.children = null;\n this.bounds = bounds;\n }\n}\nclass Quadtree {\n constructor(worldBounds, capacity = 8, maxDepth = 8) {\n this.entityMap = /* @__PURE__ */ new Map();\n this.root = new QuadNode(worldBounds);\n this.capacity = capacity;\n this.maxDepth = maxDepth;\n }\n clear() {\n this.root = new QuadNode(this.root.bounds);\n this.entityMap.clear();\n }\n insert(entity) {\n const collider = createCollider(entity);\n if (!collider) return;\n const bounds = collider.getBounds();\n const item = { entity, bounds };\n this.entityMap.set(entity, item);\n this.insertItem(this.root, item, 0);\n }\n remove(entity) {\n if (!this.entityMap.has(entity)) return;\n this.entityMap.delete(entity);\n const items = Array.from(this.entityMap.values());\n this.clear();\n for (const it of items) this.insertItem(this.root, it, 0);\n }\n update(entity) {\n const it = this.entityMap.get(entity);\n const collider = createCollider(entity);\n if (!collider) return;\n const newBounds = collider.getBounds();\n if (!it) {\n this.entityMap.set(entity, { entity, bounds: newBounds });\n this.insertItem(this.root, { entity, bounds: newBounds }, 0);\n return;\n }\n const b = it.bounds;\n if (b.minX !== newBounds.minX || b.minY !== newBounds.minY || b.maxX !== newBounds.maxX || b.maxY !== newBounds.maxY) {\n it.bounds = newBounds;\n const items = Array.from(this.entityMap.values());\n this.clear();\n for (const item of items) this.insertItem(this.root, item, 0);\n }\n }\n query(entity) {\n const collider = createCollider(entity);\n if (!collider) return /* @__PURE__ */ new Set();\n const bounds = collider.getBounds();\n const results = /* @__PURE__ */ new Set();\n this.queryBounds(this.root, bounds, results);\n results.delete(entity);\n return results;\n }\n queryAABB(bounds) {\n const results = /* @__PURE__ */ new Set();\n this.queryBounds(this.root, bounds, results);\n return results;\n }\n raycast(ray, mask, filter) {\n const origin = ray.origin;\n const end = ray.getPoint(ray.length);\n const bounds = new AABB(\n Math.min(origin.x, end.x),\n Math.min(origin.y, end.y),\n Math.max(origin.x, end.x),\n Math.max(origin.y, end.y)\n );\n const candidates = this.queryAABB(bounds);\n let closestHit = null;\n for (const entity of candidates) {\n if (mask !== void 0 && (entity.collisionCategory & mask) === 0) continue;\n if (filter && !filter(entity)) continue;\n const collider = createCollider(entity);\n if (collider) {\n const hit = raycastCollider(collider, ray.origin, ray.direction, ray.length);\n if (hit) {\n if (!closestHit || hit.distance < closestHit.distance) {\n closestHit = hit;\n }\n }\n }\n }\n return closestHit;\n }\n insertItem(node, item, depth) {\n if (!node.children && (node.items.length < this.capacity || depth >= this.maxDepth)) {\n node.items.push(item);\n return;\n }\n if (!node.children) this.subdivide(node);\n const child = this.findChild(node, item.bounds);\n if (child) {\n this.insertItem(child, item, depth + 1);\n } else {\n node.items.push(item);\n }\n }\n queryBounds(node, bounds, out) {\n if (!node.bounds.intersects(bounds)) return;\n for (const it of node.items) {\n if (it.bounds.intersects(bounds)) out.add(it.entity);\n }\n if (node.children) {\n for (const c of node.children) this.queryBounds(c, bounds, out);\n }\n }\n subdivide(node) {\n const b = node.bounds;\n const midX = (b.minX + b.maxX) * 0.5;\n const midY = (b.minY + b.maxY) * 0.5;\n node.children = [\n new QuadNode(new AABB(b.minX, b.minY, midX, midY)),\n // SW\n new QuadNode(new AABB(midX, b.minY, b.maxX, midY)),\n // SE\n new QuadNode(new AABB(b.minX, midY, midX, b.maxY)),\n // NW\n new QuadNode(new AABB(midX, midY, b.maxX, b.maxY))\n // NE\n ];\n }\n findChild(node, bounds) {\n if (!node.children) return null;\n for (const c of node.children) {\n if (containsAABB(c.bounds, bounds)) return c;\n }\n return null;\n }\n}\nfunction containsAABB(outer, inner) {\n return outer.minX <= inner.minX && outer.maxX >= inner.maxX && outer.minY <= inner.minY && outer.maxY >= inner.maxY;\n}\nexport {\n Quadtree\n};\n//# sourceMappingURL=index15.js.map\n","import { AABB } from \"./index4.js\";\nimport { createCollider } from \"./index18.js\";\nimport { raycastCollider } from \"./index20.js\";\nclass BVHNode {\n constructor(bounds) {\n this.left = null;\n this.right = null;\n this.leaf = null;\n this.bounds = bounds;\n }\n}\nclass BVH {\n constructor() {\n this.entities = /* @__PURE__ */ new Map();\n this.root = null;\n }\n clear() {\n this.entities.clear();\n this.root = null;\n }\n insert(entity) {\n const collider = createCollider(entity);\n if (!collider) return;\n const leaf = { entity, bounds: collider.getBounds() };\n this.entities.set(entity, leaf);\n this.rebuild();\n }\n remove(entity) {\n this.entities.delete(entity);\n this.rebuild();\n }\n update(entity) {\n const leaf = this.entities.get(entity);\n const collider = createCollider(entity);\n if (!collider) return;\n const b = collider.getBounds();\n if (!leaf || !equalAABB(leaf.bounds, b)) {\n this.entities.set(entity, { entity, bounds: b });\n this.rebuild();\n }\n }\n query(entity) {\n const collider = createCollider(entity);\n if (!collider) return /* @__PURE__ */ new Set();\n const bounds = collider.getBounds();\n const out = /* @__PURE__ */ new Set();\n this.queryAABBInternal(bounds, out);\n out.delete(entity);\n return out;\n }\n queryAABB(bounds) {\n const out = /* @__PURE__ */ new Set();\n this.queryAABBInternal(bounds, out);\n return out;\n }\n raycast(ray, mask, filter) {\n const origin = ray.origin;\n const end = ray.getPoint(ray.length);\n const bounds = new AABB(\n Math.min(origin.x, end.x),\n Math.min(origin.y, end.y),\n Math.max(origin.x, end.x),\n Math.max(origin.y, end.y)\n );\n const candidates = this.queryAABB(bounds);\n let closestHit = null;\n for (const entity of candidates) {\n if (mask !== void 0 && (entity.collisionCategory & mask) === 0) continue;\n if (filter && !filter(entity)) continue;\n const collider = createCollider(entity);\n if (collider) {\n const hit = raycastCollider(collider, ray.origin, ray.direction, ray.length);\n if (hit) {\n if (!closestHit || hit.distance < closestHit.distance) {\n closestHit = hit;\n }\n }\n }\n }\n return closestHit;\n }\n queryAABBInternal(bounds, out) {\n if (!this.root) return;\n const stack = [this.root];\n while (stack.length) {\n const n = stack.pop();\n if (!n.bounds.intersects(bounds)) continue;\n if (n.leaf) {\n if (n.leaf.bounds.intersects(bounds)) out.add(n.leaf.entity);\n } else {\n if (n.left) stack.push(n.left);\n if (n.right) stack.push(n.right);\n }\n }\n }\n rebuild() {\n const leaves = Array.from(this.entities.values());\n this.root = buildBVH(leaves);\n }\n}\nfunction buildBVH(leaves) {\n if (leaves.length === 0) return null;\n if (leaves.length === 1) {\n const leaf = leaves[0];\n if (!leaf) return null;\n const n2 = new BVHNode(leaf.bounds);\n n2.leaf = leaf;\n return n2;\n }\n const firstLeaf = leaves[0];\n if (!firstLeaf) return null;\n const bounds = leaves.slice(1).reduce((acc, l) => {\n if (!l) return acc;\n return acc.union(l.bounds);\n }, firstLeaf.bounds);\n const extentX = bounds.maxX - bounds.minX;\n const extentY = bounds.maxY - bounds.minY;\n const axis = extentX >= extentY ? 0 : 1;\n leaves.sort((a, b) => {\n if (!a || !b) return 0;\n return centerOf(a.bounds, axis) - centerOf(b.bounds, axis);\n });\n const mid = Math.floor(leaves.length / 2);\n const left = buildBVH(leaves.slice(0, mid));\n const right = buildBVH(leaves.slice(mid));\n if (!left || !right) return null;\n const n = new BVHNode(left.bounds.union(right.bounds));\n n.left = left;\n n.right = right;\n return n;\n}\nfunction centerOf(b, axis) {\n return axis === 0 ? (b.minX + b.maxX) * 0.5 : (b.minY + b.maxY) * 0.5;\n}\nfunction equalAABB(a, b) {\n return a.minX === b.minX && a.minY === b.minY && a.maxX === b.maxX && a.maxY === b.maxY;\n}\nexport {\n BVH\n};\n//# sourceMappingURL=index16.js.map\n","class CollisionResolver {\n /**\n * Creates a new collision resolver\n * \n * @param config - Resolver configuration\n */\n constructor(config = {}) {\n this.config = {\n positionCorrectionFactor: config.positionCorrectionFactor ?? 0.8,\n minPenetrationDepth: config.minPenetrationDepth ?? 1e-4,\n maxPositionCorrection: config.maxPositionCorrection ?? 5\n };\n }\n /**\n * Resolves a collision\n * \n * Separates entities and applies collision response.\n * First checks if the collision should be resolved using resolution filters.\n * If any entity has a resolution filter that returns false, the collision\n * is skipped (entities pass through) but events are still fired.\n * \n * @param collision - Collision information to resolve\n */\n resolve(collision) {\n const { entityA, entityB, normal, depth } = collision;\n if (depth < this.config.minPenetrationDepth) {\n return;\n }\n if (!entityA.shouldResolveCollisionWith(entityB)) {\n return;\n }\n this.separateEntities(entityA, entityB, normal, depth);\n this.resolveVelocities(entityA, entityB, normal);\n }\n /**\n * Separates two entities by moving them apart\n * \n * This method applies position corrections to resolve penetration between\n * colliding entities. After applying corrections, it notifies position change\n * handlers to ensure proper synchronization with game logic (e.g., updating\n * owner.x/y signals for network sync).\n * \n * @param entityA - First entity\n * @param entityB - Second entity\n * @param normal - Separation normal (from A to B)\n * @param depth - Penetration depth\n */\n separateEntities(entityA, entityB, normal, depth) {\n const totalInvMass = entityA.invMass + entityB.invMass;\n if (totalInvMass === 0) {\n return;\n }\n const correction = Math.min(\n depth * this.config.positionCorrectionFactor,\n this.config.maxPositionCorrection\n );\n const correctionA = normal.mul(-correction * (entityA.invMass / totalInvMass));\n const correctionB = normal.mul(correction * (entityB.invMass / totalInvMass));\n if (!entityA.isStatic()) {\n entityA.position.addInPlace(correctionA);\n entityA.notifyPositionChange();\n }\n if (!entityB.isStatic()) {\n entityB.position.addInPlace(correctionB);\n entityB.notifyPositionChange();\n }\n }\n /**\n * Resolves velocities using impulse-based collision response\n * \n * @param entityA - First entity\n * @param entityB - Second entity\n * @param normal - Collision normal (from A to B)\n */\n resolveVelocities(entityA, entityB, normal) {\n const relativeVelocity = entityB.velocity.sub(entityA.velocity);\n const velocityAlongNormal = relativeVelocity.dot(normal);\n if (velocityAlongNormal > 0) {\n return;\n }\n const restitution = Math.min(entityA.restitution, entityB.restitution);\n const totalInvMass = entityA.invMass + entityB.invMass;\n if (totalInvMass === 0) {\n return;\n }\n const impulseScalar = -(1 + restitution) * velocityAlongNormal / totalInvMass;\n const impulse = normal.mul(impulseScalar);\n if (!entityA.isStatic()) {\n entityA.velocity.addInPlace(impulse.mul(-entityA.invMass));\n entityA.notifyMovementChange();\n }\n if (!entityB.isStatic()) {\n entityB.velocity.addInPlace(impulse.mul(entityB.invMass));\n entityB.notifyMovementChange();\n }\n const tangent = relativeVelocity.sub(normal.mul(velocityAlongNormal));\n const tangentLength = tangent.length();\n if (tangentLength > 1e-5) {\n const friction = Math.sqrt(entityA.friction * entityB.friction);\n const tangentNormalized = tangent.normalize();\n const frictionImpulse = tangentNormalized.mul(-tangentLength * friction / totalInvMass);\n const maxFriction = Math.abs(impulseScalar * friction);\n if (frictionImpulse.length() > maxFriction) {\n frictionImpulse.normalizeInPlace().mulInPlace(maxFriction);\n }\n if (!entityA.isStatic()) {\n entityA.velocity.addInPlace(frictionImpulse.mul(-entityA.invMass));\n entityA.notifyMovementChange();\n }\n if (!entityB.isStatic()) {\n entityB.velocity.addInPlace(frictionImpulse.mul(entityB.invMass));\n entityB.notifyMovementChange();\n }\n }\n }\n /**\n * Resolves multiple collisions\n * \n * @param collisions - Array of collisions to resolve\n */\n resolveAll(collisions) {\n for (const collision of collisions) {\n this.resolve(collision);\n }\n }\n}\nexport {\n CollisionResolver\n};\n//# sourceMappingURL=index17.js.map\n","import { Vector2 } from \"./index2.js\";\nimport { AABB } from \"./index4.js\";\nimport { AABBCollider } from \"./index12.js\";\nimport { CircleCollider } from \"./index11.js\";\nimport { PolygonCollider } from \"./index19.js\";\nimport { createCollider } from \"./index18.js\";\nfunction sweepEntities(a, b, delta) {\n const ca = createCollider(a);\n const cb = createCollider(b);\n if (!ca || !cb) return null;\n return sweepColliders(ca, cb, delta);\n}\nfunction sweepColliders(a, b, delta) {\n if (a instanceof CircleCollider && b instanceof CircleCollider) {\n return sweepCircleCircle(a, b, delta);\n }\n if (a instanceof CircleCollider && b instanceof AABBCollider) {\n return sweepCircleAABB(a, b, delta);\n }\n if (a instanceof AABBCollider && b instanceof CircleCollider) {\n const res = sweepCircleAABB(b, a, delta.mul(-1));\n if (!res) return null;\n return { time: res.time, normal: res.normal.mul(-1), point: res.point };\n }\n if (a instanceof AABBCollider && b instanceof AABBCollider) {\n return sweepAABBAABB(a, b, delta);\n }\n if (a instanceof PolygonCollider || b instanceof PolygonCollider) {\n const aa = a.getBounds();\n const bb = b.getBounds();\n const ca = new AABBCollider(a.getEntity());\n const cb = new AABBCollider(b.getEntity());\n ca.getBounds = () => aa;\n cb.getBounds = () => bb;\n return sweepAABBAABB(ca, cb, delta);\n }\n return null;\n}\nfunction sweepCircleCircle(a, b, delta) {\n const p0 = a.getCenter();\n const c = b.getCenter();\n const r = a.getRadius() + b.getRadius();\n const m = p0.sub(c);\n const d = delta;\n const A = d.dot(d);\n const B = 2 * m.dot(d);\n const C = m.dot(m) - r * r;\n const disc = B * B - 4 * A * C;\n if (disc < 0 || A === 0) return null;\n const t = (-B - Math.sqrt(disc)) / (2 * A);\n if (t < 0 || t > 1) return null;\n const hitPoint = p0.add(d.mul(t));\n const normal = hitPoint.sub(c).normalize();\n return { time: t, normal, point: hitPoint.sub(normal.mul(a.getRadius())) };\n}\nfunction sweepCircleAABB(circle, box, delta) {\n const r = circle.getRadius();\n const b = box.getBounds();\n const expanded = new AABB(b.minX - r, b.minY - r, b.maxX + r, b.maxY + r);\n const p0 = circle.getCenter();\n const dir = delta;\n const maxDist = 1;\n const origin = new Vector2(0, 0);\n const bb = new AABB(expanded.minX - p0.x, expanded.minY - p0.y, expanded.maxX - p0.x, expanded.maxY - p0.y);\n const res = rayVsAABB(origin, dir, bb, maxDist);\n if (!res) return null;\n const t = res.t;\n const hitPos = p0.add(dir.mul(t));\n const normal = res.normal;\n return { time: t, normal, point: hitPos.sub(normal.mul(r)) };\n}\nfunction sweepAABBAABB(a, b, delta) {\n const A = a.getBounds();\n const B = b.getBounds();\n const invDx = 1 / (delta.x === 0 ? 1e-9 : delta.x);\n const invDy = 1 / (delta.y === 0 ? 1e-9 : delta.y);\n const xEntry = (delta.x > 0 ? B.minX - A.maxX : B.maxX - A.minX) * invDx;\n const xExit = (delta.x > 0 ? B.maxX - A.minX : B.minX - A.maxX) * invDx;\n const yEntry = (delta.y > 0 ? B.minY - A.maxY : B.maxY - A.minY) * invDy;\n const yExit = (delta.y > 0 ? B.maxY - A.minY : B.minY - A.maxY) * invDy;\n const tEntry = Math.max(Math.min(xEntry, xExit), Math.min(yEntry, yExit));\n const tExit = Math.min(Math.max(xEntry, xExit), Math.max(yEntry, yExit));\n if (tEntry > tExit || tEntry < 0 || tEntry > 1) return null;\n let normal;\n if (Math.min(xEntry, xExit) > Math.min(yEntry, yExit)) {\n normal = new Vector2(delta.x > 0 ? -1 : 1, 0);\n } else {\n normal = new Vector2(0, delta.y > 0 ? -1 : 1);\n }\n const hitPoint = new Vector2(\n delta.x !== 0 ? delta.x > 0 ? A.maxX : A.minX : (A.minX + A.maxX) * 0.5,\n delta.y !== 0 ? delta.y > 0 ? A.maxY : A.minY : (A.minY + A.maxY) * 0.5\n );\n return { time: tEntry, normal, point: hitPoint };\n}\nfunction rayVsAABB(origin, dir, b, maxT) {\n const invDx = 1 / (dir.x === 0 ? 1e-9 : dir.x);\n const invDy = 1 / (dir.y === 0 ? 1e-9 : dir.y);\n let tmin = 0;\n let tmax = maxT;\n const tx1 = (b.minX - origin.x) * invDx;\n const tx2 = (b.maxX - origin.x) * invDx;\n const ty1 = (b.minY - origin.y) * invDy;\n const ty2 = (b.maxY - origin.y) * invDy;\n const tminX = Math.min(tx1, tx2);\n const tmaxX = Math.max(tx1, tx2);\n const tminY = Math.min(ty1, ty2);\n const tmaxY = Math.max(ty1, ty2);\n tmin = Math.max(tmin, Math.max(tminX, tminY));\n tmax = Math.min(tmax, Math.min(tmaxX, tmaxY));\n if (tmax < tmin || tmin < 0 || tmin > maxT) return null;\n const normal = tmin === tminX ? new Vector2(dir.x > 0 ? -1 : 1, 0) : new Vector2(0, dir.y > 0 ? -1 : 1);\n return { t: tmin, normal };\n}\nexport {\n sweepColliders,\n sweepEntities\n};\n//# sourceMappingURL=index22.js.map\n","class EventSystem {\n constructor() {\n this.collisionEnterHandlers = /* @__PURE__ */ new Set();\n this.collisionExitHandlers = /* @__PURE__ */ new Set();\n this.entityAddedHandlers = /* @__PURE__ */ new Set();\n this.entityRemovedHandlers = /* @__PURE__ */ new Set();\n this.entitySleepHandlers = /* @__PURE__ */ new Set();\n this.entityWakeHandlers = /* @__PURE__ */ new Set();\n }\n /**\n * Registers a collision enter handler\n * \n * @param handler - Handler function\n * @returns Unsubscribe function\n */\n onCollisionEnter(handler) {\n this.collisionEnterHandlers.add(handler);\n return () => this.collisionEnterHandlers.delete(handler);\n }\n /**\n * Registers a collision exit handler\n * \n * @param handler - Handler function\n * @returns Unsubscribe function\n */\n onCollisionExit(handler) {\n this.collisionExitHandlers.add(handler);\n return () => this.collisionExitHandlers.delete(handler);\n }\n /**\n * Registers an entity added handler\n * \n * @param handler - Handler function\n * @returns Unsubscribe function\n */\n onEntityAdded(handler) {\n this.entityAddedHandlers.add(handler);\n return () => this.entityAddedHandlers.delete(handler);\n }\n /**\n * Registers an entity removed handler\n * \n * @param handler - Handler function\n * @returns Unsubscribe function\n */\n onEntityRemoved(handler) {\n this.entityRemovedHandlers.add(handler);\n return () => this.entityRemovedHandlers.delete(handler);\n }\n /**\n * Registers an entity sleep handler\n * \n * @param handler - Handler function\n * @returns Unsubscribe function\n */\n onEntitySleep(handler) {\n this.entitySleepHandlers.add(handler);\n return () => this.entitySleepHandlers.delete(handler);\n }\n /**\n * Registers an entity wake handler\n * \n * @param handler - Handler function\n * @returns Unsubscribe function\n */\n onEntityWake(handler) {\n this.entityWakeHandlers.add(handler);\n return () => this.entityWakeHandlers.delete(handler);\n }\n /**\n * Emits a collision enter event\n * \n * @param collision - Collision information\n */\n emitCollisionEnter(collision) {\n for (const handler of this.collisionEnterHandlers) {\n handler(collision);\n }\n }\n /**\n * Emits a collision exit event\n * \n * @param collision - Collision information\n */\n emitCollisionExit(collision) {\n for (const handler of this.collisionExitHandlers) {\n handler(collision);\n }\n }\n /**\n * Emits an entity added event\n * \n * @param entity - Entity that was added\n */\n emitEntityAdded(entity) {\n for (const handler of this.entityAddedHandlers) {\n handler(entity);\n }\n }\n /**\n * Emits an entity removed event\n * \n * @param entity - Entity that was removed\n */\n emitEntityRemoved(entity) {\n for (const handler of this.entityRemovedHandlers) {\n handler(entity);\n }\n }\n /**\n * Emits an entity sleep event\n * \n * @param entity - Entity that went to sleep\n */\n emitEntitySleep(entity) {\n for (const handler of this.entitySleepHandlers) {\n handler(entity);\n }\n }\n /**\n * Emits an entity wake event\n * \n * @param entity - Entity that woke up\n */\n emitEntityWake(entity) {\n for (const handler of this.entityWakeHandlers) {\n handler(entity);\n }\n }\n /**\n * Clears all event handlers\n */\n clear() {\n this.collisionEnterHandlers.clear();\n this.collisionExitHandlers.clear();\n this.entityAddedHandlers.clear();\n this.entityRemovedHandlers.clear();\n this.entitySleepHandlers.clear();\n this.entityWakeHandlers.clear();\n }\n}\nexport {\n EventSystem\n};\n//# sourceMappingURL=index24.js.map\n","import { Entity } from \"./index7.js\";\nimport { IntegrationMethod, Integrator } from \"./index8.js\";\nimport { CollisionResolver } from \"./index17.js\";\nimport { SpatialHash } from \"./index14.js\";\nimport { testCollision, createCollider } from \"./index18.js\";\nimport { EventSystem } from \"./index24.js\";\nimport { Ray } from \"./index21.js\";\nimport { sweepEntities } from \"./index22.js\";\nclass World {\n /**\n * Creates a new physics world\n * \n * @param config - World configuration\n */\n constructor(config = {}) {\n this.entities = /* @__PURE__ */ new Set();\n this.staticEntities = /* @__PURE__ */ new Set();\n this.dynamicEntities = /* @__PURE__ */ new Set();\n this.previousCollisions = /* @__PURE__ */ new Map();\n this.queryResults = /* @__PURE__ */ new Set();\n this.timeStep = config.timeStep ?? 1 / 60;\n this.enableSleep = config.enableSleep ?? true;\n this.tileWidth = config.tileWidth ?? 32;\n this.tileHeight = config.tileHeight ?? 32;\n this.sleepThreshold = config.sleepThreshold ?? 0.5;\n this.sleepVelocityThreshold = config.sleepVelocityThreshold ?? 0.01;\n this.positionQuantizationStep = typeof config.positionQuantizationStep === \"number\" && config.positionQuantizationStep > 0 ? config.positionQuantizationStep : null;\n this.velocityQuantizationStep = typeof config.velocityQuantizationStep === \"number\" && config.velocityQuantizationStep > 0 ? config.velocityQuantizationStep : null;\n const integratorConfig = {\n deltaTime: this.timeStep,\n method: config.integrationMethod ?? IntegrationMethod.Euler\n };\n if (config.gravity) {\n integratorConfig.gravity = config.gravity;\n }\n this.integrator = new Integrator(integratorConfig);\n this.resolverIterations = Math.max(1, Math.floor(config.resolverIterations ?? 3));\n const resolverConfig = {};\n if (config.positionCorrectionFactor !== void 0) resolverConfig.positionCorrectionFactor = config.positionCorrectionFactor;\n if (config.maxPositionCorrection !== void 0) resolverConfig.maxPositionCorrection = config.maxPositionCorrection;\n if (config.minPenetrationDepth !== void 0) resolverConfig.minPenetrationDepth = config.minPenetrationDepth;\n this.resolver = new CollisionResolver(resolverConfig);\n if (config.spatialPartition) {\n this.spatialPartition = config.spatialPartition;\n } else {\n this.spatialPartition = new SpatialHash(\n config.spatialCellSize ?? 100,\n config.spatialGridWidth ?? 100,\n config.spatialGridHeight ?? 100\n );\n }\n this.events = new EventSystem();\n }\n /**\n * Gets the event system\n * \n * @returns Event system instance\n */\n getEvents() {\n return this.events;\n }\n /**\n * Returns the fixed simulation time step.\n *\n * @returns Time step in seconds\n */\n getTimeStep() {\n return this.timeStep;\n }\n /**\n * Adds an entity to the world\n * \n * @param entity - Entity to add\n * @returns The added entity\n */\n addEntity(entity) {\n this.entities.add(entity);\n if (entity.isStatic()) {\n this.staticEntities.add(entity);\n } else {\n this.dynamicEntities.add(entity);\n }\n this.spatialPartition.insert(entity);\n this.events.emitEntityAdded(entity);\n return entity;\n }\n /**\n * Performs a raycast against all entities in the world.\n * \n * @param origin - Starting point of the ray\n * @param direction - Direction of the ray (normalized)\n * @param length - Maximum length (default: Infinity)\n * @param mask - Optional collision mask (layer)\n * @param filter - Optional filter function (return true to include entity)\n * @returns Raycast hit info if hit, null otherwise\n */\n raycast(origin, direction, length = Infinity, mask, filter) {\n const ray = new Ray(origin, direction, length);\n return this.spatialPartition.raycast(ray, mask, filter);\n }\n /**\n * Creates and adds a new entity\n * \n * @param config - Entity configuration\n * @returns Created entity\n */\n createEntity(config) {\n const entity = new Entity(config);\n return this.addEntity(entity);\n }\n /**\n * Removes an entity from the world\n * \n * @param entity - Entity to remove\n */\n removeEntity(entity) {\n if (this.entities.delete(entity)) {\n this.staticEntities.delete(entity);\n this.dynamicEntities.delete(entity);\n this.spatialPartition.remove(entity);\n this.events.emitEntityRemoved(entity);\n }\n }\n /**\n * Gets all entities in the world\n * \n * @returns Array of entities\n */\n getEntities() {\n return Array.from(this.entities);\n }\n /**\n * Gets an entity by UUID\n * \n * @param uuid - Entity UUID\n * @returns Entity or undefined\n */\n getEntityByUUID(uuid) {\n for (const entity of this.entities) {\n if (entity.uuid === uuid) {\n return entity;\n }\n }\n return void 0;\n }\n /**\n * Steps the physics simulation forward\n * \n * Updates all entities, detects and resolves collisions.\n */\n step() {\n this.refreshDynamicEntitiesInPartition();\n for (const entity of this.dynamicEntities) {\n if (!entity.isSleeping()) {\n const startPos = entity.position.clone();\n this.integrator.integrate(entity);\n this.updateEntityTile(entity, startPos);\n if (entity.continuous) {\n this.performCCD(entity);\n }\n }\n }\n let firstPassCollisions = [];\n for (let iteration = 0; iteration < this.resolverIterations; iteration++) {\n const collisions = this.detectCollisions();\n if (iteration === 0) {\n firstPassCollisions = collisions;\n }\n if (collisions.length === 0) {\n break;\n }\n this.sortCollisionsForDeterminism(collisions);\n this.resolver.resolveAll(collisions);\n if (iteration + 1 < this.resolverIterations) {\n this.refreshDynamicEntitiesInPartition();\n }\n }\n if (this.positionQuantizationStep !== null || this.velocityQuantizationStep !== null) {\n this.quantizeEntities();\n }\n this.handleCollisionEvents(firstPassCollisions);\n if (this.enableSleep) {\n this.updateSleepState();\n }\n }\n /**\n * Detects collisions using spatial partition\n * \n * @returns Array of collision infos\n */\n /**\n * Detects collisions using spatial partition\n * \n * @returns Array of collision infos\n */\n detectCollisions() {\n const collisions = [];\n for (const entity of this.dynamicEntities) {\n const nearby = this.spatialPartition.query(entity, this.queryResults);\n for (const other of nearby) {\n if (other.isDynamic() && entity.uuid > other.uuid) {\n continue;\n }\n const collision = testCollision(entity, other);\n if (collision) {\n collisions.push(collision);\n }\n }\n }\n return collisions;\n }\n sortCollisionsForDeterminism(collisions) {\n collisions.sort((a, b) => {\n const keyA = this.getCollisionKey(a);\n const keyB = this.getCollisionKey(b);\n return keyA.localeCompare(keyB);\n });\n }\n getCollisionKey(collision) {\n const idA = collision.entityA.uuid;\n const idB = collision.entityB.uuid;\n return idA < idB ? `${idA}-${idB}` : `${idB}-${idA}`;\n }\n /**\n * Handles collision enter/exit events\n * \n * @param collisions - Current frame collisions\n */\n handleCollisionEvents(collisions) {\n const currentCollisions = /* @__PURE__ */ new Map();\n for (const collision of collisions) {\n const pairKey = collision.entityA.uuid < collision.entityB.uuid ? `${collision.entityA.uuid}-${collision.entityB.uuid}` : `${collision.entityB.uuid}-${collision.entityA.uuid}`;\n currentCollisions.set(pairKey, collision);\n if (!this.previousCollisions.has(pairKey)) {\n this.events.emitCollisionEnter(collision);\n collision.entityA.notifyCollisionEnter(collision, collision.entityB);\n collision.entityB.notifyCollisionEnter(collision, collision.entityA);\n }\n }\n for (const [pairKey, collision] of this.previousCollisions) {\n if (!currentCollisions.has(pairKey)) {\n this.events.emitCollisionExit(collision);\n collision.entityA.notifyCollisionExit(collision, collision.entityB);\n collision.entityB.notifyCollisionExit(collision, collision.entityA);\n }\n }\n this.previousCollisions = currentCollisions;\n }\n /**\n * Updates sleep state for entities\n */\n updateSleepState() {\n for (const entity of this.entities) {\n if (entity.isStatic() || entity.isSleeping()) {\n continue;\n }\n const speed = entity.velocity.length();\n const angularSpeed = Math.abs(entity.angularVelocity);\n if (speed < this.sleepVelocityThreshold && angularSpeed < this.sleepVelocityThreshold) {\n entity.timeSinceMovement += this.timeStep;\n if (entity.timeSinceMovement >= this.sleepThreshold) {\n entity.sleep();\n this.events.emitEntitySleep(entity);\n }\n } else {\n entity.timeSinceMovement = 0;\n if (entity.isSleeping()) {\n entity.wakeUp();\n this.events.emitEntityWake(entity);\n }\n }\n }\n }\n /**\n * Clears all entities from the world\n */\n clear() {\n for (const entity of this.entities) {\n this.events.emitEntityRemoved(entity);\n }\n this.entities.clear();\n this.spatialPartition.clear();\n this.previousCollisions.clear();\n }\n quantizeEntities() {\n for (const entity of this.dynamicEntities) {\n if (this.positionQuantizationStep !== null) {\n entity.position.x = this.quantizeValue(entity.position.x, this.positionQuantizationStep);\n entity.position.y = this.quantizeValue(entity.position.y, this.positionQuantizationStep);\n }\n if (this.velocityQuantizationStep !== null) {\n entity.velocity.x = this.quantizeValue(entity.velocity.x, this.velocityQuantizationStep);\n entity.velocity.y = this.quantizeValue(entity.velocity.y, this.velocityQuantizationStep);\n }\n }\n }\n quantizeValue(value, step) {\n return Math.round(value / step) * step;\n }\n refreshDynamicEntitiesInPartition() {\n for (const entity of this.dynamicEntities) {\n this.spatialPartition.update(entity);\n }\n }\n /**\n * Gets statistics about the world\n * \n * @returns Statistics object\n */\n getStats() {\n let dynamic = 0;\n let static_ = 0;\n let sleeping = 0;\n for (const entity of this.entities) {\n if (entity.isStatic()) {\n static_++;\n } else {\n dynamic++;\n }\n if (entity.isSleeping()) {\n sleeping++;\n }\n }\n return {\n totalEntities: this.entities.size,\n dynamicEntities: dynamic,\n staticEntities: static_,\n sleepingEntities: sleeping\n };\n }\n /**\n * Performs Continuous Collision Detection (CCD) for an entity\n * \n * @param entity - Entity to check\n */\n /**\n * Updates entity tile position and triggers hooks\n * \n * @param entity - Entity to update\n * @param previousPosition - Position before integration\n */\n updateEntityTile(entity, previousPosition) {\n const oldTileX = Math.floor(previousPosition.x / this.tileWidth);\n const oldTileY = Math.floor(previousPosition.y / this.tileHeight);\n const newTileX = Math.floor(entity.position.x / this.tileWidth);\n const newTileY = Math.floor(entity.position.y / this.tileHeight);\n if (entity.currentTile.x === 0 && entity.currentTile.y === 0 && (oldTileX !== 0 || oldTileY !== 0)) {\n entity.currentTile.set(oldTileX, oldTileY);\n }\n if (newTileX !== oldTileX || newTileY !== oldTileY) {\n if (!entity.checkCanEnterTile(newTileX, newTileY)) {\n entity.position.copyFrom(previousPosition);\n entity.velocity.set(0, 0);\n return;\n }\n entity.notifyLeaveTile(oldTileX, oldTileY);\n entity.currentTile.set(newTileX, newTileY);\n entity.notifyEnterTile(newTileX, newTileY);\n }\n }\n performCCD(entity) {\n const dt = this.timeStep;\n const delta = entity.velocity.mul(dt);\n const dist = delta.length();\n if (dist < entity.radius) {\n return;\n }\n const collider = createCollider(entity);\n if (!collider) return;\n const currentBounds = collider.getBounds();\n const originalBounds = currentBounds.translate(-delta.x, -delta.y);\n const sweptBounds = currentBounds.union(originalBounds);\n const nearby = this.spatialPartition.queryAABB(sweptBounds);\n let minTime = 1;\n let collision = null;\n for (const other of nearby) {\n if (other === entity || !other.isStatic()) continue;\n if (!entity.canCollideWith(other)) continue;\n const originalPos = entity.position.clone();\n entity.position.subInPlace(delta);\n const hit = sweepEntities(entity, other, delta);\n entity.position.copyFrom(originalPos);\n if (hit && hit.time < minTime) {\n minTime = hit.time;\n collision = hit;\n }\n }\n if (collision && minTime < 1) {\n const correction = collision.normal.mul(1e-3);\n entity.position.subInPlace(delta.mul(1 - minTime)).addInPlace(correction);\n const vn = entity.velocity.dot(collision.normal);\n if (vn < 0) {\n entity.velocity.subInPlace(collision.normal.mul(vn));\n }\n }\n }\n}\nexport {\n World\n};\n//# sourceMappingURL=index23.js.map\n","import { World } from \"./index23.js\";\nclass Region {\n /**\n * Creates a new region\n * \n * @param config - Region configuration\n */\n constructor(config) {\n this.entities = /* @__PURE__ */ new Set();\n this.bounds = config.bounds.clone();\n this.overlap = config.overlap ?? 0;\n this.active = config.active ?? true;\n this.world = new World({\n spatialCellSize: 50,\n spatialGridWidth: 50,\n spatialGridHeight: 50\n });\n }\n /**\n * Gets the region bounds\n * \n * @returns AABB bounds\n */\n getBounds() {\n return this.bounds.clone();\n }\n /**\n * Gets the expanded bounds including overlap\n * \n * @returns Expanded AABB\n */\n getExpandedBounds() {\n return this.bounds.expand(this.overlap);\n }\n /**\n * Checks if a point is inside this region\n * \n * @param point - Point to check\n * @returns True if point is inside\n */\n contains(point) {\n return this.bounds.contains(point);\n }\n /**\n * Checks if an entity should belong to this region\n * \n * @param entity - Entity to check\n * @returns True if entity should be in this region\n */\n shouldContain(entity) {\n return this.bounds.contains(entity.position);\n }\n /**\n * Adds an entity to this region\n * \n * @param entity - Entity to add\n */\n addEntity(entity) {\n if (this.entities.has(entity)) {\n return;\n }\n this.entities.add(entity);\n this.world.addEntity(entity);\n }\n /**\n * Removes an entity from this region\n * \n * @param entity - Entity to remove\n */\n removeEntity(entity) {\n if (this.entities.delete(entity)) {\n this.world.removeEntity(entity);\n }\n }\n /**\n * Gets all entities in this region\n * \n * @returns Array of entities\n */\n getEntities() {\n return Array.from(this.entities);\n }\n /**\n * Steps the region's physics simulation\n */\n step() {\n if (!this.active) {\n return;\n }\n this.world.step();\n }\n /**\n * Activates this region\n */\n activate() {\n this.active = true;\n }\n /**\n * Deactivates this region\n */\n deactivate() {\n this.active = false;\n }\n /**\n * Checks if this region is active\n * \n * @returns True if active\n */\n isActive() {\n return this.active;\n }\n /**\n * Gets the world instance for this region\n * \n * @returns World instance\n */\n getWorld() {\n return this.world;\n }\n /**\n * Checks if this region overlaps with another region\n * \n * @param other - Other region to check\n * @returns True if regions overlap\n */\n overlaps(other) {\n const expandedA = this.getExpandedBounds();\n const expandedB = other.getExpandedBounds();\n return expandedA.intersects(expandedB);\n }\n /**\n * Gets entities that might need migration to neighboring regions\n * \n * @returns Array of entities near region boundaries\n */\n getBoundaryEntities() {\n const boundaryEntities = [];\n const expandedBounds = this.getExpandedBounds();\n for (const entity of this.entities) {\n if (expandedBounds.contains(entity.position) && !this.bounds.contains(entity.position)) {\n boundaryEntities.push(entity);\n }\n }\n return boundaryEntities;\n }\n}\nexport {\n Region\n};\n//# sourceMappingURL=index25.js.map\n","import { Region } from \"./index25.js\";\nimport { AABB } from \"./index4.js\";\nclass RegionManager {\n /**\n * Creates a new region manager\n * \n * @param config - Manager configuration\n */\n constructor(config) {\n this.regions = [];\n this.regionMap = /* @__PURE__ */ new Map();\n this.entityRegionMap = /* @__PURE__ */ new Map();\n this.config = {\n worldBounds: config.worldBounds,\n regionSize: config.regionSize,\n overlap: config.overlap ?? 0,\n autoActivate: config.autoActivate ?? true\n };\n this.createRegions();\n }\n /**\n * Creates the grid of regions\n */\n createRegions() {\n const { worldBounds, regionSize, overlap } = this.config;\n const worldWidth = worldBounds.getWidth();\n const worldHeight = worldBounds.getHeight();\n const cols = Math.ceil(worldWidth / regionSize);\n const rows = Math.ceil(worldHeight / regionSize);\n for (let row = 0; row < rows; row++) {\n for (let col = 0; col < cols; col++) {\n const minX = worldBounds.minX + col * regionSize;\n const minY = worldBounds.minY + row * regionSize;\n const maxX = Math.min(minX + regionSize, worldBounds.maxX);\n const maxY = Math.min(minY + regionSize, worldBounds.maxY);\n const bounds = new AABB(minX, minY, maxX, maxY);\n const region = new Region({\n bounds,\n overlap,\n active: !this.config.autoActivate\n // Start inactive if auto-activate is enabled\n });\n const key = this.getRegionKey(col, row);\n this.regions.push(region);\n this.regionMap.set(key, region);\n }\n }\n }\n /**\n * Gets a region key from grid coordinates\n * \n * @param col - Column index\n * @param row - Row index\n * @returns Region key string\n */\n getRegionKey(col, row) {\n return `${col},${row}`;\n }\n /**\n * Gets the region containing a point\n * \n * @param point - Point to find region for\n * @returns Region or null\n */\n getRegionAt(point) {\n for (const region of this.regions) {\n if (region.contains(point)) {\n return region;\n }\n }\n return null;\n }\n /**\n * Gets all regions that overlap with an AABB\n * \n * @param bounds - AABB to check\n * @returns Array of overlapping regions\n */\n getRegionsInBounds(bounds) {\n const result = [];\n for (const region of this.regions) {\n if (region.getExpandedBounds().intersects(bounds)) {\n result.push(region);\n }\n }\n return result;\n }\n /**\n * Adds an entity to the appropriate region\n * \n * @param entity - Entity to add\n */\n addEntity(entity) {\n const region = this.getRegionAt(entity.position);\n if (region) {\n region.addEntity(entity);\n this.entityRegionMap.set(entity, region);\n if (this.config.autoActivate) {\n region.activate();\n }\n }\n }\n /**\n * Removes an entity from its region\n * \n * @param entity - Entity to remove\n */\n removeEntity(entity) {\n const region = this.entityRegionMap.get(entity);\n if (region) {\n region.removeEntity(entity);\n this.entityRegionMap.delete(entity);\n if (this.config.autoActivate && region.getEntities().length === 0) {\n region.deactivate();\n }\n }\n }\n /**\n * Updates entity positions and migrates them between regions if needed\n */\n updateEntities() {\n const entitiesToMigrate = [];\n for (const [entity, currentRegion] of this.entityRegionMap) {\n if (!currentRegion.shouldContain(entity)) {\n const newRegion = this.getRegionAt(entity.position);\n if (newRegion && newRegion !== currentRegion) {\n entitiesToMigrate.push({ entity, newRegion });\n }\n }\n }\n for (const { entity, newRegion } of entitiesToMigrate) {\n const oldRegion = this.entityRegionMap.get(entity);\n if (oldRegion) {\n oldRegion.removeEntity(entity);\n }\n newRegion.addEntity(entity);\n this.entityRegionMap.set(entity, newRegion);\n if (this.config.autoActivate) {\n newRegion.activate();\n }\n }\n }\n /**\n * Steps all active regions\n */\n step() {\n this.updateEntities();\n for (const region of this.regions) {\n if (region.isActive()) {\n region.step();\n }\n }\n }\n /**\n * Gets all regions\n * \n * @returns Array of all regions\n */\n getRegions() {\n return [...this.regions];\n }\n /**\n * Gets active regions\n * \n * @returns Array of active regions\n */\n getActiveRegions() {\n return this.regions.filter((r) => r.isActive());\n }\n /**\n * Gets the region containing an entity\n * \n * @param entity - Entity to find region for\n * @returns Region or null\n */\n getEntityRegion(entity) {\n return this.entityRegionMap.get(entity) ?? null;\n }\n /**\n * Clears all entities from all regions\n */\n clear() {\n for (const region of this.regions) {\n const entities = region.getEntities();\n for (const entity of entities) {\n region.removeEntity(entity);\n }\n }\n this.entityRegionMap.clear();\n }\n /**\n * Gets statistics about regions\n * \n * @returns Statistics object\n */\n getStats() {\n let totalEntities = 0;\n for (const region of this.regions) {\n totalEntities += region.getEntities().length;\n }\n return {\n totalRegions: this.regions.length,\n activeRegions: this.getActiveRegions().length,\n totalEntities\n };\n }\n}\nexport {\n RegionManager\n};\n//# sourceMappingURL=index26.js.map\n","function migrateEntity(entity, fromRegion, toRegion, handler) {\n fromRegion.removeEntity(entity);\n toRegion.addEntity(entity);\n if (handler) {\n handler({\n entity,\n fromRegion,\n toRegion\n });\n }\n}\nfunction migrateEntities(migrations, handler) {\n for (const migration of migrations) {\n migrateEntity(\n migration.entity,\n migration.fromRegion,\n migration.toRegion,\n handler\n );\n }\n}\nexport {\n migrateEntities,\n migrateEntity\n};\n//# sourceMappingURL=index27.js.map\n","import { Vector2 } from \"./index2.js\";\nclass EntityMovementBody {\n constructor(entity) {\n this.entity = entity;\n }\n get id() {\n return this.entity.uuid;\n }\n get position() {\n return this.entity.position;\n }\n get velocity() {\n return this.entity.velocity;\n }\n setVelocity(velocity) {\n this.entity.setVelocity(velocity);\n }\n translate(delta) {\n this.entity.position.addInPlace(new Vector2(delta.x, delta.y));\n }\n isStatic() {\n return this.entity.isStatic();\n }\n /**\n * Returns the underlying entity reference.\n */\n getEntity() {\n return this.entity;\n }\n}\nexport {\n EntityMovementBody\n};\n//# sourceMappingURL=index31.js.map\n","import { Entity } from \"./index7.js\";\nimport { EntityMovementBody } from \"./index31.js\";\nclass MovementManager {\n constructor(resolveEntity) {\n this.resolveEntity = resolveEntity;\n this.entries = /* @__PURE__ */ new Map();\n this.entityWrappers = /* @__PURE__ */ new WeakMap();\n }\n /**\n * Convenience factory that binds the manager to a physics engine.\n *\n * @param engine - Physics engine whose entities will be controlled\n * @returns A movement manager configured with an entity resolver\n */\n static forEngine(engine) {\n let manager;\n manager = new MovementManager((id) => {\n const entity = engine.getEntityByUUID(id);\n return entity ? manager.wrapEntity(entity) : void 0;\n });\n return manager;\n }\n /**\n * Adds a movement strategy to an entity.\n * \n * Returns a Promise that resolves when the movement completes (when `isFinished()` returns true).\n * If the strategy doesn't implement `isFinished()`, the Promise resolves immediately after adding.\n *\n * @param target - Entity instance or entity UUID when a resolver is configured\n * @param strategy - Strategy to execute\n * @param options - Optional callbacks for movement lifecycle events\n * @returns Promise that resolves when the movement completes\n * \n * @example\n * ```typescript\n * // Simple usage - fire and forget\n * manager.add(player, new Dash(8, { x: 1, y: 0 }, 200));\n * \n * // Wait for completion\n * await manager.add(player, new Dash(8, { x: 1, y: 0 }, 200));\n * console.log('Dash finished!');\n * \n * // With callbacks\n * await manager.add(player, new Knockback({ x: -1, y: 0 }, 5, 300), {\n * onStart: () => {\n * player.directionFixed = true;\n * player.animationFixed = true;\n * },\n * onComplete: () => {\n * player.directionFixed = false;\n * player.animationFixed = false;\n * }\n * });\n * ```\n */\n add(target, strategy, options) {\n const body = this.resolveTarget(target);\n const key = body.id;\n if (!this.entries.has(key)) {\n this.entries.set(key, { body, strategies: [] });\n }\n if (!strategy.isFinished) {\n const entry = { strategy, started: false };\n if (options) {\n entry.options = options;\n }\n this.entries.get(key).strategies.push(entry);\n return Promise.resolve();\n }\n return new Promise((resolve) => {\n const entry = { strategy, resolve, started: false };\n if (options) {\n entry.options = options;\n }\n this.entries.get(key).strategies.push(entry);\n });\n }\n /**\n * Removes a specific strategy from an entity.\n * \n * Note: This will NOT trigger the onComplete callback or resolve the Promise.\n * Use this when you want to cancel a movement without completion.\n *\n * @param target - Entity instance or identifier\n * @param strategy - Strategy instance to remove\n * @returns True when the strategy has been removed\n */\n remove(target, strategy) {\n const body = this.resolveTarget(target);\n const entry = this.entries.get(body.id);\n if (!entry) {\n return false;\n }\n const index = entry.strategies.findIndex((e) => e.strategy === strategy);\n if (index === -1) {\n return false;\n }\n entry.strategies.splice(index, 1);\n if (entry.strategies.length === 0) {\n this.entries.delete(body.id);\n }\n return true;\n }\n /**\n * Removes all strategies from an entity.\n *\n * @param target - Entity or identifier\n */\n clear(target) {\n const body = this.resolveTarget(target);\n this.entries.delete(body.id);\n }\n /**\n * Stops all movement for an entity immediately\n * \n * This method completely stops an entity's movement by:\n * - Removing all active movement strategies (dash, linear moves, etc.)\n * - Stopping the entity's velocity and angular velocity\n * - Clearing accumulated forces\n * - Waking up the entity if it was sleeping\n * \n * This is useful when changing maps, teleporting, or when you need\n * to halt an entity's movement completely without making it static.\n * \n * @param target - Entity, MovementBody, or identifier\n * \n * @example\n * ```ts\n * // Stop movement when changing maps\n * if (mapChanged) {\n * movement.stopMovement(playerEntity);\n * }\n * \n * // Stop movement after teleporting\n * entity.position.set(100, 200);\n * movement.stopMovement(entity);\n * \n * // Stop movement when player dies\n * if (player.isDead()) {\n * movement.stopMovement(playerEntity);\n * }\n * ```\n */\n stopMovement(target) {\n const body = this.resolveTarget(target);\n this.clear(target);\n if (\"getEntity\" in body && typeof body.getEntity === \"function\") {\n const entity = body.getEntity();\n if (entity && typeof entity.stopMovement === \"function\") {\n entity.stopMovement();\n }\n }\n }\n /**\n * Checks if an entity has active strategies.\n *\n * @param target - Entity or identifier\n * @returns True when strategies are registered\n */\n hasActiveStrategies(target) {\n const body = this.resolveTarget(target);\n return (this.entries.get(body.id)?.strategies.length ?? 0) > 0;\n }\n /**\n * Returns a snapshot of the strategies assigned to an entity.\n *\n * @param target - Entity or identifier\n * @returns Copy of the strategies array (empty array when none)\n */\n getStrategies(target) {\n const body = this.resolveTarget(target);\n const entry = this.entries.get(body.id);\n return entry ? entry.strategies.map((e) => e.strategy) : [];\n }\n /**\n * Updates all registered strategies.\n *\n * Call this method once per frame before `PhysicsEngine.step()` so that the\n * physics simulation integrates the velocities that strategies configure.\n * \n * This method handles the movement lifecycle:\n * - Triggers `onStart` callback on first update\n * - Calls `strategy.update()` each frame\n * - When `isFinished()` returns true:\n * - Calls `strategy.onFinished()` if defined\n * - Triggers `onComplete` callback\n * - Resolves the Promise returned by `add()`\n *\n * @param dt - Time delta in seconds\n */\n update(dt) {\n for (const [key, entry] of this.entries) {\n const { body, strategies } = entry;\n if (strategies.length === 0) {\n this.entries.delete(key);\n continue;\n }\n for (let i = strategies.length - 1; i >= 0; i -= 1) {\n const strategyEntry = strategies[i];\n if (!strategyEntry) {\n continue;\n }\n const { strategy, options, resolve } = strategyEntry;\n if (!strategyEntry.started) {\n strategyEntry.started = true;\n options?.onStart?.();\n }\n strategy.update(body, dt);\n const isFinished = strategy.isFinished?.();\n if (isFinished) {\n strategies.splice(i, 1);\n strategy.onFinished?.();\n options?.onComplete?.();\n resolve?.();\n }\n }\n if (strategies.length === 0) {\n this.entries.delete(key);\n }\n }\n }\n /**\n * Removes all strategies from all entities.\n */\n clearAll() {\n this.entries.clear();\n }\n resolveTarget(target) {\n if (this.isMovementBody(target)) {\n return target;\n }\n if (target instanceof Entity) {\n return this.wrapEntity(target);\n }\n if (!this.resolveEntity) {\n throw new Error(\"MovementManager: cannot resolve entity from identifier without a resolver.\");\n }\n const entity = this.resolveEntity(target);\n if (!entity) {\n throw new Error(`MovementManager: unable to resolve entity for identifier ${target}.`);\n }\n return entity;\n }\n wrapEntity(entity) {\n let wrapper = this.entityWrappers.get(entity);\n if (!wrapper) {\n wrapper = new EntityMovementBody(entity);\n this.entityWrappers.set(entity, wrapper);\n }\n return wrapper;\n }\n isMovementBody(value) {\n return Boolean(\n value && typeof value === \"object\" && \"id\" in value && \"setVelocity\" in value && typeof value.setVelocity === \"function\"\n );\n }\n}\nexport {\n MovementManager\n};\n//# sourceMappingURL=index30.js.map\n","import { Vector2 } from \"./index2.js\";\nimport { AABB } from \"./index4.js\";\nimport { generateUUID } from \"./index43.js\";\nclass ZoneManager {\n /**\n * Creates a new zone manager\n *\n * @param engine - Physics engine instance\n */\n constructor(engine) {\n this.zones = /* @__PURE__ */ new Map();\n this.engine = engine;\n }\n /**\n * Creates a new zone\n *\n * @param config - Zone configuration\n * @param callbacks - Optional event callbacks\n * @returns Zone identifier\n *\n * @example\n * ```typescript\n * const zoneId = zones.createZone({\n * position: { x: 100, y: 100 },\n * radius: 50,\n * angle: 180,\n * direction: 'right',\n * }, {\n * onEnter: (entities) => console.log('Entered:', entities),\n * onExit: (entities) => console.log('Exited:', entities),\n * });\n * ```\n */\n createZone(config, callbacks) {\n const id = generateUUID();\n const radius = config.radius;\n if (typeof radius !== \"number\" || radius <= 0) {\n throw new Error(\"Zone radius must be a positive number\");\n }\n const angle = config.angle ?? 360;\n const direction = config.direction ?? \"down\";\n const limitedByWalls = config.limitedByWalls ?? false;\n let position;\n let type;\n let attachedEntity;\n let offset;\n if (\"entity\" in config) {\n type = \"attached\";\n attachedEntity = config.entity;\n const entityPos = attachedEntity.position;\n const offsetValue = config.offset ?? { x: 0, y: 0 };\n if (offsetValue instanceof Vector2) {\n offset = offsetValue.clone();\n } else {\n offset = new Vector2(offsetValue.x, offsetValue.y);\n }\n position = new Vector2(entityPos.x + offset.x, entityPos.y + offset.y);\n } else {\n type = \"static\";\n const pos = config.position;\n if (pos instanceof Vector2) {\n position = pos.clone();\n } else {\n position = new Vector2(pos.x, pos.y);\n }\n }\n const record = {\n id,\n type,\n position,\n radius,\n angle,\n direction,\n limitedByWalls,\n metadata: config.metadata,\n attachedEntity,\n offset,\n callbacks,\n inside: /* @__PURE__ */ new Set()\n };\n this.zones.set(id, record);\n return id;\n }\n /**\n * Creates a zone attached to an entity (convenience method)\n *\n * @param entity - Entity to attach the zone to\n * @param config - Zone configuration\n * @param callbacks - Optional event callbacks\n * @returns Zone identifier\n *\n * @example\n * ```typescript\n * const visionZone = zones.createAttachedZone(player, {\n * radius: 100,\n * angle: 90,\n * direction: 'right',\n * offset: { x: 0, y: -10 },\n * }, {\n * onEnter: (entities) => console.log('Player sees:', entities),\n * });\n * ```\n */\n createAttachedZone(entity, config, callbacks) {\n return this.createZone({ ...config, entity }, callbacks);\n }\n /**\n * Updates a zone's configuration\n *\n * @param id - Zone identifier\n * @param updates - Partial configuration updates\n * @returns True if the zone was found and updated\n *\n * @example\n * ```typescript\n * zones.updateZone(zoneId, { radius: 75, angle: 120 });\n * ```\n */\n updateZone(id, updates) {\n const zone = this.zones.get(id);\n if (!zone) return false;\n if (updates.radius !== void 0) {\n if (typeof updates.radius !== \"number\" || updates.radius <= 0) {\n throw new Error(\"Zone radius must be a positive number\");\n }\n zone.radius = updates.radius;\n }\n if (updates.angle !== void 0) {\n zone.angle = updates.angle;\n }\n if (updates.direction !== void 0) {\n zone.direction = updates.direction;\n }\n if (updates.limitedByWalls !== void 0) {\n zone.limitedByWalls = updates.limitedByWalls;\n }\n if (updates.metadata !== void 0) {\n zone.metadata = updates.metadata;\n }\n if (\"offset\" in updates && updates.offset !== void 0 && zone.type === \"attached\") {\n const offsetValue = updates.offset;\n if (offsetValue instanceof Vector2) {\n zone.offset = offsetValue.clone();\n } else {\n zone.offset = new Vector2(offsetValue.x, offsetValue.y);\n }\n }\n return true;\n }\n /**\n * Registers or updates callbacks for a zone\n *\n * @param id - Zone identifier\n * @param callbacks - Event callbacks\n * @returns True if the zone was found\n *\n * @example\n * ```typescript\n * zones.registerCallbacks(zoneId, {\n * onEnter: (entities) => console.log('Entered:', entities),\n * onExit: (entities) => console.log('Exited:', entities),\n * });\n * ```\n */\n registerCallbacks(id, callbacks) {\n const zone = this.zones.get(id);\n if (!zone) return false;\n zone.callbacks = callbacks;\n return true;\n }\n /**\n * Removes a zone\n *\n * @param id - Zone identifier\n * @returns True if the zone was found and removed\n */\n removeZone(id) {\n return this.zones.delete(id);\n }\n /**\n * Gets zone information\n *\n * @param id - Zone identifier\n * @returns Zone information or undefined\n */\n getZone(id) {\n const zone = this.zones.get(id);\n if (!zone) return void 0;\n return {\n id: zone.id,\n type: zone.type,\n position: zone.position.clone(),\n radius: zone.radius,\n angle: zone.angle,\n direction: zone.direction,\n limitedByWalls: zone.limitedByWalls,\n metadata: zone.metadata\n };\n }\n /**\n * Gets all entities currently inside a zone\n *\n * @param id - Zone identifier\n * @returns Array of entities inside the zone\n */\n getEntitiesInZone(id) {\n const zone = this.zones.get(id);\n if (!zone) return [];\n const entities = [];\n for (const uuid of zone.inside) {\n const entity = this.engine.getEntityByUUID(uuid);\n if (entity) {\n entities.push(entity);\n }\n }\n return entities;\n }\n /**\n * Gets all zone identifiers\n *\n * @returns Array of zone IDs\n */\n getAllZoneIds() {\n return Array.from(this.zones.keys());\n }\n /**\n * Clears all zones\n */\n clear() {\n this.zones.clear();\n }\n /**\n * Updates all zones, detecting entities entering/exiting\n *\n * This should be called after each physics step to keep zones synchronized.\n *\n * @param _deltaTime - Optional delta time (not used currently, but kept for future use)\n *\n * @example\n * ```typescript\n * engine.step();\n * zones.update();\n * ```\n */\n update(_deltaTime) {\n for (const zone of this.zones.values()) {\n if (zone.type === \"attached\" && zone.attachedEntity) {\n const entityPos = zone.attachedEntity.position;\n const offset = zone.offset ?? new Vector2(0, 0);\n zone.position.set(entityPos.x + offset.x, entityPos.y + offset.y);\n }\n const aabb = new AABB(\n zone.position.x - zone.radius,\n zone.position.y - zone.radius,\n zone.position.x + zone.radius,\n zone.position.y + zone.radius\n );\n const candidates = this.engine.queryAABB(aabb);\n const hits = /* @__PURE__ */ new Set();\n for (const entity of candidates) {\n if (zone.attachedEntity && entity.uuid === zone.attachedEntity.uuid) {\n continue;\n }\n if (this.isEntityInsideZone(zone, entity)) {\n hits.add(entity.uuid);\n }\n }\n const previous = zone.inside;\n const entered = [];\n const exited = [];\n for (const uuid of hits) {\n if (!previous.has(uuid)) {\n const entity = this.engine.getEntityByUUID(uuid);\n if (entity) {\n entered.push(entity);\n }\n }\n }\n for (const uuid of previous) {\n if (!hits.has(uuid)) {\n const entity = this.engine.getEntityByUUID(uuid);\n if (entity) {\n exited.push(entity);\n }\n }\n }\n zone.inside = hits;\n if (entered.length > 0 && zone.callbacks?.onEnter) {\n zone.callbacks.onEnter(entered);\n }\n if (exited.length > 0 && zone.callbacks?.onExit) {\n zone.callbacks.onExit(exited);\n }\n }\n }\n /**\n * Checks if an entity is inside a zone\n *\n * @param zone - Zone record\n * @param entity - Entity to check\n * @returns True if the entity is inside the zone\n */\n isEntityInsideZone(zone, entity) {\n const zonePos = zone.position;\n const entityPos = entity.position;\n const dx = entityPos.x - zonePos.x;\n const dy = entityPos.y - zonePos.y;\n const distance = Math.hypot(dx, dy);\n const entityRadius = entity.radius > 0 ? entity.radius : Math.max(entity.width, entity.height) / 2;\n if (distance - entityRadius > zone.radius) {\n return false;\n }\n if (zone.angle < 360) {\n const facing = this.directionToAngle(zone.direction);\n const angle = Math.atan2(dy, dx);\n const delta = this.normalizeAngle(angle - facing);\n const halfAperture = zone.angle * Math.PI / 360;\n if (Math.abs(delta) > halfAperture) {\n return false;\n }\n }\n if (zone.limitedByWalls) {\n if (!this.hasLineOfSight(zonePos, entityPos, entity.uuid)) {\n return false;\n }\n }\n return true;\n }\n /**\n * Checks if there's a clear line of sight between two points\n *\n * @param start - Start position\n * @param end - End position\n * @param ignoreEntityId - Entity UUID to ignore (usually the target entity)\n * @returns True if line of sight is clear\n */\n hasLineOfSight(start, end, ignoreEntityId) {\n const direction = end.sub(start);\n const distance = direction.length();\n if (distance < 1e-5) return true;\n direction.normalizeInPlace();\n const hit = this.engine.raycast(start, direction, distance, void 0, (entity) => {\n if (!entity.isStatic()) return false;\n if (ignoreEntityId && entity.uuid === ignoreEntityId) return false;\n return true;\n });\n return hit === null;\n }\n /**\n * Converts direction string to angle in radians\n *\n * @param dir - Direction\n * @returns Angle in radians\n */\n directionToAngle(dir) {\n switch (dir) {\n case \"up\":\n return -Math.PI / 2;\n case \"down\":\n return Math.PI / 2;\n case \"left\":\n return Math.PI;\n case \"right\":\n default:\n return 0;\n }\n }\n /**\n * Normalizes angle to [-π, π]\n *\n * @param angle - Angle in radians\n * @returns Normalized angle\n */\n normalizeAngle(angle) {\n let a = angle;\n while (a > Math.PI) a -= Math.PI * 2;\n while (a < -Math.PI) a += Math.PI * 2;\n return a;\n }\n}\nexport {\n ZoneManager\n};\n//# sourceMappingURL=index29.js.map\n","import { World } from \"./index23.js\";\nimport { Entity } from \"./index7.js\";\nimport { RegionManager } from \"./index26.js\";\nimport { assignPolygonCollider } from \"./index19.js\";\nimport { raycast } from \"./index20.js\";\nimport { sweepEntities } from \"./index22.js\";\nimport { MovementManager } from \"./index30.js\";\nimport { ZoneManager } from \"./index29.js\";\nclass PhysicsEngine {\n /**\n * Creates a new physics engine\n * \n * @param config - Engine configuration\n */\n constructor(config = {}) {\n this.regionManager = null;\n this.movementManager = null;\n this.zoneManager = null;\n this.tick = 0;\n this.useRegions = config.enableRegions ?? false;\n if (this.useRegions) {\n if (!config.regionConfig) {\n throw new Error(\"Region configuration is required when enableRegions is true\");\n }\n this.regionManager = new RegionManager(config.regionConfig);\n this.world = new World({\n ...config,\n enableSleep: false\n // Regions handle sleep\n });\n } else {\n this.world = new World(config);\n }\n }\n /**\n * Gets the movement manager bound to this engine.\n *\n * The manager is lazily created and reused.\n *\n * @returns Movement manager instance\n */\n getMovementManager() {\n if (!this.movementManager) {\n this.movementManager = MovementManager.forEngine(this);\n }\n return this.movementManager;\n }\n /**\n * Gets the zone manager bound to this engine.\n *\n * The manager is lazily created and reused. Zones allow detecting entities\n * within circular or cone-shaped areas without physical collisions (useful\n * for vision, skill ranges, explosions, etc.).\n *\n * **Important:** Call `zoneManager.update()` after each physics step to\n * keep zones synchronized:\n *\n * ```typescript\n * engine.step();\n * engine.getZoneManager().update();\n * ```\n *\n * @returns Zone manager instance\n *\n * @example\n * ```typescript\n * const zones = engine.getZoneManager();\n * const visionZone = zones.createAttachedZone(player, {\n * radius: 100,\n * angle: 90,\n * direction: 'right',\n * }, {\n * onEnter: (entities) => console.log('Player sees:', entities),\n * });\n *\n * engine.step();\n * zones.update();\n * ```\n */\n getZoneManager() {\n if (!this.zoneManager) {\n this.zoneManager = new ZoneManager(this);\n }\n return this.zoneManager;\n }\n /**\n * Updates all registered movement strategies.\n *\n * @param dt - Time delta in seconds (defaults to the world's time step)\n */\n updateMovements(dt) {\n const manager = this.getMovementManager();\n const delta = dt ?? this.world.getTimeStep();\n manager.update(delta);\n }\n /**\n * Updates movements and then steps the simulation.\n *\n * @param dt - Time delta in seconds (defaults to the world's time step)\n */\n stepWithMovements(dt) {\n this.updateMovements(dt);\n this.step();\n }\n /**\n * Advances the simulation by exactly one fixed tick.\n *\n * This helper is equivalent to {@link step} but returns the tick index after the step,\n * making it convenient for client-side prediction loops.\n *\n * @returns Current tick index after stepping\n */\n stepOneTick() {\n this.step();\n return this.tick;\n }\n /**\n * Advances the simulation by a fixed number of ticks.\n *\n * @param ticks - Number of ticks to simulate (>= 1)\n * @returns Current tick index after stepping\n */\n stepTicks(ticks) {\n if (!Number.isFinite(ticks) || ticks <= 0) {\n return this.tick;\n }\n const total = Math.floor(ticks);\n for (let i = 0; i < total; i += 1) {\n this.step();\n }\n return this.tick;\n }\n /**\n * Creates a new entity\n * \n * @param config - Entity configuration\n * @returns Created entity\n * \n * @example\n * ```typescript\n * const entity = engine.createEntity({\n * position: { x: 100, y: 100 },\n * radius: 15,\n * mass: 1,\n * velocity: { x: 5, y: 0 }\n * });\n * ```\n */\n createEntity(config) {\n const entity = new Entity(config);\n if (this.useRegions && this.regionManager) {\n this.regionManager.addEntity(entity);\n } else {\n this.world.addEntity(entity);\n }\n return entity;\n }\n /**\n * Adds an existing entity to the engine\n * \n * @param entity - Entity to add\n * @returns The added entity\n */\n addEntity(entity) {\n if (this.useRegions && this.regionManager) {\n this.regionManager.addEntity(entity);\n } else {\n this.world.addEntity(entity);\n }\n return entity;\n }\n /**\n * Removes an entity from the engine\n * \n * @param entity - Entity to remove\n */\n removeEntity(entity) {\n if (this.useRegions && this.regionManager) {\n this.regionManager.removeEntity(entity);\n } else {\n this.world.removeEntity(entity);\n }\n }\n /**\n * Gets all entities\n * \n * @returns Array of all entities\n */\n getEntities() {\n if (this.useRegions && this.regionManager) {\n const entities = [];\n for (const region of this.regionManager.getRegions()) {\n entities.push(...region.getEntities());\n }\n return entities;\n }\n return this.world.getEntities();\n }\n /**\n * Gets an entity by UUID\n * \n * @param uuid - Entity UUID\n * @returns Entity or undefined\n */\n getEntityByUUID(uuid) {\n if (this.useRegions && this.regionManager) {\n for (const region of this.regionManager.getRegions()) {\n const entity = region.getWorld().getEntityByUUID(uuid);\n if (entity) {\n return entity;\n }\n }\n return void 0;\n }\n return this.world.getEntityByUUID(uuid);\n }\n /**\n * Steps the physics simulation forward\n * \n * Updates all entities, detects and resolves collisions.\n */\n step() {\n if (this.useRegions && this.regionManager) {\n this.regionManager.step();\n } else {\n this.world.step();\n }\n this.tick += 1;\n }\n /**\n * Gets the event system\n * \n * @returns Event system instance\n */\n getEvents() {\n return this.world.getEvents();\n }\n /**\n * Applies a force to an entity\n * \n * @param entity - Entity to apply force to\n * @param force - Force vector\n */\n applyForce(entity, force) {\n entity.applyForce(force);\n }\n /**\n * Applies an impulse to an entity\n * \n * @param entity - Entity to apply impulse to\n * @param impulse - Impulse vector\n */\n applyImpulse(entity, impulse) {\n entity.applyImpulse(impulse);\n }\n /**\n * Teleports an entity to a new position\n * \n * @param entity - Entity to teleport\n * @param position - New position\n */\n teleport(entity, position) {\n entity.teleport(position);\n if (this.useRegions && this.regionManager) {\n this.regionManager.updateEntities();\n }\n }\n /**\n * Freezes an entity (makes it static)\n * \n * @param entity - Entity to freeze\n */\n freeze(entity) {\n entity.freeze();\n }\n /**\n * Unfreezes an entity (makes it dynamic)\n * \n * @param entity - Entity to unfreeze\n */\n unfreeze(entity) {\n entity.unfreeze();\n }\n /**\n * Queries entities in an AABB region\n * \n * @param bounds - AABB to query\n * @returns Array of entities in the region\n */\n queryAABB(bounds) {\n if (this.useRegions && this.regionManager) {\n const entities = [];\n const regions = this.regionManager.getRegionsInBounds(bounds);\n for (const region of regions) {\n const world2 = region.getWorld();\n const worldEntities = world2.getEntities();\n for (const entity of worldEntities) {\n if (bounds.contains(entity.position)) {\n entities.push(entity);\n }\n }\n }\n return entities;\n }\n const world = this.world;\n if (world.spatialPartition) {\n return Array.from(world.spatialPartition.queryAABB(bounds));\n }\n return this.world.getEntities().filter((e) => bounds.contains(e.position));\n }\n /**\n * Clears all entities from the engine\n */\n clear() {\n if (this.useRegions && this.regionManager) {\n this.regionManager.clear();\n } else {\n this.world.clear();\n }\n this.tick = 0;\n }\n /**\n * Assigns a polygon collider to an entity (supports convex or concave via convex parts).\n *\n * Design: the collider is attached via a registry and used by the detector on demand.\n * This keeps entities lightweight and preserves the separation of detection/resolution.\n *\n * @param entity - Target entity\n * @param config - Polygon configuration\n * @example\n * ```typescript\n * engine.assignPolygonCollider(entity, { vertices: [new Vector2(-1,-1), new Vector2(1,-1), new Vector2(1,1), new Vector2(-1,1)], isConvex: true });\n * ```\n */\n assignPolygonCollider(entity, config) {\n assignPolygonCollider(entity, config);\n }\n /**\n * Casts a ray in the physics world and returns the nearest hit, if any.\n * Uses the world's spatial partition for broad-phase and shape-specific narrow-phase tests.\n *\n * @param origin - Ray origin\n * @param direction - Ray direction (any length)\n * @param maxDistance - Maximum cast length\n * @param mask - Optional collision mask (layer)\n * @param filter - Optional filter function (return true to include entity)\n * @returns Raycast hit or null\n * @example\n * ```typescript\n * const hit = engine.raycast(new Vector2(0,0), new Vector2(1,0), 1000);\n * ```\n */\n raycast(origin, direction, maxDistance, mask, filter) {\n const world = this.world;\n const partition = world.spatialPartition;\n if (!partition) return null;\n return raycast(partition, origin, direction, maxDistance, mask, filter);\n }\n /**\n * Computes continuous collision detection (sweep test) time-of-impact between two entities\n * over the next step of duration `dt`, using relative motion.\n *\n * @param a - First entity\n * @param b - Second entity\n * @param dt - Time step duration\n * @returns Sweep result or null if no hit in [0,1]\n * @example\n * ```typescript\n * const toi = engine.sweep(entityA, entityB, 1/60);\n * if (toi) {\n * // pre-resolve or clamp motion\n * }\n * ```\n */\n sweep(a, b, dt) {\n const rel = a.velocity.sub(b.velocity).mul(dt);\n return sweepEntities(a, b, rel);\n }\n /**\n * Gets statistics about the engine\n * \n * @returns Statistics object\n */\n getStats() {\n if (this.useRegions && this.regionManager) {\n const regionStats = this.regionManager.getStats();\n const worldStats = this.world.getStats();\n return {\n ...worldStats,\n regions: {\n total: regionStats.totalRegions,\n active: regionStats.activeRegions\n }\n };\n }\n return this.world.getStats();\n }\n /**\n * Gets the underlying world instance\n * \n * @returns World instance\n */\n getWorld() {\n return this.world;\n }\n /**\n * Gets the current simulation tick.\n *\n * @returns Tick counter (starts at 0 and increments after each {@link step})\n */\n getTick() {\n return this.tick;\n }\n /**\n * Captures a lightweight snapshot of the current world state.\n *\n * The snapshot only stores the minimum data required for client-side prediction:\n * position, velocity, rotation, angular velocity and sleeping flag per entity.\n *\n * @returns Snapshot object\n */\n takeSnapshot() {\n return {\n tick: this.tick,\n entities: this.getEntities().map((entity) => ({\n uuid: entity.uuid,\n position: { x: entity.position.x, y: entity.position.y },\n velocity: { x: entity.velocity.x, y: entity.velocity.y },\n rotation: entity.rotation,\n angularVelocity: entity.angularVelocity,\n sleeping: entity.isSleeping()\n }))\n };\n }\n /**\n * Restores a snapshot previously produced by {@link takeSnapshot}.\n *\n * Entities that cannot be found in the current engine are skipped silently.\n *\n * @param snapshot - Snapshot to restore\n */\n restoreSnapshot(snapshot) {\n const entities = new Map(this.getEntities().map((entity) => [entity.uuid, entity]));\n for (const state of snapshot.entities) {\n const entity = entities.get(state.uuid);\n if (!entity) continue;\n entity.position.set(state.position.x, state.position.y);\n entity.velocity.set(state.velocity.x, state.velocity.y);\n entity.rotation = state.rotation;\n entity.angularVelocity = state.angularVelocity;\n if (state.sleeping) {\n entity.sleep();\n } else {\n entity.wakeUp();\n }\n }\n this.tick = snapshot.tick;\n }\n /**\n * Gets the region manager (if regions are enabled)\n * \n * @returns Region manager or null\n */\n getRegionManager() {\n return this.regionManager;\n }\n}\nexport {\n PhysicsEngine\n};\n//# sourceMappingURL=index28.js.map\n","class CompositeMovement {\n /**\n * Creates a composite movement.\n *\n * @param mode - Parallel or sequence execution\n * @param strategies - Strategies to aggregate\n */\n constructor(mode, strategies) {\n this.mode = mode;\n this.strategies = strategies;\n this.currentIndex = 0;\n }\n update(body, dt) {\n if (this.strategies.length === 0) {\n return;\n }\n if (this.mode === \"parallel\") {\n this.updateParallel(body, dt);\n } else {\n this.updateSequence(body, dt);\n }\n }\n isFinished() {\n if (this.mode === \"parallel\") {\n return this.strategies.length === 0;\n }\n return this.currentIndex >= this.strategies.length;\n }\n add(strategy) {\n this.strategies.push(strategy);\n }\n remove(strategy) {\n const index = this.strategies.indexOf(strategy);\n if (index === -1) {\n return false;\n }\n this.strategies.splice(index, 1);\n if (this.currentIndex >= this.strategies.length) {\n this.currentIndex = Math.max(0, this.strategies.length - 1);\n }\n return true;\n }\n reset() {\n this.currentIndex = 0;\n }\n updateParallel(body, dt) {\n const originalVelocity = { x: body.velocity.x, y: body.velocity.y };\n let changes = 0;\n for (let i = this.strategies.length - 1; i >= 0; i -= 1) {\n const strategy = this.strategies[i];\n if (!strategy) {\n continue;\n }\n const beforeX = body.velocity.x;\n const beforeY = body.velocity.y;\n strategy.update(body, dt);\n if (beforeX !== body.velocity.x || beforeY !== body.velocity.y) {\n changes += 1;\n }\n if (strategy.isFinished?.()) {\n this.strategies.splice(i, 1);\n strategy.onFinished?.();\n }\n }\n if (changes > 1) {\n body.setVelocity({\n x: (body.velocity.x + originalVelocity.x) / 2,\n y: (body.velocity.y + originalVelocity.y) / 2\n });\n }\n }\n updateSequence(body, dt) {\n if (this.currentIndex >= this.strategies.length) {\n return;\n }\n const current = this.strategies[this.currentIndex];\n if (!current) {\n return;\n }\n current.update(body, dt);\n if (current.isFinished?.()) {\n current.onFinished?.();\n this.currentIndex += 1;\n }\n }\n}\nexport {\n CompositeMovement\n};\n//# sourceMappingURL=index32.js.map\n","class Dash {\n /**\n * Creates a dash movement.\n *\n * @param speed - Movement speed in units per second\n * @param direction - Direction vector (will be normalized)\n * @param duration - Duration in seconds\n */\n constructor(speed, direction, duration) {\n this.speed = speed;\n this.duration = duration;\n this.elapsed = 0;\n this.finished = false;\n const magnitude = Math.hypot(direction.x, direction.y);\n this.direction = magnitude > 0 ? { x: direction.x / magnitude, y: direction.y / magnitude } : { x: 1, y: 0 };\n }\n update(body, dt) {\n if (this.finished) {\n return;\n }\n this.elapsed += dt;\n if (this.elapsed <= this.duration) {\n body.setVelocity({\n x: this.direction.x * this.speed,\n y: this.direction.y * this.speed\n });\n } else {\n body.setVelocity({ x: 0, y: 0 });\n this.finished = true;\n }\n }\n isFinished() {\n return this.finished;\n }\n}\nexport {\n Dash\n};\n//# sourceMappingURL=index33.js.map\n","class IceMovement {\n /**\n * Creates an ice-like movement behaviour.\n *\n * @param direction - Initial desired direction (normalized automatically)\n * @param maxSpeed - Maximum speed in units per second\n * @param acceleration - Fraction of the gap closed per second (0-1)\n * @param friction - Fraction of velocity retained per second when stopping (0-1)\n * @param duration - Optional duration in seconds\n */\n constructor(direction, maxSpeed = 4, acceleration = 0.2, friction = 0.08, duration) {\n this.maxSpeed = maxSpeed;\n this.acceleration = acceleration;\n this.friction = friction;\n this.duration = duration;\n this.currentVelocity = { x: 0, y: 0 };\n this.elapsed = 0;\n this.stopped = false;\n const magnitude = Math.hypot(direction.x, direction.y);\n this.targetDirection = magnitude > 0 ? { x: direction.x / magnitude, y: direction.y / magnitude } : { x: 0, y: 0 };\n }\n update(body, dt) {\n if (this.duration !== void 0) {\n this.elapsed += dt;\n if (this.elapsed >= this.duration) {\n this.stopped = true;\n }\n }\n if (!this.stopped) {\n const accelFactor = this.perSecondFactor(this.acceleration, dt);\n const targetVx = this.targetDirection.x * this.maxSpeed;\n const targetVy = this.targetDirection.y * this.maxSpeed;\n this.currentVelocity.x += (targetVx - this.currentVelocity.x) * accelFactor;\n this.currentVelocity.y += (targetVy - this.currentVelocity.y) * accelFactor;\n } else {\n const frictionFactor = this.perSecondFactor(this.friction, dt);\n this.currentVelocity.x *= 1 - frictionFactor;\n this.currentVelocity.y *= 1 - frictionFactor;\n }\n body.setVelocity({\n x: this.currentVelocity.x,\n y: this.currentVelocity.y\n });\n }\n isFinished() {\n if (!this.stopped) {\n return false;\n }\n const speed = Math.hypot(this.currentVelocity.x, this.currentVelocity.y);\n return speed < 0.05;\n }\n stop() {\n this.stopped = true;\n }\n resume() {\n this.stopped = false;\n }\n setTargetDirection(direction) {\n const magnitude = Math.hypot(direction.x, direction.y);\n this.targetDirection.x = magnitude > 0 ? direction.x / magnitude : 0;\n this.targetDirection.y = magnitude > 0 ? direction.y / magnitude : 0;\n this.stopped = false;\n }\n setParameters(maxSpeed, acceleration, friction) {\n if (maxSpeed !== void 0) {\n this.maxSpeed = maxSpeed;\n }\n if (acceleration !== void 0) {\n this.acceleration = acceleration;\n }\n if (friction !== void 0) {\n this.friction = friction;\n }\n }\n perSecondFactor(value, dt) {\n const clamped = Math.max(0, Math.min(1, value));\n if (dt <= 0) {\n return clamped;\n }\n return 1 - Math.pow(1 - clamped, dt);\n }\n}\nexport {\n IceMovement\n};\n//# sourceMappingURL=index34.js.map\n","class Knockback {\n /**\n * Creates a knockback movement.\n *\n * @param direction - Direction of the impulse (will be normalized)\n * @param initialSpeed - Initial speed in units per second\n * @param duration - Duration in seconds\n * @param decayFactor - Fraction of speed preserved per second (0-1)\n */\n constructor(direction, initialSpeed, duration, decayFactor = 0.35) {\n this.duration = duration;\n this.decayFactor = decayFactor;\n this.elapsed = 0;\n const magnitude = Math.hypot(direction.x, direction.y);\n this.direction = magnitude > 0 ? { x: direction.x / magnitude, y: direction.y / magnitude } : { x: 1, y: 0 };\n this.currentSpeed = initialSpeed;\n }\n update(body, dt) {\n this.elapsed += dt;\n if (this.elapsed <= this.duration) {\n body.setVelocity({\n x: this.direction.x * this.currentSpeed,\n y: this.direction.y * this.currentSpeed\n });\n const decay = Math.max(0, Math.min(1, this.decayFactor));\n if (decay === 0) {\n this.currentSpeed = 0;\n } else if (decay === 1) ;\n else {\n this.currentSpeed *= Math.pow(decay, dt);\n }\n } else {\n body.setVelocity({ x: 0, y: 0 });\n }\n }\n isFinished() {\n return this.elapsed >= this.duration;\n }\n}\nexport {\n Knockback\n};\n//# sourceMappingURL=index35.js.map\n","class LinearMove {\n /**\n * Creates a linear movement strategy.\n *\n * @param velocity - Velocity to apply (units per second)\n * @param duration - Optional duration in seconds (undefined for infinite)\n */\n constructor(velocity, duration) {\n this.velocity = velocity;\n this.duration = duration;\n this.elapsed = 0;\n }\n update(body, dt) {\n if (this.duration !== void 0) {\n this.elapsed += dt;\n }\n body.setVelocity(this.velocity);\n }\n isFinished() {\n return this.duration !== void 0 && this.elapsed >= this.duration;\n }\n}\nexport {\n LinearMove\n};\n//# sourceMappingURL=index36.js.map\n","import { AABB } from \"./index4.js\";\nimport { Vector2 } from \"./index2.js\";\nclass LinearRepulsion {\n /**\n * @param engine - Physics engine used for spatial queries\n * @param targetProvider - Function returning the target position\n * @param maxSpeed - Maximum speed in units per second\n * @param repulseRadius - Radius used to sample nearby obstacles\n * @param repulseWeight - Weight of the repulsion force\n * @param ignoredEntity - Optional entity to exclude from avoidance (e.g. the target)\n */\n constructor(engine, targetProvider, maxSpeed = 2.5, repulseRadius = 2, repulseWeight = 4, ignoredEntity) {\n this.engine = engine;\n this.targetProvider = targetProvider;\n this.maxSpeed = maxSpeed;\n this.repulseRadius = repulseRadius;\n this.repulseWeight = repulseWeight;\n this.ignoredEntity = ignoredEntity;\n this.repulseRadiusSq = repulseRadius * repulseRadius;\n }\n update(body, _dt) {\n const entity = body.getEntity?.();\n if (!entity) {\n throw new Error(\"LinearRepulsion requires a movement body backed by a physics entity.\");\n }\n const targetPosition = this.targetProvider();\n const toTarget = new Vector2(targetPosition.x - entity.position.x, targetPosition.y - entity.position.y);\n const distance = toTarget.length();\n if (distance > 0) {\n toTarget.divInPlace(distance);\n } else {\n toTarget.set(0, 0);\n }\n const bounds = AABB.fromCenterSize(entity.position.x, entity.position.y, this.repulseRadius * 2, this.repulseRadius * 2);\n const neighbors = this.engine.queryAABB(bounds);\n const ignored = this.ignoredEntity?.();\n const push = new Vector2(0, 0);\n for (const other of neighbors) {\n if (other === entity || other === ignored || other.isStatic()) {\n continue;\n }\n const diff = new Vector2(entity.position.x - other.position.x, entity.position.y - other.position.y);\n const d2 = diff.lengthSquared();\n if (d2 > this.repulseRadiusSq || d2 === 0) {\n continue;\n }\n const d = Math.sqrt(d2);\n const weight = this.repulseWeight * (this.repulseRadius - Math.min(d, this.repulseRadius)) / this.repulseRadius;\n push.addInPlace(diff.mul(weight / d));\n }\n const maxPush = this.maxSpeed * 3;\n const pushLength = push.length();\n if (pushLength > maxPush && pushLength > 0) {\n push.mulInPlace(maxPush / pushLength);\n }\n const desired = toTarget.mul(this.maxSpeed).add(push);\n const desiredLength = desired.length();\n if (desiredLength > this.maxSpeed && desiredLength > 0) {\n desired.mulInPlace(this.maxSpeed / desiredLength);\n }\n if (!Number.isFinite(desired.x) || !Number.isFinite(desired.y)) {\n entity.setVelocity({ x: 0, y: 0 });\n return;\n }\n body.setVelocity(desired);\n }\n setParameters(maxSpeed, repulseRadius, repulseWeight) {\n if (maxSpeed !== void 0) {\n this.maxSpeed = maxSpeed;\n }\n if (repulseRadius !== void 0) {\n this.repulseRadius = repulseRadius;\n this.repulseRadiusSq = repulseRadius * repulseRadius;\n }\n if (repulseWeight !== void 0) {\n this.repulseWeight = repulseWeight;\n }\n }\n}\nexport {\n LinearRepulsion\n};\n//# sourceMappingURL=index37.js.map\n","class Oscillate {\n /**\n * Creates an oscillating movement.\n *\n * @param direction - Base direction (will be normalized)\n * @param amplitude - Maximum displacement from the anchor position\n * @param period - Duration of a full cycle in seconds\n * @param type - Oscillation pattern\n * @param duration - Total life time in seconds (undefined for infinite)\n */\n constructor(direction, amplitude, period, type = \"sine\", duration) {\n this.amplitude = amplitude;\n this.period = period;\n this.type = type;\n this.duration = duration;\n this.elapsed = 0;\n this.anchor = null;\n const magnitude = Math.hypot(direction.x, direction.y);\n this.direction = magnitude > 0 ? { x: direction.x / magnitude, y: direction.y / magnitude } : { x: 1, y: 0 };\n }\n update(body, dt) {\n if (this.anchor === null) {\n this.anchor = { x: body.position.x, y: body.position.y };\n }\n this.elapsed += dt;\n if (this.duration !== void 0 && this.elapsed >= this.duration) {\n body.setVelocity({ x: 0, y: 0 });\n return;\n }\n const cycle = this.period <= 0 ? 0 : this.elapsed % this.period / this.period;\n const frequency = this.period > 0 ? 2 * Math.PI / this.period : 0;\n let velocityScale;\n switch (this.type) {\n case \"sine\":\n velocityScale = Math.cos(cycle * Math.PI * 2) * frequency * this.amplitude;\n break;\n case \"circular\":\n velocityScale = Math.cos(cycle * Math.PI * 2) * frequency * this.amplitude;\n break;\n case \"linear\":\n const halfCycle = cycle < 0.5;\n velocityScale = (halfCycle ? 1 : -1) * (2 * this.amplitude) / (this.period / 2);\n break;\n default:\n velocityScale = 0;\n }\n const vx = this.direction.x * velocityScale;\n const vy = this.direction.y * velocityScale;\n if (this.type === \"circular\") {\n const perpendicularScale = -Math.sin(cycle * Math.PI * 2) * frequency * this.amplitude;\n body.setVelocity({\n x: vx - this.direction.y * perpendicularScale,\n y: vy + this.direction.x * perpendicularScale\n });\n } else {\n body.setVelocity({ x: vx, y: vy });\n }\n }\n isFinished() {\n return this.duration !== void 0 && this.elapsed >= this.duration;\n }\n reset() {\n this.elapsed = 0;\n this.anchor = null;\n }\n}\nexport {\n Oscillate\n};\n//# sourceMappingURL=index38.js.map\n","class PathFollow {\n /**\n * Creates a path-following strategy.\n *\n * @param waypoints - List of waypoints to traverse\n * @param speed - Travel speed in units per second\n * @param loop - When true, restart from the first waypoint\n * @param pauseAtWaypoints - Optional pause duration (seconds) at each waypoint\n * @param tolerance - Distance tolerance to consider a waypoint reached\n */\n constructor(waypoints, speed, loop = false, pauseAtWaypoints = 0, tolerance = 0.1) {\n this.waypoints = waypoints;\n this.speed = speed;\n this.loop = loop;\n this.pauseAtWaypoints = pauseAtWaypoints;\n this.tolerance = tolerance;\n this.currentWaypoint = 0;\n this.elapsedPause = 0;\n this.paused = false;\n this.finished = false;\n this.direction = { x: 0, y: 0 };\n if (waypoints.length === 0) {\n this.finished = true;\n }\n }\n update(body, dt) {\n if (this.finished || this.waypoints.length === 0) {\n body.setVelocity({ x: 0, y: 0 });\n return;\n }\n if (this.paused) {\n this.elapsedPause += dt;\n body.setVelocity({ x: 0, y: 0 });\n if (this.elapsedPause >= this.pauseAtWaypoints) {\n this.paused = false;\n this.elapsedPause = 0;\n } else {\n return;\n }\n }\n const target = this.waypoints[this.currentWaypoint];\n if (!target) {\n this.finished = true;\n body.setVelocity({ x: 0, y: 0 });\n return;\n }\n const dx = target.x - body.position.x;\n const dy = target.y - body.position.y;\n const distance = Math.hypot(dx, dy);\n if (distance <= this.tolerance) {\n this.currentWaypoint += 1;\n if (this.currentWaypoint >= this.waypoints.length) {\n if (this.loop) {\n this.currentWaypoint = 0;\n } else {\n this.finished = true;\n body.setVelocity({ x: 0, y: 0 });\n return;\n }\n }\n if (this.pauseAtWaypoints > 0) {\n this.paused = true;\n this.elapsedPause = 0;\n body.setVelocity({ x: 0, y: 0 });\n return;\n }\n }\n if (distance > 0) {\n this.direction = { x: dx / distance, y: dy / distance };\n }\n body.setVelocity({\n x: this.direction.x * this.speed,\n y: this.direction.y * this.speed\n });\n }\n isFinished() {\n return this.finished;\n }\n getCurrentWaypoint() {\n return this.currentWaypoint;\n }\n setWaypoints(waypoints, reset = true) {\n this.waypoints = waypoints;\n this.finished = waypoints.length === 0;\n if (reset) {\n this.currentWaypoint = 0;\n this.paused = false;\n this.elapsedPause = 0;\n }\n }\n}\nexport {\n PathFollow\n};\n//# sourceMappingURL=index39.js.map\n","import { Vector2 } from \"./index2.js\";\nvar ProjectileType = /* @__PURE__ */ ((ProjectileType2) => {\n ProjectileType2[\"Straight\"] = \"straight\";\n ProjectileType2[\"Arc\"] = \"arc\";\n ProjectileType2[\"Bounce\"] = \"bounce\";\n return ProjectileType2;\n})(ProjectileType || {});\nclass ProjectileMovement {\n constructor(type, options) {\n this.type = type;\n this.elapsed = 0;\n this.distanceTraveled = 0;\n this.startPosition = null;\n this.bounceCount = 0;\n this.stage = 0;\n this.finished = false;\n this.currentHeight = 0;\n this.verticalVelocity = 0;\n const defaults = {\n speed: options.speed,\n direction: options.direction,\n initialHeight: 0,\n maxHeight: 2,\n gravity: 30,\n maxBounces: 0,\n bounciness: 0.6,\n drag: 0\n };\n this.options = { ...defaults, ...options };\n const magnitude = Math.hypot(this.options.direction.x, this.options.direction.y);\n this.direction = magnitude > 0 ? { x: this.options.direction.x / magnitude, y: this.options.direction.y / magnitude } : { x: 1, y: 0 };\n this.currentHeight = this.options.initialHeight ?? 0;\n if (this.type === \"arc\" || this.type === \"bounce\") {\n const gravity = this.options.gravity ?? 30;\n const maxHeight = this.options.maxHeight ?? 2;\n this.verticalVelocity = Math.sqrt(Math.max(0, 2 * gravity * maxHeight));\n }\n }\n update(body, dt) {\n if (this.finished || dt <= 0) {\n body.setVelocity({ x: 0, y: 0 });\n return;\n }\n if (this.startPosition === null) {\n this.startPosition = new Vector2(body.position.x, body.position.y);\n }\n this.elapsed += dt;\n if (this.options.lifetime !== void 0 && this.elapsed >= this.options.lifetime) {\n this.finish(body);\n return;\n }\n switch (this.stage) {\n case 0:\n this.updateFlying(body, dt);\n break;\n case 1:\n this.updateRolling(body, dt);\n break;\n case 2:\n this.finish(body);\n return;\n }\n if (this.startPosition) {\n this.distanceTraveled = new Vector2(body.position.x, body.position.y).distanceTo(this.startPosition);\n if (this.options.maxRange !== void 0 && this.distanceTraveled >= this.options.maxRange) {\n this.finish(body);\n }\n }\n }\n isFinished() {\n return this.finished;\n }\n getHeight() {\n return this.currentHeight;\n }\n getProgress() {\n if (this.options.maxRange) {\n return Math.min(1, this.distanceTraveled / this.options.maxRange);\n }\n if (this.options.lifetime) {\n return Math.min(1, this.elapsed / this.options.lifetime);\n }\n return 0;\n }\n updateFlying(body, dt) {\n let vx = this.direction.x * this.options.speed;\n let vy = this.direction.y * this.options.speed;\n const drag = Math.max(0, Math.min(1, this.options.drag ?? 0));\n if (drag > 0) {\n const dragFactor = Math.pow(1 - drag, dt);\n vx *= dragFactor;\n vy *= dragFactor;\n }\n if (this.type === \"arc\" || this.type === \"bounce\") {\n const gravity = this.options.gravity ?? 30;\n this.verticalVelocity -= gravity * dt;\n this.currentHeight += this.verticalVelocity * dt;\n if (this.options.onHeightUpdate) {\n this.options.onHeightUpdate(this.currentHeight, body);\n } else {\n const dispatcher = globalThis;\n if (typeof dispatcher.dispatchEvent === \"function\" && typeof CustomEvent !== \"undefined\") {\n const event = new CustomEvent(\"projectile:height\", {\n detail: {\n id: body.id,\n height: this.currentHeight\n }\n });\n dispatcher.dispatchEvent(event);\n }\n }\n if (this.currentHeight <= 0) {\n this.currentHeight = 0;\n if (this.type === \"bounce\") {\n if (this.bounceCount < (this.options.maxBounces ?? 0)) {\n const bounceEnergy = this.options.bounciness ?? 0.6;\n this.verticalVelocity = Math.abs(this.verticalVelocity) * bounceEnergy;\n vx *= bounceEnergy;\n vy *= bounceEnergy;\n this.bounceCount += 1;\n } else {\n this.stage = 1;\n }\n } else {\n this.finish(body);\n return;\n }\n }\n }\n body.setVelocity({ x: vx, y: vy });\n }\n updateRolling(body, dt) {\n const friction = 0.85;\n const vx = body.velocity.x * Math.pow(friction, dt * 60);\n const vy = body.velocity.y * Math.pow(friction, dt * 60);\n body.setVelocity({ x: vx, y: vy });\n if (Math.abs(vx) < 0.1 && Math.abs(vy) < 0.1) {\n this.finish(body);\n }\n }\n finish(body) {\n this.finished = true;\n this.stage = 2;\n body.setVelocity({ x: 0, y: 0 });\n }\n}\nexport {\n ProjectileMovement,\n ProjectileType\n};\n//# sourceMappingURL=index40.js.map\n","import { AABB } from \"./index4.js\";\nimport { Vector2 } from \"./index2.js\";\nconst EPSILON = 1e-3;\nclass SeekAvoid {\n /**\n * @param engine - Physics engine used for spatial queries\n * @param targetProvider - Function returning the target entity (or null)\n * @param maxSpeed - Maximum speed in units per second\n * @param repulseRadius - Radius in which obstacles apply repulsion\n * @param repulseWeight - Strength of the repulsion force\n * @param arriveRadius - Distance considered as arrival\n */\n constructor(engine, targetProvider, maxSpeed = 2.5, repulseRadius = 2, repulseWeight = 4, arriveRadius = 0.5) {\n this.engine = engine;\n this.targetProvider = targetProvider;\n this.maxSpeed = maxSpeed;\n this.repulseRadius = repulseRadius;\n this.repulseWeight = repulseWeight;\n this.repulseRadiusSq = repulseRadius * repulseRadius;\n this.arriveRadiusSq = arriveRadius * arriveRadius;\n }\n update(body, _dt) {\n const entity = body.getEntity?.();\n if (!entity) {\n throw new Error(\"SeekAvoid requires a movement body backed by a physics entity.\");\n }\n const target = this.targetProvider();\n if (!target) {\n body.setVelocity({ x: 0, y: 0 });\n return;\n }\n const toTarget = new Vector2(target.position.x - entity.position.x, target.position.y - entity.position.y);\n const distSq = toTarget.lengthSquared();\n let arrived = false;\n if (distSq <= this.arriveRadiusSq) {\n toTarget.set(0, 0);\n arrived = true;\n } else if (distSq > 0) {\n toTarget.divInPlace(Math.sqrt(distSq));\n }\n const bounds = AABB.fromCenterSize(entity.position.x, entity.position.y, this.repulseRadius * 2, this.repulseRadius * 2);\n const neighbors = this.engine.queryAABB(bounds);\n const push = new Vector2(0, 0);\n if (!arrived) {\n for (const other of neighbors) {\n if (other === entity || other === target || other.isStatic()) {\n continue;\n }\n const diff = new Vector2(entity.position.x - other.position.x, entity.position.y - other.position.y);\n let d2 = diff.lengthSquared();\n if (d2 > this.repulseRadiusSq) {\n continue;\n }\n if (d2 < EPSILON) {\n d2 = EPSILON;\n }\n const weight = this.repulseWeight / d2;\n push.addInPlace(diff.mul(weight));\n }\n }\n const pushLength = push.length();\n const maxPush = this.maxSpeed * 0.5;\n if (pushLength > maxPush && pushLength > 0) {\n push.mulInPlace(maxPush / pushLength);\n }\n const desired = toTarget.mul(this.maxSpeed).add(push);\n const desiredLength = desired.length();\n const maxCombinedSpeed = this.maxSpeed * 1.5;\n if (desiredLength > maxCombinedSpeed && desiredLength > 0) {\n desired.mulInPlace(maxCombinedSpeed / desiredLength);\n }\n if (!Number.isFinite(desired.x) || !Number.isFinite(desired.y)) {\n body.setVelocity({ x: 0, y: 0 });\n return;\n }\n body.setVelocity(desired);\n }\n setParameters(maxSpeed, repulseRadius, repulseWeight, arriveRadius) {\n if (maxSpeed !== void 0) {\n this.maxSpeed = maxSpeed;\n }\n if (repulseRadius !== void 0) {\n this.repulseRadius = repulseRadius;\n this.repulseRadiusSq = repulseRadius * repulseRadius;\n }\n if (repulseWeight !== void 0) {\n this.repulseWeight = repulseWeight;\n }\n if (arriveRadius !== void 0) {\n this.arriveRadiusSq = arriveRadius * arriveRadius;\n }\n }\n}\nexport {\n SeekAvoid\n};\n//# sourceMappingURL=index41.js.map\n","class ObjectPool {\n /**\n * Creates a new object pool\n * \n * @param createFn - Function to create new objects\n * @param maxSize - Maximum pool size (default: 100)\n * @param resetFn - Optional function to reset objects before reuse\n */\n constructor(createFn, maxSize = 100, resetFn) {\n this.pool = [];\n this.createFn = createFn;\n this.resetFn = resetFn;\n this.maxSize = maxSize;\n }\n /**\n * Acquires an object from the pool\n * \n * @returns Object from pool or newly created\n */\n acquire() {\n if (this.pool.length > 0) {\n const obj = this.pool.pop();\n if (this.resetFn) {\n this.resetFn(obj);\n }\n return obj;\n }\n return this.createFn();\n }\n /**\n * Releases an object back to the pool\n * \n * @param obj - Object to release\n */\n release(obj) {\n if (this.pool.length < this.maxSize) {\n this.pool.push(obj);\n }\n }\n /**\n * Clears the pool\n */\n clear() {\n this.pool.length = 0;\n }\n /**\n * Gets the current pool size\n * \n * @returns Number of objects in pool\n */\n size() {\n return this.pool.length;\n }\n}\nexport {\n ObjectPool\n};\n//# sourceMappingURL=index42.js.map\n","class PredictionController {\n constructor(config) {\n this.config = config;\n this.frameCounter = 0;\n this.history = [];\n this.pendingSnapshot = null;\n this.lastAckFrame = 0;\n this.lastAckTick = 0;\n this.correctionThreshold = config.correctionThreshold ?? 5;\n this.historyTtlMs = config.historyTtlMs ?? 1e4;\n this.maxHistoryEntries = config.maxHistoryEntries ?? 1200;\n }\n recordInput(direction, timestamp) {\n const frame = ++this.frameCounter;\n const tick = this.config.getPhysicsTick();\n this.history.push({ frame, tick, timestamp, direction });\n this.trimHistory(timestamp);\n return { frame, tick };\n }\n attachPredictedState(frame, state) {\n const entry = this.history.find((item) => item.frame === frame);\n if (entry) {\n entry.state = state;\n }\n }\n hasPendingInputs() {\n return this.history.length > 0;\n }\n getPendingInputs() {\n return [...this.history];\n }\n queueServerSnapshot(snapshot) {\n if (this.hasPendingInputs()) {\n this.pendingSnapshot = snapshot;\n return;\n }\n this.applySnapshot(snapshot);\n }\n tryApplyPendingSnapshot() {\n if (!this.pendingSnapshot || this.hasPendingInputs()) {\n return;\n }\n this.applySnapshot(this.pendingSnapshot);\n this.pendingSnapshot = null;\n }\n applyServerAck(ack) {\n if (typeof ack.frame !== \"number\") {\n const result2 = {\n acknowledgedFrame: this.lastAckFrame,\n acknowledgedTick: this.lastAckTick,\n pendingInputs: [...this.history],\n needsReconciliation: false\n };\n if (ack.state) {\n result2.state = ack.state;\n }\n return result2;\n }\n if (ack.frame < this.lastAckFrame) {\n const result2 = {\n acknowledgedFrame: this.lastAckFrame,\n acknowledgedTick: this.lastAckTick,\n pendingInputs: [...this.history],\n needsReconciliation: false\n };\n if (ack.state) {\n result2.state = ack.state;\n }\n return result2;\n }\n const nextAckFrame = Math.max(this.lastAckFrame, ack.frame);\n const nextAckTick = typeof ack.serverTick === \"number\" ? Math.max(this.lastAckTick, ack.serverTick) : this.lastAckTick;\n let needsReconciliation = false;\n if (ack.state) {\n const acknowledgedEntry = this.history.find(\n (entry) => entry.frame === nextAckFrame && !!entry.state\n );\n const comparisonState = acknowledgedEntry?.state ?? this.config.getCurrentState();\n const dx = comparisonState.x - ack.state.x;\n const dy = comparisonState.y - ack.state.y;\n const distance = Math.hypot(dx, dy);\n needsReconciliation = distance > this.correctionThreshold;\n }\n this.lastAckFrame = nextAckFrame;\n this.lastAckTick = nextAckTick;\n this.history = this.history.filter((entry) => entry.frame > this.lastAckFrame);\n if (!needsReconciliation && this.pendingSnapshot && !this.hasPendingInputs()) {\n this.applySnapshot(this.pendingSnapshot);\n this.pendingSnapshot = null;\n }\n const result = {\n acknowledgedFrame: this.lastAckFrame,\n acknowledgedTick: this.lastAckTick,\n pendingInputs: [...this.history],\n needsReconciliation\n };\n if (ack.state) {\n result.state = ack.state;\n }\n return result;\n }\n cleanup(now) {\n this.trimHistory(now);\n }\n trimHistory(now) {\n const cutoff = now - this.historyTtlMs;\n this.history = this.history.filter((entry) => entry.timestamp >= cutoff);\n if (this.history.length > this.maxHistoryEntries) {\n this.history = this.history.slice(-this.maxHistoryEntries);\n }\n }\n applySnapshot(snapshot) {\n const current = this.config.getCurrentState();\n const dx = current.x - snapshot.x;\n const dy = current.y - snapshot.y;\n const distance = Math.hypot(dx, dy);\n if (distance > this.correctionThreshold) {\n this.config.setAuthoritativeState(snapshot);\n this.history = [];\n return;\n }\n this.history = [];\n }\n}\nexport {\n PredictionController\n};\n//# sourceMappingURL=index44.js.map\n","class DeterministicInputBuffer {\n constructor() {\n this.queues = /* @__PURE__ */ new Map();\n }\n enqueue(playerId, input) {\n if (!this.queues.has(playerId)) {\n this.queues.set(playerId, /* @__PURE__ */ new Map());\n }\n const queue = this.queues.get(playerId);\n queue.set(input.frame, input);\n }\n consume(playerId) {\n const queue = this.queues.get(playerId);\n if (!queue || queue.size === 0) {\n return [];\n }\n const entries = Array.from(queue.values()).sort((a, b) => a.frame - b.frame);\n queue.clear();\n return entries;\n }\n pendingCount(playerId) {\n return this.queues.get(playerId)?.size ?? 0;\n }\n clear(playerId) {\n this.queues.delete(playerId);\n }\n clearAll() {\n this.queues.clear();\n }\n}\nexport {\n DeterministicInputBuffer\n};\n//# sourceMappingURL=index45.js.map\n","import {\n MovementManager as PhysicMovementManager,\n MovementStrategy,\n MovementOptions,\n PhysicsEngine,\n} from '@rpgjs/physic';\n\n/**\n * Thin proxy around the physics movement manager.\n *\n * Delegates every operation to the deterministic engine provided by `PhysicsEngine`\n * so strategies operate on the exact same entities as the physics simulation.\n */\nexport class MovementManager {\n constructor(private readonly physicProvider: () => PhysicsEngine) {}\n\n private get core(): PhysicMovementManager {\n return this.physicProvider().getMovementManager();\n }\n\n /**\n * Adds a movement strategy and returns a Promise that resolves when it completes.\n * \n * @param id - Entity identifier\n * @param strategy - Movement strategy to add\n * @param options - Optional callbacks for movement lifecycle events\n * @returns Promise that resolves when the movement completes\n */\n add(id: string, strategy: MovementStrategy, options?: MovementOptions): Promise<void> {\n return this.core.add(id, strategy, options);\n }\n\n remove(id: string, strategy: MovementStrategy): boolean {\n return this.core.remove(id, strategy);\n }\n\n clear(id: string): void {\n this.core.clear(id);\n }\n\n stopMovement(id: string): void {\n this.core.stopMovement(id);\n }\n\n hasActiveStrategies(id: string): boolean {\n return this.core.hasActiveStrategies(id);\n }\n\n getStrategies(id: string): MovementStrategy[] {\n return this.core.getStrategies(id);\n }\n\n update(dtMs: number): void {\n this.core.update(dtMs / 1000);\n }\n\n clearAll(): void {\n this.core.clearAll();\n }\n}\n\n","import { generateShortUUID, users } from \"@signe/sync\";\nimport { effect, Signal, signal } from \"@signe/reactive\";\nimport { Direction, RpgCommonPlayer } from \"../Player\";\nimport {\n PhysicsEngine,\n Vector2,\n Entity,\n EntityState,\n assignPolygonCollider,\n AABB,\n createCollider,\n} from \"@rpgjs/physic\";\nimport { combineLatest, Observable, share, Subject, Subscription } from \"rxjs\";\nimport { MovementManager } from \"../movement\";\nimport { WorldMapsManager, type RpgWorldMaps } from \"./WorldMaps\";\n\nexport type PhysicsEntityKind = \"hero\" | \"npc\" | \"generic\";\n\nexport interface MapPhysicsInitContext {\n mapData: any;\n}\n\nexport interface MapPhysicsEntityContext {\n owner: any;\n entity: Entity;\n kind: PhysicsEntityKind;\n}\n\ninterface ZoneOptions {\n x?: number;\n y?: number;\n radius: number;\n angle?: number;\n direction?: \"up\" | \"down\" | \"left\" | \"right\";\n linkedTo?: string;\n limitedByWalls?: boolean;\n}\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 PhysicsEngine({\n timeStep: 1 / 60,\n gravity: new Vector2(0, 0),\n enableSleep: false,\n });\n moveManager = new MovementManager(() => this.physic);\n\n private speedScalar = 50; // Default speed scalar for movement\n\n // World Maps properties\n tileWidth: number = 32;\n tileHeight: number = 32;\n worldMapsManager?: WorldMapsManager;\n\n // Synchronization throttling properties\n throttleSync?: number;\n throttleStorage?: number;\n sessionExpiryTime?: number;\n\n tickSubscription?: Subscription | null;\n playersSubscription?: Subscription | null;\n eventsSubscription?: Subscription | null;\n private physicsAccumulatorMs = 0;\n private physicsSyncDepth = 0;\n\n /**\n * Whether to automatically subscribe to tick$ for physics updates\n * Set to false in test environments for manual control with nextTick()\n */\n protected autoTickEnabled: boolean = true;\n\n get isStandalone() {\n return typeof window !== 'undefined'\n }\n \n\n /**\n * Get the width of the map in pixels\n * \n * @returns The width of the map in pixels, or 0 if not loaded\n * \n * @example\n * ```ts\n * const width = map.widthPx;\n * console.log(`Map width: ${width}px`);\n * ```\n */\n get widthPx(): number {\n return this.data()?.width ?? 0\n }\n\n /**\n * Get the height of the map in pixels\n * \n * @returns The height of the map in pixels, or 0 if not loaded\n * \n * @example\n * ```ts\n * const height = map.heightPx;\n * console.log(`Map height: ${height}px`);\n * ```\n */\n get heightPx(): number {\n return this.data()?.height ?? 0\n }\n\n /**\n * Get the unique identifier of the map\n * \n * @returns The map ID, or empty string if not loaded\n * \n * @example\n * ```ts\n * const mapId = map.id;\n * console.log(`Current map: ${mapId}`);\n * ```\n */\n get id(): string {\n return this.data()?.id ?? ''\n }\n\n /**\n * Get the X position of this map in the world coordinate system\n * \n * This is used when maps are part of a larger world map. The world position\n * indicates where this map is located relative to other maps.\n * \n * @returns The X position in world coordinates, or 0 if not in a world\n * \n * @example\n * ```ts\n * const worldX = map.worldX;\n * console.log(`Map is at world position (${worldX}, ${map.worldY})`);\n * ```\n */\n get worldX(): number {\n const worldMaps = this.getWorldMapsManager?.();\n if (!worldMaps) return 0;\n // Extract real map ID (remove \"map-\" prefix if present)\n const mapId = this.id.startsWith('map-') ? this.id.slice(4) : this.id;\n return worldMaps.getMapInfo(mapId)?.worldX ?? 0\n }\n \n /**\n * Get the Y position of this map in the world coordinate system\n * \n * This is used when maps are part of a larger world map. The world position\n * indicates where this map is located relative to other maps.\n * \n * @returns The Y position in world coordinates, or 0 if not in a world\n * \n * @example\n * ```ts\n * const worldY = map.worldY;\n * console.log(`Map is at world position (${map.worldX}, ${worldY})`);\n * ```\n */\n get worldY(): number {\n const worldMaps = this.getWorldMapsManager?.();\n if (!worldMaps) return 0;\n // Extract real map ID (remove \"map-\" prefix if present)\n const mapId = this.id.startsWith('map-') ? this.id.slice(4) : this.id;\n return worldMaps.getMapInfo(mapId)?.worldY ?? 0\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 * ## Physics Loop Architecture\n * \n * The physics simulation is centralized in this game loop:\n * \n * 1. **Input Processing** (`processInput`): Only updates entity velocities, does NOT step physics\n * 2. **Game Loop** (`tick$` -> `runFixedTicks`): Executes physics simulation with fixed timestep\n * 3. **Fixed Timestep Pattern**: Accumulator-based approach ensures deterministic physics\n * \n * ```\n * Input Events ─────────────────────────────────────────────────────────────►\n * │ \n * ▼ (update velocity only) \n * ┌─────────────────────────────────────────────────────────────────────────┐\n * │ Game Loop (tick$) │\n * │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │\n * │ │ updateMovements │ → │ stepOneTick │ → │ postTickUpdates │ │\n * │ │ (apply velocity)│ │ (physics step) │ │ (zones, sync) │ │\n * │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │\n * └─────────────────────────────────────────────────────────────────────────┘\n * ```\n * \n * @example\n * ```ts\n * // Subscribe to the game tick for custom updates\n * map.tick$.subscribe(({ delta, timestamp }) => {\n * // Custom game logic runs alongside physics\n * this.updateCustomEntities(delta);\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 /**\n * Clear all physics content and reset to initial state\n * \n * This method completely clears the physics system by:\n * - Removing all hitboxes (static and movable)\n * - Removing all zones\n * - Clearing all collision data and events\n * - Clearing all movement events and sliding data\n * - Unsubscribing from the tick subscription\n * - Resetting the physics engine to a clean state\n * \n * Use this method when you need to completely reset the map's physics\n * system, such as when changing maps or restarting a level.\n * \n * @example\n * ```ts\n * // Clear all physics when changing maps\n * map.clearPhysic();\n * \n * // Then reload physics for the new map\n * map.loadPhysic();\n * ```\n */\n clearPhysic() {\n // Unsubscribe from tick to stop physics updates\n if (this.tickSubscription) {\n this.tickSubscription.unsubscribe();\n this.tickSubscription = null;\n }\n\n if (this.playersSubscription) {\n this.playersSubscription.unsubscribe();\n this.playersSubscription = null;\n }\n\n if (this.eventsSubscription) {\n this.eventsSubscription.unsubscribe();\n this.eventsSubscription = null;\n }\n\n // Clear all hitboxes and zones from physics system\n this.clearAll();\n\n // Reset movement manager\n this.moveManager.clearAll();\n this.emitPhysicsReset();\n\n this.physicsAccumulatorMs = 0;\n }\n\n /**\n * Clear all physics entities and internal state\n * @private\n */\n private clearAll(): void {\n // Remove all entities from physics engine\n const entities = this.physic.getEntities();\n for (const entity of entities) {\n const owner = (entity as any).owner;\n if (owner) {\n this.emitPhysicsEntityRemove({\n owner,\n entity,\n kind: this.resolvePhysicsEntityKind(owner, entity.uuid),\n });\n }\n this.unbindCharacterSignalSync(entity);\n this.physic.removeEntity(entity);\n }\n\n // Clear movement manager and zone manager\n this.physic.getMovementManager().clearAll();\n this.physic.getZoneManager().clear();\n }\n\n loadPhysic() {\n this.clearPhysic();\n\n const mapData = this.data?.();\n const mapWidth = typeof mapData?.width === \"number\" ? mapData.width : 0;\n const mapHeight = typeof mapData?.height === \"number\" ? mapData.height : 0;\n const hitboxes: Array<\n | { id?: string; x: number; y: number; width: number; height: number }\n | { id?: string; points: number[][] }\n > = Array.isArray(mapData?.hitboxes) ? mapData.hitboxes : [];\n\n if (mapWidth > 0 && mapHeight > 0) {\n const gap = 100;\n this.addStaticHitbox('map-width-left', -gap, 0, gap, mapHeight);\n this.addStaticHitbox('map-width-right', mapWidth, 0, gap, mapHeight);\n this.addStaticHitbox('map-height-top', 0, -gap, mapWidth, gap);\n this.addStaticHitbox('map-height-bottom', 0, mapHeight, mapWidth, gap);\n }\n\n for (let staticHitbox of hitboxes) {\n if ('x' in staticHitbox) {\n this.addStaticHitbox(staticHitbox.id ?? generateShortUUID(), staticHitbox.x, staticHitbox.y, staticHitbox.width, staticHitbox.height);\n }\n else if ('points' in staticHitbox) {\n this.addStaticHitbox(staticHitbox.id ?? generateShortUUID(), staticHitbox.points);\n }\n }\n\n this.emitPhysicsInit({ mapData });\n\n this.playersSubscription = (this.players as any).observable.subscribe(\n ({ value: player, type, key }: any) => {\n if (type === \"remove\") {\n this.removeHitbox(key, player, \"hero\");\n return;\n }\n\n if (type == 'reset') {\n if (!player) return;\n for (let id in player) {\n const _player = player[id]\n _player.id = _player.id ?? id;\n this.createCharacterHitbox(_player, \"hero\");\n }\n return;\n }\n\n if (!player) return;\n if (type === \"add\") {\n player.id = key;\n this.createCharacterHitbox(player, \"hero\");\n } else if (type === \"update\") {\n player.id = player.id ?? key;\n if (!this.getBody(key)) {\n this.createCharacterHitbox(player, \"hero\");\n return;\n }\n if (this.isPhysicsSyncingSignals) {\n return;\n }\n this.updateCharacterHitbox(player);\n }\n },\n );\n\n this.eventsSubscription = this.events.observable.subscribe(({ value: event, type, key }) => {\n if (type === \"add\") {\n event.id = key;\n this.createCharacterHitbox(event, \"npc\", {\n mass: 100,\n });\n } else if (type === \"remove\") {\n // Clean up movement event subscriptions\n const eventObj = this.getObjectById(key);\n if (eventObj && typeof (eventObj as any)._movementUnsubscribe === 'function') {\n (eventObj as any)._movementUnsubscribe();\n }\n this.removeHitbox(key, event, \"npc\");\n } else if (type === \"update\") {\n event.id = event.id ?? key;\n if (!this.getBody(key)) {\n this.createCharacterHitbox(event, \"npc\", {\n mass: 100,\n });\n return;\n }\n this.updateCharacterHitbox(event);\n } else if (type === \"reset\") {\n for (const id in event) {\n const _event = event[id];\n if (!_event) continue;\n _event.id = _event.id ?? id;\n this.createCharacterHitbox(_event, \"npc\", {\n mass: 100,\n });\n }\n }\n });\n\n // Hydrate physics world with already-loaded scene objects.\n // This covers cases where sync state is present before subscriptions are attached.\n const players = this.players();\n for (const id in players) {\n const player = players[id];\n if (!player) continue;\n player.id = player.id ?? id;\n this.createCharacterHitbox(player, \"hero\");\n }\n\n const events = this.events();\n for (const id in events) {\n const event = events[id];\n if (!event) continue;\n event.id = event.id ?? id;\n this.createCharacterHitbox(event, \"npc\", {\n mass: 100,\n });\n }\n\n // S'abonner au ticker automatique seulement si autoTickEnabled est true\n if (this.autoTickEnabled) {\n this.tickSubscription = this.tick$.subscribe(({ delta }) => {\n this.runFixedTicks(delta);\n });\n }\n }\n\n async movePlayer(player: T, direction: Direction) {\n // Calculate next position before movement\n const currentX = player.x();\n const currentY = player.y();\n const speed = player.speed();\n\n let nextX = currentX;\n let nextY = currentY;\n \n switch (direction) {\n case Direction.Left:\n nextX = currentX - speed;\n break;\n case Direction.Right:\n nextX = currentX + speed;\n break;\n case Direction.Up:\n nextY = currentY - speed;\n break;\n case Direction.Down:\n nextY = currentY + speed;\n break;\n }\n\n player.changeDirection(direction);\n\n // Check for automatic map change if the method exists\n if (typeof (player as any).autoChangeMap === 'function' && !player.isEvent()) {\n const mapChanged = await (player as any).autoChangeMap({ x: nextX, y: nextY }, direction);\n if (mapChanged) {\n this.stopMovement(player);\n return\n }\n }\n \n this.moveBody(player, direction);\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.isEntityMoving(id);\n }\n\n getObjectById(id: string) {\n return this.players()[id] ?? this.events()[id];\n }\n\n /**\n * Execute physics simulation with fixed timestep\n * \n * This method runs the physics engine using a fixed timestep accumulator pattern.\n * It ensures deterministic physics regardless of frame rate by:\n * 1. Accumulating delta time\n * 2. Running fixed-size physics steps until the accumulator is depleted\n * 3. Calling `updateMovements()` before each step to apply velocity changes\n * 4. Running post-tick updates (zones, callbacks) after each step\n * \n * ## Architecture\n * \n * The physics loop is centralized here and called from `tick$` subscription.\n * Input processing (`processInput`) only updates entity velocities - it does NOT\n * step the physics. This ensures:\n * - Consistent physics timing (60fps fixed timestep)\n * - No double-stepping when inputs are processed\n * - Proper accumulator-based interpolation support\n * \n * @param deltaMs - Time elapsed since last call in milliseconds\n * @param hooks - Optional callbacks for before/after each physics step\n * @returns Number of physics ticks executed\n * \n * @example\n * ```ts\n * // Called automatically by tick$ subscription\n * this.tickSubscription = this.tick$.subscribe(({ delta }) => {\n * this.runFixedTicks(delta);\n * });\n * \n * // Or manually with hooks for debugging\n * this.runFixedTicks(16, {\n * beforeStep: () => console.log('Before physics step'),\n * afterStep: (tick) => console.log(`Physics tick ${tick} completed`)\n * });\n * ```\n */\n protected runFixedTicks(\n deltaMs: number,\n hooks?: {\n beforeStep?: () => void;\n afterStep?: (tick: number) => void;\n },\n ): number {\n if (!Number.isFinite(deltaMs) || deltaMs <= 0) {\n return 0;\n }\n\n const fixedStepMs = this.physic.getWorld().getTimeStep() * 1000;\n this.physicsAccumulatorMs += deltaMs;\n let executed = 0;\n\n while (this.physicsAccumulatorMs >= fixedStepMs) {\n this.physicsAccumulatorMs -= fixedStepMs;\n hooks?.beforeStep?.();\n \n // Update movements before physics step (applies velocity changes from inputs)\n this.physic.updateMovements();\n \n const tick = this.physic.stepOneTick();\n executed += 1;\n \n // Run post-tick updates (zones, position sync callbacks)\n this.runPostTickUpdates();\n \n hooks?.afterStep?.(tick);\n }\n\n return executed;\n }\n\n /**\n * Manually trigger a single game tick\n * \n * This method allows you to manually advance the game by one tick (16ms at 60fps).\n * It's primarily useful for testing where you need precise control over when\n * physics updates occur, rather than relying on the automatic tick$ subscription.\n * \n * ## Use Cases\n * \n * - **Testing**: Control exactly when physics steps occur in unit tests\n * - **Manual control**: Step through game state manually for debugging\n * - **Deterministic testing**: Ensure consistent timing in test scenarios\n * \n * ## Important\n * \n * This method should NOT be used in production code alongside the automatic `tick$`\n * subscription, as it will cause double-stepping. Use either:\n * - Automatic ticks (via `loadPhysic()` which subscribes to `tick$`)\n * - Manual ticks (via `nextTick()` without `loadPhysic()` subscription)\n * \n * @param deltaMs - Optional delta time in milliseconds (default: 16ms for 60fps)\n * @returns Number of physics ticks executed\n * \n * @example\n * ```ts\n * // In tests: manually advance game by one tick\n * map.nextTick(); // Advances by 16ms (one frame at 60fps)\n * \n * // With custom delta\n * map.nextTick(32); // Advances by 32ms (two frames at 60fps)\n * \n * // In a test loop\n * for (let i = 0; i < 60; i++) {\n * map.nextTick(); // Simulate 1 second of game time\n * }\n * ```\n */\n nextTick(deltaMs: number = 16): number {\n return this.runFixedTicks(deltaMs);\n }\n\n /**\n * Force a single physics tick outside of the normal game loop\n * \n * This method is primarily used for **client-side prediction** where the client\n * needs to immediately simulate physics in response to local input, rather than\n * waiting for the next game loop tick.\n * \n * ## Use Cases\n * \n * - **Client-side prediction**: Immediately simulate player movement for responsive feel\n * - **Testing**: Force a physics step in unit tests\n * - **Special effects**: Immediate physics response for specific game events\n * \n * ## Important\n * \n * This method should NOT be used on the server for normal input processing.\n * Server-side physics is handled by `runFixedTicks` in the main game loop to ensure\n * deterministic simulation.\n * \n * @param hooks - Optional callbacks for before/after the physics step\n * @returns The physics tick number\n * \n * @example\n * ```ts\n * // Client-side: immediately simulate predicted movement\n * class RpgClientMap extends RpgCommonMap {\n * stepPredictionTick(): void {\n * this.forceSingleTick();\n * }\n * }\n * ```\n */\n protected forceSingleTick(hooks?: { beforeStep?: () => void; afterStep?: (tick: number) => void }): number {\n hooks?.beforeStep?.();\n this.physic.updateMovements();\n const tick = this.physic.stepOneTick();\n this.runPostTickUpdates();\n hooks?.afterStep?.(tick);\n const fixedMs = this.physic.getWorld().getTimeStep() * 1000;\n this.physicsAccumulatorMs = Math.max(0, this.physicsAccumulatorMs - fixedMs);\n return tick;\n }\n\n private createCharacterHitbox(\n owner: any,\n kind: PhysicsEntityKind,\n options?: { isStatic?: boolean; mass?: number },\n ): void {\n if (!owner?.id) {\n return;\n }\n const existingEntity = this.physic.getEntityByUUID(owner.id);\n if (existingEntity) {\n // Rebind owner when the player instance is restored/replaced (e.g. map transfer).\n // Position sync callbacks read entity.owner at runtime.\n (existingEntity as any).owner = owner;\n this.bindCharacterSignalSync(existingEntity, owner);\n this.updateCharacterHitbox(owner);\n return;\n }\n\n const hitbox = typeof owner.hitbox === \"function\" ? owner.hitbox() : owner.hitbox;\n const width = hitbox?.w ?? 32;\n const height = hitbox?.h ?? 32;\n const radius = Math.max(width, height) / 2;\n this.addCharacter({\n owner,\n radius,\n kind,\n maxSpeed: owner.speed(),\n collidesWithCharacters: !this.shouldDisableCharacterCollisions(owner),\n isStatic: options?.isStatic,\n mass: options?.mass,\n });\n const entity = this.getBody(owner.id);\n if (entity) {\n this.emitPhysicsEntityAdd({\n owner,\n entity,\n kind,\n });\n }\n }\n\n private updateCharacterHitbox(owner: any): void {\n if (!owner?.id) return;\n const entity = this.physic.getEntityByUUID(owner.id);\n if (!entity) return;\n\n // Rebind owner on every update to keep physics callbacks attached to the\n // current player instance after room/session transfers.\n (entity as any).owner = owner;\n this.bindCharacterSignalSync(entity, owner);\n\n const hitbox = typeof owner.hitbox === \"function\" ? owner.hitbox() : owner.hitbox;\n const width = hitbox?.w ?? 32;\n const height = hitbox?.h ?? 32;\n const topLeftX = this.resolveNumeric(owner.x);\n const topLeftY = this.resolveNumeric(owner.y);\n this.updateHitbox(owner.id, topLeftX, topLeftY, width, height);\n this.setCharacterCollisionEnabled(owner.id, !this.shouldDisableCharacterCollisions(owner));\n }\n\n private resolveNumeric(source: any, fallback = 0): number {\n if (typeof source === \"function\") {\n try {\n return Number(source()) ?? fallback;\n } catch {\n return fallback;\n }\n }\n if (typeof source === \"number\") {\n return source;\n }\n return fallback;\n }\n\n private bindCharacterSignalSync(entity: Entity, owner: any): void {\n const entityAny = entity as any;\n if (\n entityAny.__rpgSignalSyncOwner === owner &&\n typeof entityAny.__rpgSignalSyncUnsubscribe === \"function\"\n ) {\n return;\n }\n\n this.unbindCharacterSignalSync(entity);\n entityAny.__rpgSignalSyncOwner = owner;\n\n const subscriptions: Subscription[] = [];\n entityAny.__rpgSignalSyncUnsubscribe = () => {\n subscriptions.forEach((subscription) => subscription.unsubscribe());\n delete entityAny.__rpgSignalSyncUnsubscribe;\n delete entityAny.__rpgSignalSyncOwner;\n };\n\n const syncFromSignals = () => {\n if (this.isPhysicsSyncingSignals) {\n return;\n }\n const currentOwner = entityAny.owner;\n if (!currentOwner?.id || currentOwner.id !== entity.uuid) {\n return;\n }\n this.updateCharacterHitbox(currentOwner);\n };\n\n const subscribeSignal = (signalLike: any) => {\n const observable = signalLike?.observable;\n if (!observable || typeof observable.subscribe !== \"function\") {\n return;\n }\n subscriptions.push(observable.subscribe(() => syncFromSignals()));\n };\n\n subscribeSignal(owner.x);\n subscribeSignal(owner.y);\n subscribeSignal(owner.hitbox);\n subscribeSignal(owner._through);\n }\n\n private unbindCharacterSignalSync(entity: Entity): void {\n const entityAny = entity as any;\n const unsubscribe = entityAny.__rpgSignalSyncUnsubscribe;\n if (typeof unsubscribe === \"function\") {\n unsubscribe();\n return;\n }\n delete entityAny.__rpgSignalSyncOwner;\n }\n\n private shouldDisableCharacterCollisions(owner: any): boolean {\n if (typeof owner._through === \"function\") {\n try {\n return !!owner._through();\n } catch {\n return false;\n }\n }\n if (typeof owner.through === \"boolean\") {\n return owner.through;\n }\n return false;\n }\n\n private resolvePhysicsEntityKind(owner: any, id?: string): PhysicsEntityKind {\n if (typeof owner?.isEvent === \"function\") {\n try {\n if (owner.isEvent()) {\n return \"npc\";\n }\n } catch {\n // Ignore owner inspection errors and fallback below\n }\n }\n\n const ownerId = typeof owner?.id === \"string\" ? owner.id : id;\n if (ownerId && this.players()?.[ownerId]) {\n return \"hero\";\n }\n if (ownerId && this.events()?.[ownerId]) {\n return \"npc\";\n }\n return \"generic\";\n }\n\n protected emitPhysicsInit(_context: MapPhysicsInitContext): void {}\n\n protected emitPhysicsEntityAdd(_context: MapPhysicsEntityContext): void {}\n\n protected emitPhysicsEntityRemove(_context: MapPhysicsEntityContext): void {}\n\n protected emitPhysicsReset(): void {}\n\n protected withPhysicsSync<T>(run: () => T): T {\n this.physicsSyncDepth += 1;\n try {\n return run();\n } finally {\n this.physicsSyncDepth -= 1;\n }\n }\n\n protected get isPhysicsSyncingSignals(): boolean {\n return this.physicsSyncDepth > 0;\n }\n\n /**\n * Get the world maps manager\n * \n * @returns WorldMapsManager instance or null if not configured\n * \n * @example\n * ```ts\n * const worldMaps = map.getWorldMapsManager();\n * if (worldMaps) {\n * const adjacentMaps = worldMaps.getAdjacentMaps(currentMap, coordinates);\n * }\n * ```\n */\n getWorldMapsManager(): WorldMapsManager | null {\n return this.worldMapsManager ?? null;\n }\n\n /**\n * Get attached World\n * \n * Recover the world attached to this map (undefined if no world attached)\n * \n * @since 3.0.0-beta.8\n * @returns {RpgWorldMaps | undefined} The world maps manager instance if attached, otherwise undefined\n * \n * @example\n * ```ts\n * const world = map.getInWorldMaps();\n * if (world) {\n * console.log(world.getAllMaps());\n * }\n * ```\n */\n getInWorldMaps(): RpgWorldMaps | undefined {\n return this.worldMapsManager ?? undefined;\n }\n\n /**\n * Remove this map from the world\n * \n * Remove this map from the world\n * \n * @since 3.0.0-beta.8\n * @returns {boolean | undefined} True if removed, false if not found, undefined if no world attached\n * \n * @example\n * ```ts\n * const removed = map.removeFromWorldMaps();\n * ```\n */\n removeFromWorldMaps(): boolean | undefined {\n if (!this.worldMapsManager) return undefined;\n const id = (this as any).id as string | undefined;\n if (!id) return false;\n return this.worldMapsManager.removeMap(id);\n }\n\n /**\n * Assign the map to a world\n * \n * Assign the map to a world\n * \n * @since 3.0.0-beta.8\n * @param {RpgWorldMaps} worldMap world maps\n * @returns {void}\n * \n * @example\n * ```ts\n * const world = new WorldMapsManager();\n * world.configure([{ id: 'm1', worldX: 0, worldY: 0, width: 1024, height: 1024 }]);\n * map.setInWorldMaps(world);\n * ```\n */\n setInWorldMaps(worldMap: RpgWorldMaps): void {\n this.worldMapsManager = worldMap;\n }\n\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.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.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.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.getZone(zoneId);\n\n if (zone) {\n // Remove current zone and create new one at next position\n this.removeZone(zoneId);\n\n const newRadius = Math.max(nextHitbox.width, nextHitbox.height) / 2;\n this.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.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.removeZone(zoneId);\n };\n });\n }\n\n /**\n * Add a static hitbox to the physics world\n * @private\n */\n private addStaticHitbox(\n id: string,\n xOrPoints: number | number[][],\n y?: number,\n width?: number,\n height?: number,\n ): string {\n // Check if entity already exists\n if (this.physic.getEntityByUUID(id)) {\n throw new Error(`Hitbox with id ${id} already exists`);\n }\n\n let entity: Entity;\n let boxWidth: number;\n let boxHeight: number;\n\n if (Array.isArray(xOrPoints)) {\n const points = xOrPoints;\n if (points.length < 3) {\n throw new Error(`Polygon must have at least 3 points, got ${points.length}`);\n }\n\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n\n for (const point of points) {\n if (!Array.isArray(point) || point.length !== 2 || typeof point[0] !== \"number\" || typeof point[1] !== \"number\") {\n throw new Error(`Invalid point ${JSON.stringify(point)}. Expected [x, y].`);\n }\n minX = Math.min(minX, point[0]);\n maxX = Math.max(maxX, point[0]);\n minY = Math.min(minY, point[1]);\n maxY = Math.max(maxY, point[1]);\n }\n\n const centerX = (minX + maxX) / 2;\n const centerY = (minY + maxY) / 2;\n boxWidth = Math.max(maxX - minX, 1);\n boxHeight = Math.max(maxY - minY, 1);\n\n entity = this.physic.createEntity({\n uuid: id,\n position: { x: centerX, y: centerY },\n width: boxWidth,\n height: boxHeight,\n mass: Infinity,\n state: EntityState.Static,\n restitution: 0\n });\n entity.freeze();\n\n const localVertices = points.map((point) => {\n const [px, py] = point as [number, number];\n return new Vector2(px - centerX, py - centerY);\n });\n assignPolygonCollider(entity, { vertices: localVertices });\n } else {\n if (typeof y !== \"number\" || typeof width !== \"number\" || typeof height !== \"number\") {\n throw new Error(\"Rectangle hitbox requires x, y, width and height parameters\");\n }\n\n const centerX = xOrPoints + width / 2;\n const centerY = y + height / 2;\n boxWidth = Math.max(width, 1);\n boxHeight = Math.max(height, 1);\n\n entity = this.physic.createEntity({\n uuid: id,\n position: { x: centerX, y: centerY },\n width: boxWidth,\n height: boxHeight,\n mass: Infinity,\n state: EntityState.Static,\n restitution: 0\n });\n entity.freeze();\n }\n\n return id;\n }\n\n /**\n * Add a character to the physics world\n * @private\n */\n /**\n * Add a character entity to the physics world\n * \n * Creates a physics entity for a character (player or NPC) with proper position handling.\n * The owner's x/y signals represent **top-left** coordinates, while the physics entity\n * uses **center** coordinates internally.\n * \n * ## Position System\n * \n * - `owner.x()` / `owner.y()` → **top-left** corner of the character's hitbox\n * - `entity.position` → **center** of the physics collider\n * - Conversion: `center = topLeft + (size / 2)`\n * \n * @param options - Character configuration\n * @returns The character's unique ID\n * \n * @example\n * ```ts\n * // Player at top-left position (100, 100) with 32x32 hitbox\n * // Physics entity will be at center (116, 116)\n * this.addCharacter({\n * owner: player,\n * x: 116, // center X (ignored, uses owner.x())\n * y: 116, // center Y (ignored, uses owner.y())\n * kind: \"hero\"\n * });\n * ```\n * \n * @private\n */\n private addCharacter(options: {\n owner: any;\n radius?: number;\n kind?: PhysicsEntityKind;\n collidesWithCharacters?: boolean;\n maxSpeed?: number;\n isStatic?: boolean;\n friction?: number;\n mass?: number;\n }): string {\n if (!options || typeof options.owner?.id !== \"string\") {\n throw new Error(\"Character requires an owner object with a string id\");\n }\n\n const owner = options.owner;\n const id = owner.id;\n\n // Get hitbox dimensions - hitbox.w/h are the FULL dimensions, not radius\n const hitbox = typeof owner.hitbox === \"function\" ? owner.hitbox() : owner.hitbox;\n const width = hitbox?.w ?? 32;\n const height = hitbox?.h ?? 32;\n\n // Calculate radius from dimensions (use the larger dimension for circular collider)\n const radius = Math.max(width, height) / 2;\n\n // owner.x() and owner.y() are TOP-LEFT positions\n const topLeftX = owner.x();\n const topLeftY = owner.y();\n\n // Convert to CENTER for physics engine\n const centerX = topLeftX + width / 2;\n const centerY = topLeftY + height / 2;\n\n const isStatic = !!options.isStatic;\n\n const entity = this.physic.createEntity({\n uuid: id,\n position: { x: centerX, y: centerY },\n // Use radius for circular collision detection\n radius: Math.max(radius, 1),\n // Also store explicit width/height for consistent position conversions\n // This ensures getBodyPosition/setBodyPosition use the same dimensions\n width: width,\n height: height,\n mass: options.mass ?? (isStatic ? Infinity : 1),\n friction: options.friction ?? 0.4,\n linearDamping: isStatic ? 1 : 0.2,\n maxLinearVelocity: options.maxSpeed ? options.maxSpeed * this.speedScalar : 200,\n restitution: 0\n });\n\n if (isStatic) {\n entity.freeze();\n } else {\n entity.unfreeze();\n }\n\n // Store owner reference directly on entity for syncing positions\n (entity as any).owner = owner;\n this.bindCharacterSignalSync(entity, owner);\n\n entity.onDirectionChange(({ cardinalDirection }) => {\n // hack to prevent direction in client side\n if (!('$send' in this)) return;\n const owner = (entity as any).owner;\n if (!owner) return;\n if (cardinalDirection === 'idle') return;\n // Don't change direction if it's locked\n if (owner.directionFixed) return;\n owner.changeDirection(cardinalDirection as Direction);\n });\n\n entity.onMovementChange(({ isMoving, intensity }) => {\n // Prevent animation changes on client side (same as onDirectionChange)\n if (!('$send' in this)) return;\n \n // Get owner from entity (same pattern as onDirectionChange)\n const owner = (entity as any).owner;\n if (!owner) return;\n \n // Don't change animation if it's locked\n if (owner.animationFixed) return;\n \n // Only change animation if intensity is low (avoid animation flicker on micro-movements)\n // Intensity threshold: 10 pixels/second (adjust based on your game's needs)\n const LOW_INTENSITY_THRESHOLD = 10;\n \n // Try to use setAnimation method if available (preferred method)\n // Otherwise, try to access animationName signal directly\n const hasSetAnimation = typeof owner.setAnimation === 'function';\n const animationNameSignal = owner.animationName;\n const ownerHasAnimationName = animationNameSignal && typeof animationNameSignal === 'object' && typeof animationNameSignal.set === 'function';\n \n if (isMoving && intensity > LOW_INTENSITY_THRESHOLD) {\n if (hasSetAnimation) {\n owner.setGraphicAnimation(\"walk\");\n } else if (ownerHasAnimationName) {\n animationNameSignal.set(\"walk\");\n }\n } else if (!isMoving) {\n if (hasSetAnimation) {\n owner.setGraphicAnimation(\"stand\");\n } else if (ownerHasAnimationName) {\n animationNameSignal.set(\"stand\");\n }\n }\n // If moving with high intensity, keep current animation (e.g., already running)\n });\n\n // Register position sync handler to update owner.x and owner.y.\n // Read owner dynamically from entity to avoid stale references after map transfer.\n \n entity.onPositionChange(({ x, y }) => {\n const currentOwner = (entity as any).owner;\n if (!currentOwner) {\n return;\n }\n\n const entityWidth = entity.width || width;\n const entityHeight = entity.height || height;\n // Calculate top-left from center using the original hitbox dimensions\n // This ensures consistency: center = topLeft + (size / 2)\n // Therefore: topLeft = center - (size / 2)\n const topLeftX = x - entityWidth / 2;\n const topLeftY = y - entityHeight / 2;\n let changed = false;\n\n this.withPhysicsSync(() => {\n if (typeof currentOwner.x === \"function\" && typeof currentOwner.x.set === \"function\") {\n currentOwner.x.set(Math.round(topLeftX));\n changed = true;\n }\n if (typeof currentOwner.y === \"function\" && typeof currentOwner.y.set === \"function\") {\n currentOwner.y.set(Math.round(topLeftY));\n changed = true;\n }\n });\n if (changed) {\n currentOwner.applyFrames?.();\n }\n });\n\n // Add resolution filter for through/throughOtherPlayer/throughEvent\n // This filter determines if collisions should be RESOLVED (blocking) or just DETECTED.\n // When returning false, entities pass through each other but collision events still fire.\n entity.addResolutionFilter((self, other) => {\n const selfOwner = (self as any).owner;\n const otherOwner = (other as any).owner;\n\n // If either entity has no owner, resolve collision (e.g., walls, obstacles must block)\n if (!selfOwner || !otherOwner) {\n return true;\n }\n\n \n if (selfOwner.z() !== otherOwner.z()) {\n return false; // Don't resolve collision\n }\n\n // Check if selfOwner has _through property (passes through everything)\n // This applies to both players and events\n if (typeof selfOwner._through === \"function\") {\n try {\n if (selfOwner._through() === true) {\n return false; // Pass through but events still fire\n }\n } catch {\n // Ignore errors\n }\n } else if (selfOwner.through === true) {\n return false;\n }\n\n // Determine the type of both entities via lookup in players/events\n const playersMap = this.players();\n const eventsMap = this.events();\n const isSelfPlayer = !!playersMap[self.uuid];\n const isOtherPlayer = !!playersMap[other.uuid];\n const isSelfEvent = !!eventsMap[self.uuid];\n const isOtherEvent = !!eventsMap[other.uuid];\n const readScenarioOwnerId = (owner: any): string | undefined => {\n const scenarioOwnerId = owner?._scenarioOwnerId ?? owner?.scenarioOwnerId;\n return typeof scenarioOwnerId === \"string\" && scenarioOwnerId.length > 0\n ? scenarioOwnerId\n : undefined;\n };\n const selfScenarioOwnerId = readScenarioOwnerId(selfOwner);\n const otherScenarioOwnerId = readScenarioOwnerId(otherOwner);\n\n // Scenario events are isolated per player:\n // they only collide with their owner and scenario events of the same owner.\n if (selfScenarioOwnerId) {\n if (isOtherPlayer && other.uuid !== selfScenarioOwnerId) {\n return false;\n }\n if (isOtherEvent && otherScenarioOwnerId !== selfScenarioOwnerId) {\n return false;\n }\n }\n if (otherScenarioOwnerId) {\n if (isSelfPlayer && self.uuid !== otherScenarioOwnerId) {\n return false;\n }\n if (isSelfEvent && selfScenarioOwnerId !== otherScenarioOwnerId) {\n return false;\n }\n }\n\n // throughOtherPlayer only applies when SELF is a player and OTHER is also a player\n // (players passing through other players)\n if (isSelfPlayer && isOtherPlayer) {\n if (typeof selfOwner._throughOtherPlayer === \"function\") {\n try {\n if (selfOwner._throughOtherPlayer() === true) {\n return false; // Pass through players but events still fire\n }\n } catch {\n // Ignore errors\n }\n } else if (selfOwner.throughOtherPlayer === true) {\n return false;\n }\n }\n\n // throughEvent only applies when SELF is a player and OTHER is an event\n // (players passing through events)\n if (isSelfPlayer && isOtherEvent) {\n if (typeof selfOwner._throughEvent === \"function\") {\n try {\n if (selfOwner._throughEvent() === true) {\n return false; // Pass through events but events still fire\n }\n } catch {\n // Ignore errors\n }\n } else if (selfOwner.throughEvent === true) {\n return false;\n }\n }\n\n return true; // Resolve collision (block movement)\n });\n\n return id;\n }\n\n /**\n * Update hitbox position and size\n * \n * @param id - Entity ID\n * @param x - Top-left X coordinate\n * @param y - Top-left Y coordinate\n * @param width - Optional width\n * @param height - Optional height\n * @returns True if hitbox was updated successfully\n */\n updateHitbox(id: string, x: number, y: number, width?: number, height?: number): boolean {\n const entity = this.physic.getEntityByUUID(id);\n if (!entity) return false;\n\n if (typeof width === \"number\" && typeof height === \"number\") {\n entity.width = Math.max(width, 1);\n entity.height = Math.max(height, 1);\n }\n\n // Calculate center from top-left\n const entityWidth = entity.width || entity.radius * 2 || 32;\n const entityHeight = entity.height || entity.radius * 2 || 32;\n const centerX = x + entityWidth / 2;\n const centerY = y + entityHeight / 2;\n entity.position.set(centerX, centerY);\n\n return true;\n }\n\n /**\n * Remove a hitbox from the physics world\n * @private\n */\n private removeHitbox(id: string, owner?: any, kind?: PhysicsEntityKind): boolean {\n const entity = this.physic.getEntityByUUID(id);\n if (!entity) {\n return false;\n }\n this.unbindCharacterSignalSync(entity);\n const resolvedOwner = owner ?? (entity as any).owner;\n if (resolvedOwner) {\n this.emitPhysicsEntityRemove({\n owner: resolvedOwner,\n entity,\n kind: kind ?? this.resolvePhysicsEntityKind(resolvedOwner, id),\n });\n }\n this.physic.removeEntity(entity);\n return true;\n }\n\n /**\n * Check if an entity is moving\n * @private\n */\n private isEntityMoving(id: string): boolean {\n const entity = this.physic.getEntityByUUID(id);\n if (!entity) return false;\n // Check if entity has velocity\n return entity.velocity.length() > 0.1;\n }\n\n /**\n * Move a body in a direction\n * @private\n */\n private moveBody(player: any, direction: Direction): boolean {\n const entity = this.physic.getEntityByUUID(player.id);\n if (!entity) return false;\n\n const speedValue = player.speed()\n\n let vx = 0, vy = 0;\n switch (direction) {\n case Direction.Left:\n vx = -speedValue * this.speedScalar;\n break;\n case Direction.Right:\n vx = speedValue * this.speedScalar;\n break;\n case Direction.Up:\n vy = -speedValue * this.speedScalar;\n break;\n case Direction.Down:\n vy = speedValue * this.speedScalar;\n break;\n }\n\n // Input sets the base velocity. Movement strategies (dash/knockback/AI, etc.)\n // are responsible for adding or overriding velocity when needed.\n entity.setVelocity({ x: vx, y: vy });\n entity.wakeUp();\n return true;\n }\n\n /**\n * Stop movement for a player\n * \n * Completely stops all movement for a player, including:\n * - Clearing all active movement strategies (dash, linear moves, etc.)\n * - Setting velocity to zero\n * - Resetting intended direction\n * \n * This method is particularly useful when changing maps to ensure\n * the player doesn't carry over movement from the previous map.\n * \n * @param player - The player to stop\n * @returns True if the player was found and movement was stopped\n * \n * @example\n * ```ts\n * // Stop player movement when changing maps\n * if (mapChanged) {\n * map.stopMovement(player);\n * }\n * \n * // Stop movement when player dies\n * if (player.isDead()) {\n * map.stopMovement(player);\n * }\n * ```\n * @protected\n */\n protected stopMovement(player: any): boolean {\n const entity = this.physic.getEntityByUUID(player.id);\n if (!entity) return false;\n\n // Stop all movement using the MovementManager (clears strategies and stops entity movement)\n this.moveManager.stopMovement(player.id);\n\n player.pendingInputs = [];\n \n return true;\n }\n\n /**\n * Set character collision enabled\n * @private\n */\n private setCharacterCollisionEnabled(id: string, collides: boolean): boolean {\n const entity = this.physic.getEntityByUUID(id);\n if (!entity) {\n return false;\n }\n // Collision filtering is handled by PhysicsEngine's collision system\n // This method is kept for API compatibility but doesn't need to do anything\n // as PhysicsEngine handles collisions automatically\n return true;\n }\n\n /**\n * Get collisions for an entity\n * \n * Returns all entities that are colliding with the specified entity.\n * Uses the entity's actual AABB bounds to detect collisions in all directions.\n * \n * @param id - Entity UUID to check collisions for\n * @returns Array of entity UUIDs that are colliding with the specified entity\n * \n * @example\n * ```ts\n * // Get all entities colliding with player\n * const collisions = map.getCollisions('player1');\n * collisions.forEach(id => {\n * console.log(`Entity ${id} is colliding with player`);\n * });\n * ```\n */\n protected getCollisions(id: string): string[] {\n const entity = this.physic.getEntityByUUID(id);\n if (!entity) return [];\n\n // Get the entity's actual collider and AABB bounds\n const collider = createCollider(entity);\n if (!collider) return [];\n\n const entityAABB = collider.getBounds();\n \n // Expand AABB slightly to ensure we catch nearby entities\n // This helps with edge cases where entities are just touching\n const expandedAABB = entityAABB.expand(1);\n\n // Query nearby entities using the expanded AABB\n const nearby = this.physic.queryAABB(expandedAABB);\n const collisions: string[] = [];\n\n // Check actual AABB intersections for each nearby entity\n for (const other of nearby) {\n if (other.uuid === id) continue;\n\n const otherCollider = createCollider(other);\n if (!otherCollider) continue;\n\n const otherAABB = otherCollider.getBounds();\n \n // Check if AABBs actually intersect\n if (entityAABB.intersects(otherAABB)) {\n collisions.push(other.uuid);\n }\n }\n\n return collisions;\n }\n\n /**\n * Get physics body (entity) for an id\n * @protected\n */\n public getBody(id: string): Entity | undefined {\n return this.physic.getEntityByUUID(id);\n }\n\n /**\n * Get the current physics tick\n * @returns Current tick number\n */\n getTick(): number {\n return this.physic.getTick();\n }\n\n /**\n * Get body position in different modes\n * \n * @param id - Entity ID\n * @param mode - Position mode: \"center\" or \"top-left\"\n * @returns Position coordinates or undefined if entity not found\n */\n getBodyPosition(\n id: string,\n mode: \"center\" | \"top-left\" = \"center\",\n ): { x: number; y: number } | undefined {\n const entity = this.physic.getEntityByUUID(id);\n if (!entity) return undefined;\n\n const centerX = entity.position.x;\n const centerY = entity.position.y;\n if (mode === \"center\") {\n return { x: centerX, y: centerY };\n }\n\n // Calculate top-left from center\n const width = entity.width || (entity.radius ? entity.radius * 2 : 32);\n const height = entity.height || (entity.radius ? entity.radius * 2 : 32);\n return {\n x: centerX - width / 2,\n y: centerY - height / 2,\n };\n }\n\n /**\n * Set body position\n * \n * @param id - Entity ID\n * @param x - X coordinate\n * @param y - Y coordinate\n * @param mode - Position mode: \"center\" or \"top-left\"\n * @returns True if position was set successfully\n */\n setBodyPosition(\n id: string,\n x: number,\n y: number,\n mode: \"center\" | \"top-left\" = \"center\",\n ): Entity | undefined {\n const entity = this.physic.getEntityByUUID(id);\n if (!entity) return;\n\n const width = entity.width || (entity.radius ? entity.radius * 2 : 32);\n const height = entity.height || (entity.radius ? entity.radius * 2 : 32);\n\n let centerX = x;\n let centerY = y;\n if (mode === \"top-left\") {\n centerX = x + width / 2;\n centerY = y + height / 2;\n }\n\n entity.position.set(centerX, centerY);\n entity.notifyPositionChange();\n \n return entity;\n }\n\n /**\n * Handle collision enter\n * @private\n */\n // Collision handling is now done directly via entity hooks in addCharacter\n // These methods are no longer needed as PhysicsEngine handles collisions internally\n\n /**\n * Add a zone\n * @private\n */\n private addZone(id: string, options: ZoneOptions): string {\n // Check if zone or entity already exists\n const zoneManager = this.physic.getZoneManager();\n if (this.physic.getEntityByUUID(id)) {\n throw new Error(`Zone with id ${id} already exists as entity`);\n }\n\n const radius = options.radius;\n if (typeof radius !== \"number\" || radius <= 0) {\n throw new Error(\"Zone radius must be a positive number\");\n }\n\n // If linkedTo is specified, get the entity\n let attachedEntity: Entity | undefined;\n if (options.linkedTo) {\n attachedEntity = this.physic.getEntityByUUID(options.linkedTo);\n if (!attachedEntity) {\n throw new Error(`Cannot link zone to unknown entity ${options.linkedTo}`);\n }\n }\n\n const callbacks: { onEnter?: (entities: Entity[]) => void; onExit?: (entities: Entity[]) => void } = {};\n\n // Store callbacks for later updates\n (callbacks as any)._onEnterString = undefined;\n (callbacks as any)._onExitString = undefined;\n\n const zoneId = attachedEntity\n ? zoneManager.createAttachedZone(attachedEntity, {\n radius,\n angle: options.angle ?? 360,\n direction: options.direction ?? 'down',\n limitedByWalls: options.limitedByWalls ?? false,\n }, callbacks)\n : zoneManager.createZone({\n position: { x: options.x ?? 0, y: options.y ?? 0 },\n radius,\n angle: options.angle ?? 360,\n direction: options.direction ?? 'down',\n limitedByWalls: options.limitedByWalls ?? false,\n }, callbacks);\n\n // Store zone ID mapping\n (this as any)._zoneIdMap = (this as any)._zoneIdMap || new Map();\n (this as any)._zoneIdMap.set(id, zoneId);\n\n return id;\n }\n\n /**\n * Remove a zone\n * @private\n */\n private removeZone(id: string): boolean {\n const zoneIdMap = (this as any)._zoneIdMap;\n if (!zoneIdMap) return false;\n\n const zoneId = zoneIdMap.get(id);\n if (!zoneId) return false;\n\n const zoneManager = this.physic.getZoneManager();\n zoneManager.removeZone(zoneId);\n zoneIdMap.delete(id);\n return true;\n }\n\n /**\n * Get a zone\n * @private\n */\n private getZone(id: string): any {\n const zoneIdMap = (this as any)._zoneIdMap;\n if (!zoneIdMap) return undefined;\n\n const zoneId = zoneIdMap.get(id);\n if (!zoneId) return undefined;\n\n const zoneManager = this.physic.getZoneManager();\n return zoneManager.getZone(zoneId);\n }\n\n /**\n * Register zone events\n * @private\n */\n private registerZoneEvents(\n id: string,\n onEnter?: (hitIds: string[]) => void,\n onExit?: (hitIds: string[]) => void,\n ): boolean {\n const zoneIdMap = (this as any)._zoneIdMap;\n if (!zoneIdMap) return false;\n\n const zoneId = zoneIdMap.get(id);\n if (!zoneId) return false;\n\n const zoneManager = this.physic.getZoneManager();\n\n // Use registerCallbacks to update callbacks\n const callbacks: { onEnter?: (entities: Entity[]) => void; onExit?: (entities: Entity[]) => void } = {};\n if (onEnter) {\n callbacks.onEnter = (entities: Entity[]) => {\n onEnter(entities.map(e => e.uuid));\n };\n }\n if (onExit) {\n callbacks.onExit = (entities: Entity[]) => {\n onExit(entities.map(e => e.uuid));\n };\n }\n\n return zoneManager.registerCallbacks(zoneId, callbacks);\n }\n\n /**\n * Run post-tick updates (update zones)\n * @private\n */\n private runPostTickUpdates(): void {\n // Position sync is now handled automatically by entity.onPositionChange hooks\n // Movement callbacks are also handled in the onPositionChange handler\n\n // Update zones\n const zoneManager = this.physic.getZoneManager();\n zoneManager.update();\n }\n}\n","import { Direction } from \"../Player\";\n\n/**\n * Interface for world map information\n */\nexport interface WorldMapInfo {\n id: string;\n x: number; // World X position \n y: number; // World Y position\n width: number; // Width in pixels\n height: number; // Height in pixels\n worldX: number; // World X coordinate (alias for x)\n worldY: number; // World Y coordinate (alias for y)\n widthPx: number; // Width in pixels (alias for width)\n heightPx: number; // Height in pixels (alias for height)\n tileWidth: number; // Tile width\n tileHeight: number; // Tile height\n}\n\n/**\n * Configuration for a world map\n */\nexport interface WorldMapConfig {\n id: string;\n worldX: number;\n worldY: number;\n width: number;\n height: number;\n tileWidth?: number;\n tileHeight?: number;\n}\n\n/**\n * World Maps Manager\n * \n * Manages a collection of interconnected maps and their spatial relationships\n */\nexport class WorldMapsManager {\n private maps: Map<string, WorldMapInfo> = new Map();\n private spatialIndex: Map<string, string> = new Map(); // \"x,y\" -> mapId\n\n /**\n * Configure the world maps\n * \n * @param configs - Array of map configurations\n * \n * @example\n * ```ts\n * const worldMaps = new WorldMapsManager();\n * worldMaps.configure([\n * { id: \"town\", worldX: 0, worldY: 0, width: 1024, height: 768 },\n * { id: \"forest\", worldX: 1024, worldY: 0, width: 1024, height: 768 }\n * ]);\n * ```\n */\n configure(configs: WorldMapConfig[]) {\n this.maps.clear();\n this.spatialIndex.clear();\n\n for (const config of configs) {\n const worldMap: WorldMapInfo = {\n id: config.id,\n x: config.worldX,\n y: config.worldY,\n width: config.width,\n height: config.height,\n worldX: config.worldX,\n worldY: config.worldY,\n widthPx: config.width,\n heightPx: config.height,\n tileWidth: config.tileWidth ?? 32,\n tileHeight: config.tileHeight ?? 32,\n };\n\n this.maps.set(config.id, worldMap);\n this.spatialIndex.set(`${config.worldX},${config.worldY}`, config.id);\n }\n }\n\n /**\n * Remove a map from the world by its id\n * \n * Deletes the map from the internal registry and spatial index.\n * \n * @param mapId - Map identifier\n * @returns True if a map was removed, false otherwise\n * \n * @example\n * ```ts\n * const removed = world.removeMap(\"forest\");\n * ```\n */\n removeMap(mapId: string): boolean {\n const map = this.maps.get(mapId);\n if (!map) return false;\n this.maps.delete(mapId);\n this.spatialIndex.delete(`${map.worldX},${map.worldY}`);\n return true;\n }\n\n /**\n * Find adjacent maps based on various search strategies\n * \n * Supports three search modes:\n * - PositionBox: collect maps intersecting the given box\n * - Direction: collect maps adjacent in the given direction\n * - Point: collect the map containing the given world point\n * \n * The given `map` can be any object exposing `worldX`, `worldY`, `width`, `height` properties\n * (e.g. your `RpgMap` instance or a `WorldMapInfo`).\n * \n * @param map - The source map\n * @param search - Search strategy (box, direction or point)\n * @returns Array of matching adjacent map infos\n * \n * @example\n * ```ts\n * // Point\n * world.getAdjacentMaps(currentMap, { x: 1024, y: 0 });\n * \n * // Direction\n * world.getAdjacentMaps(currentMap, Direction.Up);\n * \n * // Box\n * world.getAdjacentMaps(currentMap, { minX: 0, minY: 0, maxX: 2048, maxY: 1024 });\n * ```\n */\n getAdjacentMaps(\n map: { worldX: number; worldY: number; widthPx: number; heightPx: number },\n search:\n | { minX: number; minY: number; maxX: number; maxY: number }\n | { x: number; y: number }\n | number\n ): WorldMapInfo[] {\n const maps = Array.from(this.maps.values());\n\n // Direction lookup (number) --------------------------------------------\n if (typeof search === 'number') {\n const src = map;\n return maps.filter(m => {\n // Check if maps overlap or touch in the perpendicular direction\n // For vertical directions (Up/Down), we need horizontal overlap or touch\n // For horizontal directions (Left/Right), we need vertical overlap or touch\n const horizontallyOverlapsOrTouches =\n Math.max(src.worldX, m.worldX) <= Math.min(src.worldX + src.widthPx, m.worldX + m.widthPx);\n const verticallyOverlapsOrTouches =\n Math.max(src.worldY, m.worldY) <= Math.min(src.worldY + src.heightPx, m.worldY + m.heightPx);\n\n const marginLeftRight = src.tileWidth / 2\n const marginTopDown = src.tileHeight / 2\n \n switch (search) {\n case 0: // Up\n return verticallyOverlapsOrTouches && m.worldY + m.heightPx - marginTopDown === src.worldY;\n case 1: // Down\n return verticallyOverlapsOrTouches && m.worldY + marginTopDown === src.worldY + src.heightPx;\n case 2: // Left\n return horizontallyOverlapsOrTouches && m.worldX + m.widthPx - marginLeftRight === src.worldX;\n case 3: // Right\n return horizontallyOverlapsOrTouches && m.worldX + marginLeftRight === src.worldX + src.widthPx;\n default:\n return false;\n }\n });\n }\n\n // Point lookup ----------------------------------------------------------\n if ('x' in search && 'y' in search) {\n const found = maps.find(m =>\n search.x >= m.worldX && search.x < m.worldX + m.widthPx &&\n search.y >= m.worldY && search.y < m.worldY + m.heightPx\n );\n return found ? [found] : [];\n }\n\n // Box lookup ------------------------------------------------------------\n if ('minX' in search) {\n const { minX, minY, maxX, maxY } = search;\n return maps.filter(m => {\n const aLeft = m.worldX;\n const aRight = m.worldX + m.widthPx;\n const aTop = m.worldY;\n const aBottom = m.worldY + m.heightPx;\n const bLeft = minX;\n const bRight = maxX;\n const bTop = minY;\n const bBottom = maxY;\n const overlapX = aLeft < bRight && aRight > bLeft;\n const overlapY = aTop < bBottom && aBottom > bTop;\n return overlapX && overlapY;\n });\n }\n\n return [];\n }\n\n /**\n * Get map information by ID\n * \n * @param mapId - Map ID\n * @returns Map information or null if not found\n * \n * @example\n * ```ts\n * const mapInfo = worldMaps.getMapInfo(\"forest\");\n * ```\n */\n getMapInfo(mapId: string): WorldMapInfo | null {\n return this.maps.get(mapId) ?? null;\n }\n\n /**\n * Get all configured maps\n * \n * @returns Array of all world maps\n */\n getAllMaps(): WorldMapInfo[] {\n return Array.from(this.maps.values());\n }\n\n /**\n * Find map by world coordinates\n * \n * @param worldX - World X coordinate\n * @param worldY - World Y coordinate\n * @returns Map found or null\n */\n getMapByWorldCoordinates(worldX: number, worldY: number): WorldMapInfo | null {\n const mapId = this.spatialIndex.get(`${worldX},${worldY}`);\n return mapId ? this.maps.get(mapId) ?? null : null;\n }\n\n /**\n * Calculate absolute world position of a player\n * \n * @param map - Current map\n * @param localX - Local X position in the map\n * @param localY - Local Y position in the map\n * @returns Absolute coordinates in the world\n */\n getWorldPosition(map: WorldMapInfo, localX: number, localY: number): {x: number, y: number} {\n return {\n x: map.worldX + localX,\n y: map.worldY + localY\n };\n }\n\n /**\n * Calculate local position from world position\n * \n * @param worldX - World X position\n * @param worldY - World Y position\n * @param targetMap - Target map\n * @returns Local position in the target map\n */\n getLocalPosition(worldX: number, worldY: number, targetMap: WorldMapInfo): {x: number, y: number} {\n return {\n x: worldX - targetMap.worldX,\n y: worldY - targetMap.worldY\n };\n }\n}\n\n/**\n * Public alias for the world maps manager\n * \n * This alias is provided for API readability in map methods.\n */\nexport type RpgWorldMaps = WorldMapsManager;","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 enum Side {\n Server = 'server',\n Client = 'client'\n}\n\ntype ModuleSide = {\n client?: any,\n server?: any\n}\n\nexport type ModuleType = ModuleSide | [ModuleSide, {\n client?: any,\n server?: any\n}]\n\nexport function RpgModule<T>(options: T) {\n return (target) => {\n if ((options as any).hooks) {\n target.hooks = (options as any).hooks\n }\n for (let key in options) {\n target.prototype[key] = options[key]\n }\n }\n}\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\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].values.get('__default__'))\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\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 delay(cb: () => void, ms: number = 50): void {\n setTimeout(cb, ms);\n}\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 * PrebuiltGui.TitleScreen | rpg-title-screen\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 TitleScreen = 'rpg-title-screen'\n}\n","/**\n * Perlin Noise 2D Generator\n * \n * A simple, efficient, and performant implementation of 2D Perlin noise.\n * Perlin noise generates smooth, natural-looking random values that are coherent\n * across space, making it ideal for procedural generation and smooth random movements.\n * \n * ## Features\n * - **Deterministic**: Same seed and coordinates always produce the same value\n * - **Smooth**: Values change gradually, creating natural-looking patterns\n * - **Performant**: Optimized for real-time use in movement systems\n * - **Seeded**: Optional seed for reproducible results\n * \n * ## Usage\n * ```ts\n * const noise = new PerlinNoise2D();\n * const value = noise.get(x, y); // Returns value between -1 and 1\n * \n * // With seed for deterministic results\n * const seededNoise = new PerlinNoise2D(12345);\n * ```\n * \n * @example\n * ```ts\n * // Use in movement system for smooth random directions\n * const noise = new PerlinNoise2D();\n * const time = Date.now() * 0.001;\n * const direction = Math.floor(noise.get(player.x(), player.y(), time) * 4) % 4;\n * ```\n */\nexport class PerlinNoise2D {\n private readonly permutation: number[];\n private readonly p: number[];\n\n /**\n * Creates a new Perlin noise generator\n * \n * @param seed - Optional seed for deterministic noise generation. If not provided, uses a default seed.\n * \n * @example\n * ```ts\n * const noise = new PerlinNoise2D(12345);\n * const value = noise.get(10, 20);\n * ```\n */\n constructor(seed: number = 0) {\n // Create permutation table (256 values)\n this.permutation = this.generatePermutation(seed);\n \n // Double the permutation array for easier wrapping\n this.p = [...this.permutation, ...this.permutation];\n }\n\n /**\n * Generates a permutation table based on seed\n * \n * @param seed - Seed value for permutation generation\n * @returns Array of 256 shuffled values\n */\n private generatePermutation(seed: number): number[] {\n const p: number[] = [];\n \n // Initialize with sequential values\n for (let i = 0; i < 256; i++) {\n p[i] = i;\n }\n \n // Simple seeded shuffle using linear congruential generator\n let state = seed;\n const lcg = () => {\n state = (state * 1103515245 + 12345) & 0x7fffffff;\n return state;\n };\n \n // Fisher-Yates shuffle with seeded random\n for (let i = 255; i > 0; i--) {\n const j = lcg() % (i + 1);\n [p[i], p[j]] = [p[j], p[i]];\n }\n \n return p;\n }\n\n /**\n * Fade function for smooth interpolation (ease curve)\n * \n * @param t - Value between 0 and 1\n * @returns Smoothed value between 0 and 1\n */\n private fade(t: number): number {\n return t * t * t * (t * (t * 6 - 15) + 10);\n }\n\n /**\n * Linear interpolation\n * \n * @param a - Start value\n * @param b - End value\n * @param t - Interpolation factor (0 to 1)\n * @returns Interpolated value\n */\n private lerp(a: number, b: number, t: number): number {\n return a + t * (b - a);\n }\n\n /**\n * Gradient function - generates a pseudo-random gradient vector\n * \n * @param hash - Hash value from permutation table\n * @param x - X component\n * @param y - Y component\n * @returns Dot product of gradient and position\n */\n private grad(hash: number, x: number, y: number): number {\n // Convert hash to one of 4 gradient directions\n const h = hash & 3;\n \n // Return dot product with gradient vector\n switch (h) {\n case 0: return x + y; // (1, 1)\n case 1: return -x + y; // (-1, 1)\n case 2: return x - y; // (1, -1)\n case 3: return -x - y; // (-1, -1)\n default: return 0;\n }\n }\n\n /**\n * Gets the noise value at the specified 2D coordinates\n * \n * Returns a value between approximately -1 and 1, though values near the edges\n * are less common. For practical use, you may want to clamp or normalize the result.\n * \n * @param x - X coordinate\n * @param y - Y coordinate\n * @param scale - Optional scale factor (default: 0.1). Lower values create smoother, larger patterns.\n * @returns Noise value between approximately -1 and 1\n * \n * @example\n * ```ts\n * const noise = new PerlinNoise2D();\n * const value = noise.get(10, 20); // Basic usage\n * const scaled = noise.get(10, 20, 0.05); // Smoother pattern\n * ```\n */\n get(x: number, y: number, scale: number = 0.1): number {\n // Apply scale\n x *= scale;\n y *= scale;\n\n // Find unit grid cell containing point\n const X = Math.floor(x) & 255;\n const Y = Math.floor(y) & 255;\n\n // Get relative x,y coordinates within that cell\n x -= Math.floor(x);\n y -= Math.floor(y);\n\n // Compute fade curves for x and y\n const u = this.fade(x);\n const v = this.fade(y);\n\n // Hash coordinates of the 4 square corners\n const A = this.p[X] + Y;\n const AA = this.p[A];\n const AB = this.p[A + 1];\n const B = this.p[X + 1] + Y;\n const BA = this.p[B];\n const BB = this.p[B + 1];\n\n // And add blended results from 4 corners of the square\n return this.lerp(\n this.lerp(\n this.grad(this.p[AA], x, y),\n this.grad(this.p[BA], x - 1, y),\n u\n ),\n this.lerp(\n this.grad(this.p[AB], x, y - 1),\n this.grad(this.p[BB], x - 1, y - 1),\n u\n ),\n v\n );\n }\n\n /**\n * Gets a normalized noise value between 0 and 1\n * \n * Convenience method that normalizes the noise output to a 0-1 range.\n * \n * @param x - X coordinate\n * @param y - Y coordinate\n * @param scale - Optional scale factor (default: 0.1)\n * @returns Noise value between 0 and 1\n * \n * @example\n * ```ts\n * const noise = new PerlinNoise2D();\n * const normalized = noise.getNormalized(10, 20);\n * // Returns value between 0 and 1\n * ```\n */\n getNormalized(x: number, y: number, scale: number = 0.1): number {\n return (this.get(x, y, scale) + 1) * 0.5;\n }\n\n /**\n * Gets a noise value mapped to a specific range\n * \n * Maps the noise output to a custom min-max range.\n * \n * @param x - X coordinate\n * @param y - Y coordinate\n * @param min - Minimum output value\n * @param max - Maximum output value\n * @param scale - Optional scale factor (default: 0.1)\n * @returns Noise value between min and max\n * \n * @example\n * ```ts\n * const noise = new PerlinNoise2D();\n * const direction = noise.getRange(10, 20, 0, 3); // Returns 0, 1, 2, or 3\n * ```\n */\n getRange(x: number, y: number, min: number, max: number, scale: number = 0.1): number {\n const normalized = this.getNormalized(x, y, scale);\n return min + normalized * (max - min);\n }\n\n /**\n * Gets an integer noise value in a specific range (inclusive)\n * \n * Useful for selecting discrete values like array indices or enum values.\n * \n * @param x - X coordinate\n * @param y - Y coordinate\n * @param min - Minimum integer value (inclusive)\n * @param max - Maximum integer value (inclusive)\n * @param scale - Optional scale factor (default: 0.1)\n * @returns Integer noise value between min and max (inclusive)\n * \n * @example\n * ```ts\n * const noise = new PerlinNoise2D();\n * const directionIndex = noise.getInt(10, 20, 0, 3); // Returns 0, 1, 2, or 3\n * ```\n */\n getInt(x: number, y: number, min: number, max: number, scale: number = 0.1): number {\n const value = this.getRange(x, y, min, max + 1, scale);\n return Math.floor(value);\n }\n}\n\n/**\n * Creates a shared Perlin noise instance for global use\n * \n * Useful when you want consistent noise across different parts of your application\n * without passing the instance around.\n * \n * @param seed - Optional seed for the shared instance\n * @returns Shared PerlinNoise2D instance\n * \n * @example\n * ```ts\n * const noise = getSharedPerlinNoise(12345);\n * const value = noise.get(10, 20);\n * ```\n */\nlet sharedInstance: PerlinNoise2D | null = null;\n\nexport function getSharedPerlinNoise(seed?: number): PerlinNoise2D {\n if (!sharedInstance) {\n sharedInstance = new PerlinNoise2D(seed);\n }\n return sharedInstance;\n}\n\n/**\n * Resets the shared Perlin noise instance\n * \n * Useful for testing or when you need to change the seed.\n * \n * @param seed - Optional new seed for the instance\n * \n * @example\n * ```ts\n * resetSharedPerlinNoise(12345);\n * ```\n */\nexport function resetSharedPerlinNoise(seed?: number): void {\n sharedInstance = new PerlinNoise2D(seed);\n}\n\n","export const MAXHP: string = 'maxHp'\nexport const MAXSP: string = 'maxSp'\nexport const ATK: string = 'atk'\nexport const PDEF: string = 'pdef'\nexport const SDEF: string = 'sdef'\nexport const STR: string = 'str'\nexport const AGI: string = 'agi'\nexport const INT: string = 'int'\nexport const DEX: string = 'dex'"],"names":["isFunction","Symbol_observable","isPromise","Symbol_iterator","process","iterator","isArray","__defProp","__name","BehaviorSubject2","BehaviorSubject3","isClass","isObject","isSignal2","__decorateClass","Control","Direction","Animation","EPSILON","MovementManager","owner","topLeftX","topLeftY","Side","results","PrebuiltGui"],"mappings":"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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]}