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.
Files changed (103) hide show
  1. package/LICENSE.txt +0 -0
  2. package/README.md +0 -0
  3. package/dist/Renderer.cjs +20844 -0
  4. package/dist/Renderer.cjs.map +1 -0
  5. package/dist/Renderer.js +20827 -0
  6. package/dist/Renderer.js.map +1 -0
  7. package/dist/client.cjs +91 -260
  8. package/dist/client.cjs.map +1 -1
  9. package/dist/client.js +68 -215
  10. package/dist/client.js.map +1 -1
  11. package/dist/server.cjs +165 -432
  12. package/dist/server.cjs.map +1 -1
  13. package/dist/server.js +117 -370
  14. package/dist/server.js.map +1 -1
  15. package/dist/terminal.cjs +113 -200
  16. package/dist/terminal.cjs.map +1 -1
  17. package/dist/terminal.js +50 -51
  18. package/dist/terminal.js.map +1 -1
  19. package/dist/utils-CRhi1BDa.cjs +259 -0
  20. package/dist/utils-CRhi1BDa.cjs.map +1 -0
  21. package/dist/utils-D7tXt6-2.js +260 -0
  22. package/dist/utils-D7tXt6-2.js.map +1 -0
  23. package/package.json +19 -15
  24. package/src/{client.ts → network/client.js} +170 -403
  25. package/src/{compress-browser.ts → network/compress-browser.js} +2 -4
  26. package/src/{compress-node.ts → network/compress-node.js} +8 -14
  27. package/src/{server.ts → network/server.js} +229 -317
  28. package/src/{terminal.js → network/terminal.js} +0 -0
  29. package/src/{topazcube.ts → network/topazcube.js} +2 -2
  30. package/src/network/utils.js +375 -0
  31. package/src/renderer/Camera.js +191 -0
  32. package/src/renderer/DebugUI.js +703 -0
  33. package/src/renderer/Geometry.js +1049 -0
  34. package/src/renderer/Material.js +64 -0
  35. package/src/renderer/Mesh.js +211 -0
  36. package/src/renderer/Node.js +112 -0
  37. package/src/renderer/Pipeline.js +645 -0
  38. package/src/renderer/Renderer.js +1496 -0
  39. package/src/renderer/Skin.js +792 -0
  40. package/src/renderer/Texture.js +584 -0
  41. package/src/renderer/core/AssetManager.js +394 -0
  42. package/src/renderer/core/CullingSystem.js +308 -0
  43. package/src/renderer/core/EntityManager.js +541 -0
  44. package/src/renderer/core/InstanceManager.js +343 -0
  45. package/src/renderer/core/ParticleEmitter.js +358 -0
  46. package/src/renderer/core/ParticleSystem.js +564 -0
  47. package/src/renderer/core/SpriteSystem.js +349 -0
  48. package/src/renderer/gltf.js +563 -0
  49. package/src/renderer/math.js +161 -0
  50. package/src/renderer/rendering/HistoryBufferManager.js +333 -0
  51. package/src/renderer/rendering/ProbeCapture.js +1495 -0
  52. package/src/renderer/rendering/ReflectionProbeManager.js +352 -0
  53. package/src/renderer/rendering/RenderGraph.js +2258 -0
  54. package/src/renderer/rendering/passes/AOPass.js +308 -0
  55. package/src/renderer/rendering/passes/AmbientCapturePass.js +593 -0
  56. package/src/renderer/rendering/passes/BasePass.js +101 -0
  57. package/src/renderer/rendering/passes/BloomPass.js +420 -0
  58. package/src/renderer/rendering/passes/CRTPass.js +724 -0
  59. package/src/renderer/rendering/passes/FogPass.js +445 -0
  60. package/src/renderer/rendering/passes/GBufferPass.js +730 -0
  61. package/src/renderer/rendering/passes/HiZPass.js +744 -0
  62. package/src/renderer/rendering/passes/LightingPass.js +753 -0
  63. package/src/renderer/rendering/passes/ParticlePass.js +841 -0
  64. package/src/renderer/rendering/passes/PlanarReflectionPass.js +456 -0
  65. package/src/renderer/rendering/passes/PostProcessPass.js +405 -0
  66. package/src/renderer/rendering/passes/ReflectionPass.js +157 -0
  67. package/src/renderer/rendering/passes/RenderPostPass.js +364 -0
  68. package/src/renderer/rendering/passes/SSGIPass.js +266 -0
  69. package/src/renderer/rendering/passes/SSGITilePass.js +305 -0
  70. package/src/renderer/rendering/passes/ShadowPass.js +2072 -0
  71. package/src/renderer/rendering/passes/TransparentPass.js +831 -0
  72. package/src/renderer/rendering/passes/VolumetricFogPass.js +715 -0
  73. package/src/renderer/rendering/shaders/ao.wgsl +182 -0
  74. package/src/renderer/rendering/shaders/bloom.wgsl +97 -0
  75. package/src/renderer/rendering/shaders/bloom_blur.wgsl +80 -0
  76. package/src/renderer/rendering/shaders/crt.wgsl +455 -0
  77. package/src/renderer/rendering/shaders/depth_copy.wgsl +17 -0
  78. package/src/renderer/rendering/shaders/geometry.wgsl +580 -0
  79. package/src/renderer/rendering/shaders/hiz_reduce.wgsl +114 -0
  80. package/src/renderer/rendering/shaders/light_culling.wgsl +204 -0
  81. package/src/renderer/rendering/shaders/lighting.wgsl +932 -0
  82. package/src/renderer/rendering/shaders/lighting_common.wgsl +143 -0
  83. package/src/renderer/rendering/shaders/particle_render.wgsl +672 -0
  84. package/src/renderer/rendering/shaders/particle_simulate.wgsl +440 -0
  85. package/src/renderer/rendering/shaders/postproc.wgsl +293 -0
  86. package/src/renderer/rendering/shaders/render_post.wgsl +289 -0
  87. package/src/renderer/rendering/shaders/shadow.wgsl +117 -0
  88. package/src/renderer/rendering/shaders/ssgi.wgsl +266 -0
  89. package/src/renderer/rendering/shaders/ssgi_accumulate.wgsl +114 -0
  90. package/src/renderer/rendering/shaders/ssgi_propagate.wgsl +132 -0
  91. package/src/renderer/rendering/shaders/volumetric_blur.wgsl +80 -0
  92. package/src/renderer/rendering/shaders/volumetric_composite.wgsl +80 -0
  93. package/src/renderer/rendering/shaders/volumetric_raymarch.wgsl +634 -0
  94. package/src/renderer/utils/BoundingSphere.js +439 -0
  95. package/src/renderer/utils/Frustum.js +281 -0
  96. package/src/renderer/utils/Raycaster.js +761 -0
  97. package/dist/client.d.cts +0 -211
  98. package/dist/client.d.ts +0 -211
  99. package/dist/server.d.cts +0 -120
  100. package/dist/server.d.ts +0 -120
  101. package/dist/terminal.d.cts +0 -64
  102. package/dist/terminal.d.ts +0 -64
  103. package/src/utils.ts +0 -403
package/dist/client.cjs CHANGED
@@ -1,160 +1,8 @@
1
1
  "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/client.ts
21
- var client_exports = {};
22
- __export(client_exports, {
23
- default: () => TopazCubeClient
24
- });
25
- module.exports = __toCommonJS(client_exports);
26
- var import_fast_json_patch = require("fast-json-patch");
27
-
28
- // src/utils.ts
29
- var import_msgpackr = require("msgpackr");
30
- var import_msgpackr2 = require("msgpackr");
31
- var { ALWAYS } = import_msgpackr2.FLOAT32_OPTIONS;
32
- var packr = new import_msgpackr.Packr({
33
- useFloat32: ALWAYS
34
- });
35
- function encode(obj) {
36
- return packr.pack(obj);
37
- }
38
- function decode(data) {
39
- return packr.unpack(data);
40
- }
41
- function reactive(name, object, callback, path = "", excludedProperties = false) {
42
- if (object === null || typeof object !== "object") {
43
- return object;
44
- }
45
- function isReactive(p) {
46
- let r = true;
47
- if (p.startsWith("_")) {
48
- r = false;
49
- }
50
- if (excludedProperties) {
51
- if (excludedProperties[p]) {
52
- r = false;
53
- }
54
- }
55
- if (path == "/entities") {
56
- r = false;
57
- }
58
- return r;
59
- }
60
- for (const property in object) {
61
- if (isReactive(property)) {
62
- object[property] = reactive(
63
- name,
64
- object[property],
65
- callback,
66
- path + "/" + property,
67
- excludedProperties
68
- );
69
- } else {
70
- }
71
- }
72
- return new Proxy(object, {
73
- get(target, property, receiver) {
74
- return Reflect.get(target, property, receiver);
75
- },
76
- set(target, property, value) {
77
- let newvalue;
78
- let pn = path + "/" + String(property);
79
- if (isReactive(String(property))) {
80
- newvalue = reactive(name, value, callback, pn, excludedProperties);
81
- callback(name, "replace", target, pn, newvalue);
82
- } else {
83
- newvalue = value;
84
- }
85
- return Reflect.set(target, property, newvalue);
86
- },
87
- deleteProperty(target, property) {
88
- let pn = path + "/" + String(property);
89
- if (isReactive(String(property))) {
90
- callback(name, "remove", target, pn, null);
91
- }
92
- delete target[property];
93
- return true;
94
- }
95
- });
96
- }
97
- function msgop(op) {
98
- let nop = {};
99
- if (!op.o) {
100
- nop.op = "replace";
101
- } else {
102
- nop.op = {
103
- a: "add",
104
- r: "remove",
105
- d: "delete",
106
- t: "test"
107
- }[op.o];
108
- }
109
- nop.path = op.p;
110
- nop.value = op.v;
111
- return nop;
112
- }
113
- function opmsg(op, target, path, value) {
114
- let c = { p: path, v: value };
115
- if (op != "replace") {
116
- c.o = {
117
- add: "a",
118
- remove: "r",
119
- delete: "d",
120
- test: "t"
121
- }[op];
122
- }
123
- return c;
124
- }
125
- function decode_uint32(byteArray, offset = 0) {
126
- let p = offset;
127
- return (byteArray[p++] & 127) << 24 | byteArray[p++] << 16 | byteArray[p++] << 8 | byteArray[p];
128
- }
129
- function decode_uint24(byteArray, offset = 0) {
130
- let p = offset;
131
- return byteArray[p++] << 16 | byteArray[p++] << 8 | byteArray[p];
132
- }
133
- function decode_uint16(byteArray, offset = 0) {
134
- let p = offset;
135
- return byteArray[p++] << 8 | byteArray[p];
136
- }
137
- function decode_fp168(byteArray, offset = 0) {
138
- const divider = (byteArray[offset] & 128) === 128 ? -256 : 256;
139
- byteArray[offset] &= 127;
140
- const fp = decode_uint24(byteArray, offset);
141
- return fp / divider;
142
- }
143
- function decode_fp1616(byteArray, offset = 0) {
144
- const divider = (byteArray[offset] & 128) === 128 ? -65536 : 65536;
145
- byteArray[offset] &= 127;
146
- const fp = decode_uint32(byteArray, offset);
147
- return fp / divider;
148
- }
149
- function decode_fp412(byteArray, offset = 0) {
150
- const divider = (byteArray[offset] & 128) === 128 ? -4096 : 4096;
151
- byteArray[offset] &= 127;
152
- const fp = decode_uint16(byteArray, offset);
153
- return fp / divider;
154
- }
155
-
156
- // src/compress-browser.ts
157
- var browserFormat = "gzip";
2
+ const fastjsonpatch = require("fast-json-patch");
3
+ const utils = require("./utils-CRhi1BDa.cjs");
4
+ const glMatrix = require("gl-matrix");
5
+ const browserFormat = "gzip";
158
6
  async function decompress(buffer) {
159
7
  if (typeof DecompressionStream !== "undefined") {
160
8
  try {
@@ -170,13 +18,9 @@ async function decompress(buffer) {
170
18
  throw new Error("DecompressionStream not supported");
171
19
  }
172
20
  }
173
-
174
- // src/client.ts
175
- var import_gl_matrix = require("gl-matrix");
176
- var TopazCubeClient = class {
21
+ class TopazCubeClient {
177
22
  DEBUG = false;
178
23
  CYCLE = 200;
179
- // update/patch rate in ms
180
24
  url = "";
181
25
  documents = {};
182
26
  autoReconnect = true;
@@ -194,13 +38,11 @@ var TopazCubeClient = class {
194
38
  recRTCBps: 0,
195
39
  ping: 0,
196
40
  stdiff: 0
197
- // server time difference
198
41
  };
199
42
  lastFullState = 0;
200
43
  lastPatch = 0;
201
44
  _chunks = {};
202
45
  le = true;
203
- // Server is little endian
204
46
  _documentChanges = {};
205
47
  ID = 0;
206
48
  socket = null;
@@ -209,9 +51,7 @@ var TopazCubeClient = class {
209
51
  _remoteCandidates = [];
210
52
  _offerSent = false;
211
53
  _dataChannel = null;
212
- // our data channel
213
54
  _serverDataChannel = null;
214
- // server data channel
215
55
  _webRTCConnected = false;
216
56
  isInterpolated = false;
217
57
  _lastInterpolate = Date.now();
@@ -226,11 +66,8 @@ var TopazCubeClient = class {
226
66
  _pingiv = null;
227
67
  constructor({
228
68
  url,
229
- // server url
230
69
  autoReconnect = true,
231
- // auto reconnect on disconnect
232
70
  allowSync = true,
233
- // allow sync on connect
234
71
  allowWebRTC = false,
235
72
  DEBUG = false
236
73
  }) {
@@ -256,7 +93,6 @@ var TopazCubeClient = class {
256
93
  error(...args) {
257
94
  console.error(...args);
258
95
  }
259
- /*= UPDATE ===================================================================*/
260
96
  _startLoop() {
261
97
  if (this._loopiv) {
262
98
  clearInterval(this._loopiv);
@@ -302,53 +138,51 @@ var TopazCubeClient = class {
302
138
  this.isPatched = false;
303
139
  this.le = true;
304
140
  }
305
- /*= INTERPOLATION ============================================================*/
306
- // to be called in display rate (like 60fps) to interpolate .position, .rotation and .scale
307
141
  interpolate() {
308
- let now = Date.now();
309
- let dt = now - this._lastInterpolate;
142
+ const now = Date.now();
143
+ const dt = now - this._lastInterpolate;
310
144
  this._lastInterpolate = now;
311
145
  if (dt <= 0 || dt > 200) {
312
146
  return;
313
147
  }
314
148
  this.isInterpolated = true;
315
- for (let name in this.documents) {
316
- let doc = this.documents[name];
317
- let entities = doc?.entities;
149
+ for (const name in this.documents) {
150
+ const doc = this.documents[name];
151
+ const entities = doc?.entities;
318
152
  if (!entities) {
319
153
  continue;
320
154
  }
321
- for (let id in entities) {
322
- let e = entities[id];
155
+ for (const id in entities) {
156
+ const e = entities[id];
323
157
  if (e._lpostime1 && e._lpostime2) {
324
- let t1 = e._lpostime1;
325
- let t2 = e._lpostime2;
158
+ const t1 = e._lpostime1;
159
+ const t2 = e._lpostime2;
326
160
  const interval = t2 - t1;
327
161
  const elapsed = now - t1;
328
162
  e.pelapsed = elapsed;
329
163
  if (elapsed > 1e3) {
330
- import_gl_matrix.vec3.copy(e.position, e._lpos2);
164
+ glMatrix.vec3.copy(e.position, e._lpos2);
331
165
  e._changed_position = now;
332
166
  } else {
333
167
  const alpha = Math.max(0, elapsed / interval);
334
- import_gl_matrix.vec3.lerp(this._dpos, e._lpos1, e._lpos2, alpha);
335
- import_gl_matrix.vec3.lerp(e.position, e.position, this._dpos, 0.07);
168
+ glMatrix.vec3.lerp(this._dpos, e._lpos1, e._lpos2, alpha);
169
+ glMatrix.vec3.lerp(e.position, e.position, this._dpos, 0.07);
336
170
  e._changed_position = now;
337
171
  }
338
172
  }
339
173
  if (e._lrottime1 && e._lrottime2) {
340
- let t1 = e._lrottime1;
341
- let t2 = e._lrottime2;
174
+ const t1 = e._lrottime1;
175
+ const t2 = e._lrottime2;
342
176
  const interval = t2 - t1;
343
177
  const elapsed = now - t1;
344
178
  e.relapsed = elapsed;
345
179
  if (elapsed > 1e3) {
346
- import_gl_matrix.quat.copy(e.rotation, e._lrot2);
180
+ glMatrix.quat.copy(e.rotation, e._lrot2);
347
181
  e._changed_rotation = now;
348
182
  } else {
349
183
  const alpha = Math.max(0, elapsed / interval);
350
- import_gl_matrix.quat.slerp(this._drot, e._lrot1, e._lrot2, alpha);
351
- import_gl_matrix.quat.slerp(e.rotation, e.rotation, this._drot, 0.07);
184
+ glMatrix.quat.slerp(this._drot, e._lrot1, e._lrot2, alpha);
185
+ glMatrix.quat.slerp(e.rotation, e.rotation, this._drot, 0.07);
352
186
  e._changed_rotation = now;
353
187
  }
354
188
  }
@@ -356,7 +190,6 @@ var TopazCubeClient = class {
356
190
  }
357
191
  this.isInterpolated = false;
358
192
  }
359
- /*= CONNECTION ===============================================================*/
360
193
  subscribe(name) {
361
194
  this.documents[name] = {};
362
195
  this.send({ c: "sub", n: name });
@@ -374,11 +207,11 @@ var TopazCubeClient = class {
374
207
  this.log("connecting...");
375
208
  this.socket = new WebSocket(this.url);
376
209
  this.socket.onmessage = async (event) => {
377
- let buffer = await event.data.arrayBuffer();
210
+ const buffer = await event.data.arrayBuffer();
378
211
  this.stats.rec += buffer.byteLength;
379
- let dec = await decompress(buffer);
380
- let decu = new Uint8Array(dec);
381
- let message = decode(decu);
212
+ const dec = await decompress(buffer);
213
+ const decu = new Uint8Array(dec);
214
+ const message = utils.decode(decu);
382
215
  this._onMessage(message);
383
216
  };
384
217
  this.socket.onclose = (_event) => {
@@ -465,7 +298,6 @@ var TopazCubeClient = class {
465
298
  this.send({ c: "ping", ct: Date.now() });
466
299
  }
467
300
  }
468
- /*= MESSAGES =================================================================*/
469
301
  onChange(_name, _doc, patch) {
470
302
  }
471
303
  onMessage(_message) {
@@ -475,7 +307,7 @@ var TopazCubeClient = class {
475
307
  return;
476
308
  }
477
309
  try {
478
- let enc = encode(operation);
310
+ const enc = utils.encode(operation);
479
311
  this.stats.send += enc.byteLength;
480
312
  if (this.socket) {
481
313
  this.socket.send(enc);
@@ -485,19 +317,19 @@ var TopazCubeClient = class {
485
317
  }
486
318
  }
487
319
  get document() {
488
- let names = "" + Object.keys(this.documents);
320
+ const names = "" + Object.keys(this.documents);
489
321
  return this.documents["" + names[0]];
490
322
  }
491
323
  async _onMessage(message) {
492
324
  let time = Date.now();
493
325
  if (message.c == "full") {
494
- let name = "" + message.n;
495
- let doc = message.doc;
326
+ const name = "" + message.n;
327
+ const doc = message.doc;
496
328
  this.documents[name] = doc;
497
329
  this._decodeFastChanges(message);
498
330
  this.isPatched = false;
499
331
  if (this.allowSync) {
500
- this.documents[name] = reactive(
332
+ this.documents[name] = utils.reactive(
501
333
  name,
502
334
  this.documents[name],
503
335
  this._onDocumentChange.bind(this)
@@ -511,17 +343,17 @@ var TopazCubeClient = class {
511
343
  }
512
344
  } else if (message.c == "patch") {
513
345
  this.lastPatch = message.t;
514
- let name = message.n;
346
+ const name = message.n;
515
347
  if (!this.documents[name]) {
516
348
  this.warn("Patch for unknown document", name);
517
349
  return;
518
350
  }
519
351
  if (message.doc) {
520
352
  this.isPatched = true;
521
- for (let op of message.doc) {
522
- let dop = msgop(op);
353
+ for (const op of message.doc) {
354
+ const dop = utils.msgop(op);
523
355
  try {
524
- (0, import_fast_json_patch.applyOperation)(this.documents[name], dop);
356
+ fastjsonpatch.applyOperation(this.documents[name], dop);
525
357
  } catch (e) {
526
358
  this.warn("applyOperation failed for", name, "with op", dop, e);
527
359
  }
@@ -535,13 +367,13 @@ var TopazCubeClient = class {
535
367
  this._chunks[message.mid + "-" + message.seq] = message;
536
368
  if (message.last) {
537
369
  let cfound = 0;
538
- let ts = message.ts;
539
- let cdata = new Uint8Array(ts);
370
+ const ts = message.ts;
371
+ const cdata = new Uint8Array(ts);
540
372
  for (const cid in this._chunks) {
541
- let chunk = this._chunks[cid];
373
+ const chunk = this._chunks[cid];
542
374
  if (chunk.mid == message.mid) {
543
- let offset = chunk.ofs;
544
- let _csize = chunk.chs;
375
+ const offset = chunk.ofs;
376
+ chunk.chs;
545
377
  cdata.set(new Uint8Array(chunk.data), offset);
546
378
  cfound++;
547
379
  delete this._chunks[cid];
@@ -549,9 +381,9 @@ var TopazCubeClient = class {
549
381
  }
550
382
  if (cfound == message.seq + 1) {
551
383
  try {
552
- let cdec = await decompress(cdata);
553
- let cdecu = new Uint8Array(cdec);
554
- let nmessage = decode(cdecu);
384
+ const cdec = await decompress(cdata);
385
+ const cdecu = new Uint8Array(cdec);
386
+ const nmessage = utils.decode(cdecu);
555
387
  this._onMessage(nmessage);
556
388
  } catch (error) {
557
389
  this.error("Error decoding chunks:", error);
@@ -562,13 +394,13 @@ var TopazCubeClient = class {
562
394
  }
563
395
  } else if (message.c == "fpatch") {
564
396
  time = Date.now();
565
- let name = message.n;
397
+ const name = message.n;
566
398
  let doPatch = true;
567
399
  if (!this._lastUpdateId[name]) {
568
400
  this._lastUpdateId[name] = message.u;
569
401
  } else {
570
402
  if (this._lastUpdateId[name] < message.u) {
571
- let lp = message.u - this._lastUpdateId[name] - 1;
403
+ const lp = message.u - this._lastUpdateId[name] - 1;
572
404
  if (lp > 0) {
573
405
  this.warn("Lost " + lp + " updates");
574
406
  }
@@ -584,9 +416,9 @@ var TopazCubeClient = class {
584
416
  } else if (message.c == "pong") {
585
417
  this.ID = message.ID;
586
418
  time = Date.now();
587
- let lastct = message.ct;
588
- let ping = time - lastct;
589
- let stime = message.t;
419
+ const lastct = message.ct;
420
+ const ping = time - lastct;
421
+ const stime = message.t;
590
422
  this.send({ c: "peng", ct: Date.now(), st: stime });
591
423
  this.stats.stdiff = stime + ping / 2 - time;
592
424
  this.stats.ping = ping;
@@ -604,7 +436,7 @@ var TopazCubeClient = class {
604
436
  await this._peerConnection.setRemoteDescription(sessionDesc);
605
437
  }
606
438
  this.log("RTC: Remote description set successfully");
607
- for (let candidate of this._remoteCandidates) {
439
+ for (const candidate of this._remoteCandidates) {
608
440
  try {
609
441
  await this._peerConnection?.addIceCandidate(candidate);
610
442
  this.log("RTC: Added remote ICE candidate:", candidate);
@@ -637,15 +469,15 @@ var TopazCubeClient = class {
637
469
  if (!this._documentChanges[name]) {
638
470
  this._documentChanges[name] = [];
639
471
  }
640
- this._documentChanges[name].push(opmsg(op, target, path, value));
472
+ this._documentChanges[name].push(utils.opmsg(op, target, path, value));
641
473
  }
642
474
  _sendPatches() {
643
- for (let name in this._documentChanges) {
644
- let dc = this._documentChanges[name];
475
+ for (const name in this._documentChanges) {
476
+ const dc = this._documentChanges[name];
645
477
  if (!dc || dc.length == 0) {
646
478
  continue;
647
479
  }
648
- let record = {
480
+ const record = {
649
481
  n: name,
650
482
  c: "sync",
651
483
  ct: Date.now(),
@@ -662,17 +494,17 @@ var TopazCubeClient = class {
662
494
  }
663
495
  }
664
496
  _decodeFastChanges(message) {
665
- let time = Date.now();
666
- let name = message.n;
667
- let fdata = message.fdata;
497
+ const time = Date.now();
498
+ const name = message.n;
499
+ const fdata = message.fdata;
668
500
  if (!fdata) {
669
501
  return;
670
502
  }
671
- let doc = this.documents[name];
503
+ const doc = this.documents[name];
672
504
  if (!doc) {
673
505
  return;
674
506
  }
675
- let entities = doc.entities;
507
+ const entities = doc.entities;
676
508
  if (!entities) {
677
509
  return;
678
510
  }
@@ -680,34 +512,34 @@ var TopazCubeClient = class {
680
512
  if (!origin) {
681
513
  origin = [0, 0, 0];
682
514
  }
683
- for (let key in fdata) {
684
- let changes = fdata[key];
515
+ for (const key in fdata) {
516
+ const changes = fdata[key];
685
517
  if (changes.dict) {
686
- let pdata = changes.pdata;
687
- let dict = changes.dict;
688
- let rdict = {};
689
- for (let key2 in dict) {
518
+ const pdata = changes.pdata;
519
+ const dict = changes.dict;
520
+ const rdict = {};
521
+ for (const key2 in dict) {
690
522
  rdict[dict[key2]] = key2;
691
523
  }
692
524
  let offset = 0;
693
525
  while (offset < pdata.byteLength) {
694
- let id = "" + decode_uint32(pdata, offset);
526
+ const id = "" + utils.decode_uint32(pdata, offset);
695
527
  offset += 4;
696
- let did = "" + decode_uint32(pdata, offset);
528
+ const did = "" + utils.decode_uint32(pdata, offset);
697
529
  offset += 4;
698
- let e = entities[id];
530
+ const e = entities[id];
699
531
  if (!e) {
700
532
  continue;
701
533
  }
702
- let value = rdict[did];
534
+ const value = rdict[did];
703
535
  e[key] = value;
704
536
  e["_changed_" + key] = time;
705
537
  }
706
538
  } else {
707
- let pdata = changes.pdata;
539
+ const pdata = changes.pdata;
708
540
  let offset = 0;
709
541
  while (offset < pdata.byteLength) {
710
- let id = "" + decode_uint32(pdata, offset);
542
+ const id = "" + utils.decode_uint32(pdata, offset);
711
543
  let e = entities[id];
712
544
  if (!e) {
713
545
  if (key == "position") {
@@ -731,11 +563,11 @@ var TopazCubeClient = class {
731
563
  e._lpostime1 = e._lpostime2;
732
564
  }
733
565
  e._lpostime2 = time;
734
- e._lpos2[0] = origin[0] + decode_fp168(pdata, offset);
566
+ e._lpos2[0] = origin[0] + utils.decode_fp168(pdata, offset);
735
567
  offset += 3;
736
- e._lpos2[1] = origin[1] + decode_fp168(pdata, offset);
568
+ e._lpos2[1] = origin[1] + utils.decode_fp168(pdata, offset);
737
569
  offset += 3;
738
- e._lpos2[2] = origin[2] + decode_fp168(pdata, offset);
570
+ e._lpos2[2] = origin[2] + utils.decode_fp168(pdata, offset);
739
571
  offset += 3;
740
572
  if (!e.position) {
741
573
  e.position = [
@@ -756,15 +588,15 @@ var TopazCubeClient = class {
756
588
  e._lrottime1 = e._lrottime2;
757
589
  }
758
590
  e._lrottime2 = time;
759
- e._lrot2[0] = decode_fp412(pdata, offset);
591
+ e._lrot2[0] = utils.decode_fp412(pdata, offset);
760
592
  offset += 2;
761
- e._lrot2[1] = decode_fp412(pdata, offset);
593
+ e._lrot2[1] = utils.decode_fp412(pdata, offset);
762
594
  offset += 2;
763
- e._lrot2[2] = decode_fp412(pdata, offset);
595
+ e._lrot2[2] = utils.decode_fp412(pdata, offset);
764
596
  offset += 2;
765
- e._lrot2[3] = decode_fp412(pdata, offset);
597
+ e._lrot2[3] = utils.decode_fp412(pdata, offset);
766
598
  offset += 2;
767
- import_gl_matrix.quat.normalize(e._lrot2, e._lrot2);
599
+ glMatrix.quat.normalize(e._lrot2, e._lrot2);
768
600
  if (!e.rotation) {
769
601
  e.rotation = [
770
602
  e._lrot2[0],
@@ -784,11 +616,11 @@ var TopazCubeClient = class {
784
616
  e._lscatime1 = e._lscatime2;
785
617
  }
786
618
  e._lscatime2 = time;
787
- e._lsca2[0] = decode_fp1616(pdata, offset);
619
+ e._lsca2[0] = utils.decode_fp1616(pdata, offset);
788
620
  offset += 4;
789
- e._lsca2[1] = decode_fp1616(pdata, offset);
621
+ e._lsca2[1] = utils.decode_fp1616(pdata, offset);
790
622
  offset += 4;
791
- e._lsca2[2] = decode_fp1616(pdata, offset);
623
+ e._lsca2[2] = utils.decode_fp1616(pdata, offset);
792
624
  offset += 4;
793
625
  if (!e.sca) {
794
626
  e.sca = [
@@ -802,10 +634,9 @@ var TopazCubeClient = class {
802
634
  }
803
635
  }
804
636
  }
805
- /*= WEBRTC ===================================================================*/
806
637
  sendRTC(message) {
807
638
  if (this._dataChannel && this._dataChannel.readyState === "open") {
808
- this._dataChannel.send(encode(message));
639
+ this._dataChannel.send(utils.encode(message));
809
640
  }
810
641
  }
811
642
  _onRTCConnect() {
@@ -818,10 +649,10 @@ var TopazCubeClient = class {
818
649
  }
819
650
  async _onRTCMessage(data) {
820
651
  this.stats.recRTC += data.byteLength;
821
- let datau = new Uint8Array(data);
822
- let dec = await decompress(datau);
823
- let decu = new Uint8Array(dec);
824
- let message = decode(decu);
652
+ const datau = new Uint8Array(data);
653
+ const dec = await decompress(datau);
654
+ const decu = new Uint8Array(dec);
655
+ const message = utils.decode(decu);
825
656
  this._onMessage(message);
826
657
  }
827
658
  async _initializeWebRTC() {
@@ -857,7 +688,7 @@ var TopazCubeClient = class {
857
688
  this._peerConnection.onicegatheringstatechange = () => {
858
689
  this.log(`RTC: ICE gathering state. _candidates:`, this._candidates.length, this._peerConnection?.iceGatheringState);
859
690
  if (this._peerConnection?.iceGatheringState == "complete" && this._offerSent) {
860
- for (let candidate of this._candidates) {
691
+ for (const candidate of this._candidates) {
861
692
  this.send({
862
693
  c: "rtc-candidate",
863
694
  type: "ice-candidate",
@@ -907,7 +738,7 @@ var TopazCubeClient = class {
907
738
  const offer = await this._peerConnection.createOffer(offerOptions);
908
739
  await this._peerConnection.setLocalDescription(offer);
909
740
  await new Promise((resolve) => setTimeout(resolve, 100));
910
- let ld = this._peerConnection.localDescription;
741
+ const ld = this._peerConnection.localDescription;
911
742
  if (ld) {
912
743
  const offerPayload = {
913
744
  c: "rtc-offer",
@@ -929,7 +760,6 @@ var TopazCubeClient = class {
929
760
  this.error("RTC: error:", error);
930
761
  }
931
762
  }
932
- // Add this method to restart ICE if needed
933
763
  async _restartIce() {
934
764
  try {
935
765
  const offerOptions = {
@@ -962,5 +792,6 @@ var TopazCubeClient = class {
962
792
  }
963
793
  this._webRTCConnected = false;
964
794
  }
965
- };
966
- //# sourceMappingURL=client.cjs.map
795
+ }
796
+ module.exports = TopazCubeClient;
797
+ //# sourceMappingURL=client.cjs.map