arx-convert
Version:
Converts various Arx Fatalis formats to JSON or YAML and back
67 lines • 2 kB
JavaScript
import { BinaryIO } from '../common/BinaryIO.js';
import { Color } from '../common/Color.js';
const HARDCODED_DATA_TYPE1 = {
color: Color.transparent,
specular: Color.transparent,
tu: 0,
tv: 0,
};
const HARDCODED_DATA_TYPE2 = {
color: {
r: 1,
g: 22,
b: 242,
a: 0.298_039_215_686_274_5,
},
specular: {
r: 0,
g: 92,
b: 200,
a: 0.494_117_647_058_823_55,
},
tu: 1.569_454_280_043_795_1e-43,
tv: 2.772_455_559_201_393e-38,
};
export class TextureVertex {
static readFrom(binary) {
const data = {
position: binary.readVector3(),
rhw: binary.readFloat32(),
};
Color.readFrom(binary, 'abgr'); // color
Color.readFrom(binary, 'abgr'); // specular
binary.readFloat32(); // tu
binary.readFloat32(); // tv
return data;
}
static accumulateFrom(vertex, idx) {
const buffer = new ArrayBuffer(TextureVertex.sizeOf());
const binary = new BinaryIO(buffer);
const isFirstVertexOfPolygon = idx === 0;
const isLastVertexOfPolygon = idx === 3;
let data;
if (isLastVertexOfPolygon) {
data = HARDCODED_DATA_TYPE2;
}
else {
data = HARDCODED_DATA_TYPE1;
}
const { color, specular, tu, tv } = data;
binary.writeVector3(vertex.position);
if (isFirstVertexOfPolygon) {
binary.writeFloat32(vertex.rhw);
}
else {
binary.writeFloat32(0);
}
binary.writeBuffer(Color.accumulateFrom(color, 'abgr'));
binary.writeBuffer(Color.accumulateFrom(specular, 'abgr'));
binary.writeFloat32(tu);
binary.writeFloat32(tv);
return buffer;
}
static sizeOf() {
return (BinaryIO.sizeOfVector3() + BinaryIO.sizeOfFloat32() + Color.sizeOf('abgr') * 2 + BinaryIO.sizeOfFloat32Array(2));
}
}
//# sourceMappingURL=TextureVertex.js.map