quake2ts 0.0.301 → 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 (32) hide show
  1. package/package.json +1 -1
  2. package/packages/client/dist/browser/index.global.js +8 -8
  3. package/packages/client/dist/browser/index.global.js.map +1 -1
  4. package/packages/client/dist/cjs/index.cjs +180 -36
  5. package/packages/client/dist/cjs/index.cjs.map +1 -1
  6. package/packages/client/dist/esm/index.js +180 -36
  7. package/packages/client/dist/esm/index.js.map +1 -1
  8. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  9. package/packages/engine/dist/browser/index.global.js +9 -9
  10. package/packages/engine/dist/browser/index.global.js.map +1 -1
  11. package/packages/engine/dist/cjs/index.cjs +90 -18
  12. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  13. package/packages/engine/dist/esm/index.js +90 -18
  14. package/packages/engine/dist/esm/index.js.map +1 -1
  15. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  16. package/packages/game/dist/browser/index.global.js +4 -4
  17. package/packages/game/dist/browser/index.global.js.map +1 -1
  18. package/packages/game/dist/cjs/index.cjs +90 -18
  19. package/packages/game/dist/cjs/index.cjs.map +1 -1
  20. package/packages/game/dist/esm/index.js +90 -18
  21. package/packages/game/dist/esm/index.js.map +1 -1
  22. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  23. package/packages/shared/dist/browser/index.global.js +1 -1
  24. package/packages/shared/dist/browser/index.global.js.map +1 -1
  25. package/packages/shared/dist/cjs/index.cjs +97 -19
  26. package/packages/shared/dist/cjs/index.cjs.map +1 -1
  27. package/packages/shared/dist/esm/index.js +97 -19
  28. package/packages/shared/dist/esm/index.js.map +1 -1
  29. package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
  30. package/packages/shared/dist/types/net/netchan.d.ts +5 -0
  31. package/packages/shared/dist/types/net/netchan.d.ts.map +1 -1
  32. package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
@@ -888,10 +888,14 @@ var _NetChan = class _NetChan2 {
888
888
  this.incomingReliableSequence = 0;
889
889
  this.outgoingReliableSequence = 0;
890
890
  this.reliableLength = 0;
891
+ this.fragmentSendOffset = 0;
892
+ this.fragmentBuffer = null;
893
+ this.fragmentLength = 0;
894
+ this.fragmentReceived = 0;
891
895
  this.lastReceived = 0;
892
896
  this.lastSent = 0;
893
897
  this.remoteAddress = null;
894
- this.reliableMessage = new BinaryWriter(_NetChan2.MAX_MSGLEN);
898
+ this.reliableMessage = new BinaryWriter(_NetChan2.MAX_RELIABLE_BUFFER);
895
899
  const now = Date.now();
896
900
  this.lastReceived = now;
897
901
  this.lastSent = now;
@@ -917,6 +921,10 @@ var _NetChan = class _NetChan2 {
917
921
  this.outgoingReliableSequence = 0;
918
922
  this.reliableLength = 0;
919
923
  this.reliableMessage.reset();
924
+ this.fragmentSendOffset = 0;
925
+ this.fragmentBuffer = null;
926
+ this.fragmentLength = 0;
927
+ this.fragmentReceived = 0;
920
928
  this.lastReceived = Date.now();
921
929
  this.lastSent = Date.now();
922
930
  }
@@ -926,18 +934,38 @@ var _NetChan = class _NetChan2 {
926
934
  transmit(unreliableData) {
927
935
  this.outgoingSequence++;
928
936
  this.lastSent = Date.now();
937
+ let sendReliableLength = 0;
938
+ let isFragment = false;
939
+ let fragmentStart = 0;
940
+ if (this.reliableLength > 0) {
941
+ if (this.reliableLength > _NetChan2.FRAGMENT_SIZE) {
942
+ isFragment = true;
943
+ if (this.fragmentSendOffset >= this.reliableLength) {
944
+ this.fragmentSendOffset = 0;
945
+ }
946
+ const remaining = this.reliableLength - this.fragmentSendOffset;
947
+ sendReliableLength = remaining;
948
+ if (sendReliableLength > _NetChan2.FRAGMENT_SIZE) {
949
+ sendReliableLength = _NetChan2.FRAGMENT_SIZE;
950
+ }
951
+ fragmentStart = this.fragmentSendOffset;
952
+ this.fragmentSendOffset += sendReliableLength;
953
+ } else {
954
+ sendReliableLength = this.reliableLength;
955
+ }
956
+ }
929
957
  const headerSize = _NetChan2.PACKET_HEADER;
930
- const reliableSize = this.reliableLength > 0 ? this.reliableLength + 2 : 0;
958
+ const reliableHeaderSize = sendReliableLength > 0 ? 2 + (isFragment ? 8 : 0) : 0;
931
959
  let unreliableSize = unreliableData ? unreliableData.length : 0;
932
- if (headerSize + reliableSize + unreliableSize > _NetChan2.MAX_MSGLEN) {
933
- unreliableSize = _NetChan2.MAX_MSGLEN - headerSize - reliableSize;
960
+ if (headerSize + reliableHeaderSize + sendReliableLength + unreliableSize > _NetChan2.MAX_MSGLEN) {
961
+ unreliableSize = _NetChan2.MAX_MSGLEN - headerSize - reliableHeaderSize - sendReliableLength;
934
962
  if (unreliableSize < 0) unreliableSize = 0;
935
963
  }
936
- const buffer = new ArrayBuffer(headerSize + reliableSize + unreliableSize);
964
+ const buffer = new ArrayBuffer(headerSize + reliableHeaderSize + sendReliableLength + unreliableSize);
937
965
  const view = new DataView(buffer);
938
966
  const result = new Uint8Array(buffer);
939
967
  let sequence = this.outgoingSequence;
940
- if (this.reliableLength > 0) {
968
+ if (sendReliableLength > 0) {
941
969
  sequence |= 2147483648;
942
970
  if ((this.outgoingReliableSequence & 1) !== 0) {
943
971
  sequence |= 1073741824;
@@ -951,13 +979,23 @@ var _NetChan = class _NetChan2 {
951
979
  view.setUint32(4, ack, true);
952
980
  view.setUint16(8, this.qport, true);
953
981
  let offset = headerSize;
954
- if (this.reliableLength > 0) {
955
- view.setUint16(offset, this.reliableLength, true);
982
+ if (sendReliableLength > 0) {
983
+ let lengthField = sendReliableLength;
984
+ if (isFragment) {
985
+ lengthField |= 32768;
986
+ }
987
+ view.setUint16(offset, lengthField, true);
956
988
  offset += 2;
989
+ if (isFragment) {
990
+ view.setUint32(offset, fragmentStart, true);
991
+ offset += 4;
992
+ view.setUint32(offset, this.reliableLength, true);
993
+ offset += 4;
994
+ }
957
995
  const reliableBuffer = this.reliableMessage.getBuffer();
958
- const reliableBytes = reliableBuffer.subarray(0, this.reliableLength);
996
+ const reliableBytes = reliableBuffer.subarray(fragmentStart, fragmentStart + sendReliableLength);
959
997
  result.set(reliableBytes, offset);
960
- offset += this.reliableLength;
998
+ offset += sendReliableLength;
961
999
  }
962
1000
  if (unreliableData && unreliableSize > 0) {
963
1001
  const chunk = unreliableData.slice(0, unreliableSize);
@@ -998,6 +1036,7 @@ var _NetChan = class _NetChan2 {
998
1036
  this.reliableLength = 0;
999
1037
  this.reliableMessage.reset();
1000
1038
  this.outgoingReliableSequence ^= 1;
1039
+ this.fragmentSendOffset = 0;
1001
1040
  }
1002
1041
  }
1003
1042
  const hasReliableData = (sequence & 2147483648) !== 0;
@@ -1006,13 +1045,45 @@ var _NetChan = class _NetChan2 {
1006
1045
  let reliableData = null;
1007
1046
  if (hasReliableData) {
1008
1047
  if (payloadOffset + 2 > packet.byteLength) return null;
1009
- const reliableLen = view.getUint16(payloadOffset, true);
1048
+ let reliableLen = view.getUint16(payloadOffset, true);
1010
1049
  payloadOffset += 2;
1050
+ const isFragment = (reliableLen & 32768) !== 0;
1051
+ reliableLen &= 32767;
1011
1052
  const expectedBit = this.incomingReliableSequence & 1;
1012
1053
  if (reliableSeqBit === expectedBit) {
1013
- this.incomingReliableSequence++;
1014
- if (payloadOffset + reliableLen > packet.byteLength) return null;
1015
- reliableData = packet.slice(payloadOffset, payloadOffset + reliableLen);
1054
+ if (isFragment) {
1055
+ if (payloadOffset + 8 > packet.byteLength) return null;
1056
+ const fragStart = view.getUint32(payloadOffset, true);
1057
+ payloadOffset += 4;
1058
+ const fragTotal = view.getUint32(payloadOffset, true);
1059
+ payloadOffset += 4;
1060
+ if (fragTotal > _NetChan2.MAX_RELIABLE_BUFFER) {
1061
+ console.warn(`NetChan: received invalid fragment total ${fragTotal} > ${_NetChan2.MAX_RELIABLE_BUFFER}`);
1062
+ return null;
1063
+ }
1064
+ if (!this.fragmentBuffer || this.fragmentBuffer.length !== fragTotal) {
1065
+ this.fragmentBuffer = new Uint8Array(fragTotal);
1066
+ this.fragmentLength = fragTotal;
1067
+ this.fragmentReceived = 0;
1068
+ }
1069
+ if (payloadOffset + reliableLen > packet.byteLength) return null;
1070
+ const data = packet.subarray(payloadOffset, payloadOffset + reliableLen);
1071
+ if (fragStart === this.fragmentReceived && fragStart + reliableLen <= fragTotal) {
1072
+ this.fragmentBuffer.set(data, fragStart);
1073
+ this.fragmentReceived += reliableLen;
1074
+ if (this.fragmentReceived >= fragTotal) {
1075
+ reliableData = this.fragmentBuffer;
1076
+ this.incomingReliableSequence++;
1077
+ this.fragmentBuffer = null;
1078
+ this.fragmentLength = 0;
1079
+ this.fragmentReceived = 0;
1080
+ }
1081
+ }
1082
+ } else {
1083
+ this.incomingReliableSequence++;
1084
+ if (payloadOffset + reliableLen > packet.byteLength) return null;
1085
+ reliableData = packet.slice(payloadOffset, payloadOffset + reliableLen);
1086
+ }
1016
1087
  }
1017
1088
  payloadOffset += reliableLen;
1018
1089
  }
@@ -1039,7 +1110,7 @@ var _NetChan = class _NetChan2 {
1039
1110
  * Writes a byte to the reliable message buffer
1040
1111
  */
1041
1112
  writeReliableByte(value) {
1042
- if (this.reliableLength + 1 > _NetChan2.MAX_MSGLEN - _NetChan2.HEADER_OVERHEAD) {
1113
+ if (this.reliableLength + 1 > _NetChan2.MAX_RELIABLE_BUFFER) {
1043
1114
  throw new Error("NetChan reliable buffer overflow");
1044
1115
  }
1045
1116
  this.reliableMessage.writeByte(value);
@@ -1049,7 +1120,7 @@ var _NetChan = class _NetChan2 {
1049
1120
  * Writes a short to the reliable message buffer
1050
1121
  */
1051
1122
  writeReliableShort(value) {
1052
- if (this.reliableLength + 2 > _NetChan2.MAX_MSGLEN - _NetChan2.HEADER_OVERHEAD) {
1123
+ if (this.reliableLength + 2 > _NetChan2.MAX_RELIABLE_BUFFER) {
1053
1124
  throw new Error("NetChan reliable buffer overflow");
1054
1125
  }
1055
1126
  this.reliableMessage.writeShort(value);
@@ -1059,7 +1130,7 @@ var _NetChan = class _NetChan2 {
1059
1130
  * Writes a long to the reliable message buffer
1060
1131
  */
1061
1132
  writeReliableLong(value) {
1062
- if (this.reliableLength + 4 > _NetChan2.MAX_MSGLEN - _NetChan2.HEADER_OVERHEAD) {
1133
+ if (this.reliableLength + 4 > _NetChan2.MAX_RELIABLE_BUFFER) {
1063
1134
  throw new Error("NetChan reliable buffer overflow");
1064
1135
  }
1065
1136
  this.reliableMessage.writeLong(value);
@@ -1070,7 +1141,7 @@ var _NetChan = class _NetChan2 {
1070
1141
  */
1071
1142
  writeReliableString(value) {
1072
1143
  const len = value.length + 1;
1073
- if (this.reliableLength + len > _NetChan2.MAX_MSGLEN - _NetChan2.HEADER_OVERHEAD) {
1144
+ if (this.reliableLength + len > _NetChan2.MAX_RELIABLE_BUFFER) {
1074
1145
  throw new Error("NetChan reliable buffer overflow");
1075
1146
  }
1076
1147
  this.reliableMessage.writeString(value);
@@ -1103,6 +1174,7 @@ _NetChan.MAX_MSGLEN = 1400;
1103
1174
  _NetChan.FRAGMENT_SIZE = 1024;
1104
1175
  _NetChan.PACKET_HEADER = 10;
1105
1176
  _NetChan.HEADER_OVERHEAD = _NetChan.PACKET_HEADER + 2;
1177
+ _NetChan.MAX_RELIABLE_BUFFER = 262144;
1106
1178
  var AmmoType = /* @__PURE__ */ ((AmmoType2) => {
1107
1179
  AmmoType2[AmmoType2["Bullets"] = 0] = "Bullets";
1108
1180
  AmmoType2[AmmoType2["Shells"] = 1] = "Shells";