mirror of
https://github.com/misenhower/splatoon3.ink.git
synced 2026-10-23 13:42:48 -05:00
110 lines
3.8 KiB
JavaScript
110 lines
3.8 KiB
JavaScript
import Media from '../Media.mjs';
|
||
import { useAnarchyOpenSchedulesStore, useAnarchySeriesSchedulesStore, useRegularSchedulesStore, useSplatfestOpenSchedulesStore, useSplatfestProSchedulesStore, useXSchedulesStore } from '../../../src/stores/schedules.mjs';
|
||
import { useUSSplatfestsStore } from '../../../src/stores/splatfests.mjs';
|
||
import ScreenshotHelper from '../../screenshots/ScreenshotHelper.mjs';
|
||
import StatusGenerator from './StatusGenerator.mjs';
|
||
export default class SchedulesStatus extends StatusGenerator
|
||
{
|
||
key = 'schedules';
|
||
name = 'Schedules';
|
||
|
||
async getStages() {
|
||
await this.preparePinia();
|
||
|
||
return {
|
||
regular: useRegularSchedulesStore().activeSchedule,
|
||
anarchySeries: useAnarchySeriesSchedulesStore().activeSchedule,
|
||
anarchyOpen: useAnarchyOpenSchedulesStore().activeSchedule,
|
||
xMatch: useXSchedulesStore().activeSchedule,
|
||
splatfestOpen: useSplatfestOpenSchedulesStore().activeSchedule,
|
||
splatfestPro: useSplatfestProSchedulesStore().activeSchedule,
|
||
tricolor: useUSSplatfestsStore().tricolor,
|
||
};
|
||
}
|
||
|
||
async getDataTime() {
|
||
await this.preparePinia();
|
||
|
||
let stages = await this.getStages();
|
||
let schedule = stages.regular || stages.splatfestOpen;
|
||
|
||
return Date.parse(schedule.startTime);
|
||
}
|
||
|
||
async _getStatus() {
|
||
let stages = await this.getStages();
|
||
|
||
if (stages.splatfestOpen?.settings) {
|
||
let festOpenStages = stages.splatfestOpen.settings.vsStages;
|
||
let festProStages = stages.splatfestPro.settings.vsStages;
|
||
|
||
let lines = [
|
||
'Join the Splatfest Battle! #splatfest #maprotation',
|
||
'',
|
||
`– Open: ${festOpenStages[0].name} and ${festOpenStages[1].name}`,
|
||
`– Pro: ${festProStages[0].name} and ${festProStages[1].name}`,
|
||
];
|
||
|
||
if(stages.tricolor?.isTricolorActive && stages.tricolor.tricolorStage) {
|
||
lines.push(`– Tricolor: ${stages.tricolor.tricolorStage.name}`);
|
||
}
|
||
|
||
if(stages.tricolor?.isTricolorActive && stages.tricolor.tricolorStages) {
|
||
if(stages.tricolor.tricolorStages.length == 1) {
|
||
lines.push(`– Tricolor: ${stages.tricolor.tricolorStages[0].name}`);
|
||
} else {
|
||
lines.push(`– Tricolor: ${stages.tricolor.tricolorStages[0].name} and ${stages.tricolor.tricolorStages[1].name}`);
|
||
}
|
||
}
|
||
return lines.join('\n');
|
||
|
||
}
|
||
|
||
let lines = [
|
||
'Splatoon 3 map rotation: #maprotation',
|
||
'',
|
||
`– Anarchy (Series): ${stages.anarchySeries.settings.vsRule.name}`,
|
||
`– Anarchy (Open): ${stages.anarchyOpen.settings.vsRule.name}`,
|
||
`– X Battle: ${stages.xMatch.settings.vsRule.name}`,
|
||
];
|
||
|
||
return lines.join('\n');
|
||
}
|
||
|
||
/** @param {ScreenshotHelper} screenshotHelper */
|
||
async _getMedia(screenshotHelper) {
|
||
let stages = await this.getStages();
|
||
|
||
// If the Tricolor stage is active, we need to make the image size a little taller
|
||
// let viewport = stages.tricolor?.isTricolorActive
|
||
// ? { height: 925 }
|
||
// : { };
|
||
let viewport = {}; // Disabling for now
|
||
|
||
let media = new Media;
|
||
media.file = await screenshotHelper.capture('schedules', { viewport });
|
||
|
||
let detail = s => `${s.settings.vsRule.name} on ${s.settings.vsStages[0].name} and ${s.settings.vsStages[1].name}`;
|
||
|
||
let lines = ['Splatoon 3 map rotation:\n'];
|
||
|
||
if (stages.splatfestOpen?.settings) {
|
||
lines.push(...[
|
||
`Splatfest Battle (Open): ${detail(stages.splatfestOpen)}`,
|
||
`Splatfest Battle (Pro): ${detail(stages.splatfestPro)}`,
|
||
]);
|
||
} else {
|
||
lines.push(...[
|
||
`Regular Battle: ${detail(stages.regular)}`,
|
||
`Anarchy Battle (Series): ${detail(stages.anarchySeries)}`,
|
||
`Anarchy Battle (Open): ${detail(stages.anarchyOpen)}`,
|
||
`X Battle: ${detail(stages.xMatch)}`,
|
||
]);
|
||
}
|
||
|
||
media.altText = lines.filter(l => l).join('\n');
|
||
|
||
return media;
|
||
}
|
||
}
|