UNPKG

arx-convert

Version:

Converts various Arx Fatalis formats to JSON or YAML and back

67 lines 2 kB
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