@esengine/network 1.0.0 → 2.1.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/NetworkPlugin.d.ts +56 -42
- package/dist/NetworkPlugin.d.ts.map +1 -1
- package/dist/index.d.ts +16 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +302 -184
- package/dist/index.js.map +1 -1
- package/dist/protocol.d.ts +160 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/services/NetworkService.d.ts +125 -39
- package/dist/services/NetworkService.d.ts.map +1 -1
- package/dist/systems/NetworkInputSystem.d.ts +14 -10
- package/dist/systems/NetworkInputSystem.d.ts.map +1 -1
- package/dist/systems/NetworkSpawnSystem.d.ts +49 -18
- package/dist/systems/NetworkSpawnSystem.d.ts.map +1 -1
- package/dist/systems/NetworkSyncSystem.d.ts +28 -17
- package/dist/systems/NetworkSyncSystem.d.ts.map +1 -1
- package/package.json +6 -7
|
@@ -1,62 +1,148 @@
|
|
|
1
|
-
import { type MsgSync, type MsgSpawn, type MsgDespawn, type IPlayerInput } from '@esengine/network-protocols';
|
|
2
1
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* @zh 网络服务模块
|
|
3
|
+
* @en Network Service Module
|
|
5
4
|
*/
|
|
6
|
-
|
|
5
|
+
import { RpcClient, type ProtocolDef, type ApiNames, type MsgNames, type ApiInput, type ApiOutput, type MsgData, type RpcClientOptions } from '@esengine/rpc/client';
|
|
6
|
+
import { type GameProtocol, type PlayerInput } from '../protocol';
|
|
7
|
+
/**
|
|
8
|
+
* @zh 连接状态
|
|
9
|
+
* @en Connection state
|
|
10
|
+
*/
|
|
11
|
+
export declare const enum NetworkState {
|
|
7
12
|
Disconnected = 0,
|
|
8
13
|
Connecting = 1,
|
|
9
14
|
Connected = 2
|
|
10
15
|
}
|
|
11
16
|
/**
|
|
12
|
-
*
|
|
13
|
-
* Network
|
|
17
|
+
* @zh 网络服务配置
|
|
18
|
+
* @en Network service options
|
|
14
19
|
*/
|
|
15
|
-
export interface
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
onError?: (error: Error) => void;
|
|
20
|
+
export interface NetworkServiceOptions extends RpcClientOptions {
|
|
21
|
+
/**
|
|
22
|
+
* @zh 服务器地址
|
|
23
|
+
* @en Server URL
|
|
24
|
+
*/
|
|
25
|
+
url: string;
|
|
22
26
|
}
|
|
23
27
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
28
|
+
* @zh RPC 服务基类
|
|
29
|
+
* @en RPC Service base class
|
|
30
|
+
*
|
|
31
|
+
* @zh 纯粹的 RPC 客户端封装,不包含任何游戏特定逻辑
|
|
32
|
+
* @en Pure RPC client wrapper without any game-specific logic
|
|
26
33
|
*
|
|
27
|
-
*
|
|
28
|
-
* TSRPC-based network service wrapper with type-safe communication.
|
|
34
|
+
* @typeParam P - @zh 协议定义类型 @en Protocol definition type
|
|
29
35
|
*/
|
|
30
|
-
export declare class
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
export declare class RpcService<P extends ProtocolDef> {
|
|
37
|
+
protected readonly _protocol: P;
|
|
38
|
+
protected _client: RpcClient<P> | null;
|
|
39
|
+
protected _state: NetworkState;
|
|
40
|
+
constructor(_protocol: P);
|
|
41
|
+
/**
|
|
42
|
+
* @zh 获取连接状态
|
|
43
|
+
* @en Get connection state
|
|
44
|
+
*/
|
|
45
|
+
get state(): NetworkState;
|
|
46
|
+
/**
|
|
47
|
+
* @zh 是否已连接
|
|
48
|
+
* @en Whether connected
|
|
49
|
+
*/
|
|
39
50
|
get isConnected(): boolean;
|
|
40
51
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
52
|
+
* @zh 获取底层 RPC 客户端
|
|
53
|
+
* @en Get underlying RPC client
|
|
54
|
+
*/
|
|
55
|
+
get client(): RpcClient<P> | null;
|
|
56
|
+
/**
|
|
57
|
+
* @zh 连接到服务器
|
|
58
|
+
* @en Connect to server
|
|
59
|
+
*/
|
|
60
|
+
connect(options: NetworkServiceOptions): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* @zh 断开连接
|
|
63
|
+
* @en Disconnect
|
|
64
|
+
*/
|
|
65
|
+
disconnect(): void;
|
|
66
|
+
/**
|
|
67
|
+
* @zh 调用 API
|
|
68
|
+
* @en Call API
|
|
69
|
+
*/
|
|
70
|
+
call<K extends ApiNames<P>>(name: K, input: ApiInput<P['api'][K]>): Promise<ApiOutput<P['api'][K]>>;
|
|
71
|
+
/**
|
|
72
|
+
* @zh 发送消息
|
|
73
|
+
* @en Send message
|
|
74
|
+
*/
|
|
75
|
+
send<K extends MsgNames<P>>(name: K, data: MsgData<P['msg'][K]>): void;
|
|
76
|
+
/**
|
|
77
|
+
* @zh 监听消息
|
|
78
|
+
* @en Listen to message
|
|
79
|
+
*/
|
|
80
|
+
on<K extends MsgNames<P>>(name: K, handler: (data: MsgData<P['msg'][K]>) => void): this;
|
|
81
|
+
/**
|
|
82
|
+
* @zh 取消监听消息
|
|
83
|
+
* @en Remove message listener
|
|
84
|
+
*/
|
|
85
|
+
off<K extends MsgNames<P>>(name: K, handler?: (data: MsgData<P['msg'][K]>) => void): this;
|
|
86
|
+
/**
|
|
87
|
+
* @zh 监听消息(只触发一次)
|
|
88
|
+
* @en Listen to message (once)
|
|
89
|
+
*/
|
|
90
|
+
once<K extends MsgNames<P>>(name: K, handler: (data: MsgData<P['msg'][K]>) => void): this;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* @zh 游戏网络服务
|
|
94
|
+
* @en Game network service
|
|
95
|
+
*
|
|
96
|
+
* @zh 基于默认游戏协议的网络服务,提供游戏特定的便捷方法
|
|
97
|
+
* @en Network service based on default game protocol with game-specific convenience methods
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```typescript
|
|
101
|
+
* const network = new GameNetworkService()
|
|
102
|
+
* await network.connect({ url: 'ws://localhost:3000' })
|
|
103
|
+
*
|
|
104
|
+
* // 游戏特定的便捷方法
|
|
105
|
+
* network.sendInput({ frame: 1, moveDir: { x: 1, y: 0 } })
|
|
106
|
+
*
|
|
107
|
+
* network.onSync((data) => {
|
|
108
|
+
* for (const entity of data.entities) {
|
|
109
|
+
* // 更新实体状态
|
|
110
|
+
* }
|
|
111
|
+
* })
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
export declare class GameNetworkService extends RpcService<GameProtocol> {
|
|
115
|
+
constructor();
|
|
116
|
+
/**
|
|
117
|
+
* @zh 发送玩家输入
|
|
118
|
+
* @en Send player input
|
|
43
119
|
*/
|
|
44
|
-
|
|
120
|
+
sendInput(input: PlayerInput): void;
|
|
45
121
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
122
|
+
* @zh 监听状态同步
|
|
123
|
+
* @en Listen to state sync
|
|
48
124
|
*/
|
|
49
|
-
|
|
125
|
+
onSync(handler: (data: MsgData<GameProtocol['msg']['sync']>) => void): this;
|
|
50
126
|
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
127
|
+
* @zh 监听实体生成
|
|
128
|
+
* @en Listen to entity spawn
|
|
53
129
|
*/
|
|
54
|
-
|
|
130
|
+
onSpawn(handler: (data: MsgData<GameProtocol['msg']['spawn']>) => void): this;
|
|
55
131
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
132
|
+
* @zh 监听实体销毁
|
|
133
|
+
* @en Listen to entity despawn
|
|
58
134
|
*/
|
|
59
|
-
|
|
60
|
-
private _setupListeners;
|
|
135
|
+
onDespawn(handler: (data: MsgData<GameProtocol['msg']['despawn']>) => void): this;
|
|
61
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* @zh 网络服务(GameNetworkService 的别名)
|
|
139
|
+
* @en Network service (alias for GameNetworkService)
|
|
140
|
+
*/
|
|
141
|
+
export { GameNetworkService as NetworkService };
|
|
142
|
+
/**
|
|
143
|
+
* @zh 创建网络服务
|
|
144
|
+
* @en Create network service
|
|
145
|
+
*/
|
|
146
|
+
export declare function createNetworkService(): GameNetworkService;
|
|
147
|
+
export declare function createNetworkService<P extends ProtocolDef>(protocol: P): RpcService<P>;
|
|
62
148
|
//# sourceMappingURL=NetworkService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkService.d.ts","sourceRoot":"","sources":["../../src/services/NetworkService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NetworkService.d.ts","sourceRoot":"","sources":["../../src/services/NetworkService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,SAAS,EACT,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,gBAAgB,EACxB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAgB,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAM/E;;;GAGG;AACH,0BAAkB,YAAY;IAC1B,YAAY,IAAI;IAChB,UAAU,IAAI;IACd,SAAS,IAAI;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC3D;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAA;CACd;AAMD;;;;;;;;GAQG;AACH,qBAAa,UAAU,CAAC,CAAC,SAAS,WAAW;IAI7B,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;IAH3C,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAO;IAC7C,SAAS,CAAC,MAAM,EAAE,YAAY,CAA4B;gBAE3B,SAAS,EAAE,CAAC;IAE3C;;;OAGG;IACH,IAAI,KAAK,IAAI,YAAY,CAExB;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;;OAGG;IACH,IAAI,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAEhC;IAED;;;OAGG;IACG,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B5D;;;OAGG;IACH,UAAU,IAAI,IAAI;IAMlB;;;OAGG;IACH,IAAI,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,EACtB,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAOlC;;;OAGG;IACH,IAAI,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAItE;;;OAGG;IACH,EAAE,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,EACpB,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAC9C,IAAI;IAKP;;;OAGG;IACH,GAAG,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,EACrB,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAC/C,IAAI;IAKP;;;OAGG;IACH,IAAI,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,EACtB,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAC9C,IAAI;CAIV;AAMD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,kBAAmB,SAAQ,UAAU,CAAC,YAAY,CAAC;;IAK5D;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAInC;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAI3E;;;OAGG;IACH,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAI7E;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;CAGpF;AAMD;;;GAGG;AACH,OAAO,EAAE,kBAAkB,IAAI,cAAc,EAAE,CAAA;AAE/C;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,kBAAkB,CAAA;AAC1D,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,WAAW,EAAE,QAAQ,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zh 网络输入系统
|
|
3
|
+
* @en Network Input System
|
|
4
|
+
*/
|
|
1
5
|
import { EntitySystem } from '@esengine/ecs-framework';
|
|
2
6
|
import type { NetworkService } from '../services/NetworkService';
|
|
3
7
|
/**
|
|
4
|
-
* 网络输入系统
|
|
5
|
-
* Network input system
|
|
8
|
+
* @zh 网络输入系统
|
|
9
|
+
* @en Network input system
|
|
6
10
|
*
|
|
7
|
-
*
|
|
8
|
-
* Collects local player input and sends to server
|
|
11
|
+
* @zh 收集本地玩家输入并发送到服务器
|
|
12
|
+
* @en Collects local player input and sends to server
|
|
9
13
|
*/
|
|
10
14
|
export declare class NetworkInputSystem extends EntitySystem {
|
|
11
15
|
private _networkService;
|
|
@@ -13,18 +17,18 @@ export declare class NetworkInputSystem extends EntitySystem {
|
|
|
13
17
|
private _inputQueue;
|
|
14
18
|
constructor(networkService: NetworkService);
|
|
15
19
|
/**
|
|
16
|
-
* 处理输入队列
|
|
17
|
-
* Process input queue
|
|
20
|
+
* @zh 处理输入队列
|
|
21
|
+
* @en Process input queue
|
|
18
22
|
*/
|
|
19
23
|
protected process(): void;
|
|
20
24
|
/**
|
|
21
|
-
* 添加移动输入
|
|
22
|
-
* Add move input
|
|
25
|
+
* @zh 添加移动输入
|
|
26
|
+
* @en Add move input
|
|
23
27
|
*/
|
|
24
28
|
addMoveInput(x: number, y: number): void;
|
|
25
29
|
/**
|
|
26
|
-
* 添加动作输入
|
|
27
|
-
* Add action input
|
|
30
|
+
* @zh 添加动作输入
|
|
31
|
+
* @en Add action input
|
|
28
32
|
*/
|
|
29
33
|
addActionInput(action: string): void;
|
|
30
34
|
protected onDestroy(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkInputSystem.d.ts","sourceRoot":"","sources":["../../src/systems/NetworkInputSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAW,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"NetworkInputSystem.d.ts","sourceRoot":"","sources":["../../src/systems/NetworkInputSystem.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAW,MAAM,yBAAyB,CAAA;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAEhE;;;;;;GAMG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAChD,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,WAAW,CAAoB;gBAE3B,cAAc,EAAE,cAAc;IAK1C;;;OAGG;cACgB,OAAO,IAAI,IAAI;IAYlC;;;OAGG;IACI,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAO/C;;;OAGG;IACI,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;cAaxB,SAAS,IAAI,IAAI;CAGvC"}
|
|
@@ -1,37 +1,68 @@
|
|
|
1
1
|
import { EntitySystem, Entity, type Scene } from '@esengine/ecs-framework';
|
|
2
|
-
import type { MsgSpawn } from '@esengine/network-protocols';
|
|
3
|
-
import type { NetworkService } from '../services/NetworkService';
|
|
4
2
|
import type { NetworkSyncSystem } from './NetworkSyncSystem';
|
|
5
3
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* @zh 生成消息接口
|
|
5
|
+
* @en Spawn message interface
|
|
8
6
|
*/
|
|
9
|
-
export
|
|
7
|
+
export interface SpawnMessage {
|
|
8
|
+
netId: number;
|
|
9
|
+
ownerId: number;
|
|
10
|
+
prefab: string;
|
|
11
|
+
pos: {
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
};
|
|
15
|
+
rot?: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* @zh 销毁消息接口
|
|
19
|
+
* @en Despawn message interface
|
|
20
|
+
*/
|
|
21
|
+
export interface DespawnMessage {
|
|
22
|
+
netId: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* @zh 预制体工厂函数类型
|
|
26
|
+
* @en Prefab factory function type
|
|
27
|
+
*/
|
|
28
|
+
export type PrefabFactory = (scene: Scene, spawn: SpawnMessage) => Entity;
|
|
10
29
|
/**
|
|
11
|
-
* 网络生成系统
|
|
12
|
-
* Network spawn system
|
|
30
|
+
* @zh 网络生成系统
|
|
31
|
+
* @en Network spawn system
|
|
13
32
|
*
|
|
14
|
-
*
|
|
15
|
-
* Handles spawning and despawning of networked entities
|
|
33
|
+
* @zh 处理网络实体的生成和销毁
|
|
34
|
+
* @en Handles spawning and despawning of networked entities
|
|
16
35
|
*/
|
|
17
36
|
export declare class NetworkSpawnSystem extends EntitySystem {
|
|
18
|
-
private _networkService;
|
|
19
37
|
private _syncSystem;
|
|
20
38
|
private _prefabFactories;
|
|
21
|
-
|
|
22
|
-
|
|
39
|
+
private _localPlayerId;
|
|
40
|
+
constructor(syncSystem: NetworkSyncSystem);
|
|
41
|
+
/**
|
|
42
|
+
* @zh 设置本地玩家 ID
|
|
43
|
+
* @en Set local player ID
|
|
44
|
+
*/
|
|
45
|
+
setLocalPlayerId(id: number): void;
|
|
46
|
+
/**
|
|
47
|
+
* @zh 处理生成消息
|
|
48
|
+
* @en Handle spawn message
|
|
49
|
+
*/
|
|
50
|
+
handleSpawn(msg: SpawnMessage): Entity | null;
|
|
51
|
+
/**
|
|
52
|
+
* @zh 处理销毁消息
|
|
53
|
+
* @en Handle despawn message
|
|
54
|
+
*/
|
|
55
|
+
handleDespawn(msg: DespawnMessage): void;
|
|
23
56
|
/**
|
|
24
|
-
* 注册预制体工厂
|
|
25
|
-
* Register prefab factory
|
|
57
|
+
* @zh 注册预制体工厂
|
|
58
|
+
* @en Register prefab factory
|
|
26
59
|
*/
|
|
27
60
|
registerPrefab(prefabType: string, factory: PrefabFactory): void;
|
|
28
61
|
/**
|
|
29
|
-
* 注销预制体工厂
|
|
30
|
-
* Unregister prefab factory
|
|
62
|
+
* @zh 注销预制体工厂
|
|
63
|
+
* @en Unregister prefab factory
|
|
31
64
|
*/
|
|
32
65
|
unregisterPrefab(prefabType: string): void;
|
|
33
|
-
private _handleSpawn;
|
|
34
|
-
private _handleDespawn;
|
|
35
66
|
protected onDestroy(): void;
|
|
36
67
|
}
|
|
37
68
|
//# sourceMappingURL=NetworkSpawnSystem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkSpawnSystem.d.ts","sourceRoot":"","sources":["../../src/systems/NetworkSpawnSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,KAAK,EAAW,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"NetworkSpawnSystem.d.ts","sourceRoot":"","sources":["../../src/systems/NetworkSpawnSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,KAAK,EAAW,MAAM,yBAAyB,CAAA;AAGnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE5D;;;GAGG;AACH,MAAM,WAAW,YAAY;IACzB,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,cAAc;IAC3B,KAAK,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,KAAK,MAAM,CAAA;AAEzE;;;;;;GAMG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAChD,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,gBAAgB,CAAwC;IAChE,OAAO,CAAC,cAAc,CAAY;gBAEtB,UAAU,EAAE,iBAAiB;IAKzC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIlC;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI;IA2B7C;;;OAGG;IACH,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI;IAYxC;;;OAGG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI;IAIhE;;;OAGG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;cAIvB,SAAS,IAAI,IAAI;CAGvC"}
|
|
@@ -1,38 +1,49 @@
|
|
|
1
1
|
import { EntitySystem, type Entity } from '@esengine/ecs-framework';
|
|
2
|
-
import type { NetworkService } from '../services/NetworkService';
|
|
3
2
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* @zh 同步消息接口
|
|
4
|
+
* @en Sync message interface
|
|
5
|
+
*/
|
|
6
|
+
export interface SyncMessage {
|
|
7
|
+
entities: Array<{
|
|
8
|
+
netId: number;
|
|
9
|
+
pos?: {
|
|
10
|
+
x: number;
|
|
11
|
+
y: number;
|
|
12
|
+
};
|
|
13
|
+
rot?: number;
|
|
14
|
+
}>;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* @zh 网络同步系统
|
|
18
|
+
* @en Network sync system
|
|
6
19
|
*
|
|
7
|
-
*
|
|
8
|
-
* Handles state synchronization and interpolation for networked entities
|
|
20
|
+
* @zh 处理网络实体的状态同步和插值
|
|
21
|
+
* @en Handles state synchronization and interpolation for networked entities
|
|
9
22
|
*/
|
|
10
23
|
export declare class NetworkSyncSystem extends EntitySystem {
|
|
11
|
-
private _networkService;
|
|
12
24
|
private _netIdToEntity;
|
|
13
|
-
constructor(
|
|
14
|
-
protected onInitialize(): void;
|
|
25
|
+
constructor();
|
|
15
26
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
27
|
+
* @zh 处理同步消息
|
|
28
|
+
* @en Handle sync message
|
|
18
29
|
*/
|
|
30
|
+
handleSync(msg: SyncMessage): void;
|
|
19
31
|
protected process(entities: readonly Entity[]): void;
|
|
20
32
|
/**
|
|
21
|
-
* 注册网络实体
|
|
22
|
-
* Register network entity
|
|
33
|
+
* @zh 注册网络实体
|
|
34
|
+
* @en Register network entity
|
|
23
35
|
*/
|
|
24
36
|
registerEntity(netId: number, entityId: number): void;
|
|
25
37
|
/**
|
|
26
|
-
* 注销网络实体
|
|
27
|
-
* Unregister network entity
|
|
38
|
+
* @zh 注销网络实体
|
|
39
|
+
* @en Unregister network entity
|
|
28
40
|
*/
|
|
29
41
|
unregisterEntity(netId: number): void;
|
|
30
42
|
/**
|
|
31
|
-
* 根据网络 ID 获取实体 ID
|
|
32
|
-
* Get entity ID by network ID
|
|
43
|
+
* @zh 根据网络 ID 获取实体 ID
|
|
44
|
+
* @en Get entity ID by network ID
|
|
33
45
|
*/
|
|
34
46
|
getEntityId(netId: number): number | undefined;
|
|
35
|
-
private _handleSync;
|
|
36
47
|
private _interpolate;
|
|
37
48
|
protected onDestroy(): void;
|
|
38
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkSyncSystem.d.ts","sourceRoot":"","sources":["../../src/systems/NetworkSyncSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAiB,KAAK,MAAM,EAAE,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"NetworkSyncSystem.d.ts","sourceRoot":"","sources":["../../src/systems/NetworkSyncSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAiB,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAIlF;;;GAGG;AACH,MAAM,WAAW,WAAW;IACxB,QAAQ,EAAE,KAAK,CAAC;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,GAAG,CAAC,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;QAC9B,GAAG,CAAC,EAAE,MAAM,CAAA;KACf,CAAC,CAAA;CACL;AAED;;;;;;GAMG;AACH,qBAAa,iBAAkB,SAAQ,YAAY;IAC/C,OAAO,CAAC,cAAc,CAAiC;;IAMvD;;;OAGG;IACH,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;cAef,OAAO,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAa7D;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIrD;;;OAGG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrC;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI9C,OAAO,CAAC,YAAY;cAYD,SAAS,IAAI,IAAI;CAGvC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@esengine/network",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Network synchronization for multiplayer games
|
|
3
|
+
"version": "2.1.1",
|
|
4
|
+
"description": "Network synchronization for multiplayer games",
|
|
5
5
|
"esengine": {
|
|
6
6
|
"plugin": true,
|
|
7
7
|
"pluginExport": "NetworkPlugin",
|
|
@@ -22,15 +22,14 @@
|
|
|
22
22
|
"dist"
|
|
23
23
|
],
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"
|
|
26
|
-
"@esengine/network-protocols": "1.0.0"
|
|
25
|
+
"@esengine/rpc": "1.1.1"
|
|
27
26
|
},
|
|
28
27
|
"devDependencies": {
|
|
29
28
|
"rimraf": "^5.0.5",
|
|
30
29
|
"tsup": "^8.0.0",
|
|
31
30
|
"typescript": "^5.3.3",
|
|
32
|
-
"@esengine/blueprint": "1.0.
|
|
33
|
-
"@esengine/ecs-framework": "2.4.
|
|
31
|
+
"@esengine/blueprint": "1.0.2",
|
|
32
|
+
"@esengine/ecs-framework": "2.4.4",
|
|
34
33
|
"@esengine/build-config": "1.0.0"
|
|
35
34
|
},
|
|
36
35
|
"keywords": [
|
|
@@ -43,7 +42,7 @@
|
|
|
43
42
|
"author": "yhh",
|
|
44
43
|
"license": "MIT",
|
|
45
44
|
"scripts": {
|
|
46
|
-
"build": "tsup && tsc
|
|
45
|
+
"build": "tsup && tsc -p tsconfig.build.json --emitDeclarationOnly",
|
|
47
46
|
"build:watch": "tsup --watch",
|
|
48
47
|
"type-check": "tsc --noEmit",
|
|
49
48
|
"clean": "rimraf dist"
|