@esengine/network 2.2.0 → 3.0.1

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.d.ts CHANGED
@@ -25,7 +25,7 @@ export type { NetworkPredictionConfig, MovementInput, PredictedTransform, } from
25
25
  export { NetworkAOISystem, createNetworkAOISystem, } from './systems/NetworkAOISystem';
26
26
  export type { NetworkAOIConfig, NetworkAOIEvent, NetworkAOIEventType, NetworkAOIEventListener, } from './systems/NetworkAOISystem';
27
27
  export type { IStateSnapshot, ITransformState, ITransformStateWithVelocity, ISnapshotBufferConfig, ISnapshotBuffer, } from './sync';
28
- export type { IInterpolator, IExtrapolator, IInputSnapshot, IPredictedState, IPredictor, ClientPredictionConfig, EntityDeltaState, DeltaSyncData, DeltaCompressionConfig, } from './sync';
29
- export { lerp, lerpAngle, smoothDamp, SnapshotBuffer, createSnapshotBuffer, TransformInterpolator, HermiteTransformInterpolator, createTransformInterpolator, createHermiteTransformInterpolator, ClientPrediction, createClientPrediction, DeltaFlags, StateDeltaCompressor, createStateDeltaCompressor, } from './sync';
28
+ export type { IInterpolator, IExtrapolator, IInputSnapshot, IPredictedState, IPredictor, ClientPredictionConfig, EntityDeltaState, DeltaSyncData, DeltaCompressionConfig, ComponentSyncEventType, ComponentSyncEvent, ComponentSyncEventListener, ComponentSyncConfig, } from './sync';
29
+ export { lerp, lerpAngle, smoothDamp, SnapshotBuffer, createSnapshotBuffer, TransformInterpolator, HermiteTransformInterpolator, createTransformInterpolator, createHermiteTransformInterpolator, ClientPrediction, createClientPrediction, DeltaFlags, StateDeltaCompressor, createStateDeltaCompressor, ComponentSyncSystem, createComponentSyncSystem, } from './sync';
30
30
  export { IsLocalPlayerTemplate, IsServerTemplate, HasAuthorityTemplate, GetNetworkIdTemplate, GetLocalPlayerIdTemplate, IsLocalPlayerExecutor, IsServerExecutor, HasAuthorityExecutor, GetNetworkIdExecutor, GetLocalPlayerIdExecutor, NetworkNodeDefinitions, } from './nodes';
31
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AACnC,YAAY,EACR,WAAW,EACX,MAAM,EACN,MAAM,EACN,QAAQ,EACR,SAAS,EACT,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,QAAQ,GACX,MAAM,eAAe,CAAA;AAMtB,OAAO,EACH,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,GACzB,MAAM,YAAY,CAAA;AAMnB,OAAO,EACH,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,4BAA4B,EAC5B,qBAAqB,GACxB,MAAM,UAAU,CAAA;AAMjB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAM/C,OAAO,EACH,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,oBAAoB,GACvB,MAAM,2BAA2B,CAAA;AAClC,YAAY,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAMtE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAMhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAC/D,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AACjE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC/F,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAA;AAC3F,YAAY,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AACtE,OAAO,EACH,uBAAuB,EACvB,6BAA6B,GAChC,MAAM,mCAAmC,CAAA;AAC1C,YAAY,EACR,uBAAuB,EACvB,aAAa,EACb,kBAAkB,GACrB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACH,gBAAgB,EAChB,sBAAsB,GACzB,MAAM,4BAA4B,CAAA;AACnC,YAAY,EACR,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,uBAAuB,GAC1B,MAAM,4BAA4B,CAAA;AAMnC,YAAY,EACR,cAAc,EACd,eAAe,EACf,2BAA2B,EAC3B,qBAAqB,EACrB,eAAe,GAClB,MAAM,QAAQ,CAAA;AAEf,YAAY,EACR,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,UAAU,EACV,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,EACb,sBAAsB,GACzB,MAAM,QAAQ,CAAA;AAEf,OAAO,EACH,IAAI,EACJ,SAAS,EACT,UAAU,EACV,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,4BAA4B,EAC5B,2BAA2B,EAC3B,kCAAkC,EAClC,gBAAgB,EAChB,sBAAsB,EACtB,UAAU,EACV,oBAAoB,EACpB,0BAA0B,GAC7B,MAAM,QAAQ,CAAA;AAMf,OAAO,EACH,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,GACzB,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -230,7 +230,7 @@ function createNetworkService(protocol) {
230
230
  __name(createNetworkService, "createNetworkService");
231
231
 
232
232
  // src/systems/NetworkSyncSystem.ts
233
- import { EntitySystem, Matcher, Time } from "@esengine/ecs-framework";
233
+ import { EntitySystem as EntitySystem2, Matcher as Matcher2, Time } from "@esengine/ecs-framework";
234
234
 
235
235
  // src/components/NetworkIdentity.ts
236
236
  import { Component, ECSComponent, Serialize, Serializable, Property } from "@esengine/ecs-framework";
@@ -1036,17 +1036,288 @@ function createStateDeltaCompressor(config) {
1036
1036
  }
1037
1037
  __name(createStateDeltaCompressor, "createStateDeltaCompressor");
1038
1038
 
1039
- // src/systems/NetworkSyncSystem.ts
1039
+ // src/sync/ComponentSync.ts
1040
+ import {
1041
+ EntitySystem,
1042
+ Matcher,
1043
+ SyncOperation,
1044
+ CHANGE_TRACKER,
1045
+ encodeSnapshot,
1046
+ encodeSpawn,
1047
+ encodeDespawn,
1048
+ decodeSnapshot,
1049
+ decodeSpawn,
1050
+ processDespawn,
1051
+ GlobalComponentRegistry
1052
+ } from "@esengine/ecs-framework";
1040
1053
  var DEFAULT_CONFIG2 = {
1054
+ enableDeltaSync: true,
1055
+ syncInterval: 50
1056
+ };
1057
+ var _ComponentSyncSystem = class _ComponentSyncSystem extends EntitySystem {
1058
+ constructor(config, isServer = false) {
1059
+ super(Matcher.all(NetworkIdentity));
1060
+ __publicField(this, "_config");
1061
+ __publicField(this, "_syncEntityMap", /* @__PURE__ */ new Map());
1062
+ __publicField(this, "_syncListeners", /* @__PURE__ */ new Set());
1063
+ __publicField(this, "_lastSyncTime", 0);
1064
+ __publicField(this, "_isServer", false);
1065
+ this._config = {
1066
+ ...DEFAULT_CONFIG2,
1067
+ ...config
1068
+ };
1069
+ this._isServer = isServer;
1070
+ }
1071
+ /**
1072
+ * @zh 设置是否为服务端模式
1073
+ * @en Set whether in server mode
1074
+ */
1075
+ set isServer(value) {
1076
+ this._isServer = value;
1077
+ }
1078
+ /**
1079
+ * @zh 获取是否为服务端模式
1080
+ * @en Get whether in server mode
1081
+ */
1082
+ get isServer() {
1083
+ return this._isServer;
1084
+ }
1085
+ /**
1086
+ * @zh 获取配置
1087
+ * @en Get configuration
1088
+ */
1089
+ get config() {
1090
+ return this._config;
1091
+ }
1092
+ /**
1093
+ * @zh 添加同步事件监听器
1094
+ * @en Add sync event listener
1095
+ */
1096
+ addSyncListener(listener) {
1097
+ this._syncListeners.add(listener);
1098
+ }
1099
+ /**
1100
+ * @zh 移除同步事件监听器
1101
+ * @en Remove sync event listener
1102
+ */
1103
+ removeSyncListener(listener) {
1104
+ this._syncListeners.delete(listener);
1105
+ }
1106
+ /**
1107
+ * @zh 注册同步组件类型
1108
+ * @en Register sync component type
1109
+ *
1110
+ * @zh 客户端需要调用此方法注册所有需要同步的组件类型
1111
+ * @en Client needs to call this to register all component types to be synced
1112
+ */
1113
+ registerComponent(componentClass) {
1114
+ GlobalComponentRegistry.register(componentClass);
1115
+ }
1116
+ // =========================================================================
1117
+ // Server-side: Encoding | 服务端:编码
1118
+ // =========================================================================
1119
+ /**
1120
+ * @zh 编码所有实体状态
1121
+ * @en Encode all entities state
1122
+ *
1123
+ * @param fullSync - @zh 是否完整同步(首次连接时使用)@en Whether to do full sync (for initial connection)
1124
+ * @returns @zh 编码后的二进制数据 @en Encoded binary data
1125
+ */
1126
+ encodeAllEntities(fullSync = false) {
1127
+ const entities = this.getMatchingEntities();
1128
+ const operation = fullSync ? SyncOperation.FULL : SyncOperation.DELTA;
1129
+ const data = encodeSnapshot(entities, operation);
1130
+ if (!fullSync) {
1131
+ this._clearChangeTrackers(entities);
1132
+ }
1133
+ return data;
1134
+ }
1135
+ /**
1136
+ * @zh 编码有变更的实体
1137
+ * @en Encode entities with changes
1138
+ *
1139
+ * @returns @zh 编码后的二进制数据,如果没有变更返回 null @en Encoded binary data, or null if no changes
1140
+ */
1141
+ encodeDelta() {
1142
+ const entities = this.getMatchingEntities();
1143
+ const changedEntities = entities.filter((entity) => this._hasChanges(entity));
1144
+ if (changedEntities.length === 0) {
1145
+ return null;
1146
+ }
1147
+ const data = encodeSnapshot(changedEntities, SyncOperation.DELTA);
1148
+ this._clearChangeTrackers(changedEntities);
1149
+ return data;
1150
+ }
1151
+ /**
1152
+ * @zh 编码实体生成消息
1153
+ * @en Encode entity spawn message
1154
+ */
1155
+ encodeSpawn(entity, prefabType) {
1156
+ return encodeSpawn(entity, prefabType);
1157
+ }
1158
+ /**
1159
+ * @zh 编码实体销毁消息
1160
+ * @en Encode entity despawn message
1161
+ */
1162
+ encodeDespawn(entityId) {
1163
+ return encodeDespawn(entityId);
1164
+ }
1165
+ // =========================================================================
1166
+ // Client-side: Decoding | 客户端:解码
1167
+ // =========================================================================
1168
+ /**
1169
+ * @zh 应用状态快照
1170
+ * @en Apply state snapshot
1171
+ *
1172
+ * @param data - @zh 二进制数据 @en Binary data
1173
+ * @returns @zh 解码结果 @en Decode result
1174
+ */
1175
+ applySnapshot(data) {
1176
+ if (!this.scene) {
1177
+ throw new Error("ComponentSyncSystem not attached to a scene");
1178
+ }
1179
+ const result = decodeSnapshot(this.scene, data, this._syncEntityMap);
1180
+ for (const entityResult of result.entities) {
1181
+ if (entityResult.isNew) {
1182
+ this._emitEvent({
1183
+ type: "entitySpawned",
1184
+ entityId: entityResult.entityId
1185
+ });
1186
+ } else {
1187
+ this._emitEvent({
1188
+ type: "stateUpdated",
1189
+ entityId: entityResult.entityId
1190
+ });
1191
+ }
1192
+ }
1193
+ return result;
1194
+ }
1195
+ /**
1196
+ * @zh 应用实体生成消息
1197
+ * @en Apply entity spawn message
1198
+ *
1199
+ * @param data - @zh 二进制数据 @en Binary data
1200
+ * @returns @zh 解码结果,如果不是 SPAWN 消息返回 null @en Decode result, or null if not a SPAWN message
1201
+ */
1202
+ applySpawn(data) {
1203
+ if (!this.scene) {
1204
+ throw new Error("ComponentSyncSystem not attached to a scene");
1205
+ }
1206
+ const result = decodeSpawn(this.scene, data, this._syncEntityMap);
1207
+ if (result) {
1208
+ this._emitEvent({
1209
+ type: "entitySpawned",
1210
+ entityId: result.entity.id,
1211
+ prefabType: result.prefabType
1212
+ });
1213
+ }
1214
+ return result;
1215
+ }
1216
+ /**
1217
+ * @zh 应用实体销毁消息
1218
+ * @en Apply entity despawn message
1219
+ *
1220
+ * @param data - @zh 二进制数据 @en Binary data
1221
+ * @returns @zh 销毁的实体 ID 列表 @en List of despawned entity IDs
1222
+ */
1223
+ applyDespawn(data) {
1224
+ if (!this.scene) {
1225
+ throw new Error("ComponentSyncSystem not attached to a scene");
1226
+ }
1227
+ const entityIds = processDespawn(this.scene, data, this._syncEntityMap);
1228
+ for (const entityId of entityIds) {
1229
+ this._emitEvent({
1230
+ type: "entityDespawned",
1231
+ entityId
1232
+ });
1233
+ }
1234
+ return entityIds;
1235
+ }
1236
+ // =========================================================================
1237
+ // Entity Management | 实体管理
1238
+ // =========================================================================
1239
+ /**
1240
+ * @zh 通过网络 ID 获取实体
1241
+ * @en Get entity by network ID
1242
+ */
1243
+ getEntityById(entityId) {
1244
+ return this._syncEntityMap.get(entityId);
1245
+ }
1246
+ /**
1247
+ * @zh 获取所有匹配的实体
1248
+ * @en Get all matching entities
1249
+ */
1250
+ getMatchingEntities() {
1251
+ return this.entities.slice();
1252
+ }
1253
+ // =========================================================================
1254
+ // Internal | 内部方法
1255
+ // =========================================================================
1256
+ process(entities) {
1257
+ if (this._isServer && this._config.enableDeltaSync) {
1258
+ const now = Date.now();
1259
+ if (now - this._lastSyncTime >= this._config.syncInterval) {
1260
+ this._lastSyncTime = now;
1261
+ }
1262
+ }
1263
+ for (const entity of entities) {
1264
+ const identity = entity.getComponent(NetworkIdentity);
1265
+ if (identity) {
1266
+ this._syncEntityMap.set(entity.id, entity);
1267
+ }
1268
+ }
1269
+ }
1270
+ _hasChanges(entity) {
1271
+ for (const component of entity.components) {
1272
+ const tracker = component[CHANGE_TRACKER];
1273
+ if (tracker?.hasChanges()) {
1274
+ return true;
1275
+ }
1276
+ }
1277
+ return false;
1278
+ }
1279
+ _clearChangeTrackers(entities) {
1280
+ for (const entity of entities) {
1281
+ for (const component of entity.components) {
1282
+ const tracker = component[CHANGE_TRACKER];
1283
+ if (tracker) {
1284
+ tracker.clear();
1285
+ }
1286
+ }
1287
+ }
1288
+ }
1289
+ _emitEvent(event) {
1290
+ for (const listener of this._syncListeners) {
1291
+ try {
1292
+ listener(event);
1293
+ } catch (error) {
1294
+ console.error("ComponentSyncSystem: event listener error:", error);
1295
+ }
1296
+ }
1297
+ }
1298
+ onDestroy() {
1299
+ this._syncEntityMap.clear();
1300
+ this._syncListeners.clear();
1301
+ }
1302
+ };
1303
+ __name(_ComponentSyncSystem, "ComponentSyncSystem");
1304
+ var ComponentSyncSystem = _ComponentSyncSystem;
1305
+ function createComponentSyncSystem(config, isServer = false) {
1306
+ return new ComponentSyncSystem(config, isServer);
1307
+ }
1308
+ __name(createComponentSyncSystem, "createComponentSyncSystem");
1309
+
1310
+ // src/systems/NetworkSyncSystem.ts
1311
+ var DEFAULT_CONFIG3 = {
1041
1312
  bufferSize: 30,
1042
1313
  interpolationDelay: 100,
1043
1314
  enableExtrapolation: true,
1044
1315
  maxExtrapolationTime: 200,
1045
1316
  useHermiteInterpolation: false
1046
1317
  };
1047
- var _NetworkSyncSystem = class _NetworkSyncSystem extends EntitySystem {
1318
+ var _NetworkSyncSystem = class _NetworkSyncSystem extends EntitySystem2 {
1048
1319
  constructor(config) {
1049
- super(Matcher.all(NetworkIdentity, NetworkTransform));
1320
+ super(Matcher2.all(NetworkIdentity, NetworkTransform));
1050
1321
  __publicField(this, "_netIdToEntity", /* @__PURE__ */ new Map());
1051
1322
  __publicField(this, "_entitySnapshots", /* @__PURE__ */ new Map());
1052
1323
  __publicField(this, "_interpolator");
@@ -1055,7 +1326,7 @@ var _NetworkSyncSystem = class _NetworkSyncSystem extends EntitySystem {
1055
1326
  __publicField(this, "_lastSyncTime", 0);
1056
1327
  __publicField(this, "_renderTime", 0);
1057
1328
  this._config = {
1058
- ...DEFAULT_CONFIG2,
1329
+ ...DEFAULT_CONFIG3,
1059
1330
  ...config
1060
1331
  };
1061
1332
  this._interpolator = createTransformInterpolator();
@@ -1242,10 +1513,10 @@ __name(_NetworkSyncSystem, "NetworkSyncSystem");
1242
1513
  var NetworkSyncSystem = _NetworkSyncSystem;
1243
1514
 
1244
1515
  // src/systems/NetworkSpawnSystem.ts
1245
- import { EntitySystem as EntitySystem2, Matcher as Matcher2 } from "@esengine/ecs-framework";
1246
- var _NetworkSpawnSystem = class _NetworkSpawnSystem extends EntitySystem2 {
1516
+ import { EntitySystem as EntitySystem3, Matcher as Matcher3 } from "@esengine/ecs-framework";
1517
+ var _NetworkSpawnSystem = class _NetworkSpawnSystem extends EntitySystem3 {
1247
1518
  constructor(syncSystem) {
1248
- super(Matcher2.nothing());
1519
+ super(Matcher3.nothing());
1249
1520
  __publicField(this, "_syncSystem");
1250
1521
  __publicField(this, "_prefabFactories", /* @__PURE__ */ new Map());
1251
1522
  __publicField(this, "_localPlayerId", 0);
@@ -1317,15 +1588,15 @@ __name(_NetworkSpawnSystem, "NetworkSpawnSystem");
1317
1588
  var NetworkSpawnSystem = _NetworkSpawnSystem;
1318
1589
 
1319
1590
  // src/systems/NetworkInputSystem.ts
1320
- import { EntitySystem as EntitySystem3, Matcher as Matcher3 } from "@esengine/ecs-framework";
1321
- var DEFAULT_CONFIG3 = {
1591
+ import { EntitySystem as EntitySystem4, Matcher as Matcher4 } from "@esengine/ecs-framework";
1592
+ var DEFAULT_CONFIG4 = {
1322
1593
  sendInterval: 16,
1323
1594
  mergeIdenticalInputs: true,
1324
1595
  maxQueueLength: 10
1325
1596
  };
1326
- var _NetworkInputSystem = class _NetworkInputSystem extends EntitySystem3 {
1597
+ var _NetworkInputSystem = class _NetworkInputSystem extends EntitySystem4 {
1327
1598
  constructor(networkService, config) {
1328
- super(Matcher3.nothing());
1599
+ super(Matcher4.nothing());
1329
1600
  __publicField(this, "_networkService");
1330
1601
  __publicField(this, "_config");
1331
1602
  __publicField(this, "_predictionSystem", null);
@@ -1339,7 +1610,7 @@ var _NetworkInputSystem = class _NetworkInputSystem extends EntitySystem3 {
1339
1610
  });
1340
1611
  this._networkService = networkService;
1341
1612
  this._config = {
1342
- ...DEFAULT_CONFIG3,
1613
+ ...DEFAULT_CONFIG4,
1343
1614
  ...config
1344
1615
  };
1345
1616
  }
@@ -1509,8 +1780,8 @@ function createNetworkInputSystem(networkService, config) {
1509
1780
  __name(createNetworkInputSystem, "createNetworkInputSystem");
1510
1781
 
1511
1782
  // src/systems/NetworkPredictionSystem.ts
1512
- import { EntitySystem as EntitySystem4, Matcher as Matcher4, Time as Time2 } from "@esengine/ecs-framework";
1513
- var DEFAULT_CONFIG4 = {
1783
+ import { EntitySystem as EntitySystem5, Matcher as Matcher5, Time as Time2 } from "@esengine/ecs-framework";
1784
+ var DEFAULT_CONFIG5 = {
1514
1785
  moveSpeed: 200,
1515
1786
  enabled: true,
1516
1787
  maxUnacknowledgedInputs: 60,
@@ -1535,9 +1806,9 @@ var SimpleMovementPredictor = (_a = class {
1535
1806
  };
1536
1807
  }
1537
1808
  }, __name(_a, "SimpleMovementPredictor"), _a);
1538
- var _NetworkPredictionSystem = class _NetworkPredictionSystem extends EntitySystem4 {
1809
+ var _NetworkPredictionSystem = class _NetworkPredictionSystem extends EntitySystem5 {
1539
1810
  constructor(config) {
1540
- super(Matcher4.all(NetworkIdentity, NetworkTransform));
1811
+ super(Matcher5.all(NetworkIdentity, NetworkTransform));
1541
1812
  __publicField(this, "_config");
1542
1813
  __publicField(this, "_predictor");
1543
1814
  __publicField(this, "_prediction", null);
@@ -1548,7 +1819,7 @@ var _NetworkPredictionSystem = class _NetworkPredictionSystem extends EntitySyst
1548
1819
  });
1549
1820
  __publicField(this, "_inputSequence", 0);
1550
1821
  this._config = {
1551
- ...DEFAULT_CONFIG4,
1822
+ ...DEFAULT_CONFIG5,
1552
1823
  ...config
1553
1824
  };
1554
1825
  this._predictor = new SimpleMovementPredictor(this._config.moveSpeed);
@@ -1704,15 +1975,15 @@ function createNetworkPredictionSystem(config) {
1704
1975
  __name(createNetworkPredictionSystem, "createNetworkPredictionSystem");
1705
1976
 
1706
1977
  // src/systems/NetworkAOISystem.ts
1707
- import { EntitySystem as EntitySystem5, Matcher as Matcher5 } from "@esengine/ecs-framework";
1708
- var DEFAULT_CONFIG5 = {
1978
+ import { EntitySystem as EntitySystem6, Matcher as Matcher6 } from "@esengine/ecs-framework";
1979
+ var DEFAULT_CONFIG6 = {
1709
1980
  cellSize: 100,
1710
1981
  defaultViewRange: 500,
1711
1982
  enabled: true
1712
1983
  };
1713
- var _NetworkAOISystem = class _NetworkAOISystem extends EntitySystem5 {
1984
+ var _NetworkAOISystem = class _NetworkAOISystem extends EntitySystem6 {
1714
1985
  constructor(config) {
1715
- super(Matcher5.all(NetworkIdentity, NetworkTransform));
1986
+ super(Matcher6.all(NetworkIdentity, NetworkTransform));
1716
1987
  __publicField(this, "_config");
1717
1988
  __publicField(this, "_observers", /* @__PURE__ */ new Map());
1718
1989
  __publicField(this, "_cells", /* @__PURE__ */ new Map());
@@ -1720,7 +1991,7 @@ var _NetworkAOISystem = class _NetworkAOISystem extends EntitySystem5 {
1720
1991
  __publicField(this, "_entityNetIdMap", /* @__PURE__ */ new Map());
1721
1992
  __publicField(this, "_netIdEntityMap", /* @__PURE__ */ new Map());
1722
1993
  this._config = {
1723
- ...DEFAULT_CONFIG5,
1994
+ ...DEFAULT_CONFIG6,
1724
1995
  ...config
1725
1996
  };
1726
1997
  }
@@ -2032,7 +2303,7 @@ function createNetworkAOISystem(config) {
2032
2303
  __name(createNetworkAOISystem, "createNetworkAOISystem");
2033
2304
 
2034
2305
  // src/NetworkPlugin.ts
2035
- var DEFAULT_CONFIG6 = {
2306
+ var DEFAULT_CONFIG7 = {
2036
2307
  enablePrediction: true,
2037
2308
  enableAutoReconnect: true,
2038
2309
  maxReconnectAttempts: 5,
@@ -2055,7 +2326,7 @@ var _NetworkPlugin = class _NetworkPlugin {
2055
2326
  __publicField(this, "_reconnectTimer", null);
2056
2327
  __publicField(this, "_lastConnectOptions", null);
2057
2328
  this._config = {
2058
- ...DEFAULT_CONFIG6,
2329
+ ...DEFAULT_CONFIG7,
2059
2330
  ...config
2060
2331
  };
2061
2332
  }
@@ -2684,6 +2955,7 @@ var NetworkNodeDefinitions = {
2684
2955
  };
2685
2956
  export {
2686
2957
  ClientPrediction,
2958
+ ComponentSyncSystem,
2687
2959
  DeltaFlags,
2688
2960
  GameNetworkService,
2689
2961
  GetLocalPlayerIdExecutor,
@@ -2719,6 +2991,7 @@ export {
2719
2991
  StateDeltaCompressor,
2720
2992
  TransformInterpolator,
2721
2993
  createClientPrediction,
2994
+ createComponentSyncSystem,
2722
2995
  createHermiteTransformInterpolator,
2723
2996
  createNetworkAOISystem,
2724
2997
  createNetworkInputSystem,