arx-convert
Version:
Converts various Arx Fatalis formats to JSON or YAML and back
51 lines • 2.17 kB
JavaScript
import { BinaryIO } from '../common/BinaryIO.js';
import { DANAE_VERSION } from '../common/constants.js';
import { repeat } from '../common/helpers.js';
export class LlfHeader {
static readFrom(binary) {
binary.readFloat32(); // version - always DANAE_VERSION
binary.readString(16); // identifier - always "DANAE_LLH_FILE"
const dataBlock = {
lastModifiedBy: binary.readString(256),
lastModifiedAt: binary.readInt32(),
numberOfLights: binary.readInt32(),
};
binary.readInt32(); // number of shadow polygons - always 0
binary.readInt32(); // number of ignored polygons - always 0
const numberOfPolygonsInFTS = binary.readInt32();
binary.readInt32Array(256); // pad - ?
binary.readFloat32Array(256); // fpad - ?
binary.readString(4096); // cpad - ?
binary.readInt32Array(256); // bpad - ?
return {
...dataBlock,
numberOfPolygonsInFTS,
};
}
static accumulateFrom(json) {
const buffer = new ArrayBuffer(LlfHeader.sizeOf());
const binary = new BinaryIO(buffer);
binary.writeFloat32(DANAE_VERSION);
binary.writeString('DANAE_LLH_FILE', 16);
binary.writeString(json.header.lastModifiedBy, 256);
binary.writeInt32(json.header.lastModifiedAt);
binary.writeInt32(json.lights.length);
binary.writeInt32(0); // number of shadow polygons
binary.writeInt32(0); // number of ignored polygons
binary.writeInt32(json.header.numberOfPolygonsInFTS);
binary.writeInt32Array(repeat(0, 256)); // pad
binary.writeFloat32Array(repeat(0, 256)); // fpad
binary.writeString('', 4096); // cpad
binary.writeInt32Array(repeat(0, 256)); // bpad
return buffer;
}
static sizeOf() {
return (BinaryIO.sizeOfFloat32() +
BinaryIO.sizeOfString(16 + 256) +
BinaryIO.sizeOfInt32Array(5 + 256) +
BinaryIO.sizeOfFloat32Array(256) +
BinaryIO.sizeOfString(4096) +
BinaryIO.sizeOfInt32Array(256));
}
}
//# sourceMappingURL=LlfHeader.js.map