stardew-tracker/static/calendar.js

31 lines
1.1 KiB
JavaScript
Raw Permalink Normal View History

(function exposeCalendar(root, factory) {
const api = factory();
if (typeof module === "object" && module.exports) module.exports = api;
if (root) root.ValleyCalendar = api;
})(typeof window === "undefined" ? globalThis : window, () => {
const seasons = ["spring", "summer", "fall", "winter"];
// Days since Spring 1, Year 1 (which is day 1).
const dayNumber = ({ year, season, day }) => (year - 1) * 112 + seasons.indexOf(season) * 28 + day;
const fromDayNumber = number => {
const offset = number - 1;
return { year: Math.floor(offset / 112) + 1, season: seasons[Math.floor(offset % 112 / 28)], day: offset % 28 + 1 };
};
return {
birthdayOn(birthdays, season, day, year) {
const entry = birthdays?.[season]?.[day];
if (!entry || (entry[1] && entry[1] !== year)) return null;
return entry[0];
},
// Crops are harvestable `growDays` after planting when watered daily.
harvestDate(planted, growDays) {
return fromDayNumber(dayNumber(planted) + growDays);
},
daysBetween(from, to) {
return dayNumber(to) - dayNumber(from);
}
};
});