@vworlds/vecs-client 1.0.16

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.
Files changed (81) hide show
  1. package/node_modules/@vworlds/vecs-protocol/package.json +14 -0
  2. package/node_modules/@vworlds/vecs-protocol/src/cid.d.ts +14 -0
  3. package/node_modules/@vworlds/vecs-protocol/src/cid.js +58 -0
  4. package/node_modules/@vworlds/vecs-protocol/src/cid.js.map +1 -0
  5. package/node_modules/@vworlds/vecs-protocol/src/index.d.ts +5 -0
  6. package/node_modules/@vworlds/vecs-protocol/src/index.js +5 -0
  7. package/node_modules/@vworlds/vecs-protocol/src/index.js.map +1 -0
  8. package/node_modules/@vworlds/vecs-protocol/src/messages.d.ts +42 -0
  9. package/node_modules/@vworlds/vecs-protocol/src/messages.js +149 -0
  10. package/node_modules/@vworlds/vecs-protocol/src/messages.js.map +1 -0
  11. package/node_modules/@vworlds/vecs-protocol/src/network_world.d.ts +18 -0
  12. package/node_modules/@vworlds/vecs-protocol/src/network_world.js +93 -0
  13. package/node_modules/@vworlds/vecs-protocol/src/network_world.js.map +1 -0
  14. package/node_modules/@vworlds/vecs-protocol/src/rpc.d.ts +36 -0
  15. package/node_modules/@vworlds/vecs-protocol/src/rpc.js +140 -0
  16. package/node_modules/@vworlds/vecs-protocol/src/rpc.js.map +1 -0
  17. package/node_modules/@vworlds/vecs-protocol/src/transport.d.ts +21 -0
  18. package/node_modules/@vworlds/vecs-protocol/src/transport.js +2 -0
  19. package/node_modules/@vworlds/vecs-protocol/src/transport.js.map +1 -0
  20. package/node_modules/@vworlds/vecs-wire/package.json +14 -0
  21. package/node_modules/@vworlds/vecs-wire/src/any.d.ts +27 -0
  22. package/node_modules/@vworlds/vecs-wire/src/any.js +43 -0
  23. package/node_modules/@vworlds/vecs-wire/src/any.js.map +1 -0
  24. package/node_modules/@vworlds/vecs-wire/src/decoder.d.ts +31 -0
  25. package/node_modules/@vworlds/vecs-wire/src/decoder.js +180 -0
  26. package/node_modules/@vworlds/vecs-wire/src/decoder.js.map +1 -0
  27. package/node_modules/@vworlds/vecs-wire/src/decorators.d.ts +4 -0
  28. package/node_modules/@vworlds/vecs-wire/src/decorators.js +139 -0
  29. package/node_modules/@vworlds/vecs-wire/src/decorators.js.map +1 -0
  30. package/node_modules/@vworlds/vecs-wire/src/encoder.d.ts +32 -0
  31. package/node_modules/@vworlds/vecs-wire/src/encoder.js +230 -0
  32. package/node_modules/@vworlds/vecs-wire/src/encoder.js.map +1 -0
  33. package/node_modules/@vworlds/vecs-wire/src/index.d.ts +5 -0
  34. package/node_modules/@vworlds/vecs-wire/src/index.js +5 -0
  35. package/node_modules/@vworlds/vecs-wire/src/index.js.map +1 -0
  36. package/package.json +28 -0
  37. package/vecs-client/src/client_world.d.ts +46 -0
  38. package/vecs-client/src/client_world.js +129 -0
  39. package/vecs-client/src/client_world.js.map +1 -0
  40. package/vecs-client/src/index.d.ts +4 -0
  41. package/vecs-client/src/index.js +4 -0
  42. package/vecs-client/src/index.js.map +1 -0
  43. package/vecs-client/src/interpolator.d.ts +51 -0
  44. package/vecs-client/src/interpolator.js +305 -0
  45. package/vecs-client/src/interpolator.js.map +1 -0
  46. package/vecs-client/src/world_path.d.ts +1 -0
  47. package/vecs-client/src/world_path.js +4 -0
  48. package/vecs-client/src/world_path.js.map +1 -0
  49. package/vecs-protocol/src/cid.d.ts +14 -0
  50. package/vecs-protocol/src/cid.js +58 -0
  51. package/vecs-protocol/src/cid.js.map +1 -0
  52. package/vecs-protocol/src/index.d.ts +5 -0
  53. package/vecs-protocol/src/index.js +5 -0
  54. package/vecs-protocol/src/index.js.map +1 -0
  55. package/vecs-protocol/src/messages.d.ts +42 -0
  56. package/vecs-protocol/src/messages.js +149 -0
  57. package/vecs-protocol/src/messages.js.map +1 -0
  58. package/vecs-protocol/src/network_world.d.ts +18 -0
  59. package/vecs-protocol/src/network_world.js +93 -0
  60. package/vecs-protocol/src/network_world.js.map +1 -0
  61. package/vecs-protocol/src/rpc.d.ts +36 -0
  62. package/vecs-protocol/src/rpc.js +140 -0
  63. package/vecs-protocol/src/rpc.js.map +1 -0
  64. package/vecs-protocol/src/transport.d.ts +21 -0
  65. package/vecs-protocol/src/transport.js +2 -0
  66. package/vecs-protocol/src/transport.js.map +1 -0
  67. package/vecs-wire/src/any.d.ts +27 -0
  68. package/vecs-wire/src/any.js +43 -0
  69. package/vecs-wire/src/any.js.map +1 -0
  70. package/vecs-wire/src/decoder.d.ts +31 -0
  71. package/vecs-wire/src/decoder.js +180 -0
  72. package/vecs-wire/src/decoder.js.map +1 -0
  73. package/vecs-wire/src/decorators.d.ts +4 -0
  74. package/vecs-wire/src/decorators.js +139 -0
  75. package/vecs-wire/src/decorators.js.map +1 -0
  76. package/vecs-wire/src/encoder.d.ts +32 -0
  77. package/vecs-wire/src/encoder.js +230 -0
  78. package/vecs-wire/src/encoder.js.map +1 -0
  79. package/vecs-wire/src/index.d.ts +5 -0
  80. package/vecs-wire/src/index.js +5 -0
  81. package/vecs-wire/src/index.js.map +1 -0
@@ -0,0 +1,230 @@
1
+ import { AnyType, TagSize } from "./any.js";
2
+ function canBeFloat(value) {
3
+ if (value === 0 || !Number.isFinite(value) || Number.isNaN(value)) {
4
+ return true;
5
+ }
6
+ const floatMin = -3.4028235e38;
7
+ const floatMax = 3.4028235e38;
8
+ if (value < floatMin || value > floatMax) {
9
+ return false;
10
+ }
11
+ return value === Math.fround(value);
12
+ }
13
+ function assertBigIntRange(value, min, max, method) {
14
+ if (value < min || value > max) {
15
+ throw new RangeError(`vecs-wire/encoder ${method}: value ${value} is out of range`);
16
+ }
17
+ }
18
+ function assertIntegerRange(value, min, max, method) {
19
+ if (!Number.isInteger(value) || value < min || value > max) {
20
+ throw new RangeError(`vecs-wire/encoder ${method}: value ${value} is out of range`);
21
+ }
22
+ }
23
+ export class Encoder {
24
+ constructor(buffer) {
25
+ this._cursor = 0;
26
+ this._buffer = buffer;
27
+ }
28
+ getBuffer() {
29
+ return this._buffer.subarray(0, this._cursor);
30
+ }
31
+ reset() {
32
+ this._cursor = 0;
33
+ }
34
+ get length() {
35
+ return this._cursor;
36
+ }
37
+ write_varint_u32(value) {
38
+ assertIntegerRange(value, 0, 0xffffffff, "write_varint_u32");
39
+ while (value > 0x7f) {
40
+ if (this._cursor >= this._buffer.length) {
41
+ throw new RangeError("vecs-wire/encoder write_varint_u32: Attempt to write beyond buffer size");
42
+ }
43
+ this._buffer[this._cursor++] = (value & 0x7f) | 0x80;
44
+ value >>>= 7;
45
+ }
46
+ if (this._cursor >= this._buffer.length) {
47
+ throw new RangeError("vecs-wire/encoder write_varint_u32: Attempt to write beyond buffer size");
48
+ }
49
+ this._buffer[this._cursor++] = value;
50
+ }
51
+ write_varint_u64(value) {
52
+ assertBigIntRange(value, 0n, 0xffffffffffffffffn, "write_varint_u64");
53
+ while (value > 0x7fn) {
54
+ if (this._cursor >= this._buffer.length) {
55
+ throw new RangeError("vecs-wire/encoder write_varint_u64: Attempt to write beyond buffer size");
56
+ }
57
+ this._buffer[this._cursor++] = Number((value & 0x7fn) | 0x80n);
58
+ value >>= 7n;
59
+ }
60
+ if (this._cursor >= this._buffer.length) {
61
+ throw new RangeError("vecs-wire/encoder write_varint_u64: Attempt to write beyond buffer size");
62
+ }
63
+ this._buffer[this._cursor++] = Number(value);
64
+ }
65
+ encode_zz_u32(value) {
66
+ return ((value << 1) ^ (value >> 31)) >>> 0;
67
+ }
68
+ encode_zz_u64(value) {
69
+ return (value << 1n) ^ (value >> 63n);
70
+ }
71
+ write_u8(value) {
72
+ assertIntegerRange(value, 0, 0xff, "write_u8");
73
+ if (this._cursor >= this._buffer.length) {
74
+ throw new RangeError("vecs-wire/encoder write_u8: Attempt to write beyond buffer size");
75
+ }
76
+ this._buffer[this._cursor++] = value;
77
+ }
78
+ write_i8(value) {
79
+ assertIntegerRange(value, -0x80, 0x7f, "write_i8");
80
+ this.write_u8(value & 0xff);
81
+ }
82
+ write_bool(value) {
83
+ this.write_u8(value ? 1 : 0);
84
+ }
85
+ write_u16(value) {
86
+ assertIntegerRange(value, 0, 0xffff, "write_u16");
87
+ this.write_varint_u32(value);
88
+ }
89
+ write_u32(value) {
90
+ assertIntegerRange(value, 0, 0xffffffff, "write_u32");
91
+ this.write_varint_u32(value);
92
+ }
93
+ write_u64(value) {
94
+ assertBigIntRange(value, 0n, 0xffffffffffffffffn, "write_u64");
95
+ this.write_varint_u64(value);
96
+ }
97
+ write_i16(value) {
98
+ assertIntegerRange(value, -0x8000, 0x7fff, "write_i16");
99
+ this.write_varint_u32(this.encode_zz_u32(value));
100
+ }
101
+ write_i32(value) {
102
+ assertIntegerRange(value, -0x80000000, 0x7fffffff, "write_i32");
103
+ this.write_varint_u32(this.encode_zz_u32(value));
104
+ }
105
+ write_enum(value) {
106
+ this.write_i32(value);
107
+ }
108
+ write_i64(value) {
109
+ assertBigIntRange(value, -0x8000000000000000n, 0x7fffffffffffffffn, "write_i64");
110
+ this.write_varint_u64(this.encode_zz_u64(value));
111
+ }
112
+ write_f32(value) {
113
+ if (this._cursor + 4 > this._buffer.length) {
114
+ throw new RangeError("vecs-wire/encoder write_f32: Attempt to write beyond buffer size");
115
+ }
116
+ new DataView(this._buffer.buffer, this._buffer.byteOffset + this._cursor, 4).setFloat32(0, value, true);
117
+ this._cursor += 4;
118
+ }
119
+ write_f64(value) {
120
+ if (this._cursor + 8 > this._buffer.length) {
121
+ throw new RangeError("vecs-wire/encoder write_f64: Attempt to write beyond buffer size");
122
+ }
123
+ new DataView(this._buffer.buffer, this._buffer.byteOffset + this._cursor, 8).setFloat64(0, value, true);
124
+ this._cursor += 8;
125
+ }
126
+ _write_buffer_raw(data, len = data.length) {
127
+ if (this._cursor + len > this._buffer.length) {
128
+ throw new RangeError("vecs-wire/encoder write_buffer: Attempt to write beyond buffer size");
129
+ }
130
+ this._buffer.set(data.subarray(0, len), this._cursor);
131
+ this._cursor += len;
132
+ }
133
+ write_buffer(data, len = data.length) {
134
+ this.write_u32(len);
135
+ this._write_buffer_raw(data, len);
136
+ }
137
+ write_string(value) {
138
+ const encodedString = new TextEncoder().encode(value);
139
+ this.write_u32(encodedString.length);
140
+ this._write_buffer_raw(encodedString, encodedString.length);
141
+ }
142
+ write_any(value) {
143
+ switch (typeof value) {
144
+ case "undefined":
145
+ this.write(new TagSize(AnyType.undefined, 1));
146
+ break;
147
+ case "boolean":
148
+ this.write(new TagSize(AnyType.boolean, value ? 1 : 2));
149
+ break;
150
+ case "string": {
151
+ const encodedString = new TextEncoder().encode(value);
152
+ if (encodedString.length === 0) {
153
+ this.write(new TagSize(AnyType.empty_string, 1));
154
+ }
155
+ else {
156
+ this.write(new TagSize(AnyType.string, encodedString.length));
157
+ this._write_buffer_raw(encodedString, encodedString.length);
158
+ }
159
+ break;
160
+ }
161
+ case "number":
162
+ if (Number.isInteger(value)) {
163
+ this.write(new TagSize(AnyType.number_integer, 8));
164
+ this.write_i64(BigInt(value));
165
+ }
166
+ else if (canBeFloat(value)) {
167
+ this.write(new TagSize(AnyType.number_float, 4));
168
+ this.write_f32(value);
169
+ }
170
+ else {
171
+ this.write(new TagSize(AnyType.number_float, 8));
172
+ this.write_f64(value);
173
+ }
174
+ break;
175
+ case "bigint":
176
+ if (value < 0n) {
177
+ this.write(new TagSize(AnyType.bigint_integer, 8));
178
+ this.write_i64(value);
179
+ }
180
+ else {
181
+ this.write(new TagSize(AnyType.bigint_unsigned, 8));
182
+ this.write_u64(value);
183
+ }
184
+ break;
185
+ case "object":
186
+ if (value === null) {
187
+ this.write(new TagSize(AnyType.null, 1));
188
+ }
189
+ else if (value instanceof Uint8Array) {
190
+ this.write(new TagSize(AnyType.binary, value.length));
191
+ this._write_buffer_raw(value);
192
+ }
193
+ else if (Array.isArray(value)) {
194
+ if (value.length === 0) {
195
+ this.write(new TagSize(AnyType.empty_array, 1));
196
+ }
197
+ else {
198
+ this.write(new TagSize(AnyType.array, value.length));
199
+ value.forEach((v) => {
200
+ this.write_any(v);
201
+ });
202
+ }
203
+ }
204
+ else {
205
+ const entries = Object.entries(value);
206
+ if (entries.length === 0) {
207
+ this.write(new TagSize(AnyType.empty_object, 1));
208
+ }
209
+ else {
210
+ this.write(new TagSize(AnyType.object, entries.length));
211
+ entries.forEach(([key, entryValue]) => {
212
+ this.write_string(key);
213
+ this.write_any(entryValue);
214
+ });
215
+ }
216
+ }
217
+ break;
218
+ default:
219
+ throw new Error(`Unsupported type ${typeof value} encoding any`);
220
+ }
221
+ }
222
+ write(value) {
223
+ const encodable = value;
224
+ if (typeof encodable.wireEncode !== "function") {
225
+ throw new TypeError("vecs-wire/encoder write requires a wireEncode method");
226
+ }
227
+ encodable.wireEncode(this);
228
+ }
229
+ }
230
+ //# sourceMappingURL=encoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoder.js","sourceRoot":"","sources":["../../../../vecs-wire/src/encoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { AnyType, TagSize } from "./any.js";
2
+ export { type } from "./decorators.js";
3
+ export type { WireConstructor, WireScalarType, WireTypeSpec } from "./decorators.js";
4
+ export { Decoder, type DecodableType, type IDecodable } from "./decoder.js";
5
+ export { Encoder, type IEncodable } from "./encoder.js";
@@ -0,0 +1,5 @@
1
+ export { AnyType, TagSize } from "./any.js";
2
+ export { type } from "./decorators.js";
3
+ export { Decoder } from "./decoder.js";
4
+ export { Encoder } from "./encoder.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../vecs-wire/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,OAAO,EAAE,OAAO,EAAuC,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAmB,MAAM,cAAc,CAAC"}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@vworlds/vecs-client",
3
+ "version": "1.0.16",
4
+ "type": "module",
5
+ "main": "./vecs-client/src/index.js",
6
+ "types": "./vecs-client/src/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./vecs-client/src/index.d.ts",
10
+ "default": "./vecs-client/src/index.js"
11
+ }
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/vworlds/vecs.git"
16
+ },
17
+ "dependencies": {
18
+ "@vworlds/vecs": "1.0.16",
19
+ "@vworlds/vecs-protocol": "1.0.16",
20
+ "@vworlds/vecs-wire": "1.0.16",
21
+ "@vworlds/dgram-client": "^1.0.7"
22
+ },
23
+ "bundleDependencies": [
24
+ "@vworlds/vecs-protocol",
25
+ "@vworlds/vecs-wire"
26
+ ],
27
+ "license": "UNLICENSED"
28
+ }
@@ -0,0 +1,46 @@
1
+ import { NetworkWorld, type NetworkWorldOptions, type RPCHandler, type VecsSocket } from "@vworlds/vecs-protocol";
2
+ import { type ComponentInstance, type IPhase } from "@vworlds/vecs";
3
+ import { ComponentSnapshot } from "./interpolator.js";
4
+ export interface ClientWorldOptions extends NetworkWorldOptions {
5
+ socket?: VecsSocket;
6
+ encodeBufferSize?: number;
7
+ interpolatorBucketLength?: number;
8
+ serverTickIntervalMs?: number;
9
+ }
10
+ export interface InstallSystemsOptions {
11
+ applyPhase?: string | IPhase;
12
+ sendPhase?: string | IPhase;
13
+ }
14
+ export interface DgramConnectOptions extends Omit<ClientWorldOptions, "socket"> {
15
+ host: string;
16
+ port: number;
17
+ worldName: string;
18
+ protocol?: "http" | "https";
19
+ apiBasePath?: string;
20
+ rtcConfig?: RTCConfiguration;
21
+ }
22
+ export declare class ClientWorld extends NetworkWorld {
23
+ private _socket;
24
+ private readonly _rpc;
25
+ private readonly _rpcInbox;
26
+ private readonly _interpolator;
27
+ private readonly _encodeBuffer;
28
+ private _input;
29
+ private _systemsInstalled;
30
+ constructor(options?: ClientWorldOptions);
31
+ static connectDgram(options: DgramConnectOptions): Promise<ClientWorld>;
32
+ attachSocket(socket: VecsSocket): void;
33
+ installSystems(options?: InstallSystemsOptions): void;
34
+ setInput(input: unknown): void;
35
+ invoke(rpcId: number, params?: unknown[]): Promise<unknown[]>;
36
+ listen(rpcId: number, handler: RPCHandler): void;
37
+ onDisconnect(handler: () => void): void;
38
+ apply(now: number): void;
39
+ send(): void;
40
+ close(): void;
41
+ private _receive;
42
+ private _pushDiff;
43
+ decodeComponentSnapshot(snapshot: ComponentSnapshot): ComponentInstance;
44
+ private _applySnapshot;
45
+ private _removeComponent;
46
+ }
@@ -0,0 +1,129 @@
1
+ import { Client2Server, Server2Client, SessionRPC, ALL_COMPONENTS, cid_unpack, NetworkWorld, } from "@vworlds/vecs-protocol";
2
+ import { Decoder, Encoder } from "@vworlds/vecs-wire";
3
+ import { Interpolator, diffFromStateDiff } from "./interpolator.js";
4
+ import { worldPath } from "./world_path.js";
5
+ const DEFAULT_CLIENT_LOCAL_ENTITY_ID_START = 10000;
6
+ export class ClientWorld extends NetworkWorld {
7
+ constructor(options = {}) {
8
+ super({
9
+ ...options,
10
+ localEntityIdStart: options.localEntityIdStart ?? DEFAULT_CLIENT_LOCAL_ENTITY_ID_START,
11
+ networkEntityReuseWaitFrames: 0,
12
+ });
13
+ this._rpc = new SessionRPC();
14
+ this._rpcInbox = [];
15
+ this._systemsInstalled = false;
16
+ this._encodeBuffer = new Uint8Array(options.encodeBufferSize ?? 64 * 1024);
17
+ this._interpolator = new Interpolator(options.interpolatorBucketLength ?? 3, options.serverTickIntervalMs ?? 1000 / 30, (snapshot) => this.decodeComponentSnapshot(snapshot));
18
+ if (options.socket) {
19
+ this.attachSocket(options.socket);
20
+ }
21
+ }
22
+ static async connectDgram(options) {
23
+ const { ClientSocket } = (await import("@vworlds/dgram-client"));
24
+ const basePath = worldPath(options.apiBasePath, options.worldName);
25
+ const socket = new ClientSocket(`${options.protocol ?? "http"}://${options.host}:${options.port}${basePath}`, options.rtcConfig ?? {});
26
+ const client = new ClientWorld({ ...options, socket });
27
+ await socket.connect();
28
+ return client;
29
+ }
30
+ attachSocket(socket) {
31
+ this._socket = socket;
32
+ socket.on("receive", (data) => this._receive(data));
33
+ }
34
+ installSystems(options = {}) {
35
+ if (this._systemsInstalled) {
36
+ return;
37
+ }
38
+ this._systemsInstalled = true;
39
+ const applyPhase = options.applyPhase ?? "update";
40
+ const sendPhase = options.sendPhase ?? "update";
41
+ this.system("ClientWorld:Apply")
42
+ .phase(applyPhase)
43
+ .run((now) => this.apply(now));
44
+ this.system("ClientWorld:Send")
45
+ .phase(sendPhase)
46
+ .run(() => this.send());
47
+ }
48
+ setInput(input) {
49
+ this._input = input;
50
+ }
51
+ invoke(rpcId, params = []) {
52
+ return this._rpc.invoke(rpcId, params).then((response) => response.params);
53
+ }
54
+ listen(rpcId, handler) {
55
+ this._rpc.listen(rpcId, handler);
56
+ }
57
+ onDisconnect(handler) {
58
+ this._socket?.on("disconnect", handler);
59
+ }
60
+ apply(now) {
61
+ if (this._rpcInbox.length > 0) {
62
+ const incoming = this._rpcInbox.splice(0);
63
+ this._rpc.process(incoming);
64
+ }
65
+ const diff = this._interpolator.pull(now);
66
+ diff.snapshots.forEach((snapshot) => this._applySnapshot(snapshot));
67
+ diff.removed?.forEach((key) => {
68
+ const [eid, type] = cid_unpack(key);
69
+ this._removeComponent(eid, type);
70
+ });
71
+ }
72
+ send() {
73
+ if (!this._socket) {
74
+ return;
75
+ }
76
+ const rpc = this._rpc.getOutgoing();
77
+ const ackFrame = this._interpolator.version < 0 ? 0 : this._interpolator.version;
78
+ const encoder = new Encoder(this._encodeBuffer);
79
+ encoder.write(new Client2Server({ ackFrame, input: this._input, rpc }));
80
+ this._socket.send(encoder.getBuffer());
81
+ }
82
+ close() {
83
+ this._socket?.close();
84
+ }
85
+ _receive(data) {
86
+ const message = new Decoder(data).read(Server2Client);
87
+ if (message.rpc.length > 0) {
88
+ this._rpcInbox.push(...message.rpc);
89
+ }
90
+ if (message.diff) {
91
+ this._pushDiff(message.diff);
92
+ }
93
+ }
94
+ _pushDiff(sd) {
95
+ const diff = diffFromStateDiff(sd);
96
+ this._interpolator.push(diff);
97
+ }
98
+ decodeComponentSnapshot(snapshot) {
99
+ if (!(snapshot.payload instanceof Uint8Array)) {
100
+ return snapshot.payload;
101
+ }
102
+ const registered = this.getNetworkComponent(snapshot.type);
103
+ if (!registered) {
104
+ throw new Error(`Received snapshot for unregistered component type ${snapshot.type}`);
105
+ }
106
+ return (snapshot.payload = new Decoder(snapshot.payload).read(registered.Class));
107
+ }
108
+ _applySnapshot(snapshot) {
109
+ const component = this.decodeComponentSnapshot(snapshot);
110
+ const entity = this.getOrCreateEntity(snapshot.eid);
111
+ entity.attach(component);
112
+ }
113
+ _removeComponent(eid, type) {
114
+ // Merged/interpolated client diffs can contain a net removal for an entity
115
+ // whose create snapshot was compressed away before it materialized locally.
116
+ const entity = this.getEntity(eid);
117
+ if (!entity) {
118
+ return;
119
+ }
120
+ if (type === ALL_COMPONENTS) {
121
+ entity.destroy();
122
+ return;
123
+ }
124
+ if (this.getNetworkComponent(type) && entity.get(type)) {
125
+ entity.remove(type);
126
+ }
127
+ }
128
+ }
129
+ //# sourceMappingURL=client_world.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client_world.js","sourceRoot":"","sources":["../../../src/client_world.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { ComponentSnapshot, Diff, Interpolator } from "./interpolator.js";
2
+ export { ClientWorld } from "./client_world.js";
3
+ export type { ClientWorldOptions, DgramConnectOptions, InstallSystemsOptions, } from "./client_world.js";
4
+ export { worldPath } from "./world_path.js";
@@ -0,0 +1,4 @@
1
+ export { ComponentSnapshot, Diff, Interpolator } from "./interpolator.js";
2
+ export { ClientWorld } from "./client_world.js";
3
+ export { worldPath } from "./world_path.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMhD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { StateDiff, type CID } from "@vworlds/vecs-protocol";
2
+ import { type ComponentInstance } from "@vworlds/vecs";
3
+ export interface IPosition {
4
+ readonly x: number;
5
+ readonly y: number;
6
+ }
7
+ type DecodeComponentSnapshot = (snapshot: ComponentSnapshot) => ComponentInstance;
8
+ export declare class ComponentSnapshot {
9
+ readonly eid: number;
10
+ readonly type: number;
11
+ payload: Uint8Array | ComponentInstance;
12
+ readonly cid: CID;
13
+ constructor(eid: number, type: number, payload: Uint8Array | ComponentInstance);
14
+ }
15
+ export declare class Diff {
16
+ from: number;
17
+ to: number;
18
+ removed?: number[] | undefined;
19
+ snapshots: ComponentSnapshot[];
20
+ private _smap;
21
+ constructor(from: number, to: number, removed?: number[] | undefined);
22
+ get smap(): Map<number, ComponentSnapshot>;
23
+ set smap(v: Map<number, ComponentSnapshot>);
24
+ updateSnapshotsFromMap(): void;
25
+ }
26
+ export declare function diffFromStateDiff(sd: StateDiff): Diff;
27
+ export declare class Interpolator {
28
+ private max_length;
29
+ private server_tick_interval;
30
+ private readonly _decodeComponentSnapshot?;
31
+ private _state;
32
+ private _stateVersion;
33
+ private _first;
34
+ readonly bucket: Array<Diff | undefined>;
35
+ version: number;
36
+ private _tServ;
37
+ private _lastTime;
38
+ constructor(max_length?: number, // max bucket length
39
+ server_tick_interval?: number, // server tick interval FPS configuration
40
+ _decodeComponentSnapshot?: DecodeComponentSnapshot | undefined);
41
+ private _updateState;
42
+ private _pop;
43
+ pull(now: number): Diff;
44
+ push(diff: Diff): void;
45
+ private _decodePositionSnapshot;
46
+ private _interpolatePositions;
47
+ }
48
+ export declare function merge(a: Diff | undefined, b: Diff, check?: boolean): Diff;
49
+ export declare function merge(a: Diff, b: Diff | undefined, check?: boolean): Diff;
50
+ export declare function merge(a: Diff | undefined, b: Diff | undefined, check?: boolean): Diff | undefined;
51
+ export {};