@esengine/network 2.1.1 → 3.0.0

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.
@@ -10,11 +10,21 @@
10
10
  * @en Player input
11
11
  */
12
12
  export interface PlayerInput {
13
+ /**
14
+ * @zh 输入序列号(用于客户端预测)
15
+ * @en Input sequence number (for client prediction)
16
+ */
17
+ seq: number;
13
18
  /**
14
19
  * @zh 帧序号
15
20
  * @en Frame number
16
21
  */
17
22
  frame: number;
23
+ /**
24
+ * @zh 客户端时间戳
25
+ * @en Client timestamp
26
+ */
27
+ timestamp: number;
18
28
  /**
19
29
  * @zh 移动方向
20
30
  * @en Move direction
@@ -34,12 +44,42 @@ export interface PlayerInput {
34
44
  * @en Entity sync state
35
45
  */
36
46
  export interface EntitySyncState {
47
+ /**
48
+ * @zh 网络实体 ID
49
+ * @en Network entity ID
50
+ */
37
51
  netId: number;
52
+ /**
53
+ * @zh 位置
54
+ * @en Position
55
+ */
38
56
  pos?: {
39
57
  x: number;
40
58
  y: number;
41
59
  };
60
+ /**
61
+ * @zh 旋转角度
62
+ * @en Rotation angle
63
+ */
42
64
  rot?: number;
65
+ /**
66
+ * @zh 速度(用于外推)
67
+ * @en Velocity (for extrapolation)
68
+ */
69
+ vel?: {
70
+ x: number;
71
+ y: number;
72
+ };
73
+ /**
74
+ * @zh 角速度
75
+ * @en Angular velocity
76
+ */
77
+ angVel?: number;
78
+ /**
79
+ * @zh 自定义数据
80
+ * @en Custom data
81
+ */
82
+ custom?: Record<string, unknown>;
43
83
  }
44
84
  /**
45
85
  * @zh 同步消息
@@ -51,6 +91,16 @@ export interface SyncData {
51
91
  * @en Server frame number
52
92
  */
53
93
  frame: number;
94
+ /**
95
+ * @zh 服务器时间戳(用于插值)
96
+ * @en Server timestamp (for interpolation)
97
+ */
98
+ timestamp: number;
99
+ /**
100
+ * @zh 已确认的输入序列号(用于客户端预测校正)
101
+ * @en Acknowledged input sequence (for client prediction reconciliation)
102
+ */
103
+ ackSeq?: number;
54
104
  /**
55
105
  * @zh 实体状态列表
56
106
  * @en Entity state list
@@ -78,6 +128,29 @@ export interface SpawnData {
78
128
  export interface DespawnData {
79
129
  netId: number;
80
130
  }
131
+ /**
132
+ * @zh 完整状态快照(用于重连)
133
+ * @en Full state snapshot (for reconnection)
134
+ */
135
+ export interface FullStateData {
136
+ /**
137
+ * @zh 服务器帧号
138
+ * @en Server frame number
139
+ */
140
+ frame: number;
141
+ /**
142
+ * @zh 服务器时间戳
143
+ * @en Server timestamp
144
+ */
145
+ timestamp: number;
146
+ /**
147
+ * @zh 所有实体状态
148
+ * @en All entity states
149
+ */
150
+ entities: Array<SpawnData & {
151
+ state?: EntitySyncState;
152
+ }>;
153
+ }
81
154
  /**
82
155
  * @zh 加入房间请求
83
156
  * @en Join room request
@@ -94,6 +167,48 @@ export interface JoinResponse {
94
167
  playerId: number;
95
168
  roomId: string;
96
169
  }
170
+ /**
171
+ * @zh 重连请求
172
+ * @en Reconnect request
173
+ */
174
+ export interface ReconnectRequest {
175
+ /**
176
+ * @zh 之前的玩家 ID
177
+ * @en Previous player ID
178
+ */
179
+ playerId: number;
180
+ /**
181
+ * @zh 房间 ID
182
+ * @en Room ID
183
+ */
184
+ roomId: string;
185
+ /**
186
+ * @zh 重连令牌
187
+ * @en Reconnection token
188
+ */
189
+ token: string;
190
+ }
191
+ /**
192
+ * @zh 重连响应
193
+ * @en Reconnect response
194
+ */
195
+ export interface ReconnectResponse {
196
+ /**
197
+ * @zh 是否成功
198
+ * @en Whether successful
199
+ */
200
+ success: boolean;
201
+ /**
202
+ * @zh 完整状态(成功时)
203
+ * @en Full state (when successful)
204
+ */
205
+ state?: FullStateData;
206
+ /**
207
+ * @zh 错误信息(失败时)
208
+ * @en Error message (when failed)
209
+ */
210
+ error?: string;
211
+ }
97
212
  /**
98
213
  * @zh 默认游戏网络协议
99
214
  * @en Default game network protocol
@@ -128,6 +243,11 @@ export declare const gameProtocol: {
128
243
  * @en Leave room
129
244
  */
130
245
  leave: import("@esengine/rpc").ApiDef<void, void>;
246
+ /**
247
+ * @zh 重连
248
+ * @en Reconnect
249
+ */
250
+ reconnect: import("@esengine/rpc").ApiDef<ReconnectRequest, ReconnectResponse>;
131
251
  };
132
252
  msg: {
133
253
  /**
@@ -150,6 +270,11 @@ export declare const gameProtocol: {
150
270
  * @en Entity despawn
151
271
  */
152
272
  despawn: import("@esengine/rpc").MsgDef<DespawnData>;
273
+ /**
274
+ * @zh 完整状态快照
275
+ * @en Full state snapshot
276
+ */
277
+ fullState: import("@esengine/rpc").MsgDef<FullStateData>;
153
278
  };
154
279
  };
155
280
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH;;;GAGG;AACH,MAAM,WAAW,WAAW;IACxB;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;;OAGG;IACH,OAAO,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAElC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACrB;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;;OAGG;IACH,QAAQ,EAAE,eAAe,EAAE,CAAA;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,MAAM,CAAA;CAChB;AAMD;;;GAGG;AACH,MAAM,WAAW,WAAW;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;CACjB;AAMD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,YAAY;;QAEjB;;;WAGG;;QAGH;;;WAGG;;;;QAIH;;;WAGG;;QAGH;;;WAGG;;QAGH;;;WAGG;;QAGH;;;WAGG;;;CAGT,CAAA;AAEF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAA"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,173 @@
1
+ /**
2
+ * @zh 组件同步系统
3
+ * @en Component Sync System
4
+ *
5
+ * @zh 基于 @sync 装饰器的组件状态同步,与 ecs-framework 的 Sync 模块集成
6
+ * @en Component state synchronization based on @sync decorator, integrated with ecs-framework Sync module
7
+ */
8
+ import { EntitySystem, type Entity, type DecodeSnapshotResult, type DecodeSpawnResult } from '@esengine/ecs-framework';
9
+ /**
10
+ * @zh 组件同步事件类型
11
+ * @en Component sync event type
12
+ */
13
+ export type ComponentSyncEventType = 'entitySpawned' | 'entityDespawned' | 'stateUpdated';
14
+ /**
15
+ * @zh 组件同步事件
16
+ * @en Component sync event
17
+ */
18
+ export interface ComponentSyncEvent {
19
+ type: ComponentSyncEventType;
20
+ entityId: number;
21
+ prefabType?: string;
22
+ }
23
+ /**
24
+ * @zh 组件同步事件监听器
25
+ * @en Component sync event listener
26
+ */
27
+ export type ComponentSyncEventListener = (event: ComponentSyncEvent) => void;
28
+ /**
29
+ * @zh 组件同步配置
30
+ * @en Component sync configuration
31
+ */
32
+ export interface ComponentSyncConfig {
33
+ /**
34
+ * @zh 是否启用增量同步
35
+ * @en Whether to enable delta sync
36
+ */
37
+ enableDeltaSync: boolean;
38
+ /**
39
+ * @zh 同步间隔(毫秒)
40
+ * @en Sync interval in milliseconds
41
+ */
42
+ syncInterval: number;
43
+ }
44
+ /**
45
+ * @zh 组件同步系统
46
+ * @en Component sync system
47
+ *
48
+ * @zh 基于 @sync 装饰器自动同步组件状态
49
+ * @en Automatically syncs component state based on @sync decorator
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * // Server-side: broadcast state
54
+ * const syncSystem = scene.getSystem(ComponentSyncSystem);
55
+ * const data = syncSystem.encodeAllEntities(false); // delta
56
+ * broadcast(data);
57
+ *
58
+ * // Client-side: receive state
59
+ * const syncSystem = scene.getSystem(ComponentSyncSystem);
60
+ * syncSystem.applySnapshot(data);
61
+ * ```
62
+ */
63
+ export declare class ComponentSyncSystem extends EntitySystem {
64
+ private readonly _config;
65
+ private readonly _syncEntityMap;
66
+ private readonly _syncListeners;
67
+ private _lastSyncTime;
68
+ private _isServer;
69
+ constructor(config?: Partial<ComponentSyncConfig>, isServer?: boolean);
70
+ /**
71
+ * @zh 设置是否为服务端模式
72
+ * @en Set whether in server mode
73
+ */
74
+ set isServer(value: boolean);
75
+ /**
76
+ * @zh 获取是否为服务端模式
77
+ * @en Get whether in server mode
78
+ */
79
+ get isServer(): boolean;
80
+ /**
81
+ * @zh 获取配置
82
+ * @en Get configuration
83
+ */
84
+ get config(): Readonly<ComponentSyncConfig>;
85
+ /**
86
+ * @zh 添加同步事件监听器
87
+ * @en Add sync event listener
88
+ */
89
+ addSyncListener(listener: ComponentSyncEventListener): void;
90
+ /**
91
+ * @zh 移除同步事件监听器
92
+ * @en Remove sync event listener
93
+ */
94
+ removeSyncListener(listener: ComponentSyncEventListener): void;
95
+ /**
96
+ * @zh 注册同步组件类型
97
+ * @en Register sync component type
98
+ *
99
+ * @zh 客户端需要调用此方法注册所有需要同步的组件类型
100
+ * @en Client needs to call this to register all component types to be synced
101
+ */
102
+ registerComponent<T extends new () => any>(componentClass: T): void;
103
+ /**
104
+ * @zh 编码所有实体状态
105
+ * @en Encode all entities state
106
+ *
107
+ * @param fullSync - @zh 是否完整同步(首次连接时使用)@en Whether to do full sync (for initial connection)
108
+ * @returns @zh 编码后的二进制数据 @en Encoded binary data
109
+ */
110
+ encodeAllEntities(fullSync?: boolean): Uint8Array;
111
+ /**
112
+ * @zh 编码有变更的实体
113
+ * @en Encode entities with changes
114
+ *
115
+ * @returns @zh 编码后的二进制数据,如果没有变更返回 null @en Encoded binary data, or null if no changes
116
+ */
117
+ encodeDelta(): Uint8Array | null;
118
+ /**
119
+ * @zh 编码实体生成消息
120
+ * @en Encode entity spawn message
121
+ */
122
+ encodeSpawn(entity: Entity, prefabType?: string): Uint8Array;
123
+ /**
124
+ * @zh 编码实体销毁消息
125
+ * @en Encode entity despawn message
126
+ */
127
+ encodeDespawn(entityId: number): Uint8Array;
128
+ /**
129
+ * @zh 应用状态快照
130
+ * @en Apply state snapshot
131
+ *
132
+ * @param data - @zh 二进制数据 @en Binary data
133
+ * @returns @zh 解码结果 @en Decode result
134
+ */
135
+ applySnapshot(data: Uint8Array): DecodeSnapshotResult;
136
+ /**
137
+ * @zh 应用实体生成消息
138
+ * @en Apply entity spawn message
139
+ *
140
+ * @param data - @zh 二进制数据 @en Binary data
141
+ * @returns @zh 解码结果,如果不是 SPAWN 消息返回 null @en Decode result, or null if not a SPAWN message
142
+ */
143
+ applySpawn(data: Uint8Array): DecodeSpawnResult | null;
144
+ /**
145
+ * @zh 应用实体销毁消息
146
+ * @en Apply entity despawn message
147
+ *
148
+ * @param data - @zh 二进制数据 @en Binary data
149
+ * @returns @zh 销毁的实体 ID 列表 @en List of despawned entity IDs
150
+ */
151
+ applyDespawn(data: Uint8Array): number[];
152
+ /**
153
+ * @zh 通过网络 ID 获取实体
154
+ * @en Get entity by network ID
155
+ */
156
+ getEntityById(entityId: number): Entity | undefined;
157
+ /**
158
+ * @zh 获取所有匹配的实体
159
+ * @en Get all matching entities
160
+ */
161
+ getMatchingEntities(): Entity[];
162
+ protected process(entities: readonly Entity[]): void;
163
+ private _hasChanges;
164
+ private _clearChangeTrackers;
165
+ private _emitEvent;
166
+ protected onDestroy(): void;
167
+ }
168
+ /**
169
+ * @zh 创建组件同步系统
170
+ * @en Create component sync system
171
+ */
172
+ export declare function createComponentSyncSystem(config?: Partial<ComponentSyncConfig>, isServer?: boolean): ComponentSyncSystem;
173
+ //# sourceMappingURL=ComponentSync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComponentSync.d.ts","sourceRoot":"","sources":["../../src/sync/ComponentSync.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACH,YAAY,EAEZ,KAAK,MAAM,EAeX,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACzB,MAAM,yBAAyB,CAAC;AAQjC;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAC5B,eAAe,GACf,iBAAiB,GACjB,cAAc,CAAC;AAErB;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,sBAAsB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAE7E;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAChC;;;OAGG;IACH,eAAe,EAAE,OAAO,CAAC;IAEzB;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;CACxB;AAWD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkC;IACjE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8C;IAC7E,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,SAAS,CAAkB;gBAEvB,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,EAAE,QAAQ,GAAE,OAAe;IAM5E;;;OAGG;IACH,IAAW,QAAQ,CAAC,KAAK,EAAE,OAAO,EAEjC;IAED;;;OAGG;IACH,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED;;;OAGG;IACH,IAAW,MAAM,IAAI,QAAQ,CAAC,mBAAmB,CAAC,CAEjD;IAED;;;OAGG;IACI,eAAe,CAAC,QAAQ,EAAE,0BAA0B,GAAG,IAAI;IAIlE;;;OAGG;IACI,kBAAkB,CAAC,QAAQ,EAAE,0BAA0B,GAAG,IAAI;IAIrE;;;;;;OAMG;IACI,iBAAiB,CAAC,CAAC,SAAS,UAAU,GAAG,EAAE,cAAc,EAAE,CAAC,GAAG,IAAI;IAW1E;;;;;;OAMG;IACI,iBAAiB,CAAC,QAAQ,GAAE,OAAe,GAAG,UAAU;IAc/D;;;;;OAKG;IACI,WAAW,IAAI,UAAU,GAAG,IAAI;IAcvC;;;OAGG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU;IAInE;;;OAGG;IACI,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IAQlD;;;;;;OAMG;IACI,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,oBAAoB;IAyB5D;;;;;;OAMG;IACI,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,GAAG,IAAI;IAkB7D;;;;;;OAMG;IACI,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE;IAqB/C;;;OAGG;IACI,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI1D;;;OAGG;IACI,mBAAmB,IAAI,MAAM,EAAE;cAQnB,OAAO,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAoB7D,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,UAAU;cAUC,SAAS,IAAI,IAAI;CAIvC;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACrC,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,EACrC,QAAQ,GAAE,OAAe,GAC1B,mBAAmB,CAErB"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * @zh 状态增量压缩
3
+ * @en State Delta Compression
4
+ *
5
+ * @zh 通过只发送变化的字段来减少网络带宽
6
+ * @en Reduces network bandwidth by only sending changed fields
7
+ */
8
+ import type { SyncData } from '../protocol';
9
+ /**
10
+ * @zh 增量类型标志
11
+ * @en Delta type flags
12
+ */
13
+ export declare const DeltaFlags: {
14
+ readonly NONE: 0;
15
+ readonly POSITION: number;
16
+ readonly ROTATION: number;
17
+ readonly VELOCITY: number;
18
+ readonly ANGULAR_VELOCITY: number;
19
+ readonly CUSTOM: number;
20
+ };
21
+ /**
22
+ * @zh 增量状态(只包含变化的字段)
23
+ * @en Delta state (only contains changed fields)
24
+ */
25
+ export interface EntityDeltaState {
26
+ /**
27
+ * @zh 网络标识
28
+ * @en Network identity
29
+ */
30
+ netId: number;
31
+ /**
32
+ * @zh 变化标志
33
+ * @en Change flags
34
+ */
35
+ flags: number;
36
+ /**
37
+ * @zh 位置(如果变化)
38
+ * @en Position (if changed)
39
+ */
40
+ pos?: {
41
+ x: number;
42
+ y: number;
43
+ };
44
+ /**
45
+ * @zh 旋转(如果变化)
46
+ * @en Rotation (if changed)
47
+ */
48
+ rot?: number;
49
+ /**
50
+ * @zh 速度(如果变化)
51
+ * @en Velocity (if changed)
52
+ */
53
+ vel?: {
54
+ x: number;
55
+ y: number;
56
+ };
57
+ /**
58
+ * @zh 角速度(如果变化)
59
+ * @en Angular velocity (if changed)
60
+ */
61
+ angVel?: number;
62
+ /**
63
+ * @zh 自定义数据(如果变化)
64
+ * @en Custom data (if changed)
65
+ */
66
+ custom?: Record<string, unknown>;
67
+ }
68
+ /**
69
+ * @zh 增量同步数据
70
+ * @en Delta sync data
71
+ */
72
+ export interface DeltaSyncData {
73
+ /**
74
+ * @zh 帧号
75
+ * @en Frame number
76
+ */
77
+ frame: number;
78
+ /**
79
+ * @zh 时间戳
80
+ * @en Timestamp
81
+ */
82
+ timestamp: number;
83
+ /**
84
+ * @zh 已确认的输入序列号
85
+ * @en Acknowledged input sequence
86
+ */
87
+ ackSeq?: number;
88
+ /**
89
+ * @zh 增量实体状态
90
+ * @en Delta entity states
91
+ */
92
+ entities: EntityDeltaState[];
93
+ /**
94
+ * @zh 是否为完整快照
95
+ * @en Whether this is a full snapshot
96
+ */
97
+ isFullSnapshot?: boolean;
98
+ }
99
+ /**
100
+ * @zh 增量压缩配置
101
+ * @en Delta compression configuration
102
+ */
103
+ export interface DeltaCompressionConfig {
104
+ /**
105
+ * @zh 位置变化阈值
106
+ * @en Position change threshold
107
+ */
108
+ positionThreshold: number;
109
+ /**
110
+ * @zh 旋转变化阈值(弧度)
111
+ * @en Rotation change threshold (radians)
112
+ */
113
+ rotationThreshold: number;
114
+ /**
115
+ * @zh 速度变化阈值
116
+ * @en Velocity change threshold
117
+ */
118
+ velocityThreshold: number;
119
+ /**
120
+ * @zh 强制完整快照间隔(帧数)
121
+ * @en Forced full snapshot interval (frames)
122
+ */
123
+ fullSnapshotInterval: number;
124
+ }
125
+ /**
126
+ * @zh 状态增量压缩器
127
+ * @en State delta compressor
128
+ *
129
+ * @zh 追踪实体状态变化,生成增量更新
130
+ * @en Tracks entity state changes and generates delta updates
131
+ */
132
+ export declare class StateDeltaCompressor {
133
+ private readonly _config;
134
+ private readonly _lastStates;
135
+ private _frameCounter;
136
+ constructor(config?: Partial<DeltaCompressionConfig>);
137
+ /**
138
+ * @zh 获取配置
139
+ * @en Get configuration
140
+ */
141
+ get config(): Readonly<DeltaCompressionConfig>;
142
+ /**
143
+ * @zh 压缩同步数据为增量格式
144
+ * @en Compress sync data to delta format
145
+ */
146
+ compress(data: SyncData): DeltaSyncData;
147
+ /**
148
+ * @zh 解压增量数据为完整同步数据
149
+ * @en Decompress delta data to full sync data
150
+ */
151
+ decompress(data: DeltaSyncData): SyncData;
152
+ /**
153
+ * @zh 移除实体状态
154
+ * @en Remove entity state
155
+ */
156
+ removeEntity(netId: number): void;
157
+ /**
158
+ * @zh 清除所有状态
159
+ * @en Clear all states
160
+ */
161
+ clear(): void;
162
+ /**
163
+ * @zh 强制下一次发送完整快照
164
+ * @en Force next send to be a full snapshot
165
+ */
166
+ forceFullSnapshot(): void;
167
+ private _createFullDelta;
168
+ private _calculateDelta;
169
+ private _applyDelta;
170
+ private _customDataEqual;
171
+ }
172
+ /**
173
+ * @zh 创建状态增量压缩器
174
+ * @en Create state delta compressor
175
+ */
176
+ export declare function createStateDeltaCompressor(config?: Partial<DeltaCompressionConfig>): StateDeltaCompressor;
177
+ //# sourceMappingURL=StateDelta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StateDelta.d.ts","sourceRoot":"","sources":["../../src/sync/StateDelta.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAmB,QAAQ,EAAE,MAAM,aAAa,CAAA;AAM5D;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;;CAOb,CAAA;AAEV;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC7B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;;OAGG;IACH,GAAG,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAE9B;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IAEZ;;;OAGG;IACH,GAAG,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAE9B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC1B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;IAEb;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;;OAGG;IACH,QAAQ,EAAE,gBAAgB,EAAE,CAAA;IAE5B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACnC;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAA;IAEzB;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAA;IAEzB;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAA;IAEzB;;;OAGG;IACH,oBAAoB,EAAE,MAAM,CAAA;CAC/B;AAaD;;;;;;GAMG;AACH,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0C;IACtE,OAAO,CAAC,aAAa,CAAY;gBAErB,MAAM,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC;IAIpD;;;OAGG;IACH,IAAI,MAAM,IAAI,QAAQ,CAAC,sBAAsB,CAAC,CAE7C;IAED;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,aAAa;IAiCvC;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,QAAQ;IAoBzC;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC;;;OAGG;IACH,KAAK,IAAI,IAAI;IAKb;;;OAGG;IACH,iBAAiB,IAAI,IAAI;IAQzB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,eAAe;IA2EvB,OAAO,CAAC,WAAW;IA8CnB,OAAO,CAAC,gBAAgB;CAkB3B;AAMD;;;GAGG;AACH,wBAAgB,0BAA0B,CACtC,MAAM,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GACzC,oBAAoB,CAEtB"}
@@ -12,4 +12,8 @@ export { lerp, lerpAngle, smoothDamp } from './IInterpolator';
12
12
  export { TransformInterpolator, HermiteTransformInterpolator, createTransformInterpolator, createHermiteTransformInterpolator } from './TransformInterpolator';
13
13
  export type { IInputSnapshot, IPredictedState, IPredictor, ClientPredictionConfig } from './ClientPrediction';
14
14
  export { ClientPrediction, createClientPrediction } from './ClientPrediction';
15
+ export type { EntityDeltaState, DeltaSyncData, DeltaCompressionConfig } from './StateDelta';
16
+ export { DeltaFlags, StateDeltaCompressor, createStateDeltaCompressor } from './StateDelta';
17
+ export type { ComponentSyncEventType, ComponentSyncEvent, ComponentSyncEventListener, ComponentSyncConfig } from './ComponentSync';
18
+ export { ComponentSyncSystem, createComponentSyncSystem } from './ComponentSync';
15
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,YAAY,EACR,cAAc,EACd,eAAe,EACf,2BAA2B,EAC3B,qBAAqB,EACrB,eAAe,EAClB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAMxE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EACH,qBAAqB,EACrB,4BAA4B,EAC5B,2BAA2B,EAC3B,kCAAkC,EACrC,MAAM,yBAAyB,CAAC;AAMjC,YAAY,EACR,cAAc,EACd,eAAe,EACf,UAAU,EACV,sBAAsB,EACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,YAAY,EACR,cAAc,EACd,eAAe,EACf,2BAA2B,EAC3B,qBAAqB,EACrB,eAAe,EAClB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAMxE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EACH,qBAAqB,EACrB,4BAA4B,EAC5B,2BAA2B,EAC3B,kCAAkC,EACrC,MAAM,yBAAyB,CAAC;AAMjC,YAAY,EACR,cAAc,EACd,eAAe,EACf,UAAU,EACV,sBAAsB,EACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAM9E,YAAY,EACR,gBAAgB,EAChB,aAAa,EACb,sBAAsB,EACzB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACH,UAAU,EACV,oBAAoB,EACpB,0BAA0B,EAC7B,MAAM,cAAc,CAAC;AAMtB,YAAY,EACR,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,mBAAmB,EACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACH,mBAAmB,EACnB,yBAAyB,EAC5B,MAAM,iBAAiB,CAAC"}