UNPKG

@fboes/aerofly-custom-missions

Version:

Builder for Aerofly FS4 Custom Missions Files

61 lines (53 loc) 1.88 kB
import { AeroflyConfigurationNode, AeroflyConfigurationNodeSpacer } from "../node/AeroflyConfigurationNode.js"; import { AeroflyMission } from "./AeroflyMission.js"; /** * @class * A list of flight plans. * * The purpose of this class is to collect data needed for Aerofly FS4's * `custom_missions_user.tmc` flight plan file format, and export the structure * for this file via the `toString()` method. */ export class AeroflyMissionsList { /** * @property {AeroflyMission[]} missions in this mission list */ missions: AeroflyMission[]; /** * @param {AeroflyMission[]} missions in this mission list */ constructor(missions: AeroflyMission[] = []) { this.missions = missions; } getElement(): AeroflyConfigurationNode { return new AeroflyConfigurationNode("file", "").append( new AeroflyConfigurationNode("tmmissions_list", "").append( new AeroflyConfigurationNodeSpacer("list_tmmission_definition", "missions").append( ...this.missions.map((m): AeroflyConfigurationNode => m.getElement()), ), ), ); } /** * @returns {string} to use in Aerofly FS4's `custom_missions_user.tmc` */ toString(): string { return this.getElement().toString(); } /** * @returns {string} XML represenation of this mission list */ toXmlString(): string { return this.getElement().toXmlString(); } toJSON(): AeroflyMission[] { return this.missions; } static fromJSON(json: unknown): AeroflyMissionsList { if (!Array.isArray(json)) { throw new Error("Mission list base node must be of array type"); } const data = json as unknown[]; return new AeroflyMissionsList(data.map((d) => AeroflyMission.fromJSON(d))); } }