arx-convert
Version:
Converts various Arx Fatalis formats to JSON or YAML and back
50 lines • 1.44 kB
JavaScript
import { ArxPolygonFlags } from './Polygon.js';
import { COORDS_THAT_ROUND_UP } from './constants.js';
export function isQuad({ flags }) {
return (flags & ArxPolygonFlags.Quad) !== 0;
}
export function isTiled({ flags }) {
return (flags & ArxPolygonFlags.Tiled) !== 0;
}
export function addLightIndex(polygons) {
let idx = 0;
return polygons.map((polygon) => {
polygon.vertices[0].llfColorIdx = idx;
polygon.vertices[1].llfColorIdx = idx + 1;
polygon.vertices[2].llfColorIdx = idx + 2;
idx = idx + 3;
if (isQuad(polygon)) {
polygon.vertices[3].llfColorIdx = idx;
idx = idx + 1;
}
return polygon;
});
}
function doCoordsNeedToBeRoundedUp(coords) {
const [a, b, c] = coords.sort((a, b) => {
return a - b;
});
return COORDS_THAT_ROUND_UP.some(([x, y, z]) => {
return a === x && b === y && c === z;
});
}
export function getCellCoords([a, b, c]) {
const x = (a.x + b.x + c.x) / 3;
const z = (a.z + b.z + c.z) / 3;
let cellX;
if (doCoordsNeedToBeRoundedUp([a.x, b.x, c.x])) {
cellX = Math.ceil(x / 100);
}
else {
cellX = Math.floor(x / 100);
}
let cellY;
if (doCoordsNeedToBeRoundedUp([a.z, b.z, c.z])) {
cellY = Math.ceil(z / 100);
}
else {
cellY = Math.floor(z / 100);
}
return [cellX, cellY];
}
//# sourceMappingURL=helpers.js.map