cleanup calendrier

This commit is contained in:
Vincent Vandemeulebrouck 2021-06-09 00:00:15 +02:00
parent 027a970da5
commit 2dfe5473e7
2 changed files with 48 additions and 36 deletions

View File

@ -5,8 +5,8 @@ import { HtmlUtility } from "./html-utility.js";
import { RdDResolutionTable } from "./rdd-resolution-table.js"; import { RdDResolutionTable } from "./rdd-resolution-table.js";
import { RdDUtility } from "./rdd-utility.js"; import { RdDUtility } from "./rdd-utility.js";
import { Grammar } from "./grammar.js"; import { Grammar } from "./grammar.js";
import { Misc } from "./misc.js";
import { RdDDice } from "./rdd-dice.js"; import { RdDDice } from "./rdd-dice.js";
import { Misc } from "./misc.js";
/* -------------------------------------------- */ /* -------------------------------------------- */
const dossierIconesHeures = 'systems/foundryvtt-reve-de-dragon/icons/heures/' const dossierIconesHeures = 'systems/foundryvtt-reve-de-dragon/icons/heures/'
@ -31,7 +31,11 @@ const saisonsDef = {
"automne": { label: "Automne" }, "automne": { label: "Automne" },
"hiver": { label: "Hiver" } "hiver": { label: "Hiver" }
}; };
const RDD_JOUR_PAR_MOIS = 28;
const RDD_MOIS_PAR_AN = 12;
export const RDD_JOUR_PAR_MOIS = 28;
const RDD_HEURES_PAR_JOUR = 12;
const RDD_MINUTES_PAR_HEURES = 120;
const MAX_NOMBRE_ASTRAL = 12; const MAX_NOMBRE_ASTRAL = 12;
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -41,15 +45,21 @@ export class RdDCalendrier extends Application {
return { top: 200, left: 200 }; return { top: 200, left: 200 };
} }
static getDefSigne(moisRdD) {
moisRdD = moisRdD % RDD_MOIS_PAR_AN;
return Object.values(heuresDef).find(h => h.heure == moisRdD);
}
static getCalendrier(index) { static getCalendrier(index) {
let calendrier = { let calendrier = {
heureRdD: 0, // Index dans heuresList heureRdD: 0, // Index dans heuresList / heuresDef[x].heure
minutesRelative: 0, minutesRelative: 0,
indexJour: index, indexJour: index,
annee: Math.floor(index / (28 * 12)), annee: Math.floor(index / (RDD_JOUR_PAR_MOIS * RDD_MOIS_PAR_AN)),
moisRdD: Math.floor(index / 28) % 12, moisRdD: Math.floor(index / RDD_JOUR_PAR_MOIS) % RDD_MOIS_PAR_AN,
jour: (index % 28), jour: (index % RDD_JOUR_PAR_MOIS) // Le calendrier stocke le jour en 0-27, mais en 1-28 à l'affichage
} }
calendrier.moisLabel = RdDCalendrier.getDefSigne(calendrier.moisRdD).label;
return calendrier; return calendrier;
} }
@ -57,8 +67,8 @@ 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.annee = this.calendrier.annee ?? (this.calendrier.moisRdD == RDD_MOIS_PAR_AN ? 1 : 0);
this.calendrier.moisRdD = (this.calendrier.moisRdD ?? 0) % 12; this.calendrier.moisRdD = (this.calendrier.moisRdD ?? 0) % RDD_MOIS_PAR_AN;
//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) {
@ -120,20 +130,19 @@ export class RdDCalendrier extends Application {
/* -------------------------------------------- */ /* -------------------------------------------- */
getCurrentDayIndex() { getCurrentDayIndex() {
return (((this.calendrier.annee ?? 0) * 12 + (this.calendrier.moisRdD ?? 0)) * 28) + (this.calendrier.jour ?? 0); return (((this.calendrier.annee ?? 0) * RDD_MOIS_PAR_AN + (this.calendrier.moisRdD ?? 0)) * RDD_JOUR_PAR_MOIS) + (this.calendrier.jour ?? 0);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
getIndexFromDate(jour, mois) { getIndexFromDate(jour, mois) {
return (heuresDef[mois].heure * 28) + (jour - 1); return (heuresDef[mois].heure * RDD_JOUR_PAR_MOIS) + jour - 1;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
getJoursSuivants(num) { getJoursSuivants(num) {
let jours = []; let jours = [];
let index = this.getCurrentDayIndex(); let index = this.getCurrentDayIndex();
for (let i = 0; i < num; i++) { for (let i = 0; i < num; i++) {
jours[i] = { label: this.getDateFromIndex(index), index: index }; jours[i] = { label: this.getDateFromIndex(index + i), index: index + i };
index += 1;
} }
return jours; return jours;
} }
@ -172,12 +181,12 @@ export class RdDCalendrier extends Application {
/* -------------------------------------------- */ /* -------------------------------------------- */
getNombreAstral(indexDate) { getNombreAstral(indexDate) {
if ( this.listeNombreAstral == undefined ) { if (this.listeNombreAstral == undefined) {
this.listeNombreAstral = this._loadListNombreAstral(); this.listeNombreAstral = this._loadListNombreAstral();
} }
let liste = this.listeNombreAstral; let liste = this.listeNombreAstral;
if ( game.user.isGM ) { if (game.user.isGM) {
if ( typeof(liste) != 'Array' || liste.length == 0 ) { if (typeof (liste) != 'Array' || liste.length == 0) {
this.rebuildListeNombreAstral(); this.rebuildListeNombreAstral();
liste = this.listeNombreAstral; liste = this.listeNombreAstral;
} }
@ -192,10 +201,10 @@ export class RdDCalendrier extends Application {
let jourCourant = this.getCurrentDayIndex(); let jourCourant = this.getCurrentDayIndex();
let newList = []; let newList = [];
for (let i = 0; i < 12; i++) { for (let i = 0; i < MAX_NOMBRE_ASTRAL; i++) {
let dayIndex = jourCourant + i; let dayIndex = jourCourant + i;
let na = this.listeNombreAstral.find( n => n.index == dayIndex); let na = this.listeNombreAstral.find(n => n.index == dayIndex);
if ( na ) { if (na) {
newList[i] = duplicate(na); newList[i] = duplicate(na);
} else { } else {
newList[i] = await this.ajouterNombreAstral(dayIndex); newList[i] = await this.ajouterNombreAstral(dayIndex);
@ -223,12 +232,12 @@ export class RdDCalendrier extends Application {
/* -------------------------------------------- */ /* -------------------------------------------- */
async incrementTime(minutes = 0) { async incrementTime(minutes = 0) {
this.calendrier.minutesRelative += minutes; this.calendrier.minutesRelative += minutes;
if (this.calendrier.minutesRelative >= 120) { if (this.calendrier.minutesRelative >= RDD_MINUTES_PAR_HEURES) {
this.calendrier.minutesRelative -= 120; this.calendrier.minutesRelative -= RDD_MINUTES_PAR_HEURES;
this.calendrier.heureRdD += 1; this.calendrier.heureRdD += 1;
} }
if (this.calendrier.heureRdD > 11) { if (this.calendrier.heureRdD >= RDD_HEURES_PAR_JOUR) {
this.calendrier.heureRdD -= 12; this.calendrier.heureRdD -= RDD_HEURES_PAR_JOUR;
this.incrementerJour(); this.incrementerJour();
} }
game.settings.set("foundryvtt-reve-de-dragon", "calendrier", duplicate(this.calendrier)); game.settings.set("foundryvtt-reve-de-dragon", "calendrier", duplicate(this.calendrier));
@ -330,14 +339,13 @@ export class RdDCalendrier extends Application {
/* -------------------------------------------- */ /* -------------------------------------------- */
findHeure(heure) { findHeure(heure) {
heure = Grammar.toLowerCaseNoAccentNoSpace(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) == parseInt(heure) || Grammar.toLowerCaseNoAccentNoSpace(it.label) == heure);
if (parHeureOuLabel.length == 1) { if (parHeureOuLabel.length == 1) {
return parHeureOuLabel[0]; return parHeureOuLabel[0];
} }
let parLabelPartiel = Object.values(heuresDef).filter(it => Grammar.toLowerCaseNoAccentNoSpace(it.label).includes(heure)); let parLabelPartiel = Object.values(heuresDef).filter(it => Grammar.toLowerCaseNoAccentNoSpace(it.label).includes(heure));
const matchLength = heure.length; if (parLabelPartiel.length > 0) {
if(parLabelPartiel.length > 0) { parLabelPartiel.sort(Misc.ascending(h => h.label.length));
parLabelPartiel.sort((a,b)=> (a.label.length - matchLength)^2 - (b.label.length- matchLength)^2);
return parLabelPartiel[0]; return parLabelPartiel[0];
} }
return undefined; return undefined;
@ -350,7 +358,7 @@ export class RdDCalendrier extends Application {
let hn = defHeure.heure; let hn = defHeure.heure;
let chiffreAstral = this.getCurrentNombreAstral() ?? 0; let chiffreAstral = this.getCurrentNombreAstral() ?? 0;
let heureCourante = this.calendrier.heureRdD; let heureCourante = this.calendrier.heureRdD;
let ecartChance = (hn + chiffreAstral - heureCourante) % 12; let ecartChance = (hn + chiffreAstral - heureCourante) % RDD_HEURES_PAR_JOUR;
switch (ecartChance) { switch (ecartChance) {
case 0: return 4; case 0: return 4;
case 4: case 8: return 2; case 4: case 8: return 2;
@ -361,8 +369,8 @@ export class RdDCalendrier extends Application {
else if (name) { else if (name) {
ui.notifications.warn(name + " n'a pas d'heure de naissance, ou elle est incorrecte : " + heureNaissance); ui.notifications.warn(name + " n'a pas d'heure de naissance, ou elle est incorrecte : " + heureNaissance);
} }
else{ else {
ui.notifications.warn(heureNaissance+" ne correspond pas à une heure de naissance"); ui.notifications.warn(heureNaissance + " ne correspond pas à une heure de naissance");
} }
return 0; return 0;
} }
@ -423,8 +431,8 @@ export class RdDCalendrier extends Application {
async saveEditeur(calendrierData) { async saveEditeur(calendrierData) {
this.calendrier.minutesRelative = Number(calendrierData.minutesRelative); this.calendrier.minutesRelative = Number(calendrierData.minutesRelative);
this.calendrier.jour = Number(calendrierData.jourMois) - 1; this.calendrier.jour = Number(calendrierData.jourMois) - 1;
this.calendrier.moisRdD = heuresList.findIndex(mois => mois === calendrierData.moisKey); this.calendrier.moisRdD = RdDCalendrier.getDefSigne(calendrierData.moisKey);
this.calendrier.heureRdD = heuresList.findIndex(heure => heure === calendrierData.heureKey);; // Index dans heuresList this.calendrier.heureRdD = RdDCalendrier.getDefSigne(calendrierData.heureKey); // Index dans heuresList
game.settings.set("foundryvtt-reve-de-dragon", "calendrier", duplicate(this.calendrier)); game.settings.set("foundryvtt-reve-de-dragon", "calendrier", duplicate(this.calendrier));
await this.rebuildListeNombreAstral(); await this.rebuildListeNombreAstral();
@ -441,9 +449,9 @@ export class RdDCalendrier extends Application {
async showCalendarEditor() { async showCalendarEditor() {
let calendrierData = duplicate(this.fillCalendrierData()); let calendrierData = duplicate(this.fillCalendrierData());
if (this.editeur == undefined) { if (this.editeur == undefined) {
calendrierData.jourMoisOptions = Array(28).fill().map((item, index) => 1 + index); calendrierData.jourMoisOptions = this.buildJoursMois();
calendrierData.heuresOptions = [0, 1]; calendrierData.heuresOptions = [0, 1];
calendrierData.minutesOptions = Array(120).fill().map((item, index) => 0 + index); calendrierData.minutesOptions = Array(RDD_MINUTES_PAR_HEURES).fill().map((item, index) => 0 + index);
let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/calendar-editor-template.html', calendrierData); let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/calendar-editor-template.html', calendrierData);
this.editeur = new RdDCalendrierEditeur(html, this, calendrierData) this.editeur = new RdDCalendrierEditeur(html, this, calendrierData)
} }
@ -451,6 +459,10 @@ export class RdDCalendrier extends Application {
this.editeur.render(true); this.editeur.render(true);
} }
static buildJoursMois() {
return Array(RDD_JOUR_PAR_MOIS).fill().map((item, index) => 1 + index);
}
/* -------------------------------------------- */ /* -------------------------------------------- */
async showAstrologieEditor() { async showAstrologieEditor() {
let calendrierData = duplicate(this.fillCalendrierData()); let calendrierData = duplicate(this.fillCalendrierData());

View File

@ -37,7 +37,7 @@ export class RdDHerbes extends Item {
static updatePotionData( formData ) { static updatePotionData( formData ) {
formData.herbesSoins = this.buildHerbesList(this.herbesSoins, 12); formData.herbesSoins = this.buildHerbesList(this.herbesSoins, 12);
formData.herbesRepos = this.buildHerbesList(this.herbesRepos, 7); formData.herbesRepos = this.buildHerbesList(this.herbesRepos, 7);
formData.jourMoisOptions = Array(28).fill().map((item, index) => 1 + index); formData.jourMoisOptions = RdDCalendrier.buildJoursMois();
formData.dateActuelle = game.system.rdd.calendrier.getDateFromIndex(); formData.dateActuelle = game.system.rdd.calendrier.getDateFromIndex();
formData.splitDate = game.system.rdd.calendrier.getNumericDateFromIndex(formData.data.prdate); formData.splitDate = game.system.rdd.calendrier.getNumericDateFromIndex(formData.data.prdate);