Draft: Fix: calcul de date au delà de 12 mois #488

Closed
vincent.vandeme wants to merge 3 commits from v1.4-fix-calendrier into v1.4
2 changed files with 29 additions and 29 deletions

View File

@ -37,13 +37,18 @@ const MAX_NOMBRE_ASTRAL = 12;
/* -------------------------------------------- */ /* -------------------------------------------- */
export class RdDCalendrier extends Application { export class RdDCalendrier extends Application {
getCalendrier(index) { static createCalendrierPos() {
let month = Math.floor(index / 28) % 12; return { top: 200, left: 200 };
}
static getCalendrier(index) {
let calendrier = { let calendrier = {
heureRdD: 0, // Index dans heuresList heureRdD: 0, // Index dans heuresList
minutesRelative: 0, minutesRelative: 0,
moisRdD: month, indexJour: index,
jour: (index - (month * 28)) + 1 annee: Math.floor(index / (28 * 12)),
moisRdD: Math.floor(index / 28) % 12,
jour: (index % 28),
} }
return calendrier; return calendrier;
} }
@ -52,9 +57,12 @@ export class RdDCalendrier extends Application {
async initCalendrier() { async initCalendrier() {
// Calendrier // Calendrier
this.calendrier = duplicate(game.settings.get("foundryvtt-reve-de-dragon", "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); //console.log("CALENDRIER", this.calendrier);
if (this.calendrier == undefined || this.calendrier.moisRdD == undefined) { 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 if (game.user.isGM) { // Uniquement si GM
game.settings.set("foundryvtt-reve-de-dragon", "calendrier", this.calendrier); game.settings.set("foundryvtt-reve-de-dragon", "calendrier", this.calendrier);
} }
@ -62,9 +70,7 @@ export class RdDCalendrier extends Application {
// position // position
this.calendrierPos = duplicate(game.settings.get("foundryvtt-reve-de-dragon", "calendrier-pos")); this.calendrierPos = duplicate(game.settings.get("foundryvtt-reve-de-dragon", "calendrier-pos"));
if (this.calendrierPos == undefined || this.calendrierPos.top == undefined) { if (this.calendrierPos == undefined || this.calendrierPos.top == undefined) {
this.calendrierPos = {}; this.calendrierPos = RdDCalendrier.createCalendrierPos();
this.calendrierPos.top = 200;
this.calendrierPos.left = 200;
if (game.user.isGM) { // Uniquement si GM if (game.user.isGM) { // Uniquement si GM
game.settings.set("foundryvtt-reve-de-dragon", "calendrier-pos", this.calendrierPos); game.settings.set("foundryvtt-reve-de-dragon", "calendrier-pos", this.calendrierPos);
} }
@ -94,19 +100,16 @@ export class RdDCalendrier extends Application {
/* -------------------------------------------- */ /* -------------------------------------------- */
getDateFromIndex(index) { getDateFromIndex(index) {
index = index ?? this.getCurrentDayIndex(); const date = this.this.getNumericDateFromIndex(index);
let month = Math.floor(index / 28); return date.day + ' ' + date.month;
let day = (index - (month * 28)) + 1;
return day + " " + heuresList[month];
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
getNumericDateFromIndex(index = undefined) { getNumericDateFromIndex(index = undefined) {
if (!index) index = this.getCurrentDayIndex(); const dateRdD = RdDCalendrier.getCalendrier(index ?? this.getCurrentDayIndex());
let month = Math.floor(index / 28)
return { return {
month: heuresList[month], day: dateRdD.jour + 1,
day: (index - (month * 28)) + 1 month: heuresDef[heuresList[calendrier.moisRdD]].label
} }
} }
@ -117,7 +120,7 @@ export class RdDCalendrier extends Application {
/* -------------------------------------------- */ /* -------------------------------------------- */
getCurrentDayIndex() { 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 +241,8 @@ export class RdDCalendrier extends Application {
/* -------------------------------------------- */ /* -------------------------------------------- */
incrementerJour() { incrementerJour() {
this.calendrier.jour += 1; const index = this.getCurrentDayIndex() + 1;
if (this.calendrier.jour >= RDD_JOUR_PAR_MOIS) { this.calendrier = RdDCalendrier.getCalendrier(index);
this.calendrier.jour -= RDD_JOUR_PAR_MOIS;
if (this.calendrier.jour <= 0)
this.calendrier.jour = 0;
this.calendrier.moisRdD += 1;
// Reconstruire les nombres astraux
}
this.rebuildListeNombreAstral(); this.rebuildListeNombreAstral();
} }
@ -258,7 +255,7 @@ export class RdDCalendrier extends Application {
/* -------------------------------------------- */ /* -------------------------------------------- */
async positionnerHeure(indexHeure) { async positionnerHeure(indexHeure) {
if (indexHeure <= this.calendrier.heureRdD) { if (indexHeure <= this.calendrier.heureRdD) {
await this.incrementerJour(); this.incrementerJour();
} }
this.calendrier.heureRdD = indexHeure; this.calendrier.heureRdD = indexHeure;
this.calendrier.minutesRelative = 0; this.calendrier.minutesRelative = 0;
@ -332,7 +329,7 @@ export class RdDCalendrier extends Application {
/* -------------------------------------------- */ /* -------------------------------------------- */
findHeure(heure) { findHeure(heure) {
heure = Grammar.toLowerCaseNoAccent(heure); heure = Grammar.toLowerCaseNoAccentNoSpace(heure);
let parHeureOuLabel = Object.values(heuresDef).filter(it => (it.heure + 1) == heure || Grammar.toLowerCaseNoAccentNoSpace(it.label) == heure); let parHeureOuLabel = Object.values(heuresDef).filter(it => (it.heure + 1) == heure || Grammar.toLowerCaseNoAccentNoSpace(it.label) == heure);
if (parHeureOuLabel.length == 1) { if (parHeureOuLabel.length == 1) {
return parHeureOuLabel[0]; return parHeureOuLabel[0];

View File

@ -72,6 +72,7 @@ Hooks.once("init", async function () {
name: "calendrier", name: "calendrier",
scope: "world", scope: "world",
config: false, config: false,
default: RdDCalendrier.getCalendrier(0),
type: Object type: Object
}); });
@ -80,14 +81,16 @@ Hooks.once("init", async function () {
name: "liste-nombre-astral", name: "liste-nombre-astral",
scope: "world", scope: "world",
config: false, config: false,
default: [],
type: Object type: Object
}); });
/* -------------------------------------------- */ /* -------------------------------------------- */
game.settings.register("foundryvtt-reve-de-dragon", "calendrier-pos", { game.settings.register("foundryvtt-reve-de-dragon", "calendrier-pos", {
name: "calendrierPos", name: "calendrierPos",
scope: "world", scope: "client",
config: false, config: false,
default: RdDCalendrier.createCalendrierPos(),
type: Object type: Object
}); });