warframe-worldstate-parser
Version:
An Open parser for Warframe's Worldstate in Javascript
75 lines (59 loc) • 1.86 kB
JavaScript
import {
languageDesc,
languageString,
parseDate,
translateCalendarEvent,
translateSeason,
} from 'warframe-worldstate-data/utilities';
const EventTypes = Object.freeze({
PLOT: 'CET_PLOT',
REWARD: 'CET_REWARD',
CHALLENGE: 'CET_CHALLENGE',
UPGRADE: 'CET_UPGRADE',
});
/**
* Event data for a 1999 calendar day
* @param {object} event raw event data
*/
class DayEvent {
constructor(event) {
this.type = translateCalendarEvent(event.type);
if (event.challenge) this.challenge = this.eventDescription(event.challenge);
if (event.upgrade) this.upgrade = this.eventDescription(event.upgrade);
if (event.reward) this.reward = languageString(event.reward);
if (event.type === EventTypes.PLOT) {
this.dialogueName = event.dialogueName;
this.dialogueConvo = event.dialogueConvo;
}
}
eventDescription(name) {
return { title: languageString(name), description: languageDesc(name) };
}
}
export default class Calendar {
constructor(calendar) {
this.activation = parseDate(calendar.Activation);
this.expiry = parseDate(calendar.Expiry);
this.days = Array.isArray(calendar.Days)
? calendar.Days.filter(Boolean).map((d) => ({
...d,
date: this.getDate(d.day).toISOString(),
events: d.events.map((e) => new DayEvent(e)),
}))
: [];
this.season = translateSeason(calendar.Season);
this.yearIteration = calendar.YearIteration;
this.version = calendar.Version;
this.requirements = calendar.UpgradeAvaliabilityRequirements;
}
/**
* Converts number of day to a date in 1999 in UTC
* @param {number} day number of the day in a year
* @returns {Date} the date in 1999
*/
getDate(day) {
const date = new Date(Date.UTC(1999));
date.setUTCDate(date.getUTCDate() + day - 1);
return date;
}
}