arx-convert
Version:
Converts various Arx Fatalis formats to JSON or YAML and back
47 lines • 1.91 kB
JavaScript
import { BinaryIO } from '../common/BinaryIO.js';
/**
* @see https://github.com/arx/ArxLibertatis/blob/1.2.1/src/graphics/data/FastSceneFormat.h#L113
* @see https://github.com/arx/ArxLibertatis/blob/ArxFatalis-1.21/Sources/Include/EERIEPoly.h#L149
*/
export var ArxAnchorFlags;
(function (ArxAnchorFlags) {
ArxAnchorFlags[ArxAnchorFlags["None"] = 0] = "None";
// GreenDraw = 1 << 0, // removed in Arx Libertatis, never used in files
// ? = 1 << 1, // no info on this flag, was probably removed earlier by Arkane
// ? = 1 << 2, // no info on this flag, was probably removed earlier by Arkane
ArxAnchorFlags[ArxAnchorFlags["Blocked"] = 8] = "Blocked";
})(ArxAnchorFlags || (ArxAnchorFlags = {}));
export class AnchorData {
static readFrom(binary) {
const data = {
position: binary.readVector3(),
radius: binary.readFloat32(),
height: binary.readFloat32(),
numberOfLinkedAnchors: binary.readInt16(),
isBlocked: false,
};
const flags = binary.readInt16();
if ((flags & ArxAnchorFlags.Blocked) !== 0) {
data.isBlocked = true;
}
return data;
}
static accumulateFrom(anchor) {
const buffer = new ArrayBuffer(AnchorData.sizeOf());
const binary = new BinaryIO(buffer);
binary.writeVector3(anchor.data.position);
binary.writeFloat32(anchor.data.radius);
binary.writeFloat32(anchor.data.height);
binary.writeInt16(anchor.linkedAnchors.length);
let flags = ArxAnchorFlags.None;
if (anchor.data.isBlocked) {
flags = flags | ArxAnchorFlags.Blocked;
}
binary.writeInt16(flags);
return buffer;
}
static sizeOf() {
return BinaryIO.sizeOfVector3() + BinaryIO.sizeOfFloat32Array(2) + BinaryIO.sizeOfInt16Array(2);
}
}
//# sourceMappingURL=AnchorData.js.map