UNPKG

arx-level-generator

Version:
67 lines 2.25 kB
import fs from 'node:fs/promises'; import path from 'node:path'; import { DLF, FTS, LLF } from 'arx-convert'; import { createCacheFolderIfNotExists } from './services/cache.js'; export class LevelLoader { levelIdx; settings; constructor(levelIdx, settings) { this.levelIdx = levelIdx; this.settings = settings; } async readDlf() { return this.readData('dlf'); } async readFts() { return this.readData('fts'); } async readLlf() { return this.readData('llf'); } async readData(format) { const jsonFolder = await createCacheFolderIfNotExists(this.getCachedJsonFolder(), this.settings); const jsonFilename = path.resolve(jsonFolder, './' + this.getFilename(format) + '.json'); const parser = this.getParser(format); let data; try { const jsonData = await fs.readFile(jsonFilename, 'utf-8'); data = JSON.parse(jsonData); } catch (e) { const binaryFolder = this.getBinaryFolder(); const binaryFilename = path.resolve(binaryFolder, './' + this.getFilename(format) + '.unpacked'); try { await fs.access(binaryFolder, fs.constants.R_OK | fs.constants.W_OK); } catch (e) { throw new Error(`attempted to read folder containing binary level data at "${binaryFolder}"`); } const binaryData = await fs.readFile(binaryFilename); data = parser.load(binaryData); await fs.writeFile(jsonFilename, JSON.stringify(data), 'utf-8'); } return data; } getParser(format) { if (format === 'dlf') { return DLF; } if (format === 'fts') { return FTS; } return LLF; } getFilename(format) { if (format === 'fts') { return 'fast.fts'; } return `level${this.levelIdx}.${format}`; } getCachedJsonFolder() { return `./levels/level${this.levelIdx}`; } getBinaryFolder() { return path.resolve(this.settings.originalLevelFiles, `./arx-fatalis/level${this.levelIdx}`); } } //# sourceMappingURL=LevelLoader.js.map