quake2ts 0.0.174 → 0.0.176

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 (42) hide show
  1. package/package.json +1 -1
  2. package/packages/client/dist/browser/index.global.js +3 -3
  3. package/packages/client/dist/browser/index.global.js.map +1 -1
  4. package/packages/client/dist/cjs/index.cjs.map +1 -1
  5. package/packages/client/dist/esm/index.js.map +1 -1
  6. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  7. package/packages/engine/dist/browser/index.global.js +8 -8
  8. package/packages/engine/dist/browser/index.global.js.map +1 -1
  9. package/packages/engine/dist/cjs/index.cjs +64 -3
  10. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  11. package/packages/engine/dist/esm/index.js +64 -3
  12. package/packages/engine/dist/esm/index.js.map +1 -1
  13. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  14. package/packages/engine/dist/types/assets/bsp.d.ts +18 -0
  15. package/packages/engine/dist/types/assets/bsp.d.ts.map +1 -1
  16. package/packages/engine/dist/types/render/bsp/geometry.d.ts +4 -1
  17. package/packages/engine/dist/types/render/bsp/geometry.d.ts.map +1 -1
  18. package/packages/game/dist/browser/index.global.js +2 -2
  19. package/packages/game/dist/browser/index.global.js.map +1 -1
  20. package/packages/game/dist/cjs/index.cjs +120 -70
  21. package/packages/game/dist/cjs/index.cjs.map +1 -1
  22. package/packages/game/dist/esm/index.js +120 -70
  23. package/packages/game/dist/esm/index.js.map +1 -1
  24. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  25. package/packages/game/dist/types/combat/damage.d.ts +2 -2
  26. package/packages/game/dist/types/combat/damage.d.ts.map +1 -1
  27. package/packages/game/dist/types/combat/specialDamage.d.ts.map +1 -1
  28. package/packages/game/dist/types/combat/weapons/firing.d.ts.map +1 -1
  29. package/packages/game/dist/types/entities/monsters/attack.d.ts.map +1 -1
  30. package/packages/game/dist/types/entities/monsters/berserk.d.ts.map +1 -1
  31. package/packages/game/dist/types/entities/monsters/mutant.d.ts.map +1 -1
  32. package/packages/game/dist/types/entities/monsters/parasite.d.ts.map +1 -1
  33. package/packages/game/dist/types/entities/projectiles/rocket.d.ts.map +1 -1
  34. package/packages/game/dist/types/entities/projectiles.d.ts.map +1 -1
  35. package/packages/game/dist/types/index.d.ts +2 -0
  36. package/packages/game/dist/types/index.d.ts.map +1 -1
  37. package/packages/game/dist/types/inventory/playerInventory.d.ts +3 -1
  38. package/packages/game/dist/types/inventory/playerInventory.d.ts.map +1 -1
  39. package/packages/server/dist/index.cjs +38 -24
  40. package/packages/server/dist/index.d.cts +5 -6
  41. package/packages/server/dist/index.d.ts +5 -6
  42. package/packages/server/dist/index.js +38 -24
@@ -1855,7 +1855,7 @@ function parseBsp(buffer) {
1855
1855
  const brushSides = parseBrushSides(buffer, lumps.get(15 /* BrushSides */));
1856
1856
  const leafLists = parseLeafLists(buffer, lumps.get(9 /* LeafFaces */), lumps.get(10 /* LeafBrushes */), leafs);
1857
1857
  const visibility = parseVisibility(buffer, lumps.get(3 /* Visibility */));
1858
- return {
1858
+ const map = {
1859
1859
  header,
1860
1860
  entities,
1861
1861
  planes,
@@ -1872,14 +1872,75 @@ function parseBsp(buffer) {
1872
1872
  models,
1873
1873
  brushes,
1874
1874
  brushSides,
1875
- visibility
1875
+ visibility,
1876
+ pickEntity(ray) {
1877
+ let closest = null;
1878
+ let minDistance = Infinity;
1879
+ for (const entity of entities.entities) {
1880
+ const modelKey = entity.properties["model"];
1881
+ if (!modelKey || !modelKey.startsWith("*")) {
1882
+ continue;
1883
+ }
1884
+ const modelIndex = parseInt(modelKey.substring(1), 10);
1885
+ if (isNaN(modelIndex) || modelIndex < 0 || modelIndex >= models.length) {
1886
+ continue;
1887
+ }
1888
+ const model = models[modelIndex];
1889
+ const dist = intersectRayAabb(ray.origin, ray.direction, model.mins, model.maxs);
1890
+ if (dist !== null && dist < minDistance) {
1891
+ minDistance = dist;
1892
+ closest = { entity, model, distance: dist };
1893
+ }
1894
+ }
1895
+ return closest;
1896
+ }
1876
1897
  };
1898
+ return map;
1899
+ }
1900
+ function intersectRayAabb(origin, direction, mins, maxs) {
1901
+ let tmin = 0;
1902
+ let tmax = Infinity;
1903
+ for (let i = 0; i < 3; i++) {
1904
+ if (Math.abs(direction[i]) < 1e-8) {
1905
+ if (origin[i] < mins[i] || origin[i] > maxs[i]) {
1906
+ return null;
1907
+ }
1908
+ } else {
1909
+ const invD = 1 / direction[i];
1910
+ let t0 = (mins[i] - origin[i]) * invD;
1911
+ let t1 = (maxs[i] - origin[i]) * invD;
1912
+ if (t0 > t1) {
1913
+ const temp = t0;
1914
+ t0 = t1;
1915
+ t1 = temp;
1916
+ }
1917
+ tmin = Math.max(tmin, t0);
1918
+ tmax = Math.min(tmax, t1);
1919
+ if (tmin > tmax) {
1920
+ return null;
1921
+ }
1922
+ }
1923
+ }
1924
+ return tmin;
1877
1925
  }
1878
1926
  function parseEntities(buffer, info) {
1879
1927
  const raw = new TextDecoder().decode(new Uint8Array(buffer, info.offset, info.length));
1880
1928
  const entities = parseEntityString(raw);
1881
1929
  const worldspawn = entities.find((ent) => ent.classname === "worldspawn");
1882
- return { raw, entities, worldspawn };
1930
+ return {
1931
+ raw,
1932
+ entities,
1933
+ worldspawn,
1934
+ getUniqueClassnames() {
1935
+ const classnames = /* @__PURE__ */ new Set();
1936
+ for (const entity of entities) {
1937
+ if (entity.classname) {
1938
+ classnames.add(entity.classname);
1939
+ }
1940
+ }
1941
+ return Array.from(classnames).sort();
1942
+ }
1943
+ };
1883
1944
  }
1884
1945
  function parseEntityString(text) {
1885
1946
  const entities = [];