arx-convert
Version:
Converts various Arx Fatalis formats to JSON or YAML and back
62 lines • 2.34 kB
JavaScript
import { BinaryIO } from '../common/BinaryIO.js';
import { Color } from '../common/Color.js';
import { repeat } from '../common/helpers.js';
export class Fog {
static readFrom(binary) {
const dataBlock1 = {
position: binary.readVector3(),
color: Color.readFrom(binary, 'rgb'),
size: binary.readFloat32(),
special: binary.readInt32(),
scale: binary.readFloat32(),
move: binary.readVector3(),
orientation: binary.readRotation(),
speed: binary.readFloat32(),
rotateSpeed: binary.readFloat32(),
toLive: binary.readInt32(),
};
binary.readInt32(); // blend - always 0
const frequency = binary.readFloat32();
binary.readFloat32Array(32); // fpad - ?
binary.readInt32Array(32); // lpad - ?
binary.readString(256); // cpad - ?
return {
...dataBlock1,
frequency,
};
}
static accumulateFrom(fog) {
const buffer = new ArrayBuffer(Fog.sizeOf());
const binary = new BinaryIO(buffer);
binary.writeVector3(fog.position);
binary.writeBuffer(Color.accumulateFrom(fog.color, 'rgb'));
binary.writeFloat32(fog.size);
binary.writeInt32(fog.special);
binary.writeFloat32(fog.scale);
binary.writeVector3(fog.move);
binary.writeRotation(fog.orientation);
binary.writeFloat32(fog.speed);
binary.writeFloat32(fog.rotateSpeed);
binary.writeInt32(fog.toLive);
binary.writeInt32(0); // blend
binary.writeFloat32(fog.frequency);
binary.writeFloat32Array(repeat(0, 32)); // fpad
binary.writeInt32Array(repeat(0, 32)); // lpad
binary.writeString('', 256); // cpad
return buffer;
}
static sizeOf() {
return (BinaryIO.sizeOfVector3() +
Color.sizeOf('rgb') +
BinaryIO.sizeOfFloat32Array(2) +
BinaryIO.sizeOfInt32() +
BinaryIO.sizeOfVector3() +
BinaryIO.sizeOfRotation() +
BinaryIO.sizeOfFloat32Array(3) +
BinaryIO.sizeOfInt32Array(2) +
BinaryIO.sizeOfFloat32Array(32) +
BinaryIO.sizeOfInt32Array(32) +
BinaryIO.sizeOfString(256));
}
}
//# sourceMappingURL=Fog.js.map