Fix: calcul de date au delà de 12 mois

Gestion de mois 12 (par modulo)
Ajout de l'année
incrémenter le jour se fait sur l'index (et calcul des infos de
calendrier)

+ sécurité pour les calendriers existants
This commit is contained in:
Vincent Vandemeulebrouck 2021-06-08 14:09:40 +02:00
parent d3e612104d
commit 20ae4a9a97
2 changed files with 21 additions and 23 deletions

View File

@ -37,13 +37,15 @@ const MAX_NOMBRE_ASTRAL = 12;
/* -------------------------------------------- */
export class RdDCalendrier extends Application {
getCalendrier(index) {
let month = Math.floor(index / 28) % 12;
static getCalendrier(index) {
let calendrier = {
heureRdD: 0, // Index dans heuresList
minutesRelative: 0,
moisRdD: month,
jour: (index - (month * 28)) + 1
indexJour: index,
annee: Math.floor(index / (28 * 12)),
moisRdD: Math.floor(index / 28) % 12,
jour: (index % 28),
}
return calendrier;
}
@ -52,9 +54,12 @@ export class RdDCalendrier extends Application {
async initCalendrier() {
// Calendrier
this.calendrier = duplicate(game.settings.get("foundryvtt-reve-de-dragon", "calendrier"));
this.calendrier.annee = this.calendrier.annee ?? (this.calendrier.moisRdD == 12 ? 1 : 0);
this.calendrier.moisRdD = (this.calendrier.moisRdD ?? 0) % 12;
//console.log("CALENDRIER", this.calendrier);
if (this.calendrier == undefined || this.calendrier.moisRdD == undefined) {
this.calendrier = this.getCalendrier(0);
this.calendrier = RdDCalendrier.getCalendrier(0);
if (game.user.isGM) { // Uniquement si GM
game.settings.set("foundryvtt-reve-de-dragon", "calendrier", this.calendrier);
}
@ -94,19 +99,16 @@ export class RdDCalendrier extends Application {
/* -------------------------------------------- */
getDateFromIndex(index) {
index = index ?? this.getCurrentDayIndex();
let month = Math.floor(index / 28);
let day = (index - (month * 28)) + 1;
return day + " " + heuresList[month];
const date = this.getNumericDateFromIndex(index);
return date.day + ' ' + date.month;
}
/* -------------------------------------------- */
getNumericDateFromIndex(index = undefined) {
if (!index) index = this.getCurrentDayIndex();
let month = Math.floor(index / 28)
const dateRdD = RdDCalendrier.getCalendrier(index ?? this.getCurrentDayIndex());
return {
month: heuresList[month],
day: (index - (month * 28)) + 1
day: dateRdD.jour + 1,
month: heuresDef[heuresList[dateRdD.moisRdD]].label
}
}
@ -117,7 +119,7 @@ export class RdDCalendrier extends Application {
/* -------------------------------------------- */
getCurrentDayIndex() {
return (this.calendrier.moisRdD * 28) + this.calendrier.jour;
return (((this.calendrier.annee ?? 0) * 12 + (this.calendrier.moisRdD ?? 0)) * 28) + (this.calendrier.jour ?? 0);
}
/* -------------------------------------------- */
@ -238,14 +240,8 @@ export class RdDCalendrier extends Application {
/* -------------------------------------------- */
incrementerJour() {
this.calendrier.jour += 1;
if (this.calendrier.jour >= RDD_JOUR_PAR_MOIS) {
this.calendrier.jour -= RDD_JOUR_PAR_MOIS;
if (this.calendrier.jour <= 0)
this.calendrier.jour = 0;
this.calendrier.moisRdD += 1;
// Reconstruire les nombres astraux
}
const index = this.getCurrentDayIndex() + 1;
this.calendrier = RdDCalendrier.getCalendrier(index);
this.rebuildListeNombreAstral();
}
@ -258,7 +254,7 @@ export class RdDCalendrier extends Application {
/* -------------------------------------------- */
async positionnerHeure(indexHeure) {
if (indexHeure <= this.calendrier.heureRdD) {
await this.incrementerJour();
this.incrementerJour();
}
this.calendrier.heureRdD = indexHeure;
this.calendrier.minutesRelative = 0;

View File

@ -72,6 +72,7 @@ Hooks.once("init", async function () {
name: "calendrier",
scope: "world",
config: false,
default: RdDCalendrier.getCalendrier(0),
type: Object
});
@ -80,6 +81,7 @@ Hooks.once("init", async function () {
name: "liste-nombre-astral",
scope: "world",
config: false,
default: [],
type: Object
});