furnace-module-interface
Version:
An interface for loading, processing and saving furnace modules in an object-oriented manner. Fully typed via TypeScript.
47 lines (46 loc) • 1.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FurnaceSongModule = void 0;
const bufferHelper_1 = require("./bufferHelper");
const defaults_1 = require("./defaults");
const info_1 = require("./info");
const meta_1 = require("./meta");
class FurnaceSongModule {
constructor() {
this.version = defaults_1.defaults.version;
this.info = info_1.FurnaceInfo.create();
this.meta = meta_1.FurnaceMeta.create();
}
static create() {
return new FurnaceSongModule();
}
static fromHelper(helper) {
const mod = FurnaceSongModule.create();
if (FurnaceSongModule.magic !== helper.getASCII(16)) {
throw new Error("Expected format magic string \"" + FurnaceSongModule.magic + "\" when loading a song module.");
}
mod.version = helper.readUInt16LE();
helper.skipBytes(2);
helper.setPosition(helper.readUInt32LE());
mod.info = info_1.FurnaceInfo.fromHelper(helper, mod.version);
return mod;
}
getAsBuffer() {
const helper = new bufferHelper_1.BufferWriteHelper();
helper.writeString(FurnaceSongModule.magic, "ascii", false);
helper.writeUInt16LE(this.version);
helper.skipBytes(2);
const infoPtr = helper.getPosition(0);
helper.skipBytes(4);
helper.skipBytes(8);
helper.writeUInt32LE(helper.getPosition(0), infoPtr);
this.info.writeToBuffer(helper, this.version);
this.meta.writeToBuffer(helper);
return helper.getTrimmedBuffer();
}
getVersion() {
return this.version;
}
}
exports.FurnaceSongModule = FurnaceSongModule;
FurnaceSongModule.magic = "-Furnace module-";