@lagless/core 0.0.35 → 0.0.38

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.
Files changed (57) hide show
  1. package/dist/lib/ecs-runner.d.ts +1 -1
  2. package/dist/lib/ecs-runner.d.ts.map +1 -1
  3. package/dist/lib/ecs-runner.js +8 -2
  4. package/dist/lib/ecs-runner.js.map +1 -1
  5. package/dist/lib/ecs-simulation.d.ts +24 -4
  6. package/dist/lib/ecs-simulation.d.ts.map +1 -1
  7. package/dist/lib/ecs-simulation.js +57 -1
  8. package/dist/lib/ecs-simulation.js.map +1 -1
  9. package/dist/lib/hash-verification/abstract-hash-verification.system.d.ts.map +1 -1
  10. package/dist/lib/hash-verification/abstract-hash-verification.system.js +5 -0
  11. package/dist/lib/hash-verification/abstract-hash-verification.system.js.map +1 -1
  12. package/dist/lib/hash-verification/create-hash-reporter.d.ts.map +1 -1
  13. package/dist/lib/hash-verification/create-hash-reporter.js +11 -8
  14. package/dist/lib/hash-verification/create-hash-reporter.js.map +1 -1
  15. package/dist/lib/input/abstract-input-provider.d.ts +1 -0
  16. package/dist/lib/input/abstract-input-provider.d.ts.map +1 -1
  17. package/dist/lib/input/abstract-input-provider.js +8 -1
  18. package/dist/lib/input/abstract-input-provider.js.map +1 -1
  19. package/dist/lib/input/input-provider-di-token.d.ts +1 -0
  20. package/dist/lib/input/input-provider-di-token.d.ts.map +1 -1
  21. package/dist/lib/input/input-provider-di-token.js +3 -0
  22. package/dist/lib/input/input-provider-di-token.js.map +1 -1
  23. package/dist/lib/input/local-input-provider.d.ts +1 -0
  24. package/dist/lib/input/local-input-provider.d.ts.map +1 -1
  25. package/dist/lib/input/local-input-provider.js +5 -0
  26. package/dist/lib/input/local-input-provider.js.map +1 -1
  27. package/dist/lib/input/replay-input-provider.d.ts +1 -0
  28. package/dist/lib/input/replay-input-provider.d.ts.map +1 -1
  29. package/dist/lib/input/replay-input-provider.js +5 -0
  30. package/dist/lib/input/replay-input-provider.js.map +1 -1
  31. package/dist/lib/mem/managers/entities-manager.d.ts +3 -2
  32. package/dist/lib/mem/managers/entities-manager.d.ts.map +1 -1
  33. package/dist/lib/mem/managers/entities-manager.js +65 -23
  34. package/dist/lib/mem/managers/entities-manager.js.map +1 -1
  35. package/dist/lib/mem/managers/filters-manager.d.ts +2 -2
  36. package/dist/lib/mem/managers/filters-manager.d.ts.map +1 -1
  37. package/dist/lib/mem/managers/filters-manager.js +19 -4
  38. package/dist/lib/mem/managers/filters-manager.js.map +1 -1
  39. package/dist/lib/mem/mem.d.ts.map +1 -1
  40. package/dist/lib/mem/mem.js +4 -2
  41. package/dist/lib/mem/mem.js.map +1 -1
  42. package/dist/lib/signals/signal.d.ts +4 -3
  43. package/dist/lib/signals/signal.d.ts.map +1 -1
  44. package/dist/lib/signals/signal.js +34 -34
  45. package/dist/lib/signals/signal.js.map +1 -1
  46. package/dist/lib/signals/signals.registry.d.ts +1 -1
  47. package/dist/lib/signals/signals.registry.d.ts.map +1 -1
  48. package/dist/lib/signals/signals.registry.js +2 -2
  49. package/dist/lib/signals/signals.registry.js.map +1 -1
  50. package/dist/lib/types/abstract-filter.d.ts +3 -2
  51. package/dist/lib/types/abstract-filter.d.ts.map +1 -1
  52. package/dist/lib/types/abstract-filter.js +22 -21
  53. package/dist/lib/types/abstract-filter.js.map +1 -1
  54. package/dist/lib/types/ecs-types.d.ts +5 -3
  55. package/dist/lib/types/ecs-types.d.ts.map +1 -1
  56. package/dist/lib/types/ecs-types.js.map +1 -1
  57. package/package.json +4 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/signals/signal.ts"],"sourcesContent":["import { EventEmitter } from './event-emitter.js';\nimport { ECSConfig } from '../ecs-config.js';\nimport { ECSSignal } from '../di/index.js';\n\nexport interface SignalEvent<TData> {\n tick: number;\n data: TData;\n}\n\nexport interface ISignalConstructor {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new (...args: any[]): Signal<any>;\n}\n\n@ECSSignal()\nexport abstract class Signal<TData = unknown> {\n public readonly Predicted = new EventEmitter<SignalEvent<TData>>();\n public readonly Verified = new EventEmitter<SignalEvent<TData>>();\n public readonly Cancelled = new EventEmitter<SignalEvent<TData>>();\n\n private readonly _pending = new Map<number, TData[]>();\n private readonly _awaitingVerification = new Map<number, TData[]>();\n private readonly _maxInputDelayTick: number;\n\n constructor(protected readonly _ECSConfig: ECSConfig) {\n this._maxInputDelayTick = _ECSConfig.maxInputDelayTick;\n }\n\n public emit(tick: number, data: TData): void {\n // 1. Добавляем в pending (текущее состояние симуляции)\n let pending = this._pending.get(tick);\n if (!pending) {\n pending = [];\n this._pending.set(tick, pending);\n }\n pending.push(data);\n\n // 2. Проверяем — уже был Predicted для такого tick+data?\n // (случается при rollback + пересимуляции с теми же данными)\n const awaiting = this._awaitingVerification.get(tick);\n const alreadyPredicted = awaiting?.some((a) => this._dataEquals(a, data));\n\n if (!alreadyPredicted) {\n // Первый раз видим это событие — Predicted\n this.Predicted.emit({ tick, data });\n\n // Добавляем в awaiting для будущей verification\n let aw = this._awaitingVerification.get(tick);\n if (!aw) {\n aw = [];\n this._awaitingVerification.set(tick, aw);\n }\n aw.push(data);\n }\n }\n\n /**\n * Проверка Verified/Cancelled (вызывается каждый тик из SignalsRegistry)\n * @internal\n */\n public _onTick(currentTick: number): void {\n const verifyTick = currentTick - this._maxInputDelayTick;\n if (verifyTick < 0) return;\n\n const awaiting = this._awaitingVerification.get(verifyTick);\n if (!awaiting || awaiting.length === 0) {\n this._cleanupTick(verifyTick);\n return;\n }\n\n const pending = this._pending.get(verifyTick) ?? [];\n const pendingMatched = new Array(pending.length).fill(false);\n\n for (const awaitingData of awaiting) {\n // Ищем matching событие в pending\n let matchIdx = -1;\n for (let i = 0; i < pending.length; i++) {\n if (!pendingMatched[i] && this._dataEquals(pending[i], awaitingData)) {\n matchIdx = i;\n break;\n }\n }\n\n if (matchIdx >= 0) {\n pendingMatched[matchIdx] = true;\n this.Verified.emit({ tick: verifyTick, data: awaitingData });\n } else {\n // Событие было Predicted, но нет в pending после rollback\n this.Cancelled.emit({ tick: verifyTick, data: awaitingData });\n }\n }\n\n this._cleanupTick(verifyTick);\n }\n\n /**\n * Перед rollback — очищаем pending для тиков которые будут пересимулированы\n * @internal\n */\n public _onBeforeRollback(toTick: number): void {\n for (const tick of this._pending.keys()) {\n if (tick > toTick) {\n this._pending.delete(tick);\n }\n }\n // _awaitingVerification НЕ очищаем — проверим при verification\n }\n\n /**\n * Очистка данных для тика после verification\n */\n private _cleanupTick(tick: number): void {\n this._awaitingVerification.delete(tick);\n this._pending.delete(tick);\n }\n\n /**\n * Shallow comparison данных. Override для custom сравнения.\n */\n protected _dataEquals(a: TData, b: TData): boolean {\n if (a === b) return true;\n if (typeof a !== 'object' || typeof b !== 'object') return false;\n if (a === null || b === null) return false;\n\n const objA = a as Record<string, unknown>;\n const objB = b as Record<string, unknown>;\n\n const keysA = Object.keys(objA);\n const keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (objA[key] !== objB[key]) {\n return false;\n }\n }\n return true;\n }\n\n public dispose(): void {\n this._pending.clear();\n this._awaitingVerification.clear();\n this.Predicted.clear();\n this.Verified.clear();\n this.Cancelled.clear();\n }\n}\n"],"names":["EventEmitter","ECSConfig","ECSSignal","Signal","emit","tick","data","pending","_pending","get","set","push","awaiting","_awaitingVerification","alreadyPredicted","some","a","_dataEquals","Predicted","aw","_onTick","currentTick","verifyTick","_maxInputDelayTick","length","_cleanupTick","pendingMatched","Array","fill","awaitingData","matchIdx","i","Verified","Cancelled","_onBeforeRollback","toTick","keys","delete","b","objA","objB","keysA","Object","keysB","key","dispose","clear","constructor","_ECSConfig","Map","maxInputDelayTick"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../src/lib/signals/signal.ts"],"sourcesContent":["import { EventEmitter } from './event-emitter.js';\nimport { ECSConfig } from '../ecs-config.js';\nimport { ECSSignal } from '../di/index.js';\n\nexport interface SignalEvent<TData> {\n tick: number;\n data: TData;\n}\n\nexport interface ISignalConstructor {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new (...args: any[]): Signal<any>;\n}\n\n@ECSSignal()\nexport abstract class Signal<TData = unknown> {\n public readonly Predicted = new EventEmitter<SignalEvent<TData>>();\n public readonly Verified = new EventEmitter<SignalEvent<TData>>();\n public readonly Cancelled = new EventEmitter<SignalEvent<TData>>();\n\n private readonly _pending = new Map<number, TData[]>();\n private readonly _awaitingVerification = new Map<number, TData[]>();\n private _lastVerifiedTick = -1;\n\n constructor(protected readonly _ECSConfig: ECSConfig) {}\n\n public emit(tick: number, data: TData): void {\n // 1. Добавляем в pending (текущее состояние симуляции)\n let pending = this._pending.get(tick);\n if (!pending) {\n pending = [];\n this._pending.set(tick, pending);\n }\n pending.push(data);\n\n // 2. Проверяем — уже был Predicted для такого tick+data?\n // (случается при rollback + пересимуляции с теми же данными)\n const awaiting = this._awaitingVerification.get(tick);\n const alreadyPredicted = awaiting?.some((a) => this._dataEquals(a, data));\n\n if (!alreadyPredicted) {\n // Первый раз видим это событие — Predicted\n this.Predicted.emit({ tick, data });\n\n // Добавляем в awaiting для будущей verification\n let aw = this._awaitingVerification.get(tick);\n if (!aw) {\n aw = [];\n this._awaitingVerification.set(tick, aw);\n }\n aw.push(data);\n }\n }\n\n /**\n * Verify/cancel signals for ticks up to verifiedTick.\n * Called each simulation tick from SignalsRegistry.\n * @internal\n */\n public _onTick(verifiedTick: number): void {\n while (this._lastVerifiedTick < verifiedTick) {\n const nextTick = this._lastVerifiedTick + 1;\n\n const awaiting = this._awaitingVerification.get(nextTick);\n if (awaiting && awaiting.length > 0) {\n const pending = this._pending.get(nextTick) ?? [];\n const pendingMatched = new Array(pending.length).fill(false);\n\n for (const awaitingData of awaiting) {\n let matchIdx = -1;\n for (let i = 0; i < pending.length; i++) {\n if (!pendingMatched[i] && this._dataEquals(pending[i], awaitingData)) {\n matchIdx = i;\n break;\n }\n }\n\n if (matchIdx >= 0) {\n pendingMatched[matchIdx] = true;\n this.Verified.emit({ tick: nextTick, data: awaitingData });\n } else {\n this.Cancelled.emit({ tick: nextTick, data: awaitingData });\n }\n }\n }\n\n this._cleanupTick(nextTick);\n this._lastVerifiedTick = nextTick;\n }\n }\n\n /**\n * Перед rollback — очищаем pending для тиков которые будут пересимулированы\n * @internal\n */\n public _onBeforeRollback(toTick: number): void {\n for (const tick of this._pending.keys()) {\n if (tick > toTick) {\n this._pending.delete(tick);\n }\n }\n // _awaitingVerification НЕ очищаем — проверим при verification\n }\n\n /**\n * Очистка данных для тика после verification\n */\n private _cleanupTick(tick: number): void {\n this._awaitingVerification.delete(tick);\n this._pending.delete(tick);\n }\n\n /**\n * Shallow comparison данных. Override для custom сравнения.\n */\n protected _dataEquals(a: TData, b: TData): boolean {\n if (a === b) return true;\n if (typeof a !== 'object' || typeof b !== 'object') return false;\n if (a === null || b === null) return false;\n\n const objA = a as Record<string, unknown>;\n const objB = b as Record<string, unknown>;\n\n const keysA = Object.keys(objA);\n const keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (objA[key] !== objB[key]) {\n return false;\n }\n }\n return true;\n }\n\n public dispose(): void {\n this._pending.clear();\n this._awaitingVerification.clear();\n this._lastVerifiedTick = -1;\n this.Predicted.clear();\n this.Verified.clear();\n this.Cancelled.clear();\n }\n}\n"],"names":["EventEmitter","ECSConfig","ECSSignal","Signal","emit","tick","data","pending","_pending","get","set","push","awaiting","_awaitingVerification","alreadyPredicted","some","a","_dataEquals","Predicted","aw","_onTick","verifiedTick","_lastVerifiedTick","nextTick","length","pendingMatched","Array","fill","awaitingData","matchIdx","i","Verified","Cancelled","_cleanupTick","_onBeforeRollback","toTick","keys","delete","b","objA","objB","keysA","Object","keysB","key","dispose","clear","constructor","_ECSConfig","Map"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -2,7 +2,7 @@ import { Signal } from './signal.js';
2
2
  export declare class SignalsRegistry {
3
3
  private readonly _signals;
4
4
  init(signals: Signal[]): void;
5
- onTick(currentTick: number): void;
5
+ onTick(verifiedTick: number): void;
6
6
  onBeforeRollback(toTick: number): void;
7
7
  dispose(): void;
8
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"signals.registry.d.ts","sourceRoot":"","sources":["../../../src/lib/signals/signals.registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IAElC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAS7B,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAMjC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAMtC,OAAO,IAAI,IAAI;CAMvB"}
1
+ {"version":3,"file":"signals.registry.d.ts","sourceRoot":"","sources":["../../../src/lib/signals/signals.registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IAElC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAS7B,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAMlC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAMtC,OAAO,IAAI,IAAI;CAMvB"}
@@ -7,9 +7,9 @@ export class SignalsRegistry {
7
7
  this._signals.push(signal);
8
8
  }
9
9
  }
10
- onTick(currentTick) {
10
+ onTick(verifiedTick) {
11
11
  for (const signal of this._signals){
12
- signal._onTick(currentTick);
12
+ signal._onTick(verifiedTick);
13
13
  }
14
14
  }
15
15
  onBeforeRollback(toTick) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/signals/signals.registry.ts"],"sourcesContent":["import { Signal } from './signal.js';\n\nexport class SignalsRegistry {\n private readonly _signals: Signal[] = [];\n\n public init(signals: Signal[]): void {\n if (this._signals.length !== 0) {\n throw new Error('Signals already registered');\n }\n for (const signal of signals) {\n this._signals.push(signal);\n }\n }\n\n public onTick(currentTick: number): void {\n for (const signal of this._signals) {\n signal._onTick(currentTick);\n }\n }\n\n public onBeforeRollback(toTick: number): void {\n for (const signal of this._signals) {\n signal._onBeforeRollback(toTick);\n }\n }\n\n public dispose(): void {\n for (const signal of this._signals) {\n signal.dispose();\n }\n this._signals.length = 0;\n }\n}\n"],"names":["SignalsRegistry","init","signals","_signals","length","Error","signal","push","onTick","currentTick","_onTick","onBeforeRollback","toTick","_onBeforeRollback","dispose"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAEA,OAAO,MAAMA;IAGJC,KAAKC,OAAiB,EAAQ;QACnC,IAAI,IAAI,CAACC,QAAQ,CAACC,MAAM,KAAK,GAAG;YAC9B,MAAM,IAAIC,MAAM;QAClB;QACA,KAAK,MAAMC,UAAUJ,QAAS;YAC5B,IAAI,CAACC,QAAQ,CAACI,IAAI,CAACD;QACrB;IACF;IAEOE,OAAOC,WAAmB,EAAQ;QACvC,KAAK,MAAMH,UAAU,IAAI,CAACH,QAAQ,CAAE;YAClCG,OAAOI,OAAO,CAACD;QACjB;IACF;IAEOE,iBAAiBC,MAAc,EAAQ;QAC5C,KAAK,MAAMN,UAAU,IAAI,CAACH,QAAQ,CAAE;YAClCG,OAAOO,iBAAiB,CAACD;QAC3B;IACF;IAEOE,UAAgB;QACrB,KAAK,MAAMR,UAAU,IAAI,CAACH,QAAQ,CAAE;YAClCG,OAAOQ,OAAO;QAChB;QACA,IAAI,CAACX,QAAQ,CAACC,MAAM,GAAG;IACzB;;aA5BiBD,WAAqB,EAAE;;AA6B1C"}
1
+ {"version":3,"sources":["../../../src/lib/signals/signals.registry.ts"],"sourcesContent":["import { Signal } from './signal.js';\n\nexport class SignalsRegistry {\n private readonly _signals: Signal[] = [];\n\n public init(signals: Signal[]): void {\n if (this._signals.length !== 0) {\n throw new Error('Signals already registered');\n }\n for (const signal of signals) {\n this._signals.push(signal);\n }\n }\n\n public onTick(verifiedTick: number): void {\n for (const signal of this._signals) {\n signal._onTick(verifiedTick);\n }\n }\n\n public onBeforeRollback(toTick: number): void {\n for (const signal of this._signals) {\n signal._onBeforeRollback(toTick);\n }\n }\n\n public dispose(): void {\n for (const signal of this._signals) {\n signal.dispose();\n }\n this._signals.length = 0;\n }\n}\n"],"names":["SignalsRegistry","init","signals","_signals","length","Error","signal","push","onTick","verifiedTick","_onTick","onBeforeRollback","toTick","_onBeforeRollback","dispose"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAEA,OAAO,MAAMA;IAGJC,KAAKC,OAAiB,EAAQ;QACnC,IAAI,IAAI,CAACC,QAAQ,CAACC,MAAM,KAAK,GAAG;YAC9B,MAAM,IAAIC,MAAM;QAClB;QACA,KAAK,MAAMC,UAAUJ,QAAS;YAC5B,IAAI,CAACC,QAAQ,CAACI,IAAI,CAACD;QACrB;IACF;IAEOE,OAAOC,YAAoB,EAAQ;QACxC,KAAK,MAAMH,UAAU,IAAI,CAACH,QAAQ,CAAE;YAClCG,OAAOI,OAAO,CAACD;QACjB;IACF;IAEOE,iBAAiBC,MAAc,EAAQ;QAC5C,KAAK,MAAMN,UAAU,IAAI,CAACH,QAAQ,CAAE;YAClCG,OAAOO,iBAAiB,CAACD;QAC3B;IACF;IAEOE,UAAgB;QACrB,KAAK,MAAMR,UAAU,IAAI,CAACH,QAAQ,CAAE;YAClCG,OAAOQ,OAAO;QAChB;QACA,IAAI,CAACX,QAAQ,CAACC,MAAM,GAAG;IACzB;;aA5BiBD,WAAqB,EAAE;;AA6B1C"}
@@ -1,10 +1,11 @@
1
1
  import { MemoryTracker } from '@lagless/binary';
2
2
  export declare abstract class AbstractFilter {
3
3
  private readonly _maxEntities;
4
- abstract readonly includeMask: number;
5
- abstract readonly excludeMask: number;
4
+ abstract readonly includeMask: number[];
5
+ abstract readonly excludeMask: number[];
6
6
  protected readonly _length: Uint32Array;
7
7
  protected readonly _entities: Uint32Array;
8
+ protected readonly _entityToIndex: Uint32Array;
8
9
  constructor(_maxEntities: number, buffer: ArrayBuffer, memoryTracker: MemoryTracker);
9
10
  static calculateSize(maxEntities: number, memoryTracker: MemoryTracker): void;
10
11
  get length(): number;
@@ -1 +1 @@
1
- {"version":3,"file":"abstract-filter.d.ts","sourceRoot":"","sources":["../../../src/lib/types/abstract-filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,8BAAsB,cAAc;IAOtB,OAAO,CAAC,QAAQ,CAAC,YAAY;IANzC,kBAAyB,WAAW,EAAE,MAAM,CAAC;IAC7C,kBAAyB,WAAW,EAAE,MAAM,CAAC;IAE7C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IACxC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;gBAEb,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa;WAOtF,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa;IAK7E,IAAW,MAAM,IAIW,MAAM,CAFjC;IAED,SAAS,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,EAKjC;IAEM,iBAAiB,CAAC,MAAM,EAAE,MAAM;IAUhC,sBAAsB,CAAC,MAAM,EAAE,MAAM;IAoBpC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC;CAKtD"}
1
+ {"version":3,"file":"abstract-filter.d.ts","sourceRoot":"","sources":["../../../src/lib/types/abstract-filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD,8BAAsB,cAAc;IAQtB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAPzC,kBAAyB,WAAW,EAAE,MAAM,EAAE,CAAC;IAC/C,kBAAyB,WAAW,EAAE,MAAM,EAAE,CAAC;IAE/C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IACxC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAC1C,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;gBAElB,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa;WAYtF,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa;IAM7E,IAAW,MAAM,IAIW,MAAM,CAFjC;IAED,SAAS,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,EAKjC;IAEM,iBAAiB,CAAC,MAAM,EAAE,MAAM;IAShC,sBAAsB,CAAC,MAAM,EAAE,MAAM;IAiBpC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC;CAKtD"}
@@ -1,7 +1,9 @@
1
+ const NOT_IN_FILTER = 0xFFFFFFFF;
1
2
  export class AbstractFilter {
2
3
  static calculateSize(maxEntities, memoryTracker) {
3
- memoryTracker.add(Uint32Array.BYTES_PER_ELEMENT); // for length
4
- memoryTracker.add(maxEntities * Uint32Array.BYTES_PER_ELEMENT);
4
+ memoryTracker.add(Uint32Array.BYTES_PER_ELEMENT); // length
5
+ memoryTracker.add(maxEntities * Uint32Array.BYTES_PER_ELEMENT); // dense entities
6
+ memoryTracker.add(maxEntities * Uint32Array.BYTES_PER_ELEMENT); // reverse index
5
7
  }
6
8
  get length() {
7
9
  return this._length[0];
@@ -13,28 +15,24 @@ export class AbstractFilter {
13
15
  this._length[0] = value;
14
16
  }
15
17
  addEntityToFilter(entity) {
16
- // Scan only the active portion [0..length)
17
- for(let i = 0; i < this.length; i++){
18
- if (this._entities[i] === entity) return; // Already in filter
19
- }
20
- this._entities[this.length] = entity;
21
- this.length++;
18
+ if (entity >= this._maxEntities || this._entityToIndex[entity] !== NOT_IN_FILTER) return;
19
+ const idx = this._length[0];
20
+ this._entities[idx] = entity;
21
+ this._entityToIndex[entity] = idx;
22
+ this._length[0] = idx + 1;
22
23
  }
23
24
  removeEntityFromFilter(entity) {
24
- // Scan only the active portion [0..length)
25
- let entityIdx = -1;
26
- for(let i = 0; i < this.length; i++){
27
- if (this._entities[i] === entity) {
28
- entityIdx = i;
29
- break;
30
- }
31
- }
32
- if (entityIdx === -1) return; // Not in filter
33
- const lastIndex = this.length - 1;
34
- if (entityIdx !== lastIndex) {
35
- this._entities[entityIdx] = this._entities[lastIndex];
25
+ if (entity >= this._maxEntities) return;
26
+ const idx = this._entityToIndex[entity];
27
+ if (idx === NOT_IN_FILTER) return;
28
+ const lastIdx = this._length[0] - 1;
29
+ if (idx !== lastIdx) {
30
+ const lastEntity = this._entities[lastIdx];
31
+ this._entities[idx] = lastEntity;
32
+ this._entityToIndex[lastEntity] = idx;
36
33
  }
37
- this.length--;
34
+ this._entityToIndex[entity] = NOT_IN_FILTER;
35
+ this._length[0] = lastIdx;
38
36
  }
39
37
  *[Symbol.iterator]() {
40
38
  for(let i = 0; i < this.length; i++){
@@ -47,6 +45,9 @@ export class AbstractFilter {
47
45
  memoryTracker.add(this._length.byteLength);
48
46
  this._entities = new Uint32Array(buffer, memoryTracker.ptr, this._maxEntities);
49
47
  memoryTracker.add(this._entities.byteLength);
48
+ this._entityToIndex = new Uint32Array(buffer, memoryTracker.ptr, this._maxEntities);
49
+ this._entityToIndex.fill(NOT_IN_FILTER);
50
+ memoryTracker.add(this._entityToIndex.byteLength);
50
51
  }
51
52
  }
52
53
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/types/abstract-filter.ts"],"sourcesContent":["import { MemoryTracker } from '@lagless/binary';\n\nexport abstract class AbstractFilter {\n public readonly abstract includeMask: number;\n public readonly abstract excludeMask: number;\n\n protected readonly _length: Uint32Array;\n protected readonly _entities: Uint32Array;\n\n constructor(private readonly _maxEntities: number, buffer: ArrayBuffer, memoryTracker: MemoryTracker) {\n this._length = new Uint32Array(buffer, memoryTracker.ptr, 1);\n memoryTracker.add(this._length.byteLength);\n this._entities = new Uint32Array(buffer, memoryTracker.ptr, this._maxEntities);\n memoryTracker.add(this._entities.byteLength);\n }\n\n public static calculateSize(maxEntities: number, memoryTracker: MemoryTracker) {\n memoryTracker.add(Uint32Array.BYTES_PER_ELEMENT); // for length\n memoryTracker.add(maxEntities * Uint32Array.BYTES_PER_ELEMENT);\n }\n\n public get length() {\n return this._length[0];\n }\n\n protected set length(value: number) {\n if (value < 0 || value > this._entities.length) {\n throw new Error('Invalid length value');\n }\n this._length[0] = value;\n }\n\n public addEntityToFilter(entity: number) {\n // Scan only the active portion [0..length)\n for (let i = 0; i < this.length; i++) {\n if (this._entities[i] === entity) return; // Already in filter\n }\n\n this._entities[this.length] = entity;\n this.length++;\n }\n\n public removeEntityFromFilter(entity: number) {\n // Scan only the active portion [0..length)\n let entityIdx = -1;\n for (let i = 0; i < this.length; i++) {\n if (this._entities[i] === entity) {\n entityIdx = i;\n break;\n }\n }\n if (entityIdx === -1) return; // Not in filter\n\n const lastIndex = this.length - 1;\n\n if (entityIdx !== lastIndex) {\n this._entities[entityIdx] = this._entities[lastIndex];\n }\n\n this.length--;\n }\n\n public *[Symbol.iterator](): IterableIterator<number> {\n for (let i = 0; i < this.length; i++) {\n yield this._entities[i];\n }\n }\n}\n"],"names":["AbstractFilter","calculateSize","maxEntities","memoryTracker","add","Uint32Array","BYTES_PER_ELEMENT","length","_length","value","_entities","Error","addEntityToFilter","entity","i","removeEntityFromFilter","entityIdx","lastIndex","Symbol","iterator","constructor","_maxEntities","buffer","ptr","byteLength"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAEA,OAAO,MAAeA;IAcpB,OAAcC,cAAcC,WAAmB,EAAEC,aAA4B,EAAE;QAC7EA,cAAcC,GAAG,CAACC,YAAYC,iBAAiB,GAAG,aAAa;QAC/DH,cAAcC,GAAG,CAACF,cAAcG,YAAYC,iBAAiB;IAC/D;IAEA,IAAWC,SAAS;QAClB,OAAO,IAAI,CAACC,OAAO,CAAC,EAAE;IACxB;IAEA,IAAcD,OAAOE,KAAa,EAAE;QAClC,IAAIA,QAAQ,KAAKA,QAAQ,IAAI,CAACC,SAAS,CAACH,MAAM,EAAE;YAC9C,MAAM,IAAII,MAAM;QAClB;QACA,IAAI,CAACH,OAAO,CAAC,EAAE,GAAGC;IACpB;IAEOG,kBAAkBC,MAAc,EAAE;QACvC,2CAA2C;QAC3C,IAAK,IAAIC,IAAI,GAAGA,IAAI,IAAI,CAACP,MAAM,EAAEO,IAAK;YACpC,IAAI,IAAI,CAACJ,SAAS,CAACI,EAAE,KAAKD,QAAQ,QAAQ,oBAAoB;QAChE;QAEA,IAAI,CAACH,SAAS,CAAC,IAAI,CAACH,MAAM,CAAC,GAAGM;QAC9B,IAAI,CAACN,MAAM;IACb;IAEOQ,uBAAuBF,MAAc,EAAE;QAC5C,2CAA2C;QAC3C,IAAIG,YAAY,CAAC;QACjB,IAAK,IAAIF,IAAI,GAAGA,IAAI,IAAI,CAACP,MAAM,EAAEO,IAAK;YACpC,IAAI,IAAI,CAACJ,SAAS,CAACI,EAAE,KAAKD,QAAQ;gBAChCG,YAAYF;gBACZ;YACF;QACF;QACA,IAAIE,cAAc,CAAC,GAAG,QAAQ,gBAAgB;QAE9C,MAAMC,YAAY,IAAI,CAACV,MAAM,GAAG;QAEhC,IAAIS,cAAcC,WAAW;YAC3B,IAAI,CAACP,SAAS,CAACM,UAAU,GAAG,IAAI,CAACN,SAAS,CAACO,UAAU;QACvD;QAEA,IAAI,CAACV,MAAM;IACb;IAEA,CAAQ,CAACW,OAAOC,QAAQ,CAAC,GAA6B;QACpD,IAAK,IAAIL,IAAI,GAAGA,IAAI,IAAI,CAACP,MAAM,EAAEO,IAAK;YACpC,MAAM,IAAI,CAACJ,SAAS,CAACI,EAAE;QACzB;IACF;IAzDAM,YAAY,AAAiBC,YAAoB,EAAEC,MAAmB,EAAEnB,aAA4B,CAAE;aAAzEkB,eAAAA;QAC3B,IAAI,CAACb,OAAO,GAAG,IAAIH,YAAYiB,QAAQnB,cAAcoB,GAAG,EAAE;QAC1DpB,cAAcC,GAAG,CAAC,IAAI,CAACI,OAAO,CAACgB,UAAU;QACzC,IAAI,CAACd,SAAS,GAAG,IAAIL,YAAYiB,QAAQnB,cAAcoB,GAAG,EAAE,IAAI,CAACF,YAAY;QAC7ElB,cAAcC,GAAG,CAAC,IAAI,CAACM,SAAS,CAACc,UAAU;IAC7C;AAqDF"}
1
+ {"version":3,"sources":["../../../src/lib/types/abstract-filter.ts"],"sourcesContent":["import { MemoryTracker } from '@lagless/binary';\n\nconst NOT_IN_FILTER = 0xFFFFFFFF;\n\nexport abstract class AbstractFilter {\n public readonly abstract includeMask: number[];\n public readonly abstract excludeMask: number[];\n\n protected readonly _length: Uint32Array;\n protected readonly _entities: Uint32Array;\n protected readonly _entityToIndex: Uint32Array;\n\n constructor(private readonly _maxEntities: number, buffer: ArrayBuffer, memoryTracker: MemoryTracker) {\n this._length = new Uint32Array(buffer, memoryTracker.ptr, 1);\n memoryTracker.add(this._length.byteLength);\n\n this._entities = new Uint32Array(buffer, memoryTracker.ptr, this._maxEntities);\n memoryTracker.add(this._entities.byteLength);\n\n this._entityToIndex = new Uint32Array(buffer, memoryTracker.ptr, this._maxEntities);\n this._entityToIndex.fill(NOT_IN_FILTER);\n memoryTracker.add(this._entityToIndex.byteLength);\n }\n\n public static calculateSize(maxEntities: number, memoryTracker: MemoryTracker) {\n memoryTracker.add(Uint32Array.BYTES_PER_ELEMENT); // length\n memoryTracker.add(maxEntities * Uint32Array.BYTES_PER_ELEMENT); // dense entities\n memoryTracker.add(maxEntities * Uint32Array.BYTES_PER_ELEMENT); // reverse index\n }\n\n public get length() {\n return this._length[0];\n }\n\n protected set length(value: number) {\n if (value < 0 || value > this._entities.length) {\n throw new Error('Invalid length value');\n }\n this._length[0] = value;\n }\n\n public addEntityToFilter(entity: number) {\n if (entity >= this._maxEntities || this._entityToIndex[entity] !== NOT_IN_FILTER) return;\n\n const idx = this._length[0];\n this._entities[idx] = entity;\n this._entityToIndex[entity] = idx;\n this._length[0] = idx + 1;\n }\n\n public removeEntityFromFilter(entity: number) {\n if (entity >= this._maxEntities) return;\n const idx = this._entityToIndex[entity];\n if (idx === NOT_IN_FILTER) return;\n\n const lastIdx = this._length[0] - 1;\n\n if (idx !== lastIdx) {\n const lastEntity = this._entities[lastIdx];\n this._entities[idx] = lastEntity;\n this._entityToIndex[lastEntity] = idx;\n }\n\n this._entityToIndex[entity] = NOT_IN_FILTER;\n this._length[0] = lastIdx;\n }\n\n public *[Symbol.iterator](): IterableIterator<number> {\n for (let i = 0; i < this.length; i++) {\n yield this._entities[i];\n }\n }\n}\n"],"names":["NOT_IN_FILTER","AbstractFilter","calculateSize","maxEntities","memoryTracker","add","Uint32Array","BYTES_PER_ELEMENT","length","_length","value","_entities","Error","addEntityToFilter","entity","_maxEntities","_entityToIndex","idx","removeEntityFromFilter","lastIdx","lastEntity","Symbol","iterator","i","constructor","buffer","ptr","byteLength","fill"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAEA,MAAMA,gBAAgB;AAEtB,OAAO,MAAeC;IAoBpB,OAAcC,cAAcC,WAAmB,EAAEC,aAA4B,EAAE;QAC7EA,cAAcC,GAAG,CAACC,YAAYC,iBAAiB,GAAG,SAAS;QAC3DH,cAAcC,GAAG,CAACF,cAAcG,YAAYC,iBAAiB,GAAG,iBAAiB;QACjFH,cAAcC,GAAG,CAACF,cAAcG,YAAYC,iBAAiB,GAAG,gBAAgB;IAClF;IAEA,IAAWC,SAAS;QAClB,OAAO,IAAI,CAACC,OAAO,CAAC,EAAE;IACxB;IAEA,IAAcD,OAAOE,KAAa,EAAE;QAClC,IAAIA,QAAQ,KAAKA,QAAQ,IAAI,CAACC,SAAS,CAACH,MAAM,EAAE;YAC9C,MAAM,IAAII,MAAM;QAClB;QACA,IAAI,CAACH,OAAO,CAAC,EAAE,GAAGC;IACpB;IAEOG,kBAAkBC,MAAc,EAAE;QACvC,IAAIA,UAAU,IAAI,CAACC,YAAY,IAAI,IAAI,CAACC,cAAc,CAACF,OAAO,KAAKd,eAAe;QAElF,MAAMiB,MAAM,IAAI,CAACR,OAAO,CAAC,EAAE;QAC3B,IAAI,CAACE,SAAS,CAACM,IAAI,GAAGH;QACtB,IAAI,CAACE,cAAc,CAACF,OAAO,GAAGG;QAC9B,IAAI,CAACR,OAAO,CAAC,EAAE,GAAGQ,MAAM;IAC1B;IAEOC,uBAAuBJ,MAAc,EAAE;QAC5C,IAAIA,UAAU,IAAI,CAACC,YAAY,EAAE;QACjC,MAAME,MAAM,IAAI,CAACD,cAAc,CAACF,OAAO;QACvC,IAAIG,QAAQjB,eAAe;QAE3B,MAAMmB,UAAU,IAAI,CAACV,OAAO,CAAC,EAAE,GAAG;QAElC,IAAIQ,QAAQE,SAAS;YACnB,MAAMC,aAAa,IAAI,CAACT,SAAS,CAACQ,QAAQ;YAC1C,IAAI,CAACR,SAAS,CAACM,IAAI,GAAGG;YACtB,IAAI,CAACJ,cAAc,CAACI,WAAW,GAAGH;QACpC;QAEA,IAAI,CAACD,cAAc,CAACF,OAAO,GAAGd;QAC9B,IAAI,CAACS,OAAO,CAAC,EAAE,GAAGU;IACpB;IAEA,CAAQ,CAACE,OAAOC,QAAQ,CAAC,GAA6B;QACpD,IAAK,IAAIC,IAAI,GAAGA,IAAI,IAAI,CAACf,MAAM,EAAEe,IAAK;YACpC,MAAM,IAAI,CAACZ,SAAS,CAACY,EAAE;QACzB;IACF;IA3DAC,YAAY,AAAiBT,YAAoB,EAAEU,MAAmB,EAAErB,aAA4B,CAAE;aAAzEW,eAAAA;QAC3B,IAAI,CAACN,OAAO,GAAG,IAAIH,YAAYmB,QAAQrB,cAAcsB,GAAG,EAAE;QAC1DtB,cAAcC,GAAG,CAAC,IAAI,CAACI,OAAO,CAACkB,UAAU;QAEzC,IAAI,CAAChB,SAAS,GAAG,IAAIL,YAAYmB,QAAQrB,cAAcsB,GAAG,EAAE,IAAI,CAACX,YAAY;QAC7EX,cAAcC,GAAG,CAAC,IAAI,CAACM,SAAS,CAACgB,UAAU;QAE3C,IAAI,CAACX,cAAc,GAAG,IAAIV,YAAYmB,QAAQrB,cAAcsB,GAAG,EAAE,IAAI,CAACX,YAAY;QAClF,IAAI,CAACC,cAAc,CAACY,IAAI,CAAC5B;QACzBI,cAAcC,GAAG,CAAC,IAAI,CAACW,cAAc,CAACW,UAAU;IAClD;AAkDF"}
@@ -9,10 +9,12 @@ export interface ComponentDefinition {
9
9
  name: string;
10
10
  id: number;
11
11
  fields: Record<string, FieldDefinition>;
12
+ isTag?: boolean;
12
13
  }
13
14
  export interface IComponentConstructor {
14
15
  name: string;
15
16
  ID: number;
17
+ IS_TAG?: boolean;
16
18
  schema: Record<string, TypedArrayConstructor>;
17
19
  calculateSize(maxEntities: number, memTracker: MemoryTracker): void;
18
20
  new (maxEntities: number, buffer: ArrayBuffer, memTracker: MemoryTracker): IComponentInstance;
@@ -31,7 +33,7 @@ export interface ISingletonConstructor {
31
33
  new (buffer: ArrayBuffer, memTracker: MemoryTracker): ISingletonInstance;
32
34
  }
33
35
  export interface ISingletonInstance {
34
- safe?: Record<string, number>;
36
+ safe?: Record<string, number | TypedArray>;
35
37
  unsafe: Record<string, TypedArray>;
36
38
  }
37
39
  export interface PlayerResourceDefinition {
@@ -60,8 +62,8 @@ export interface IFilterConstructor {
60
62
  new (maxEntities: number, buffer: ArrayBuffer, memTracker: MemoryTracker): IFilterInstance;
61
63
  }
62
64
  export interface IFilterInstance extends AbstractFilter {
63
- includeMask: number;
64
- excludeMask: number;
65
+ includeMask: number[];
66
+ excludeMask: number[];
65
67
  [Symbol.iterator](): IterableIterator<number>;
66
68
  }
67
69
  export interface IInputDefinition {
@@ -1 +1 @@
1
- {"version":3,"file":"ecs-types.d.ts","sourceRoot":"","sources":["../../../src/lib/types/ecs-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ecs-types.d.ts","sourceRoot":"","sources":["../../../src/lib/types/ecs-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/types/ecs-types.ts"],"sourcesContent":["import { InputFieldDefinition, MemoryTracker, TypedArray, TypedArrayConstructor } from '@lagless/binary';\nimport { AbstractFilter } from './abstract-filter.js';\n\nexport interface FieldDefinition {\n type: string;\n isArray: boolean;\n arrayLength?: number;\n}\n\nexport interface ComponentDefinition {\n name: string;\n id: number;\n fields: Record<string, FieldDefinition>;\n}\n\nexport interface IComponentConstructor {\n name: string;\n ID: number;\n schema: Record<string, TypedArrayConstructor>;\n\n calculateSize(maxEntities: number, memTracker: MemoryTracker): void;\n\n new (maxEntities: number, buffer: ArrayBuffer, memTracker: MemoryTracker): IComponentInstance;\n}\n\nexport interface IComponentInstance {\n unsafe: Record<string, TypedArray>;\n}\n\nexport interface SingletonDefinition {\n name: string;\n fields: Record<string, FieldDefinition>;\n}\n\nexport interface ISingletonConstructor {\n name: string;\n schema: Record<string, TypedArrayConstructor>;\n\n calculateSize(memTracker: MemoryTracker): void;\n\n new (buffer: ArrayBuffer, memTracker: MemoryTracker): ISingletonInstance;\n}\n\nexport interface ISingletonInstance {\n safe?: Record<string, number>;\n unsafe: Record<string, TypedArray>;\n}\n\nexport interface PlayerResourceDefinition {\n name: string;\n fields: Record<string, FieldDefinition>;\n}\n\nexport interface IPlayerResourceConstructor {\n name: string;\n schema: Record<string, TypedArrayConstructor>;\n\n calculateSize(memTracker: MemoryTracker): void;\n\n new (buffer: ArrayBuffer, memTracker: MemoryTracker): ISingletonInstance;\n}\n\nexport interface IPlayerResourceInstance {\n unsafe: Record<string, TypedArray>;\n}\n\nexport interface FilterDefinition {\n name: string;\n include: ComponentDefinition[];\n exclude: ComponentDefinition[];\n}\n\nexport interface IFilterConstructor {\n name: string;\n include: IComponentConstructor[];\n exclude: IComponentConstructor[];\n\n calculateSize(maxEntities: number, memTracker: MemoryTracker): void;\n\n new (maxEntities: number, buffer: ArrayBuffer, memTracker: MemoryTracker): IFilterInstance;\n}\n\nexport interface IFilterInstance extends AbstractFilter {\n includeMask: number;\n excludeMask: number;\n\n [Symbol.iterator](): IterableIterator<number>;\n}\n\nexport interface IInputDefinition {\n name: string;\n id: number;\n fields: Array<InputFieldDefinition>;\n}\n\nexport interface IAbstractInputConstructor {\n readonly id: number;\n\n new (): IAbstractInput;\n}\n\nexport interface IAbstractInput {\n readonly id: number;\n readonly byteLength: number;\n readonly fields: ReadonlyArray<InputFieldDefinition>;\n readonly schema: Record<string, TypedArray | number>;\n}\n\nexport type InputMeta = {\n tick: number;\n seq: number;\n ordinal: number;\n playerSlot: number;\n};\n\nexport type InputData<TInput extends IAbstractInput> = TInput['schema'];\n\nexport interface IECSSystem {\n update(tick: number): void;\n}\n\nexport interface IECSSystemConstructor {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new (...args: any[]): IECSSystem;\n}\n\nexport interface ECSSchema {\n components: ComponentDefinition[];\n singletons: SingletonDefinition[];\n playerResources: PlayerResourceDefinition[];\n filters: FilterDefinition[];\n inputs: IInputDefinition[];\n}\n\nexport interface ECSDeps {\n components: IComponentConstructor[];\n singletons: ISingletonConstructor[];\n playerResources: IPlayerResourceConstructor[];\n filters: IFilterConstructor[];\n inputs: IAbstractInputConstructor[];\n}\n"],"names":[],"rangeMappings":"","mappings":"AAsIA,WAMC"}
1
+ {"version":3,"sources":["../../../src/lib/types/ecs-types.ts"],"sourcesContent":["import { InputFieldDefinition, MemoryTracker, TypedArray, TypedArrayConstructor } from '@lagless/binary';\nimport { AbstractFilter } from './abstract-filter.js';\n\nexport interface FieldDefinition {\n type: string;\n isArray: boolean;\n arrayLength?: number;\n}\n\nexport interface ComponentDefinition {\n name: string;\n id: number;\n fields: Record<string, FieldDefinition>;\n isTag?: boolean;\n}\n\nexport interface IComponentConstructor {\n name: string;\n ID: number;\n IS_TAG?: boolean;\n schema: Record<string, TypedArrayConstructor>;\n\n calculateSize(maxEntities: number, memTracker: MemoryTracker): void;\n\n new (maxEntities: number, buffer: ArrayBuffer, memTracker: MemoryTracker): IComponentInstance;\n}\n\nexport interface IComponentInstance {\n unsafe: Record<string, TypedArray>;\n}\n\nexport interface SingletonDefinition {\n name: string;\n fields: Record<string, FieldDefinition>;\n}\n\nexport interface ISingletonConstructor {\n name: string;\n schema: Record<string, TypedArrayConstructor>;\n\n calculateSize(memTracker: MemoryTracker): void;\n\n new (buffer: ArrayBuffer, memTracker: MemoryTracker): ISingletonInstance;\n}\n\nexport interface ISingletonInstance {\n safe?: Record<string, number | TypedArray>;\n unsafe: Record<string, TypedArray>;\n}\n\nexport interface PlayerResourceDefinition {\n name: string;\n fields: Record<string, FieldDefinition>;\n}\n\nexport interface IPlayerResourceConstructor {\n name: string;\n schema: Record<string, TypedArrayConstructor>;\n\n calculateSize(memTracker: MemoryTracker): void;\n\n new (buffer: ArrayBuffer, memTracker: MemoryTracker): ISingletonInstance;\n}\n\nexport interface IPlayerResourceInstance {\n unsafe: Record<string, TypedArray>;\n}\n\nexport interface FilterDefinition {\n name: string;\n include: ComponentDefinition[];\n exclude: ComponentDefinition[];\n}\n\nexport interface IFilterConstructor {\n name: string;\n include: IComponentConstructor[];\n exclude: IComponentConstructor[];\n\n calculateSize(maxEntities: number, memTracker: MemoryTracker): void;\n\n new (maxEntities: number, buffer: ArrayBuffer, memTracker: MemoryTracker): IFilterInstance;\n}\n\nexport interface IFilterInstance extends AbstractFilter {\n includeMask: number[];\n excludeMask: number[];\n\n [Symbol.iterator](): IterableIterator<number>;\n}\n\nexport interface IInputDefinition {\n name: string;\n id: number;\n fields: Array<InputFieldDefinition>;\n}\n\nexport interface IAbstractInputConstructor {\n readonly id: number;\n\n new (): IAbstractInput;\n}\n\nexport interface IAbstractInput {\n readonly id: number;\n readonly byteLength: number;\n readonly fields: ReadonlyArray<InputFieldDefinition>;\n readonly schema: Record<string, TypedArray | number>;\n}\n\nexport type InputMeta = {\n tick: number;\n seq: number;\n ordinal: number;\n playerSlot: number;\n};\n\nexport type InputData<TInput extends IAbstractInput> = TInput['schema'];\n\nexport interface IECSSystem {\n update(tick: number): void;\n}\n\nexport interface IECSSystemConstructor {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new (...args: any[]): IECSSystem;\n}\n\nexport interface ECSSchema {\n components: ComponentDefinition[];\n singletons: SingletonDefinition[];\n playerResources: PlayerResourceDefinition[];\n filters: FilterDefinition[];\n inputs: IInputDefinition[];\n}\n\nexport interface ECSDeps {\n components: IComponentConstructor[];\n singletons: ISingletonConstructor[];\n playerResources: IPlayerResourceConstructor[];\n filters: IFilterConstructor[];\n inputs: IAbstractInputConstructor[];\n}\n"],"names":[],"rangeMappings":"","mappings":"AAwIA,WAMC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lagless/core",
3
- "version": "0.0.35",
3
+ "version": "0.0.38",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -32,7 +32,6 @@
32
32
  "outputPath": "libs/core/dist",
33
33
  "main": "libs/core/src/index.ts",
34
34
  "tsConfig": "libs/core/tsconfig.lib.json",
35
- "skipTypeCheck": true,
36
35
  "stripLeadingPaths": true
37
36
  }
38
37
  }
@@ -40,9 +39,9 @@
40
39
  },
41
40
  "dependencies": {
42
41
  "@swc/helpers": "~0.5.11",
43
- "@lagless/binary": "0.0.35",
44
- "@lagless/math": "0.0.35",
45
- "@lagless/misc": "0.0.35"
42
+ "@lagless/misc": "0.0.38",
43
+ "@lagless/math": "0.0.38",
44
+ "@lagless/binary": "0.0.38"
46
45
  },
47
46
  "devDependencies": {
48
47
  "unplugin-swc": "^1.5.7"