@fboes/aerofly-custom-missions
Version:
Builder for Aerofly FS4 Custom Missions Files
61 lines (53 loc) • 1.88 kB
text/typescript
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)));
}
}