quake2ts 0.0.299 → 0.0.302

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 (37) hide show
  1. package/package.json +1 -1
  2. package/packages/client/dist/browser/index.global.js +13 -13
  3. package/packages/client/dist/browser/index.global.js.map +1 -1
  4. package/packages/client/dist/cjs/index.cjs +279 -36
  5. package/packages/client/dist/cjs/index.cjs.map +1 -1
  6. package/packages/client/dist/esm/index.js +279 -36
  7. package/packages/client/dist/esm/index.js.map +1 -1
  8. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  9. package/packages/client/dist/types/index.d.ts.map +1 -1
  10. package/packages/client/dist/types/ui/demo-controls.d.ts +11 -0
  11. package/packages/client/dist/types/ui/demo-controls.d.ts.map +1 -0
  12. package/packages/engine/dist/browser/index.global.js +9 -9
  13. package/packages/engine/dist/browser/index.global.js.map +1 -1
  14. package/packages/engine/dist/cjs/index.cjs +90 -18
  15. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  16. package/packages/engine/dist/esm/index.js +90 -18
  17. package/packages/engine/dist/esm/index.js.map +1 -1
  18. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  19. package/packages/game/dist/browser/index.global.js +4 -4
  20. package/packages/game/dist/browser/index.global.js.map +1 -1
  21. package/packages/game/dist/cjs/index.cjs +107 -28
  22. package/packages/game/dist/cjs/index.cjs.map +1 -1
  23. package/packages/game/dist/esm/index.js +107 -28
  24. package/packages/game/dist/esm/index.js.map +1 -1
  25. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  26. package/packages/game/dist/types/entities/gibs.d.ts +1 -1
  27. package/packages/game/dist/types/entities/gibs.d.ts.map +1 -1
  28. package/packages/shared/dist/browser/index.global.js +1 -1
  29. package/packages/shared/dist/browser/index.global.js.map +1 -1
  30. package/packages/shared/dist/cjs/index.cjs +97 -19
  31. package/packages/shared/dist/cjs/index.cjs.map +1 -1
  32. package/packages/shared/dist/esm/index.js +97 -19
  33. package/packages/shared/dist/esm/index.js.map +1 -1
  34. package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
  35. package/packages/shared/dist/types/net/netchan.d.ts +5 -0
  36. package/packages/shared/dist/types/net/netchan.d.ts.map +1 -1
  37. package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
@@ -1082,10 +1082,14 @@ var _NetChan = class _NetChan2 {
1082
1082
  this.incomingReliableSequence = 0;
1083
1083
  this.outgoingReliableSequence = 0;
1084
1084
  this.reliableLength = 0;
1085
+ this.fragmentSendOffset = 0;
1086
+ this.fragmentBuffer = null;
1087
+ this.fragmentLength = 0;
1088
+ this.fragmentReceived = 0;
1085
1089
  this.lastReceived = 0;
1086
1090
  this.lastSent = 0;
1087
1091
  this.remoteAddress = null;
1088
- this.reliableMessage = new BinaryWriter(_NetChan2.MAX_MSGLEN);
1092
+ this.reliableMessage = new BinaryWriter(_NetChan2.MAX_RELIABLE_BUFFER);
1089
1093
  const now = Date.now();
1090
1094
  this.lastReceived = now;
1091
1095
  this.lastSent = now;
@@ -1111,6 +1115,10 @@ var _NetChan = class _NetChan2 {
1111
1115
  this.outgoingReliableSequence = 0;
1112
1116
  this.reliableLength = 0;
1113
1117
  this.reliableMessage.reset();
1118
+ this.fragmentSendOffset = 0;
1119
+ this.fragmentBuffer = null;
1120
+ this.fragmentLength = 0;
1121
+ this.fragmentReceived = 0;
1114
1122
  this.lastReceived = Date.now();
1115
1123
  this.lastSent = Date.now();
1116
1124
  }
@@ -1120,18 +1128,38 @@ var _NetChan = class _NetChan2 {
1120
1128
  transmit(unreliableData) {
1121
1129
  this.outgoingSequence++;
1122
1130
  this.lastSent = Date.now();
1131
+ let sendReliableLength = 0;
1132
+ let isFragment = false;
1133
+ let fragmentStart = 0;
1134
+ if (this.reliableLength > 0) {
1135
+ if (this.reliableLength > _NetChan2.FRAGMENT_SIZE) {
1136
+ isFragment = true;
1137
+ if (this.fragmentSendOffset >= this.reliableLength) {
1138
+ this.fragmentSendOffset = 0;
1139
+ }
1140
+ const remaining = this.reliableLength - this.fragmentSendOffset;
1141
+ sendReliableLength = remaining;
1142
+ if (sendReliableLength > _NetChan2.FRAGMENT_SIZE) {
1143
+ sendReliableLength = _NetChan2.FRAGMENT_SIZE;
1144
+ }
1145
+ fragmentStart = this.fragmentSendOffset;
1146
+ this.fragmentSendOffset += sendReliableLength;
1147
+ } else {
1148
+ sendReliableLength = this.reliableLength;
1149
+ }
1150
+ }
1123
1151
  const headerSize = _NetChan2.PACKET_HEADER;
1124
- const reliableSize = this.reliableLength > 0 ? this.reliableLength + 2 : 0;
1152
+ const reliableHeaderSize = sendReliableLength > 0 ? 2 + (isFragment ? 8 : 0) : 0;
1125
1153
  let unreliableSize = unreliableData ? unreliableData.length : 0;
1126
- if (headerSize + reliableSize + unreliableSize > _NetChan2.MAX_MSGLEN) {
1127
- unreliableSize = _NetChan2.MAX_MSGLEN - headerSize - reliableSize;
1154
+ if (headerSize + reliableHeaderSize + sendReliableLength + unreliableSize > _NetChan2.MAX_MSGLEN) {
1155
+ unreliableSize = _NetChan2.MAX_MSGLEN - headerSize - reliableHeaderSize - sendReliableLength;
1128
1156
  if (unreliableSize < 0) unreliableSize = 0;
1129
1157
  }
1130
- const buffer = new ArrayBuffer(headerSize + reliableSize + unreliableSize);
1158
+ const buffer = new ArrayBuffer(headerSize + reliableHeaderSize + sendReliableLength + unreliableSize);
1131
1159
  const view = new DataView(buffer);
1132
1160
  const result = new Uint8Array(buffer);
1133
1161
  let sequence = this.outgoingSequence;
1134
- if (this.reliableLength > 0) {
1162
+ if (sendReliableLength > 0) {
1135
1163
  sequence |= 2147483648;
1136
1164
  if ((this.outgoingReliableSequence & 1) !== 0) {
1137
1165
  sequence |= 1073741824;
@@ -1145,13 +1173,23 @@ var _NetChan = class _NetChan2 {
1145
1173
  view.setUint32(4, ack, true);
1146
1174
  view.setUint16(8, this.qport, true);
1147
1175
  let offset = headerSize;
1148
- if (this.reliableLength > 0) {
1149
- view.setUint16(offset, this.reliableLength, true);
1176
+ if (sendReliableLength > 0) {
1177
+ let lengthField = sendReliableLength;
1178
+ if (isFragment) {
1179
+ lengthField |= 32768;
1180
+ }
1181
+ view.setUint16(offset, lengthField, true);
1150
1182
  offset += 2;
1183
+ if (isFragment) {
1184
+ view.setUint32(offset, fragmentStart, true);
1185
+ offset += 4;
1186
+ view.setUint32(offset, this.reliableLength, true);
1187
+ offset += 4;
1188
+ }
1151
1189
  const reliableBuffer = this.reliableMessage.getBuffer();
1152
- const reliableBytes = reliableBuffer.subarray(0, this.reliableLength);
1190
+ const reliableBytes = reliableBuffer.subarray(fragmentStart, fragmentStart + sendReliableLength);
1153
1191
  result.set(reliableBytes, offset);
1154
- offset += this.reliableLength;
1192
+ offset += sendReliableLength;
1155
1193
  }
1156
1194
  if (unreliableData && unreliableSize > 0) {
1157
1195
  const chunk = unreliableData.slice(0, unreliableSize);
@@ -1192,6 +1230,7 @@ var _NetChan = class _NetChan2 {
1192
1230
  this.reliableLength = 0;
1193
1231
  this.reliableMessage.reset();
1194
1232
  this.outgoingReliableSequence ^= 1;
1233
+ this.fragmentSendOffset = 0;
1195
1234
  }
1196
1235
  }
1197
1236
  const hasReliableData = (sequence & 2147483648) !== 0;
@@ -1200,13 +1239,45 @@ var _NetChan = class _NetChan2 {
1200
1239
  let reliableData = null;
1201
1240
  if (hasReliableData) {
1202
1241
  if (payloadOffset + 2 > packet.byteLength) return null;
1203
- const reliableLen = view.getUint16(payloadOffset, true);
1242
+ let reliableLen = view.getUint16(payloadOffset, true);
1204
1243
  payloadOffset += 2;
1244
+ const isFragment = (reliableLen & 32768) !== 0;
1245
+ reliableLen &= 32767;
1205
1246
  const expectedBit = this.incomingReliableSequence & 1;
1206
1247
  if (reliableSeqBit === expectedBit) {
1207
- this.incomingReliableSequence++;
1208
- if (payloadOffset + reliableLen > packet.byteLength) return null;
1209
- reliableData = packet.slice(payloadOffset, payloadOffset + reliableLen);
1248
+ if (isFragment) {
1249
+ if (payloadOffset + 8 > packet.byteLength) return null;
1250
+ const fragStart = view.getUint32(payloadOffset, true);
1251
+ payloadOffset += 4;
1252
+ const fragTotal = view.getUint32(payloadOffset, true);
1253
+ payloadOffset += 4;
1254
+ if (fragTotal > _NetChan2.MAX_RELIABLE_BUFFER) {
1255
+ console.warn(`NetChan: received invalid fragment total ${fragTotal} > ${_NetChan2.MAX_RELIABLE_BUFFER}`);
1256
+ return null;
1257
+ }
1258
+ if (!this.fragmentBuffer || this.fragmentBuffer.length !== fragTotal) {
1259
+ this.fragmentBuffer = new Uint8Array(fragTotal);
1260
+ this.fragmentLength = fragTotal;
1261
+ this.fragmentReceived = 0;
1262
+ }
1263
+ if (payloadOffset + reliableLen > packet.byteLength) return null;
1264
+ const data = packet.subarray(payloadOffset, payloadOffset + reliableLen);
1265
+ if (fragStart === this.fragmentReceived && fragStart + reliableLen <= fragTotal) {
1266
+ this.fragmentBuffer.set(data, fragStart);
1267
+ this.fragmentReceived += reliableLen;
1268
+ if (this.fragmentReceived >= fragTotal) {
1269
+ reliableData = this.fragmentBuffer;
1270
+ this.incomingReliableSequence++;
1271
+ this.fragmentBuffer = null;
1272
+ this.fragmentLength = 0;
1273
+ this.fragmentReceived = 0;
1274
+ }
1275
+ }
1276
+ } else {
1277
+ this.incomingReliableSequence++;
1278
+ if (payloadOffset + reliableLen > packet.byteLength) return null;
1279
+ reliableData = packet.slice(payloadOffset, payloadOffset + reliableLen);
1280
+ }
1210
1281
  }
1211
1282
  payloadOffset += reliableLen;
1212
1283
  }
@@ -1233,7 +1304,7 @@ var _NetChan = class _NetChan2 {
1233
1304
  * Writes a byte to the reliable message buffer
1234
1305
  */
1235
1306
  writeReliableByte(value) {
1236
- if (this.reliableLength + 1 > _NetChan2.MAX_MSGLEN - _NetChan2.HEADER_OVERHEAD) {
1307
+ if (this.reliableLength + 1 > _NetChan2.MAX_RELIABLE_BUFFER) {
1237
1308
  throw new Error("NetChan reliable buffer overflow");
1238
1309
  }
1239
1310
  this.reliableMessage.writeByte(value);
@@ -1243,7 +1314,7 @@ var _NetChan = class _NetChan2 {
1243
1314
  * Writes a short to the reliable message buffer
1244
1315
  */
1245
1316
  writeReliableShort(value) {
1246
- if (this.reliableLength + 2 > _NetChan2.MAX_MSGLEN - _NetChan2.HEADER_OVERHEAD) {
1317
+ if (this.reliableLength + 2 > _NetChan2.MAX_RELIABLE_BUFFER) {
1247
1318
  throw new Error("NetChan reliable buffer overflow");
1248
1319
  }
1249
1320
  this.reliableMessage.writeShort(value);
@@ -1253,7 +1324,7 @@ var _NetChan = class _NetChan2 {
1253
1324
  * Writes a long to the reliable message buffer
1254
1325
  */
1255
1326
  writeReliableLong(value) {
1256
- if (this.reliableLength + 4 > _NetChan2.MAX_MSGLEN - _NetChan2.HEADER_OVERHEAD) {
1327
+ if (this.reliableLength + 4 > _NetChan2.MAX_RELIABLE_BUFFER) {
1257
1328
  throw new Error("NetChan reliable buffer overflow");
1258
1329
  }
1259
1330
  this.reliableMessage.writeLong(value);
@@ -1264,7 +1335,7 @@ var _NetChan = class _NetChan2 {
1264
1335
  */
1265
1336
  writeReliableString(value) {
1266
1337
  const len = value.length + 1;
1267
- if (this.reliableLength + len > _NetChan2.MAX_MSGLEN - _NetChan2.HEADER_OVERHEAD) {
1338
+ if (this.reliableLength + len > _NetChan2.MAX_RELIABLE_BUFFER) {
1268
1339
  throw new Error("NetChan reliable buffer overflow");
1269
1340
  }
1270
1341
  this.reliableMessage.writeString(value);
@@ -1297,6 +1368,7 @@ _NetChan.MAX_MSGLEN = 1400;
1297
1368
  _NetChan.FRAGMENT_SIZE = 1024;
1298
1369
  _NetChan.PACKET_HEADER = 10;
1299
1370
  _NetChan.HEADER_OVERHEAD = _NetChan.PACKET_HEADER + 2;
1371
+ _NetChan.MAX_RELIABLE_BUFFER = 262144;
1300
1372
  var AmmoType = /* @__PURE__ */ ((AmmoType2) => {
1301
1373
  AmmoType2[AmmoType2["Bullets"] = 0] = "Bullets";
1302
1374
  AmmoType2[AmmoType2["Shells"] = 1] = "Shells";