@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.
- package/dist/NetworkPlugin.d.ts +150 -8
- package/dist/NetworkPlugin.d.ts.map +1 -1
- package/dist/index.d.ts +11 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2055 -508
- package/dist/index.js.map +1 -1
- package/dist/protocol.d.ts +125 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/sync/ComponentSync.d.ts +173 -0
- package/dist/sync/ComponentSync.d.ts.map +1 -0
- package/dist/sync/StateDelta.d.ts +177 -0
- package/dist/sync/StateDelta.d.ts.map +1 -0
- package/dist/sync/index.d.ts +4 -0
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/systems/NetworkAOISystem.d.ts +172 -0
- package/dist/systems/NetworkAOISystem.d.ts.map +1 -0
- package/dist/systems/NetworkInputSystem.d.ts +69 -2
- package/dist/systems/NetworkInputSystem.d.ts.map +1 -1
- package/dist/systems/NetworkPredictionSystem.d.ts +113 -0
- package/dist/systems/NetworkPredictionSystem.d.ts.map +1 -0
- package/dist/systems/NetworkSyncSystem.d.ts +88 -9
- package/dist/systems/NetworkSyncSystem.d.ts.map +1 -1
- package/dist/tokens.d.ts +12 -0
- package/dist/tokens.d.ts.map +1 -1
- package/package.json +12 -3
package/dist/protocol.d.ts
CHANGED
|
@@ -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
|
/**
|
package/dist/protocol.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/sync/index.d.ts
CHANGED
|
@@ -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
|
package/dist/sync/index.d.ts.map
CHANGED
|
@@ -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"}
|