@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.
- package/dist/lib/ecs-runner.d.ts +1 -1
- package/dist/lib/ecs-runner.d.ts.map +1 -1
- package/dist/lib/ecs-runner.js +8 -2
- package/dist/lib/ecs-runner.js.map +1 -1
- package/dist/lib/ecs-simulation.d.ts +24 -4
- package/dist/lib/ecs-simulation.d.ts.map +1 -1
- package/dist/lib/ecs-simulation.js +57 -1
- package/dist/lib/ecs-simulation.js.map +1 -1
- package/dist/lib/hash-verification/abstract-hash-verification.system.d.ts.map +1 -1
- package/dist/lib/hash-verification/abstract-hash-verification.system.js +5 -0
- package/dist/lib/hash-verification/abstract-hash-verification.system.js.map +1 -1
- package/dist/lib/hash-verification/create-hash-reporter.d.ts.map +1 -1
- package/dist/lib/hash-verification/create-hash-reporter.js +11 -8
- package/dist/lib/hash-verification/create-hash-reporter.js.map +1 -1
- package/dist/lib/input/abstract-input-provider.d.ts +1 -0
- package/dist/lib/input/abstract-input-provider.d.ts.map +1 -1
- package/dist/lib/input/abstract-input-provider.js +8 -1
- package/dist/lib/input/abstract-input-provider.js.map +1 -1
- package/dist/lib/input/input-provider-di-token.d.ts +1 -0
- package/dist/lib/input/input-provider-di-token.d.ts.map +1 -1
- package/dist/lib/input/input-provider-di-token.js +3 -0
- package/dist/lib/input/input-provider-di-token.js.map +1 -1
- package/dist/lib/input/local-input-provider.d.ts +1 -0
- package/dist/lib/input/local-input-provider.d.ts.map +1 -1
- package/dist/lib/input/local-input-provider.js +5 -0
- package/dist/lib/input/local-input-provider.js.map +1 -1
- package/dist/lib/input/replay-input-provider.d.ts +1 -0
- package/dist/lib/input/replay-input-provider.d.ts.map +1 -1
- package/dist/lib/input/replay-input-provider.js +5 -0
- package/dist/lib/input/replay-input-provider.js.map +1 -1
- package/dist/lib/mem/managers/entities-manager.d.ts +3 -2
- package/dist/lib/mem/managers/entities-manager.d.ts.map +1 -1
- package/dist/lib/mem/managers/entities-manager.js +65 -23
- package/dist/lib/mem/managers/entities-manager.js.map +1 -1
- package/dist/lib/mem/managers/filters-manager.d.ts +2 -2
- package/dist/lib/mem/managers/filters-manager.d.ts.map +1 -1
- package/dist/lib/mem/managers/filters-manager.js +19 -4
- package/dist/lib/mem/managers/filters-manager.js.map +1 -1
- package/dist/lib/mem/mem.d.ts.map +1 -1
- package/dist/lib/mem/mem.js +4 -2
- package/dist/lib/mem/mem.js.map +1 -1
- package/dist/lib/signals/signal.d.ts +4 -3
- package/dist/lib/signals/signal.d.ts.map +1 -1
- package/dist/lib/signals/signal.js +34 -34
- package/dist/lib/signals/signal.js.map +1 -1
- package/dist/lib/signals/signals.registry.d.ts +1 -1
- package/dist/lib/signals/signals.registry.d.ts.map +1 -1
- package/dist/lib/signals/signals.registry.js +2 -2
- package/dist/lib/signals/signals.registry.js.map +1 -1
- package/dist/lib/types/abstract-filter.d.ts +3 -2
- package/dist/lib/types/abstract-filter.d.ts.map +1 -1
- package/dist/lib/types/abstract-filter.js +22 -21
- package/dist/lib/types/abstract-filter.js.map +1 -1
- package/dist/lib/types/ecs-types.d.ts +5 -3
- package/dist/lib/types/ecs-types.d.ts.map +1 -1
- package/dist/lib/types/ecs-types.js.map +1 -1
- 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
|
|
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(
|
|
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,
|
|
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(
|
|
10
|
+
onTick(verifiedTick) {
|
|
11
11
|
for (const signal of this._signals){
|
|
12
|
-
signal._onTick(
|
|
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(
|
|
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;
|
|
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); //
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
this.
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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.
|
|
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); //
|
|
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":"AAAA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACzG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;
|
|
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":"
|
|
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.
|
|
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/
|
|
44
|
-
"@lagless/math": "0.0.
|
|
45
|
-
"@lagless/
|
|
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"
|