UNPKG

arx-convert

Version:

Converts various Arx Fatalis formats to JSON or YAML and back

68 lines 2.56 kB
import { BinaryIO } from '../common/BinaryIO.js'; /** @see https://github.com/arx/ArxLibertatis/blob/1.2.1/src/graphics/data/FTLFormat.h#L105 */ export var ArxFaceType; (function (ArxFaceType) { ArxFaceType[ArxFaceType["Flat"] = 0] = "Flat"; ArxFaceType[ArxFaceType["Text"] = 1] = "Text"; ArxFaceType[ArxFaceType["DoubleSided"] = 2] = "DoubleSided"; })(ArxFaceType || (ArxFaceType = {})); export class Face { static readFrom(binary) { const faceType = binary.readInt32(); binary.readUint32Array(3); // rgb - always [0, 0, 0] const dataBlock1 = { faceType, vertexIdx: binary.readUint16Array(3), textureIdx: binary.readInt16(), u: binary.readFloat32Array(3), v: binary.readFloat32Array(3), }; binary.readInt16Array(3); // ou - ignored by Arx binary.readInt16Array(3); // ov - ignored by Arx const dataBlock2 = { transval: binary.readFloat32(), norm: binary.readVector3(), }; binary.readVector3Array(3); // normals - ignored by Arx binary.readFloat32(); // temp - ignored by Arx return { ...dataBlock1, ...dataBlock2, }; } static accumulateFrom(face) { const buffer = new ArrayBuffer(Face.sizeOf()); const binary = new BinaryIO(buffer); binary.writeInt32(face.faceType); binary.writeUint32Array([0, 0, 0]); // rgb binary.writeUint16Array(face.vertexIdx); binary.writeInt16(face.textureIdx); binary.writeFloat32Array(face.u); binary.writeFloat32Array(face.v); binary.writeInt16Array([0, 0, 0]); // ou binary.writeInt16Array([0, 0, 0]); // ov binary.writeFloat32(face.transval ?? 0); binary.writeVector3(face.norm); binary.writeVector3Array([ // normals { x: 0, y: 0, z: 0 }, { x: 0, y: 0, z: 0 }, { x: 0, y: 0, z: 0 }, ]); binary.writeFloat32(0); // temp return buffer; } static sizeOf() { return (BinaryIO.sizeOfInt32() + BinaryIO.sizeOfUint32Array(3) + BinaryIO.sizeOfUint16Array(3) + BinaryIO.sizeOfInt16() + 2 * BinaryIO.sizeOfFloat32Array(3) + 2 * BinaryIO.sizeOfInt16Array(3) + BinaryIO.sizeOfFloat32() + BinaryIO.sizeOfVector3() + BinaryIO.sizeOfVector3Array(3) + BinaryIO.sizeOfFloat32()); } } //# sourceMappingURL=Face.js.map