From b8f01d8da495163858bbe9d9589edad6403b1841 Mon Sep 17 00:00:00 2001 From: sladecraven Date: Tue, 8 Dec 2020 23:28:29 +0100 Subject: [PATCH] #52 Gestion astrologie --- module/rdd-calendrier.js | 79 ++++++++++++++++++++++++++-------------- 1 file changed, 51 insertions(+), 28 deletions(-) diff --git a/module/rdd-calendrier.js b/module/rdd-calendrier.js index c1df9436..9f825368 100644 --- a/module/rdd-calendrier.js +++ b/module/rdd-calendrier.js @@ -55,26 +55,12 @@ export class RdDCalendrier extends Application { if ( game.user.isGM) { this.listeNombreAstral = duplicate(game.settings.get("foundryvtt-reve-de-dragon", "liste-nombre-astral")); if ( this.listeNombreAstral == undefined ) { - let start = this.getCurrentDayIndex(); - let dayList = {} - for(let index=start; index<=start+MAX_NOMBRE_ASTRAL; index++) { // Construction des nombres astraux pour les prochains jours - dayList[index] = this.ajouterNombreAstral(); - } - this.listeNombreAstral = dayList; - game.settings.set("foundryvtt-reve-de-dragon", "liste-nombre-astral", this.listeNombreAstral ); + this.rebuildListeNombreAstral(); } } console.log(this.calendrier, this.calendrierPos); } - /* -------------------------------------------- */ - ajouterNombreAstral(index) { - return { - nombreAstral: new Roll("1d12").roll().total, - valeursFausses: [], - index: index - } - } /* -------------------------------------------- */ getCurrentDayIndex( ) { @@ -89,7 +75,39 @@ export class RdDCalendrier extends Application { options.resizable = false; return options; } - + + /* -------------------------------------------- */ + ajouterNombreAstral(index) { + return { + nombreAstral: new Roll("1d12").roll().total, + valeursFausses: [], + index: index + } + } + + /* -------------------------------------------- */ + rebuildListeNombreAstral() { + // Auto-create if needed + if ( this.listeNombreAstral == undefined) + this.listeNombreAstral = {}; + + // Nettoyage des nombres astraux anciens + let jourCourant = this.getCurrentDayIndex(); + let keys = Object.keys(this.listeNombreAstral); + for ( let jourIndex of keys) { + if ( Number(jourIndex) < jourCourant) { + this.listeNombreAstral[jourIndex] = undefined; + } + } + // A partir du jour courant, génération des nombres avec gestion des trous potentiels + for (let jourIndex = jourCourant; jourIndex 11 ) { this.calendrier.heureRdD -= 11; - this.calendrier.jour += 1; - } - if ( this.calendrier.jour > RDD_JOUR_PAR_MOIS) { - this.calendrier.jour -= this.calendrier.jour; - if ( this.calendrier.jour <= 0) - this.calendrier.jour = 1; - this.calendrier.moisRdD += 1; - // Ajouter un nouveau nombre astral - let index = this.getCurrentDayIndex(); - this.listeNombreAstral[index] = this.ajouterNombreAstral(); + this.incrementerJour(); } game.settings.set("foundryvtt-reve-de-dragon", "calendrier", duplicate(this.calendrier) ); // Notification aux joueurs @@ -123,6 +132,19 @@ 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 = 1; + this.calendrier.moisRdD += 1; + // Reconstruire les nombres astraux + this.rebuildListeNombreAstral(); + } + } + /* -------------------------------------------- */ syncPlayerTime( calendrier ) { this.calendrier = duplicate(calendrier); // Local copy update @@ -132,7 +154,7 @@ export class RdDCalendrier extends Application { /* -------------------------------------------- */ positionnerHeure( indexHeure ) { if ( indexHeure <= this.calendrier.heureRdD ) - this.calendrier.jour +=1; + this.incrementerJour(); this.calendrier.heureRdD = indexHeure; this.calendrier.minutesRelative = 0; this.calendrier.heuresRelative = 0; @@ -206,8 +228,9 @@ export class RdDCalendrier extends Application { this.calendrier.jour = Number(calendrierData.jourMois); this.calendrier.moisRdD = heuresList.findIndex(mois => mois === calendrierData.moisKey); this.calendrier.heureRdD = heuresList.findIndex(heure => heure === calendrierData.heureKey);; // Index dans heuresList - game.settings.set("foundryvtt-reve-de-dragon", "calendrier", duplicate(this.calendrier) ); + + this.rebuildListeNombreAstral(); this.updateDisplay(); }