@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
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zh 网络 AOI 系统
|
|
3
|
+
* @en Network AOI System
|
|
4
|
+
*
|
|
5
|
+
* @zh 集成 AOI 兴趣区域管理,过滤网络同步数据
|
|
6
|
+
* @en Integrates AOI interest management to filter network sync data
|
|
7
|
+
*/
|
|
8
|
+
import { EntitySystem, type Entity } from '@esengine/ecs-framework';
|
|
9
|
+
import type { EntitySyncState } from '../protocol';
|
|
10
|
+
/**
|
|
11
|
+
* @zh AOI 事件类型
|
|
12
|
+
* @en AOI event type
|
|
13
|
+
*/
|
|
14
|
+
export type NetworkAOIEventType = 'enter' | 'exit';
|
|
15
|
+
/**
|
|
16
|
+
* @zh AOI 事件
|
|
17
|
+
* @en AOI event
|
|
18
|
+
*/
|
|
19
|
+
export interface NetworkAOIEvent {
|
|
20
|
+
/**
|
|
21
|
+
* @zh 事件类型
|
|
22
|
+
* @en Event type
|
|
23
|
+
*/
|
|
24
|
+
type: NetworkAOIEventType;
|
|
25
|
+
/**
|
|
26
|
+
* @zh 观察者网络 ID(玩家)
|
|
27
|
+
* @en Observer network ID (player)
|
|
28
|
+
*/
|
|
29
|
+
observerNetId: number;
|
|
30
|
+
/**
|
|
31
|
+
* @zh 目标网络 ID(进入/离开视野的实体)
|
|
32
|
+
* @en Target network ID (entity entering/exiting view)
|
|
33
|
+
*/
|
|
34
|
+
targetNetId: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @zh AOI 事件监听器
|
|
38
|
+
* @en AOI event listener
|
|
39
|
+
*/
|
|
40
|
+
export type NetworkAOIEventListener = (event: NetworkAOIEvent) => void;
|
|
41
|
+
/**
|
|
42
|
+
* @zh 网络 AOI 配置
|
|
43
|
+
* @en Network AOI configuration
|
|
44
|
+
*/
|
|
45
|
+
export interface NetworkAOIConfig {
|
|
46
|
+
/**
|
|
47
|
+
* @zh 网格单元格大小
|
|
48
|
+
* @en Grid cell size
|
|
49
|
+
*/
|
|
50
|
+
cellSize: number;
|
|
51
|
+
/**
|
|
52
|
+
* @zh 默认视野范围
|
|
53
|
+
* @en Default view range
|
|
54
|
+
*/
|
|
55
|
+
defaultViewRange: number;
|
|
56
|
+
/**
|
|
57
|
+
* @zh 是否启用 AOI 过滤
|
|
58
|
+
* @en Whether to enable AOI filtering
|
|
59
|
+
*/
|
|
60
|
+
enabled: boolean;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* @zh 网络 AOI 系统
|
|
64
|
+
* @en Network AOI system
|
|
65
|
+
*
|
|
66
|
+
* @zh 管理网络实体的兴趣区域,过滤同步数据
|
|
67
|
+
* @en Manages network entities' areas of interest and filters sync data
|
|
68
|
+
*/
|
|
69
|
+
export declare class NetworkAOISystem extends EntitySystem {
|
|
70
|
+
private readonly _config;
|
|
71
|
+
private readonly _observers;
|
|
72
|
+
private readonly _cells;
|
|
73
|
+
private readonly _listeners;
|
|
74
|
+
private readonly _entityNetIdMap;
|
|
75
|
+
private readonly _netIdEntityMap;
|
|
76
|
+
constructor(config?: Partial<NetworkAOIConfig>);
|
|
77
|
+
/**
|
|
78
|
+
* @zh 获取配置
|
|
79
|
+
* @en Get configuration
|
|
80
|
+
*/
|
|
81
|
+
get config(): Readonly<NetworkAOIConfig>;
|
|
82
|
+
/**
|
|
83
|
+
* @zh 是否启用
|
|
84
|
+
* @en Is enabled
|
|
85
|
+
*/
|
|
86
|
+
get enabled(): boolean;
|
|
87
|
+
set enabled(value: boolean);
|
|
88
|
+
/**
|
|
89
|
+
* @zh 观察者数量
|
|
90
|
+
* @en Observer count
|
|
91
|
+
*/
|
|
92
|
+
get observerCount(): number;
|
|
93
|
+
/**
|
|
94
|
+
* @zh 添加观察者(通常是玩家实体)
|
|
95
|
+
* @en Add observer (usually player entity)
|
|
96
|
+
*/
|
|
97
|
+
addObserver(netId: number, x: number, y: number, viewRange?: number): void;
|
|
98
|
+
/**
|
|
99
|
+
* @zh 移除观察者
|
|
100
|
+
* @en Remove observer
|
|
101
|
+
*/
|
|
102
|
+
removeObserver(netId: number): boolean;
|
|
103
|
+
/**
|
|
104
|
+
* @zh 更新观察者位置
|
|
105
|
+
* @en Update observer position
|
|
106
|
+
*/
|
|
107
|
+
updateObserverPosition(netId: number, x: number, y: number): void;
|
|
108
|
+
/**
|
|
109
|
+
* @zh 更新观察者视野范围
|
|
110
|
+
* @en Update observer view range
|
|
111
|
+
*/
|
|
112
|
+
updateObserverViewRange(netId: number, viewRange: number): void;
|
|
113
|
+
/**
|
|
114
|
+
* @zh 注册网络实体
|
|
115
|
+
* @en Register network entity
|
|
116
|
+
*/
|
|
117
|
+
registerEntity(entity: Entity, netId: number): void;
|
|
118
|
+
/**
|
|
119
|
+
* @zh 注销网络实体
|
|
120
|
+
* @en Unregister network entity
|
|
121
|
+
*/
|
|
122
|
+
unregisterEntity(entity: Entity): void;
|
|
123
|
+
/**
|
|
124
|
+
* @zh 获取观察者能看到的实体网络 ID 列表
|
|
125
|
+
* @en Get list of entity network IDs visible to observer
|
|
126
|
+
*/
|
|
127
|
+
getVisibleEntities(observerNetId: number): number[];
|
|
128
|
+
/**
|
|
129
|
+
* @zh 获取能看到指定实体的观察者网络 ID 列表
|
|
130
|
+
* @en Get list of observer network IDs that can see the entity
|
|
131
|
+
*/
|
|
132
|
+
getObserversOf(entityNetId: number): number[];
|
|
133
|
+
/**
|
|
134
|
+
* @zh 检查观察者是否能看到目标
|
|
135
|
+
* @en Check if observer can see target
|
|
136
|
+
*/
|
|
137
|
+
canSee(observerNetId: number, targetNetId: number): boolean;
|
|
138
|
+
/**
|
|
139
|
+
* @zh 过滤同步数据,只保留观察者能看到的实体
|
|
140
|
+
* @en Filter sync data to only include entities visible to observer
|
|
141
|
+
*/
|
|
142
|
+
filterSyncData(observerNetId: number, entities: EntitySyncState[]): EntitySyncState[];
|
|
143
|
+
/**
|
|
144
|
+
* @zh 添加事件监听器
|
|
145
|
+
* @en Add event listener
|
|
146
|
+
*/
|
|
147
|
+
addListener(listener: NetworkAOIEventListener): void;
|
|
148
|
+
/**
|
|
149
|
+
* @zh 移除事件监听器
|
|
150
|
+
* @en Remove event listener
|
|
151
|
+
*/
|
|
152
|
+
removeListener(listener: NetworkAOIEventListener): void;
|
|
153
|
+
protected process(entities: readonly Entity[]): void;
|
|
154
|
+
private _updateAllObserversVisibility;
|
|
155
|
+
/**
|
|
156
|
+
* @zh 清除所有数据
|
|
157
|
+
* @en Clear all data
|
|
158
|
+
*/
|
|
159
|
+
clear(): void;
|
|
160
|
+
protected onDestroy(): void;
|
|
161
|
+
private _getCellKey;
|
|
162
|
+
private _addToCell;
|
|
163
|
+
private _removeFromCell;
|
|
164
|
+
private _updateVisibility;
|
|
165
|
+
private _emitEvent;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* @zh 创建网络 AOI 系统
|
|
169
|
+
* @en Create network AOI system
|
|
170
|
+
*/
|
|
171
|
+
export declare function createNetworkAOISystem(config?: Partial<NetworkAOIConfig>): NetworkAOISystem;
|
|
172
|
+
//# sourceMappingURL=NetworkAOISystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkAOISystem.d.ts","sourceRoot":"","sources":["../../src/systems/NetworkAOISystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @zh 网络输入系统
|
|
3
3
|
* @en Network Input System
|
|
4
|
+
*
|
|
5
|
+
* @zh 收集本地玩家输入并发送到服务器,支持与预测系统集成
|
|
6
|
+
* @en Collects local player input and sends to server, supports integration with prediction system
|
|
4
7
|
*/
|
|
5
8
|
import { EntitySystem } from '@esengine/ecs-framework';
|
|
6
9
|
import type { NetworkService } from '../services/NetworkService';
|
|
10
|
+
import type { NetworkPredictionSystem } from './NetworkPredictionSystem';
|
|
11
|
+
/**
|
|
12
|
+
* @zh 输入配置
|
|
13
|
+
* @en Input configuration
|
|
14
|
+
*/
|
|
15
|
+
export interface NetworkInputConfig {
|
|
16
|
+
/**
|
|
17
|
+
* @zh 发送输入的最小间隔(毫秒)
|
|
18
|
+
* @en Minimum interval between input sends (milliseconds)
|
|
19
|
+
*/
|
|
20
|
+
sendInterval: number;
|
|
21
|
+
/**
|
|
22
|
+
* @zh 是否合并相同输入
|
|
23
|
+
* @en Whether to merge identical inputs
|
|
24
|
+
*/
|
|
25
|
+
mergeIdenticalInputs: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* @zh 最大输入队列长度
|
|
28
|
+
* @en Maximum input queue length
|
|
29
|
+
*/
|
|
30
|
+
maxQueueLength: number;
|
|
31
|
+
}
|
|
7
32
|
/**
|
|
8
33
|
* @zh 网络输入系统
|
|
9
34
|
* @en Network input system
|
|
@@ -12,15 +37,41 @@ import type { NetworkService } from '../services/NetworkService';
|
|
|
12
37
|
* @en Collects local player input and sends to server
|
|
13
38
|
*/
|
|
14
39
|
export declare class NetworkInputSystem extends EntitySystem {
|
|
15
|
-
private _networkService;
|
|
40
|
+
private readonly _networkService;
|
|
41
|
+
private readonly _config;
|
|
42
|
+
private _predictionSystem;
|
|
16
43
|
private _frame;
|
|
44
|
+
private _inputSequence;
|
|
17
45
|
private _inputQueue;
|
|
18
|
-
|
|
46
|
+
private _lastSendTime;
|
|
47
|
+
private _lastMoveDir;
|
|
48
|
+
constructor(networkService: NetworkService, config?: Partial<NetworkInputConfig>);
|
|
49
|
+
/**
|
|
50
|
+
* @zh 获取配置
|
|
51
|
+
* @en Get configuration
|
|
52
|
+
*/
|
|
53
|
+
get config(): Readonly<NetworkInputConfig>;
|
|
54
|
+
/**
|
|
55
|
+
* @zh 获取当前帧号
|
|
56
|
+
* @en Get current frame number
|
|
57
|
+
*/
|
|
58
|
+
get frame(): number;
|
|
59
|
+
/**
|
|
60
|
+
* @zh 获取当前输入序列号
|
|
61
|
+
* @en Get current input sequence
|
|
62
|
+
*/
|
|
63
|
+
get inputSequence(): number;
|
|
64
|
+
/**
|
|
65
|
+
* @zh 设置预测系统引用
|
|
66
|
+
* @en Set prediction system reference
|
|
67
|
+
*/
|
|
68
|
+
setPredictionSystem(system: NetworkPredictionSystem): void;
|
|
19
69
|
/**
|
|
20
70
|
* @zh 处理输入队列
|
|
21
71
|
* @en Process input queue
|
|
22
72
|
*/
|
|
23
73
|
protected process(): void;
|
|
74
|
+
private _mergeInputs;
|
|
24
75
|
/**
|
|
25
76
|
* @zh 添加移动输入
|
|
26
77
|
* @en Add move input
|
|
@@ -31,6 +82,22 @@ export declare class NetworkInputSystem extends EntitySystem {
|
|
|
31
82
|
* @en Add action input
|
|
32
83
|
*/
|
|
33
84
|
addActionInput(action: string): void;
|
|
85
|
+
private _addToQueue;
|
|
86
|
+
/**
|
|
87
|
+
* @zh 清空输入队列
|
|
88
|
+
* @en Clear input queue
|
|
89
|
+
*/
|
|
90
|
+
clearQueue(): void;
|
|
91
|
+
/**
|
|
92
|
+
* @zh 重置状态
|
|
93
|
+
* @en Reset state
|
|
94
|
+
*/
|
|
95
|
+
reset(): void;
|
|
34
96
|
protected onDestroy(): void;
|
|
35
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* @zh 创建网络输入系统
|
|
100
|
+
* @en Create network input system
|
|
101
|
+
*/
|
|
102
|
+
export declare function createNetworkInputSystem(networkService: NetworkService, config?: Partial<NetworkInputConfig>): NetworkInputSystem;
|
|
36
103
|
//# sourceMappingURL=NetworkInputSystem.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkInputSystem.d.ts","sourceRoot":"","sources":["../../src/systems/NetworkInputSystem.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"NetworkInputSystem.d.ts","sourceRoot":"","sources":["../../src/systems/NetworkInputSystem.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAW,MAAM,yBAAyB,CAAA;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAMxE;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAC/B;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAA;IAEpB;;;OAGG;IACH,oBAAoB,EAAE,OAAO,CAAA;IAE7B;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAA;CACzB;AAsBD;;;;;;GAMG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAChD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,iBAAiB,CAAuC;IAEhE,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,cAAc,CAAY;IAClC,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,YAAY,CAA2C;gBAEnD,cAAc,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC;IAMhF;;;OAGG;IACH,IAAI,MAAM,IAAI,QAAQ,CAAC,kBAAkB,CAAC,CAEzC;IAED;;;OAGG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;;OAGG;IACH,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED;;;OAGG;IACH,mBAAmB,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI;IAI1D;;;OAGG;cACgB,OAAO,IAAI,IAAI;IA6ClC,OAAO,CAAC,YAAY;IAoBpB;;;OAGG;IACI,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAqB/C;;;OAGG;IACI,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAoB3C,OAAO,CAAC,WAAW;IASnB;;;OAGG;IACI,UAAU,IAAI,IAAI;IAKzB;;;OAGG;IACI,KAAK,IAAI,IAAI;cAMD,SAAS,IAAI,IAAI;CAIvC;AAMD;;;GAGG;AACH,wBAAgB,wBAAwB,CACpC,cAAc,EAAE,cAAc,EAC9B,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GACrC,kBAAkB,CAEpB"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zh 网络预测系统
|
|
3
|
+
* @en Network Prediction System
|
|
4
|
+
*
|
|
5
|
+
* @zh 处理本地玩家的客户端预测和服务器校正
|
|
6
|
+
* @en Handles client-side prediction and server reconciliation for local player
|
|
7
|
+
*/
|
|
8
|
+
import { EntitySystem, type Entity } from '@esengine/ecs-framework';
|
|
9
|
+
import type { SyncData, PlayerInput } from '../protocol';
|
|
10
|
+
import { type ClientPredictionConfig, type ITransformState } from '../sync';
|
|
11
|
+
/**
|
|
12
|
+
* @zh 移动输入
|
|
13
|
+
* @en Movement input
|
|
14
|
+
*/
|
|
15
|
+
export interface MovementInput {
|
|
16
|
+
x: number;
|
|
17
|
+
y: number;
|
|
18
|
+
actions?: string[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* @zh 预测状态(位置 + 旋转)
|
|
22
|
+
* @en Predicted state (position + rotation)
|
|
23
|
+
*/
|
|
24
|
+
export interface PredictedTransform extends ITransformState {
|
|
25
|
+
velocityX: number;
|
|
26
|
+
velocityY: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* @zh 预测系统配置
|
|
30
|
+
* @en Prediction system configuration
|
|
31
|
+
*/
|
|
32
|
+
export interface NetworkPredictionConfig extends Partial<ClientPredictionConfig> {
|
|
33
|
+
/**
|
|
34
|
+
* @zh 移动速度(单位/秒)
|
|
35
|
+
* @en Movement speed (units/second)
|
|
36
|
+
*/
|
|
37
|
+
moveSpeed: number;
|
|
38
|
+
/**
|
|
39
|
+
* @zh 是否启用预测
|
|
40
|
+
* @en Whether prediction is enabled
|
|
41
|
+
*/
|
|
42
|
+
enabled: boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* @zh 网络预测系统
|
|
46
|
+
* @en Network prediction system
|
|
47
|
+
*
|
|
48
|
+
* @zh 处理本地玩家的输入预测和服务器状态校正
|
|
49
|
+
* @en Handles local player input prediction and server state reconciliation
|
|
50
|
+
*/
|
|
51
|
+
export declare class NetworkPredictionSystem extends EntitySystem {
|
|
52
|
+
private readonly _config;
|
|
53
|
+
private readonly _predictor;
|
|
54
|
+
private _prediction;
|
|
55
|
+
private _localPlayerNetId;
|
|
56
|
+
private _currentInput;
|
|
57
|
+
private _inputSequence;
|
|
58
|
+
constructor(config?: Partial<NetworkPredictionConfig>);
|
|
59
|
+
/**
|
|
60
|
+
* @zh 获取配置
|
|
61
|
+
* @en Get configuration
|
|
62
|
+
*/
|
|
63
|
+
get config(): Readonly<NetworkPredictionConfig>;
|
|
64
|
+
/**
|
|
65
|
+
* @zh 获取当前输入序列号
|
|
66
|
+
* @en Get current input sequence number
|
|
67
|
+
*/
|
|
68
|
+
get inputSequence(): number;
|
|
69
|
+
/**
|
|
70
|
+
* @zh 获取待确认输入数量
|
|
71
|
+
* @en Get pending input count
|
|
72
|
+
*/
|
|
73
|
+
get pendingInputCount(): number;
|
|
74
|
+
/**
|
|
75
|
+
* @zh 是否启用预测
|
|
76
|
+
* @en Whether prediction is enabled
|
|
77
|
+
*/
|
|
78
|
+
get enabled(): boolean;
|
|
79
|
+
set enabled(value: boolean);
|
|
80
|
+
/**
|
|
81
|
+
* @zh 设置本地玩家网络 ID
|
|
82
|
+
* @en Set local player network ID
|
|
83
|
+
*/
|
|
84
|
+
setLocalPlayerNetId(netId: number): void;
|
|
85
|
+
/**
|
|
86
|
+
* @zh 设置移动输入
|
|
87
|
+
* @en Set movement input
|
|
88
|
+
*/
|
|
89
|
+
setInput(x: number, y: number, actions?: string[]): void;
|
|
90
|
+
/**
|
|
91
|
+
* @zh 获取下一个要发送的输入(带序列号)
|
|
92
|
+
* @en Get next input to send (with sequence number)
|
|
93
|
+
*/
|
|
94
|
+
getInputToSend(): PlayerInput | null;
|
|
95
|
+
/**
|
|
96
|
+
* @zh 处理服务器同步数据进行校正
|
|
97
|
+
* @en Process server sync data for reconciliation
|
|
98
|
+
*/
|
|
99
|
+
reconcileWithServer(data: SyncData): void;
|
|
100
|
+
protected process(entities: readonly Entity[]): void;
|
|
101
|
+
/**
|
|
102
|
+
* @zh 重置预测状态
|
|
103
|
+
* @en Reset prediction state
|
|
104
|
+
*/
|
|
105
|
+
reset(): void;
|
|
106
|
+
protected onDestroy(): void;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* @zh 创建网络预测系统
|
|
110
|
+
* @en Create network prediction system
|
|
111
|
+
*/
|
|
112
|
+
export declare function createNetworkPredictionSystem(config?: Partial<NetworkPredictionConfig>): NetworkPredictionSystem;
|
|
113
|
+
//# sourceMappingURL=NetworkPredictionSystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkPredictionSystem.d.ts","sourceRoot":"","sources":["../../src/systems/NetworkPredictionSystem.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAiB,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGlF,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAIH,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACvB,MAAM,SAAS,CAAA;AAMhB;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC1B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACvD,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAwB,SAAQ,OAAO,CAAC,sBAAsB,CAAC;IAC5E;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAA;IAEjB;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAA;CACnB;AAuCD;;;;;;GAMG;AACH,qBAAa,uBAAwB,SAAQ,YAAY;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA+C;IAC1E,OAAO,CAAC,WAAW,CAAmE;IACtF,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,cAAc,CAAY;gBAEtB,MAAM,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC;IAMrD;;;OAGG;IACH,IAAI,MAAM,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAE9C;IAED;;;OAGG;IACH,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED;;;OAGG;IACH,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED;;;OAGG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAEzB;IAED;;;OAGG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAYxC;;;OAGG;IACH,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAIxD;;;OAGG;IACH,cAAc,IAAI,WAAW,GAAG,IAAI;IAepC;;;OAGG;IACH,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;cA0BtB,OAAO,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAoD7D;;;OAGG;IACH,KAAK,IAAI,IAAI;cAMM,SAAS,IAAI,IAAI;CAIvC;AAMD;;;GAGG;AACH,wBAAgB,6BAA6B,CACzC,MAAM,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAC1C,uBAAuB,CAEzB"}
|
|
@@ -1,7 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zh 网络同步系统
|
|
3
|
+
* @en Network Sync System
|
|
4
|
+
*
|
|
5
|
+
* @zh 处理网络实体的状态同步、快照缓冲和插值
|
|
6
|
+
* @en Handles state synchronization, snapshot buffering, and interpolation for networked entities
|
|
7
|
+
*/
|
|
1
8
|
import { EntitySystem, type Entity } from '@esengine/ecs-framework';
|
|
9
|
+
import type { SyncData } from '../protocol';
|
|
10
|
+
import { SnapshotBuffer, type ITransformStateWithVelocity } from '../sync';
|
|
2
11
|
/**
|
|
3
|
-
* @zh
|
|
4
|
-
* @en Sync message interface
|
|
12
|
+
* @zh 同步消息接口(兼容旧版)
|
|
13
|
+
* @en Sync message interface (for backwards compatibility)
|
|
5
14
|
*/
|
|
6
15
|
export interface SyncMessage {
|
|
7
16
|
entities: Array<{
|
|
@@ -13,22 +22,83 @@ export interface SyncMessage {
|
|
|
13
22
|
rot?: number;
|
|
14
23
|
}>;
|
|
15
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* @zh 同步系统配置
|
|
27
|
+
* @en Sync system configuration
|
|
28
|
+
*/
|
|
29
|
+
export interface NetworkSyncConfig {
|
|
30
|
+
/**
|
|
31
|
+
* @zh 快照缓冲区大小
|
|
32
|
+
* @en Snapshot buffer size
|
|
33
|
+
*/
|
|
34
|
+
bufferSize: number;
|
|
35
|
+
/**
|
|
36
|
+
* @zh 插值延迟(毫秒)
|
|
37
|
+
* @en Interpolation delay in milliseconds
|
|
38
|
+
*/
|
|
39
|
+
interpolationDelay: number;
|
|
40
|
+
/**
|
|
41
|
+
* @zh 是否启用外推
|
|
42
|
+
* @en Whether to enable extrapolation
|
|
43
|
+
*/
|
|
44
|
+
enableExtrapolation: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* @zh 最大外推时间(毫秒)
|
|
47
|
+
* @en Maximum extrapolation time in milliseconds
|
|
48
|
+
*/
|
|
49
|
+
maxExtrapolationTime: number;
|
|
50
|
+
/**
|
|
51
|
+
* @zh 使用赫尔米特插值(更平滑)
|
|
52
|
+
* @en Use Hermite interpolation (smoother)
|
|
53
|
+
*/
|
|
54
|
+
useHermiteInterpolation: boolean;
|
|
55
|
+
}
|
|
16
56
|
/**
|
|
17
57
|
* @zh 网络同步系统
|
|
18
58
|
* @en Network sync system
|
|
19
59
|
*
|
|
20
|
-
* @zh
|
|
21
|
-
* @en Handles state synchronization and interpolation for networked entities
|
|
60
|
+
* @zh 处理网络实体的状态同步和插值,支持快照缓冲、平滑插值和外推
|
|
61
|
+
* @en Handles state synchronization and interpolation for networked entities,
|
|
62
|
+
* supports snapshot buffering, smooth interpolation, and extrapolation
|
|
22
63
|
*/
|
|
23
64
|
export declare class NetworkSyncSystem extends EntitySystem {
|
|
24
|
-
private _netIdToEntity;
|
|
25
|
-
|
|
65
|
+
private readonly _netIdToEntity;
|
|
66
|
+
private readonly _entitySnapshots;
|
|
67
|
+
private readonly _interpolator;
|
|
68
|
+
private readonly _config;
|
|
69
|
+
private _serverTimeOffset;
|
|
70
|
+
private _lastSyncTime;
|
|
71
|
+
private _renderTime;
|
|
72
|
+
constructor(config?: Partial<NetworkSyncConfig>);
|
|
73
|
+
/**
|
|
74
|
+
* @zh 获取配置
|
|
75
|
+
* @en Get configuration
|
|
76
|
+
*/
|
|
77
|
+
get config(): Readonly<NetworkSyncConfig>;
|
|
78
|
+
/**
|
|
79
|
+
* @zh 获取服务器时间偏移
|
|
80
|
+
* @en Get server time offset
|
|
81
|
+
*/
|
|
82
|
+
get serverTimeOffset(): number;
|
|
83
|
+
/**
|
|
84
|
+
* @zh 获取当前渲染时间
|
|
85
|
+
* @en Get current render time
|
|
86
|
+
*/
|
|
87
|
+
get renderTime(): number;
|
|
88
|
+
/**
|
|
89
|
+
* @zh 处理同步消息(新版,带时间戳)
|
|
90
|
+
* @en Handle sync message (new version with timestamp)
|
|
91
|
+
*/
|
|
92
|
+
handleSyncData(data: SyncData): void;
|
|
26
93
|
/**
|
|
27
|
-
* @zh
|
|
28
|
-
* @en Handle sync message
|
|
94
|
+
* @zh 处理同步消息(兼容旧版)
|
|
95
|
+
* @en Handle sync message (backwards compatible)
|
|
29
96
|
*/
|
|
30
97
|
handleSync(msg: SyncMessage): void;
|
|
98
|
+
private _processEntityState;
|
|
31
99
|
protected process(entities: readonly Entity[]): void;
|
|
100
|
+
private _interpolateEntity;
|
|
101
|
+
private _simpleLerp;
|
|
32
102
|
/**
|
|
33
103
|
* @zh 注册网络实体
|
|
34
104
|
* @en Register network entity
|
|
@@ -44,7 +114,16 @@ export declare class NetworkSyncSystem extends EntitySystem {
|
|
|
44
114
|
* @en Get entity ID by network ID
|
|
45
115
|
*/
|
|
46
116
|
getEntityId(netId: number): number | undefined;
|
|
47
|
-
|
|
117
|
+
/**
|
|
118
|
+
* @zh 获取实体的快照缓冲区
|
|
119
|
+
* @en Get entity's snapshot buffer
|
|
120
|
+
*/
|
|
121
|
+
getSnapshotBuffer(netId: number): SnapshotBuffer<ITransformStateWithVelocity> | undefined;
|
|
122
|
+
/**
|
|
123
|
+
* @zh 清空所有快照缓冲
|
|
124
|
+
* @en Clear all snapshot buffers
|
|
125
|
+
*/
|
|
126
|
+
clearSnapshots(): void;
|
|
48
127
|
protected onDestroy(): void;
|
|
49
128
|
}
|
|
50
129
|
//# sourceMappingURL=NetworkSyncSystem.d.ts.map
|
|
@@ -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,CAAA;
|
|
1
|
+
{"version":3,"file":"NetworkSyncSystem.d.ts","sourceRoot":"","sources":["../../src/systems/NetworkSyncSystem.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAiB,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGlF,OAAO,KAAK,EAAE,QAAQ,EAAmB,MAAM,aAAa,CAAA;AAC5D,OAAO,EACH,cAAc,EAKd,KAAK,2BAA2B,EAEnC,MAAM,SAAS,CAAA;AAMhB;;;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;AAWD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAC9B;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB;;;OAGG;IACH,kBAAkB,EAAE,MAAM,CAAA;IAE1B;;;OAGG;IACH,mBAAmB,EAAE,OAAO,CAAA;IAE5B;;;OAGG;IACH,oBAAoB,EAAE,MAAM,CAAA;IAE5B;;;OAGG;IACH,uBAAuB,EAAE,OAAO,CAAA;CACnC;AAcD;;;;;;;GAOG;AACH,qBAAa,iBAAkB,SAAQ,YAAY;IAC/C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiC;IAChE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6C;IAC9E,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuB;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAE3C,OAAO,CAAC,iBAAiB,CAAY;IACrC,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,WAAW,CAAY;gBAEnB,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAM/C;;;OAGG;IACH,IAAI,MAAM,IAAI,QAAQ,CAAC,iBAAiB,CAAC,CAExC;IAED;;;OAGG;IACH,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED;;;OAGG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAapC;;;OAGG;IACH,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;IAuBlC,OAAO,CAAC,mBAAmB;cAoCR,OAAO,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAoB7D,OAAO,CAAC,kBAAkB;IAiD1B,OAAO,CAAC,WAAW;IAYnB;;;OAGG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIrD;;;OAGG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKrC;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI9C;;;OAGG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,2BAA2B,CAAC,GAAG,SAAS;IAIzF;;;OAGG;IACH,cAAc,IAAI,IAAI;cAMH,SAAS,IAAI,IAAI;CAIvC"}
|
package/dist/tokens.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ import type { NetworkService } from './services/NetworkService';
|
|
|
6
6
|
import type { NetworkSyncSystem } from './systems/NetworkSyncSystem';
|
|
7
7
|
import type { NetworkSpawnSystem } from './systems/NetworkSpawnSystem';
|
|
8
8
|
import type { NetworkInputSystem } from './systems/NetworkInputSystem';
|
|
9
|
+
import type { NetworkPredictionSystem } from './systems/NetworkPredictionSystem';
|
|
10
|
+
import type { NetworkAOISystem } from './systems/NetworkAOISystem';
|
|
9
11
|
/**
|
|
10
12
|
* 网络服务令牌
|
|
11
13
|
* Network service token
|
|
@@ -26,4 +28,14 @@ export declare const NetworkSpawnSystemToken: import("@esengine/ecs-framework").
|
|
|
26
28
|
* Network input system token
|
|
27
29
|
*/
|
|
28
30
|
export declare const NetworkInputSystemToken: import("@esengine/ecs-framework").ServiceToken<NetworkInputSystem>;
|
|
31
|
+
/**
|
|
32
|
+
* 网络预测系统令牌
|
|
33
|
+
* Network prediction system token
|
|
34
|
+
*/
|
|
35
|
+
export declare const NetworkPredictionSystemToken: import("@esengine/ecs-framework").ServiceToken<NetworkPredictionSystem>;
|
|
36
|
+
/**
|
|
37
|
+
* 网络 AOI 系统令牌
|
|
38
|
+
* Network AOI system token
|
|
39
|
+
*/
|
|
40
|
+
export declare const NetworkAOISystemToken: import("@esengine/ecs-framework").ServiceToken<NetworkAOISystem>;
|
|
29
41
|
//# sourceMappingURL=tokens.d.ts.map
|
package/dist/tokens.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAMnE;;;GAGG;AACH,eAAO,MAAM,mBAAmB,gEAAuD,CAAC;AAExF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,mEAA6D,CAAC;AAEjG;;;GAGG;AACH,eAAO,MAAM,uBAAuB,oEAA+D,CAAC;AAEpG;;;GAGG;AACH,eAAO,MAAM,uBAAuB,oEAA+D,CAAC;AAEpG;;;GAGG;AACH,eAAO,MAAM,4BAA4B,yEAAyE,CAAC;AAEnH;;;GAGG;AACH,eAAO,MAAM,qBAAqB,kEAA2D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@esengine/network",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "Network synchronization for multiplayer games",
|
|
5
5
|
"esengine": {
|
|
6
6
|
"plugin": true,
|
|
@@ -24,12 +24,21 @@
|
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@esengine/rpc": "1.1.1"
|
|
26
26
|
},
|
|
27
|
+
"peerDependencies": {
|
|
28
|
+
"@esengine/ecs-framework": "2.5.0",
|
|
29
|
+
"@esengine/blueprint": "2.0.0"
|
|
30
|
+
},
|
|
31
|
+
"peerDependenciesMeta": {
|
|
32
|
+
"@esengine/blueprint": {
|
|
33
|
+
"optional": true
|
|
34
|
+
}
|
|
35
|
+
},
|
|
27
36
|
"devDependencies": {
|
|
28
37
|
"rimraf": "^5.0.5",
|
|
29
38
|
"tsup": "^8.0.0",
|
|
30
39
|
"typescript": "^5.3.3",
|
|
31
|
-
"@esengine/blueprint": "
|
|
32
|
-
"@esengine/ecs-framework": "2.
|
|
40
|
+
"@esengine/blueprint": "2.0.0",
|
|
41
|
+
"@esengine/ecs-framework": "2.5.0",
|
|
33
42
|
"@esengine/build-config": "1.0.0"
|
|
34
43
|
},
|
|
35
44
|
"keywords": [
|