topazcube 0.1.31 → 0.1.35
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/LICENSE.txt +0 -0
- package/README.md +0 -0
- package/dist/Renderer.cjs +20844 -0
- package/dist/Renderer.cjs.map +1 -0
- package/dist/Renderer.js +20827 -0
- package/dist/Renderer.js.map +1 -0
- package/dist/client.cjs +91 -260
- package/dist/client.cjs.map +1 -1
- package/dist/client.js +68 -215
- package/dist/client.js.map +1 -1
- package/dist/server.cjs +165 -432
- package/dist/server.cjs.map +1 -1
- package/dist/server.js +117 -370
- package/dist/server.js.map +1 -1
- package/dist/terminal.cjs +113 -200
- package/dist/terminal.cjs.map +1 -1
- package/dist/terminal.js +50 -51
- package/dist/terminal.js.map +1 -1
- package/dist/utils-CRhi1BDa.cjs +259 -0
- package/dist/utils-CRhi1BDa.cjs.map +1 -0
- package/dist/utils-D7tXt6-2.js +260 -0
- package/dist/utils-D7tXt6-2.js.map +1 -0
- package/package.json +19 -15
- package/src/{client.ts → network/client.js} +170 -403
- package/src/{compress-browser.ts → network/compress-browser.js} +2 -4
- package/src/{compress-node.ts → network/compress-node.js} +8 -14
- package/src/{server.ts → network/server.js} +229 -317
- package/src/{terminal.js → network/terminal.js} +0 -0
- package/src/{topazcube.ts → network/topazcube.js} +2 -2
- package/src/network/utils.js +375 -0
- package/src/renderer/Camera.js +191 -0
- package/src/renderer/DebugUI.js +703 -0
- package/src/renderer/Geometry.js +1049 -0
- package/src/renderer/Material.js +64 -0
- package/src/renderer/Mesh.js +211 -0
- package/src/renderer/Node.js +112 -0
- package/src/renderer/Pipeline.js +645 -0
- package/src/renderer/Renderer.js +1496 -0
- package/src/renderer/Skin.js +792 -0
- package/src/renderer/Texture.js +584 -0
- package/src/renderer/core/AssetManager.js +394 -0
- package/src/renderer/core/CullingSystem.js +308 -0
- package/src/renderer/core/EntityManager.js +541 -0
- package/src/renderer/core/InstanceManager.js +343 -0
- package/src/renderer/core/ParticleEmitter.js +358 -0
- package/src/renderer/core/ParticleSystem.js +564 -0
- package/src/renderer/core/SpriteSystem.js +349 -0
- package/src/renderer/gltf.js +563 -0
- package/src/renderer/math.js +161 -0
- package/src/renderer/rendering/HistoryBufferManager.js +333 -0
- package/src/renderer/rendering/ProbeCapture.js +1495 -0
- package/src/renderer/rendering/ReflectionProbeManager.js +352 -0
- package/src/renderer/rendering/RenderGraph.js +2258 -0
- package/src/renderer/rendering/passes/AOPass.js +308 -0
- package/src/renderer/rendering/passes/AmbientCapturePass.js +593 -0
- package/src/renderer/rendering/passes/BasePass.js +101 -0
- package/src/renderer/rendering/passes/BloomPass.js +420 -0
- package/src/renderer/rendering/passes/CRTPass.js +724 -0
- package/src/renderer/rendering/passes/FogPass.js +445 -0
- package/src/renderer/rendering/passes/GBufferPass.js +730 -0
- package/src/renderer/rendering/passes/HiZPass.js +744 -0
- package/src/renderer/rendering/passes/LightingPass.js +753 -0
- package/src/renderer/rendering/passes/ParticlePass.js +841 -0
- package/src/renderer/rendering/passes/PlanarReflectionPass.js +456 -0
- package/src/renderer/rendering/passes/PostProcessPass.js +405 -0
- package/src/renderer/rendering/passes/ReflectionPass.js +157 -0
- package/src/renderer/rendering/passes/RenderPostPass.js +364 -0
- package/src/renderer/rendering/passes/SSGIPass.js +266 -0
- package/src/renderer/rendering/passes/SSGITilePass.js +305 -0
- package/src/renderer/rendering/passes/ShadowPass.js +2072 -0
- package/src/renderer/rendering/passes/TransparentPass.js +831 -0
- package/src/renderer/rendering/passes/VolumetricFogPass.js +715 -0
- package/src/renderer/rendering/shaders/ao.wgsl +182 -0
- package/src/renderer/rendering/shaders/bloom.wgsl +97 -0
- package/src/renderer/rendering/shaders/bloom_blur.wgsl +80 -0
- package/src/renderer/rendering/shaders/crt.wgsl +455 -0
- package/src/renderer/rendering/shaders/depth_copy.wgsl +17 -0
- package/src/renderer/rendering/shaders/geometry.wgsl +580 -0
- package/src/renderer/rendering/shaders/hiz_reduce.wgsl +114 -0
- package/src/renderer/rendering/shaders/light_culling.wgsl +204 -0
- package/src/renderer/rendering/shaders/lighting.wgsl +932 -0
- package/src/renderer/rendering/shaders/lighting_common.wgsl +143 -0
- package/src/renderer/rendering/shaders/particle_render.wgsl +672 -0
- package/src/renderer/rendering/shaders/particle_simulate.wgsl +440 -0
- package/src/renderer/rendering/shaders/postproc.wgsl +293 -0
- package/src/renderer/rendering/shaders/render_post.wgsl +289 -0
- package/src/renderer/rendering/shaders/shadow.wgsl +117 -0
- package/src/renderer/rendering/shaders/ssgi.wgsl +266 -0
- package/src/renderer/rendering/shaders/ssgi_accumulate.wgsl +114 -0
- package/src/renderer/rendering/shaders/ssgi_propagate.wgsl +132 -0
- package/src/renderer/rendering/shaders/volumetric_blur.wgsl +80 -0
- package/src/renderer/rendering/shaders/volumetric_composite.wgsl +80 -0
- package/src/renderer/rendering/shaders/volumetric_raymarch.wgsl +634 -0
- package/src/renderer/utils/BoundingSphere.js +439 -0
- package/src/renderer/utils/Frustum.js +281 -0
- package/src/renderer/utils/Raycaster.js +761 -0
- package/dist/client.d.cts +0 -211
- package/dist/client.d.ts +0 -211
- package/dist/server.d.cts +0 -120
- package/dist/server.d.ts +0 -120
- package/dist/terminal.d.cts +0 -64
- package/dist/terminal.d.ts +0 -64
- package/src/utils.ts +0 -403
package/dist/client.js
CHANGED
|
@@ -1,136 +1,7 @@
|
|
|
1
|
-
// src/client.ts
|
|
2
1
|
import { applyOperation } from "fast-json-patch";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import { FLOAT32_OPTIONS } from "msgpackr";
|
|
7
|
-
var { ALWAYS } = FLOAT32_OPTIONS;
|
|
8
|
-
var packr = new Packr({
|
|
9
|
-
useFloat32: ALWAYS
|
|
10
|
-
});
|
|
11
|
-
function encode(obj) {
|
|
12
|
-
return packr.pack(obj);
|
|
13
|
-
}
|
|
14
|
-
function decode(data) {
|
|
15
|
-
return packr.unpack(data);
|
|
16
|
-
}
|
|
17
|
-
function reactive(name, object, callback, path = "", excludedProperties = false) {
|
|
18
|
-
if (object === null || typeof object !== "object") {
|
|
19
|
-
return object;
|
|
20
|
-
}
|
|
21
|
-
function isReactive(p) {
|
|
22
|
-
let r = true;
|
|
23
|
-
if (p.startsWith("_")) {
|
|
24
|
-
r = false;
|
|
25
|
-
}
|
|
26
|
-
if (excludedProperties) {
|
|
27
|
-
if (excludedProperties[p]) {
|
|
28
|
-
r = false;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
if (path == "/entities") {
|
|
32
|
-
r = false;
|
|
33
|
-
}
|
|
34
|
-
return r;
|
|
35
|
-
}
|
|
36
|
-
for (const property in object) {
|
|
37
|
-
if (isReactive(property)) {
|
|
38
|
-
object[property] = reactive(
|
|
39
|
-
name,
|
|
40
|
-
object[property],
|
|
41
|
-
callback,
|
|
42
|
-
path + "/" + property,
|
|
43
|
-
excludedProperties
|
|
44
|
-
);
|
|
45
|
-
} else {
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return new Proxy(object, {
|
|
49
|
-
get(target, property, receiver) {
|
|
50
|
-
return Reflect.get(target, property, receiver);
|
|
51
|
-
},
|
|
52
|
-
set(target, property, value) {
|
|
53
|
-
let newvalue;
|
|
54
|
-
let pn = path + "/" + String(property);
|
|
55
|
-
if (isReactive(String(property))) {
|
|
56
|
-
newvalue = reactive(name, value, callback, pn, excludedProperties);
|
|
57
|
-
callback(name, "replace", target, pn, newvalue);
|
|
58
|
-
} else {
|
|
59
|
-
newvalue = value;
|
|
60
|
-
}
|
|
61
|
-
return Reflect.set(target, property, newvalue);
|
|
62
|
-
},
|
|
63
|
-
deleteProperty(target, property) {
|
|
64
|
-
let pn = path + "/" + String(property);
|
|
65
|
-
if (isReactive(String(property))) {
|
|
66
|
-
callback(name, "remove", target, pn, null);
|
|
67
|
-
}
|
|
68
|
-
delete target[property];
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
function msgop(op) {
|
|
74
|
-
let nop = {};
|
|
75
|
-
if (!op.o) {
|
|
76
|
-
nop.op = "replace";
|
|
77
|
-
} else {
|
|
78
|
-
nop.op = {
|
|
79
|
-
a: "add",
|
|
80
|
-
r: "remove",
|
|
81
|
-
d: "delete",
|
|
82
|
-
t: "test"
|
|
83
|
-
}[op.o];
|
|
84
|
-
}
|
|
85
|
-
nop.path = op.p;
|
|
86
|
-
nop.value = op.v;
|
|
87
|
-
return nop;
|
|
88
|
-
}
|
|
89
|
-
function opmsg(op, target, path, value) {
|
|
90
|
-
let c = { p: path, v: value };
|
|
91
|
-
if (op != "replace") {
|
|
92
|
-
c.o = {
|
|
93
|
-
add: "a",
|
|
94
|
-
remove: "r",
|
|
95
|
-
delete: "d",
|
|
96
|
-
test: "t"
|
|
97
|
-
}[op];
|
|
98
|
-
}
|
|
99
|
-
return c;
|
|
100
|
-
}
|
|
101
|
-
function decode_uint32(byteArray, offset = 0) {
|
|
102
|
-
let p = offset;
|
|
103
|
-
return (byteArray[p++] & 127) << 24 | byteArray[p++] << 16 | byteArray[p++] << 8 | byteArray[p];
|
|
104
|
-
}
|
|
105
|
-
function decode_uint24(byteArray, offset = 0) {
|
|
106
|
-
let p = offset;
|
|
107
|
-
return byteArray[p++] << 16 | byteArray[p++] << 8 | byteArray[p];
|
|
108
|
-
}
|
|
109
|
-
function decode_uint16(byteArray, offset = 0) {
|
|
110
|
-
let p = offset;
|
|
111
|
-
return byteArray[p++] << 8 | byteArray[p];
|
|
112
|
-
}
|
|
113
|
-
function decode_fp168(byteArray, offset = 0) {
|
|
114
|
-
const divider = (byteArray[offset] & 128) === 128 ? -256 : 256;
|
|
115
|
-
byteArray[offset] &= 127;
|
|
116
|
-
const fp = decode_uint24(byteArray, offset);
|
|
117
|
-
return fp / divider;
|
|
118
|
-
}
|
|
119
|
-
function decode_fp1616(byteArray, offset = 0) {
|
|
120
|
-
const divider = (byteArray[offset] & 128) === 128 ? -65536 : 65536;
|
|
121
|
-
byteArray[offset] &= 127;
|
|
122
|
-
const fp = decode_uint32(byteArray, offset);
|
|
123
|
-
return fp / divider;
|
|
124
|
-
}
|
|
125
|
-
function decode_fp412(byteArray, offset = 0) {
|
|
126
|
-
const divider = (byteArray[offset] & 128) === 128 ? -4096 : 4096;
|
|
127
|
-
byteArray[offset] &= 127;
|
|
128
|
-
const fp = decode_uint16(byteArray, offset);
|
|
129
|
-
return fp / divider;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
// src/compress-browser.ts
|
|
133
|
-
var browserFormat = "gzip";
|
|
2
|
+
import { d as decode, e as encode, r as reactive, m as msgop, o as opmsg, a as decode_uint32, b as decode_fp168, c as decode_fp412, f as decode_fp1616 } from "./utils-D7tXt6-2.js";
|
|
3
|
+
import { vec3, quat } from "gl-matrix";
|
|
4
|
+
const browserFormat = "gzip";
|
|
134
5
|
async function decompress(buffer) {
|
|
135
6
|
if (typeof DecompressionStream !== "undefined") {
|
|
136
7
|
try {
|
|
@@ -146,13 +17,9 @@ async function decompress(buffer) {
|
|
|
146
17
|
throw new Error("DecompressionStream not supported");
|
|
147
18
|
}
|
|
148
19
|
}
|
|
149
|
-
|
|
150
|
-
// src/client.ts
|
|
151
|
-
import { vec3, quat } from "gl-matrix";
|
|
152
|
-
var TopazCubeClient = class {
|
|
20
|
+
class TopazCubeClient {
|
|
153
21
|
DEBUG = false;
|
|
154
22
|
CYCLE = 200;
|
|
155
|
-
// update/patch rate in ms
|
|
156
23
|
url = "";
|
|
157
24
|
documents = {};
|
|
158
25
|
autoReconnect = true;
|
|
@@ -170,13 +37,11 @@ var TopazCubeClient = class {
|
|
|
170
37
|
recRTCBps: 0,
|
|
171
38
|
ping: 0,
|
|
172
39
|
stdiff: 0
|
|
173
|
-
// server time difference
|
|
174
40
|
};
|
|
175
41
|
lastFullState = 0;
|
|
176
42
|
lastPatch = 0;
|
|
177
43
|
_chunks = {};
|
|
178
44
|
le = true;
|
|
179
|
-
// Server is little endian
|
|
180
45
|
_documentChanges = {};
|
|
181
46
|
ID = 0;
|
|
182
47
|
socket = null;
|
|
@@ -185,9 +50,7 @@ var TopazCubeClient = class {
|
|
|
185
50
|
_remoteCandidates = [];
|
|
186
51
|
_offerSent = false;
|
|
187
52
|
_dataChannel = null;
|
|
188
|
-
// our data channel
|
|
189
53
|
_serverDataChannel = null;
|
|
190
|
-
// server data channel
|
|
191
54
|
_webRTCConnected = false;
|
|
192
55
|
isInterpolated = false;
|
|
193
56
|
_lastInterpolate = Date.now();
|
|
@@ -202,11 +65,8 @@ var TopazCubeClient = class {
|
|
|
202
65
|
_pingiv = null;
|
|
203
66
|
constructor({
|
|
204
67
|
url,
|
|
205
|
-
// server url
|
|
206
68
|
autoReconnect = true,
|
|
207
|
-
// auto reconnect on disconnect
|
|
208
69
|
allowSync = true,
|
|
209
|
-
// allow sync on connect
|
|
210
70
|
allowWebRTC = false,
|
|
211
71
|
DEBUG = false
|
|
212
72
|
}) {
|
|
@@ -232,7 +92,6 @@ var TopazCubeClient = class {
|
|
|
232
92
|
error(...args) {
|
|
233
93
|
console.error(...args);
|
|
234
94
|
}
|
|
235
|
-
/*= UPDATE ===================================================================*/
|
|
236
95
|
_startLoop() {
|
|
237
96
|
if (this._loopiv) {
|
|
238
97
|
clearInterval(this._loopiv);
|
|
@@ -278,27 +137,25 @@ var TopazCubeClient = class {
|
|
|
278
137
|
this.isPatched = false;
|
|
279
138
|
this.le = true;
|
|
280
139
|
}
|
|
281
|
-
/*= INTERPOLATION ============================================================*/
|
|
282
|
-
// to be called in display rate (like 60fps) to interpolate .position, .rotation and .scale
|
|
283
140
|
interpolate() {
|
|
284
|
-
|
|
285
|
-
|
|
141
|
+
const now = Date.now();
|
|
142
|
+
const dt = now - this._lastInterpolate;
|
|
286
143
|
this._lastInterpolate = now;
|
|
287
144
|
if (dt <= 0 || dt > 200) {
|
|
288
145
|
return;
|
|
289
146
|
}
|
|
290
147
|
this.isInterpolated = true;
|
|
291
|
-
for (
|
|
292
|
-
|
|
293
|
-
|
|
148
|
+
for (const name in this.documents) {
|
|
149
|
+
const doc = this.documents[name];
|
|
150
|
+
const entities = doc?.entities;
|
|
294
151
|
if (!entities) {
|
|
295
152
|
continue;
|
|
296
153
|
}
|
|
297
|
-
for (
|
|
298
|
-
|
|
154
|
+
for (const id in entities) {
|
|
155
|
+
const e = entities[id];
|
|
299
156
|
if (e._lpostime1 && e._lpostime2) {
|
|
300
|
-
|
|
301
|
-
|
|
157
|
+
const t1 = e._lpostime1;
|
|
158
|
+
const t2 = e._lpostime2;
|
|
302
159
|
const interval = t2 - t1;
|
|
303
160
|
const elapsed = now - t1;
|
|
304
161
|
e.pelapsed = elapsed;
|
|
@@ -313,8 +170,8 @@ var TopazCubeClient = class {
|
|
|
313
170
|
}
|
|
314
171
|
}
|
|
315
172
|
if (e._lrottime1 && e._lrottime2) {
|
|
316
|
-
|
|
317
|
-
|
|
173
|
+
const t1 = e._lrottime1;
|
|
174
|
+
const t2 = e._lrottime2;
|
|
318
175
|
const interval = t2 - t1;
|
|
319
176
|
const elapsed = now - t1;
|
|
320
177
|
e.relapsed = elapsed;
|
|
@@ -332,7 +189,6 @@ var TopazCubeClient = class {
|
|
|
332
189
|
}
|
|
333
190
|
this.isInterpolated = false;
|
|
334
191
|
}
|
|
335
|
-
/*= CONNECTION ===============================================================*/
|
|
336
192
|
subscribe(name) {
|
|
337
193
|
this.documents[name] = {};
|
|
338
194
|
this.send({ c: "sub", n: name });
|
|
@@ -350,11 +206,11 @@ var TopazCubeClient = class {
|
|
|
350
206
|
this.log("connecting...");
|
|
351
207
|
this.socket = new WebSocket(this.url);
|
|
352
208
|
this.socket.onmessage = async (event) => {
|
|
353
|
-
|
|
209
|
+
const buffer = await event.data.arrayBuffer();
|
|
354
210
|
this.stats.rec += buffer.byteLength;
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
211
|
+
const dec = await decompress(buffer);
|
|
212
|
+
const decu = new Uint8Array(dec);
|
|
213
|
+
const message = decode(decu);
|
|
358
214
|
this._onMessage(message);
|
|
359
215
|
};
|
|
360
216
|
this.socket.onclose = (_event) => {
|
|
@@ -441,7 +297,6 @@ var TopazCubeClient = class {
|
|
|
441
297
|
this.send({ c: "ping", ct: Date.now() });
|
|
442
298
|
}
|
|
443
299
|
}
|
|
444
|
-
/*= MESSAGES =================================================================*/
|
|
445
300
|
onChange(_name, _doc, patch) {
|
|
446
301
|
}
|
|
447
302
|
onMessage(_message) {
|
|
@@ -451,7 +306,7 @@ var TopazCubeClient = class {
|
|
|
451
306
|
return;
|
|
452
307
|
}
|
|
453
308
|
try {
|
|
454
|
-
|
|
309
|
+
const enc = encode(operation);
|
|
455
310
|
this.stats.send += enc.byteLength;
|
|
456
311
|
if (this.socket) {
|
|
457
312
|
this.socket.send(enc);
|
|
@@ -461,14 +316,14 @@ var TopazCubeClient = class {
|
|
|
461
316
|
}
|
|
462
317
|
}
|
|
463
318
|
get document() {
|
|
464
|
-
|
|
319
|
+
const names = "" + Object.keys(this.documents);
|
|
465
320
|
return this.documents["" + names[0]];
|
|
466
321
|
}
|
|
467
322
|
async _onMessage(message) {
|
|
468
323
|
let time = Date.now();
|
|
469
324
|
if (message.c == "full") {
|
|
470
|
-
|
|
471
|
-
|
|
325
|
+
const name = "" + message.n;
|
|
326
|
+
const doc = message.doc;
|
|
472
327
|
this.documents[name] = doc;
|
|
473
328
|
this._decodeFastChanges(message);
|
|
474
329
|
this.isPatched = false;
|
|
@@ -487,15 +342,15 @@ var TopazCubeClient = class {
|
|
|
487
342
|
}
|
|
488
343
|
} else if (message.c == "patch") {
|
|
489
344
|
this.lastPatch = message.t;
|
|
490
|
-
|
|
345
|
+
const name = message.n;
|
|
491
346
|
if (!this.documents[name]) {
|
|
492
347
|
this.warn("Patch for unknown document", name);
|
|
493
348
|
return;
|
|
494
349
|
}
|
|
495
350
|
if (message.doc) {
|
|
496
351
|
this.isPatched = true;
|
|
497
|
-
for (
|
|
498
|
-
|
|
352
|
+
for (const op of message.doc) {
|
|
353
|
+
const dop = msgop(op);
|
|
499
354
|
try {
|
|
500
355
|
applyOperation(this.documents[name], dop);
|
|
501
356
|
} catch (e) {
|
|
@@ -511,13 +366,13 @@ var TopazCubeClient = class {
|
|
|
511
366
|
this._chunks[message.mid + "-" + message.seq] = message;
|
|
512
367
|
if (message.last) {
|
|
513
368
|
let cfound = 0;
|
|
514
|
-
|
|
515
|
-
|
|
369
|
+
const ts = message.ts;
|
|
370
|
+
const cdata = new Uint8Array(ts);
|
|
516
371
|
for (const cid in this._chunks) {
|
|
517
|
-
|
|
372
|
+
const chunk = this._chunks[cid];
|
|
518
373
|
if (chunk.mid == message.mid) {
|
|
519
|
-
|
|
520
|
-
|
|
374
|
+
const offset = chunk.ofs;
|
|
375
|
+
chunk.chs;
|
|
521
376
|
cdata.set(new Uint8Array(chunk.data), offset);
|
|
522
377
|
cfound++;
|
|
523
378
|
delete this._chunks[cid];
|
|
@@ -525,9 +380,9 @@ var TopazCubeClient = class {
|
|
|
525
380
|
}
|
|
526
381
|
if (cfound == message.seq + 1) {
|
|
527
382
|
try {
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
383
|
+
const cdec = await decompress(cdata);
|
|
384
|
+
const cdecu = new Uint8Array(cdec);
|
|
385
|
+
const nmessage = decode(cdecu);
|
|
531
386
|
this._onMessage(nmessage);
|
|
532
387
|
} catch (error) {
|
|
533
388
|
this.error("Error decoding chunks:", error);
|
|
@@ -538,13 +393,13 @@ var TopazCubeClient = class {
|
|
|
538
393
|
}
|
|
539
394
|
} else if (message.c == "fpatch") {
|
|
540
395
|
time = Date.now();
|
|
541
|
-
|
|
396
|
+
const name = message.n;
|
|
542
397
|
let doPatch = true;
|
|
543
398
|
if (!this._lastUpdateId[name]) {
|
|
544
399
|
this._lastUpdateId[name] = message.u;
|
|
545
400
|
} else {
|
|
546
401
|
if (this._lastUpdateId[name] < message.u) {
|
|
547
|
-
|
|
402
|
+
const lp = message.u - this._lastUpdateId[name] - 1;
|
|
548
403
|
if (lp > 0) {
|
|
549
404
|
this.warn("Lost " + lp + " updates");
|
|
550
405
|
}
|
|
@@ -560,9 +415,9 @@ var TopazCubeClient = class {
|
|
|
560
415
|
} else if (message.c == "pong") {
|
|
561
416
|
this.ID = message.ID;
|
|
562
417
|
time = Date.now();
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
418
|
+
const lastct = message.ct;
|
|
419
|
+
const ping = time - lastct;
|
|
420
|
+
const stime = message.t;
|
|
566
421
|
this.send({ c: "peng", ct: Date.now(), st: stime });
|
|
567
422
|
this.stats.stdiff = stime + ping / 2 - time;
|
|
568
423
|
this.stats.ping = ping;
|
|
@@ -580,7 +435,7 @@ var TopazCubeClient = class {
|
|
|
580
435
|
await this._peerConnection.setRemoteDescription(sessionDesc);
|
|
581
436
|
}
|
|
582
437
|
this.log("RTC: Remote description set successfully");
|
|
583
|
-
for (
|
|
438
|
+
for (const candidate of this._remoteCandidates) {
|
|
584
439
|
try {
|
|
585
440
|
await this._peerConnection?.addIceCandidate(candidate);
|
|
586
441
|
this.log("RTC: Added remote ICE candidate:", candidate);
|
|
@@ -616,12 +471,12 @@ var TopazCubeClient = class {
|
|
|
616
471
|
this._documentChanges[name].push(opmsg(op, target, path, value));
|
|
617
472
|
}
|
|
618
473
|
_sendPatches() {
|
|
619
|
-
for (
|
|
620
|
-
|
|
474
|
+
for (const name in this._documentChanges) {
|
|
475
|
+
const dc = this._documentChanges[name];
|
|
621
476
|
if (!dc || dc.length == 0) {
|
|
622
477
|
continue;
|
|
623
478
|
}
|
|
624
|
-
|
|
479
|
+
const record = {
|
|
625
480
|
n: name,
|
|
626
481
|
c: "sync",
|
|
627
482
|
ct: Date.now(),
|
|
@@ -638,17 +493,17 @@ var TopazCubeClient = class {
|
|
|
638
493
|
}
|
|
639
494
|
}
|
|
640
495
|
_decodeFastChanges(message) {
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
496
|
+
const time = Date.now();
|
|
497
|
+
const name = message.n;
|
|
498
|
+
const fdata = message.fdata;
|
|
644
499
|
if (!fdata) {
|
|
645
500
|
return;
|
|
646
501
|
}
|
|
647
|
-
|
|
502
|
+
const doc = this.documents[name];
|
|
648
503
|
if (!doc) {
|
|
649
504
|
return;
|
|
650
505
|
}
|
|
651
|
-
|
|
506
|
+
const entities = doc.entities;
|
|
652
507
|
if (!entities) {
|
|
653
508
|
return;
|
|
654
509
|
}
|
|
@@ -656,34 +511,34 @@ var TopazCubeClient = class {
|
|
|
656
511
|
if (!origin) {
|
|
657
512
|
origin = [0, 0, 0];
|
|
658
513
|
}
|
|
659
|
-
for (
|
|
660
|
-
|
|
514
|
+
for (const key in fdata) {
|
|
515
|
+
const changes = fdata[key];
|
|
661
516
|
if (changes.dict) {
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
for (
|
|
517
|
+
const pdata = changes.pdata;
|
|
518
|
+
const dict = changes.dict;
|
|
519
|
+
const rdict = {};
|
|
520
|
+
for (const key2 in dict) {
|
|
666
521
|
rdict[dict[key2]] = key2;
|
|
667
522
|
}
|
|
668
523
|
let offset = 0;
|
|
669
524
|
while (offset < pdata.byteLength) {
|
|
670
|
-
|
|
525
|
+
const id = "" + decode_uint32(pdata, offset);
|
|
671
526
|
offset += 4;
|
|
672
|
-
|
|
527
|
+
const did = "" + decode_uint32(pdata, offset);
|
|
673
528
|
offset += 4;
|
|
674
|
-
|
|
529
|
+
const e = entities[id];
|
|
675
530
|
if (!e) {
|
|
676
531
|
continue;
|
|
677
532
|
}
|
|
678
|
-
|
|
533
|
+
const value = rdict[did];
|
|
679
534
|
e[key] = value;
|
|
680
535
|
e["_changed_" + key] = time;
|
|
681
536
|
}
|
|
682
537
|
} else {
|
|
683
|
-
|
|
538
|
+
const pdata = changes.pdata;
|
|
684
539
|
let offset = 0;
|
|
685
540
|
while (offset < pdata.byteLength) {
|
|
686
|
-
|
|
541
|
+
const id = "" + decode_uint32(pdata, offset);
|
|
687
542
|
let e = entities[id];
|
|
688
543
|
if (!e) {
|
|
689
544
|
if (key == "position") {
|
|
@@ -778,7 +633,6 @@ var TopazCubeClient = class {
|
|
|
778
633
|
}
|
|
779
634
|
}
|
|
780
635
|
}
|
|
781
|
-
/*= WEBRTC ===================================================================*/
|
|
782
636
|
sendRTC(message) {
|
|
783
637
|
if (this._dataChannel && this._dataChannel.readyState === "open") {
|
|
784
638
|
this._dataChannel.send(encode(message));
|
|
@@ -794,10 +648,10 @@ var TopazCubeClient = class {
|
|
|
794
648
|
}
|
|
795
649
|
async _onRTCMessage(data) {
|
|
796
650
|
this.stats.recRTC += data.byteLength;
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
651
|
+
const datau = new Uint8Array(data);
|
|
652
|
+
const dec = await decompress(datau);
|
|
653
|
+
const decu = new Uint8Array(dec);
|
|
654
|
+
const message = decode(decu);
|
|
801
655
|
this._onMessage(message);
|
|
802
656
|
}
|
|
803
657
|
async _initializeWebRTC() {
|
|
@@ -833,7 +687,7 @@ var TopazCubeClient = class {
|
|
|
833
687
|
this._peerConnection.onicegatheringstatechange = () => {
|
|
834
688
|
this.log(`RTC: ICE gathering state. _candidates:`, this._candidates.length, this._peerConnection?.iceGatheringState);
|
|
835
689
|
if (this._peerConnection?.iceGatheringState == "complete" && this._offerSent) {
|
|
836
|
-
for (
|
|
690
|
+
for (const candidate of this._candidates) {
|
|
837
691
|
this.send({
|
|
838
692
|
c: "rtc-candidate",
|
|
839
693
|
type: "ice-candidate",
|
|
@@ -883,7 +737,7 @@ var TopazCubeClient = class {
|
|
|
883
737
|
const offer = await this._peerConnection.createOffer(offerOptions);
|
|
884
738
|
await this._peerConnection.setLocalDescription(offer);
|
|
885
739
|
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
886
|
-
|
|
740
|
+
const ld = this._peerConnection.localDescription;
|
|
887
741
|
if (ld) {
|
|
888
742
|
const offerPayload = {
|
|
889
743
|
c: "rtc-offer",
|
|
@@ -905,7 +759,6 @@ var TopazCubeClient = class {
|
|
|
905
759
|
this.error("RTC: error:", error);
|
|
906
760
|
}
|
|
907
761
|
}
|
|
908
|
-
// Add this method to restart ICE if needed
|
|
909
762
|
async _restartIce() {
|
|
910
763
|
try {
|
|
911
764
|
const offerOptions = {
|
|
@@ -938,8 +791,8 @@ var TopazCubeClient = class {
|
|
|
938
791
|
}
|
|
939
792
|
this._webRTCConnected = false;
|
|
940
793
|
}
|
|
941
|
-
}
|
|
794
|
+
}
|
|
942
795
|
export {
|
|
943
796
|
TopazCubeClient as default
|
|
944
797
|
};
|
|
945
|
-
//# sourceMappingURL=client.js.map
|
|
798
|
+
//# sourceMappingURL=client.js.map
|