quake2ts 0.0.175 → 0.0.177
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/package.json +1 -1
- package/packages/client/dist/browser/index.global.js +3 -3
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/browser/index.global.js +8 -8
- package/packages/engine/dist/browser/index.global.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs +64 -3
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- package/packages/engine/dist/esm/index.js +64 -3
- package/packages/engine/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/types/assets/bsp.d.ts +18 -0
- package/packages/engine/dist/types/assets/bsp.d.ts.map +1 -1
- package/packages/engine/dist/types/render/bsp/geometry.d.ts +4 -1
- package/packages/engine/dist/types/render/bsp/geometry.d.ts.map +1 -1
- package/packages/game/dist/browser/index.global.js +2 -2
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +77 -35
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +77 -35
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/combat/damage.d.ts +2 -2
- package/packages/game/dist/types/combat/damage.d.ts.map +1 -1
- package/packages/game/dist/types/combat/specialDamage.d.ts.map +1 -1
- package/packages/game/dist/types/combat/weapons/firing.d.ts.map +1 -1
- package/packages/game/dist/types/entities/monsters/attack.d.ts.map +1 -1
- package/packages/game/dist/types/entities/monsters/berserk.d.ts.map +1 -1
- package/packages/game/dist/types/entities/monsters/mutant.d.ts.map +1 -1
- package/packages/game/dist/types/entities/monsters/parasite.d.ts.map +1 -1
- package/packages/game/dist/types/entities/projectiles/rocket.d.ts.map +1 -1
- package/packages/game/dist/types/entities/projectiles.d.ts.map +1 -1
- package/packages/game/dist/types/inventory/playerInventory.d.ts +3 -1
- package/packages/game/dist/types/inventory/playerInventory.d.ts.map +1 -1
|
@@ -1669,7 +1669,7 @@ function parseBsp(buffer) {
|
|
|
1669
1669
|
const brushSides = parseBrushSides(buffer, lumps.get(15 /* BrushSides */));
|
|
1670
1670
|
const leafLists = parseLeafLists(buffer, lumps.get(9 /* LeafFaces */), lumps.get(10 /* LeafBrushes */), leafs);
|
|
1671
1671
|
const visibility = parseVisibility(buffer, lumps.get(3 /* Visibility */));
|
|
1672
|
-
|
|
1672
|
+
const map = {
|
|
1673
1673
|
header,
|
|
1674
1674
|
entities,
|
|
1675
1675
|
planes,
|
|
@@ -1686,14 +1686,75 @@ function parseBsp(buffer) {
|
|
|
1686
1686
|
models,
|
|
1687
1687
|
brushes,
|
|
1688
1688
|
brushSides,
|
|
1689
|
-
visibility
|
|
1689
|
+
visibility,
|
|
1690
|
+
pickEntity(ray) {
|
|
1691
|
+
let closest = null;
|
|
1692
|
+
let minDistance = Infinity;
|
|
1693
|
+
for (const entity of entities.entities) {
|
|
1694
|
+
const modelKey = entity.properties["model"];
|
|
1695
|
+
if (!modelKey || !modelKey.startsWith("*")) {
|
|
1696
|
+
continue;
|
|
1697
|
+
}
|
|
1698
|
+
const modelIndex = parseInt(modelKey.substring(1), 10);
|
|
1699
|
+
if (isNaN(modelIndex) || modelIndex < 0 || modelIndex >= models.length) {
|
|
1700
|
+
continue;
|
|
1701
|
+
}
|
|
1702
|
+
const model = models[modelIndex];
|
|
1703
|
+
const dist = intersectRayAabb(ray.origin, ray.direction, model.mins, model.maxs);
|
|
1704
|
+
if (dist !== null && dist < minDistance) {
|
|
1705
|
+
minDistance = dist;
|
|
1706
|
+
closest = { entity, model, distance: dist };
|
|
1707
|
+
}
|
|
1708
|
+
}
|
|
1709
|
+
return closest;
|
|
1710
|
+
}
|
|
1690
1711
|
};
|
|
1712
|
+
return map;
|
|
1713
|
+
}
|
|
1714
|
+
function intersectRayAabb(origin, direction, mins, maxs) {
|
|
1715
|
+
let tmin = 0;
|
|
1716
|
+
let tmax = Infinity;
|
|
1717
|
+
for (let i = 0; i < 3; i++) {
|
|
1718
|
+
if (Math.abs(direction[i]) < 1e-8) {
|
|
1719
|
+
if (origin[i] < mins[i] || origin[i] > maxs[i]) {
|
|
1720
|
+
return null;
|
|
1721
|
+
}
|
|
1722
|
+
} else {
|
|
1723
|
+
const invD = 1 / direction[i];
|
|
1724
|
+
let t0 = (mins[i] - origin[i]) * invD;
|
|
1725
|
+
let t1 = (maxs[i] - origin[i]) * invD;
|
|
1726
|
+
if (t0 > t1) {
|
|
1727
|
+
const temp = t0;
|
|
1728
|
+
t0 = t1;
|
|
1729
|
+
t1 = temp;
|
|
1730
|
+
}
|
|
1731
|
+
tmin = Math.max(tmin, t0);
|
|
1732
|
+
tmax = Math.min(tmax, t1);
|
|
1733
|
+
if (tmin > tmax) {
|
|
1734
|
+
return null;
|
|
1735
|
+
}
|
|
1736
|
+
}
|
|
1737
|
+
}
|
|
1738
|
+
return tmin;
|
|
1691
1739
|
}
|
|
1692
1740
|
function parseEntities(buffer, info) {
|
|
1693
1741
|
const raw = new TextDecoder().decode(new Uint8Array(buffer, info.offset, info.length));
|
|
1694
1742
|
const entities = parseEntityString(raw);
|
|
1695
1743
|
const worldspawn = entities.find((ent) => ent.classname === "worldspawn");
|
|
1696
|
-
return {
|
|
1744
|
+
return {
|
|
1745
|
+
raw,
|
|
1746
|
+
entities,
|
|
1747
|
+
worldspawn,
|
|
1748
|
+
getUniqueClassnames() {
|
|
1749
|
+
const classnames = /* @__PURE__ */ new Set();
|
|
1750
|
+
for (const entity of entities) {
|
|
1751
|
+
if (entity.classname) {
|
|
1752
|
+
classnames.add(entity.classname);
|
|
1753
|
+
}
|
|
1754
|
+
}
|
|
1755
|
+
return Array.from(classnames).sort();
|
|
1756
|
+
}
|
|
1757
|
+
};
|
|
1697
1758
|
}
|
|
1698
1759
|
function parseEntityString(text) {
|
|
1699
1760
|
const entities = [];
|