UNPKG

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
"use strict"; 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-";