UNPKG

@fboes/aerofly-custom-missions

Version:

Builder for Aerofly FS4 Custom Missions Files

104 lines (89 loc) 3.01 kB
import { AeroflyConfigurationNode } from "../node/AeroflyConfigurationNode.js"; /** * @class Represents the UTC time for a mission in Aerofly FS4. */ export class AeroflyTimeUtc { /** * @property {Date} time of flight plan. Relevant is the UTC part, so * consider setting this date in UTC. */ time: Date; /** * @param {Date} time of flight plan. Relevant is the UTC part, so * consider setting this date in UTC. */ constructor(time: Date) { this.time = time; } static createFromComponents(year: number, month: number, day: number, hours: number): AeroflyTimeUtc { const time = new AeroflyTimeUtc(new Date()); time.timeYear = year; time.timeMonth = month; time.timeDay = day; time.timeHours = hours; return time; } /** * @returns {number} the Aerofly value for UTC year */ get timeYear(): number { return this.time.getUTCFullYear(); } set timeYear(year: number) { this.time.setUTCFullYear(year); } /** * @returns {number} the Aerofly value for UTC month (1-12) */ get timeMonth(): number { return this.time.getUTCMonth() + 1; } set timeMonth(month: number) { this.time.setUTCMonth(month - 1); } /** * @returns {number} the Aerofly value for UTC day of the month (1-31) */ get timeDay(): number { return this.time.getUTCDate(); } set timeDay(day: number) { this.time.setUTCDate(day); } /** * @returns {number} the Aerofly value for UTC hours + minutes/60 + seconds/3600. Ignores milliseconds ;) */ get timeHours(): number { return this.time.getUTCHours() + this.time.getUTCMinutes() / 60 + this.time.getUTCSeconds() / 3600; } set timeHours(hours: number) { const totalSeconds = Math.round(hours * 3600); const h = Math.floor(totalSeconds / 3600); const m = Math.floor((totalSeconds % 3600) / 60); const s = totalSeconds % 60; this.time.setUTCHours(h, m, s, 0); } /** * @returns {string} Time representation like "20:15:00" */ get time_presentational(): string { return [this.time.getUTCHours(), this.time.getUTCMinutes(), this.time.getUTCSeconds()] .map((t) => { return String(t).padStart(2, "0"); }) .join(":"); } getElement(): AeroflyConfigurationNode { return new AeroflyConfigurationNode("tm_time_utc", "time_utc") .appendChild("int32", "time_year", this.timeYear) .appendChild("int32", "time_month", this.timeMonth) .appendChild("int32", "time_day", this.timeDay) .appendChild("float64", "time_hours", this.timeHours, `${this.time_presentational} UTC`); } /** * @returns {string} to use in Aerofly FS4's `main.mcf` */ toString(): string { return this.getElement().toString(); } }