Fix: création calendrier en double

- suppression des messages lors de l'initialisation (nouveau monde)
- await pour éviter les appels paralleles à l'initialisation
(init et render)
This commit is contained in:
Vincent Vandemeulebrouck 2021-06-05 19:41:30 +02:00
parent 2336289f5a
commit e7971c19d2
2 changed files with 37 additions and 38 deletions

View File

@ -72,7 +72,7 @@ export class RdDCalendrier extends Application {
// nombre astral
if (game.user.isGM) {
this.listeNombreAstral = this._loadListNombreAstral();
await this.rebuildListeNombreAstral(); // Ensure always up-to-date
await this.rebuildListeNombreAstral('hidden'); // Ensure always up-to-date
}
console.log(this.calendrier, this.calendrierPos, this.listeNombreAstral);
}
@ -136,13 +136,15 @@ export class RdDCalendrier extends Application {
}
/* -------------------------------------------- */
async ajouterNombreAstral(index) {
async ajouterNombreAstral(index, mode ='display') {
const nombreAstral = await RdDDice.rollTotal("1dh", { showDice: true, rollMode: "selfroll" });
const dateFuture = this.getDateFromIndex(index);
ChatMessage.create({
whisper: ChatMessage.getWhisperRecipients("GM"),
content: `Le chiffre astrologique du ${dateFuture} sera le ${nombreAstral}`
});
if (mode =='display'){
ChatMessage.create({
whisper: ChatMessage.getWhisperRecipients("GM"),
content: `Le chiffre astrologique du ${dateFuture} sera le ${nombreAstral}`
});
}
return {
nombreAstral: nombreAstral,
valeursFausses: [],
@ -182,7 +184,7 @@ export class RdDCalendrier extends Application {
}
/* -------------------------------------------- */
async rebuildListeNombreAstral() {
async rebuildListeNombreAstral(display = 'display') {
if (game.user.isGM) {
let jourCourant = this.getCurrentDayIndex();
let jourFin = jourCourant + 12;
@ -196,13 +198,14 @@ export class RdDCalendrier extends Application {
}
for (let i = 0; i < 12; i++) {
if (newList[i] == undefined) {
newList[i] = await this.ajouterNombreAstral(jourCourant + i);
newList[i] = await this.ajouterNombreAstral(jourCourant + i, display);
}
}
this.listeNombreAstral = newList;
game.settings.set("foundryvtt-reve-de-dragon", "liste-nombre-astral", this.listeNombreAstral);
}
}
/* -------------------------------------------- */
async onCalendarButton(ev) {
ev.preventDefault();
@ -214,7 +217,7 @@ export class RdDCalendrier extends Application {
else if (calendarSet) {
this.positionnerHeure(Number(calendarSet.value));
}
await this.updateDisplay();
this.updateDisplay();
}
/* -------------------------------------------- */
@ -226,7 +229,7 @@ export class RdDCalendrier extends Application {
}
if (this.calendrier.heureRdD > 11) {
this.calendrier.heureRdD -= 12;
await this.incrementerJour();
this.incrementerJour();
}
game.settings.set("foundryvtt-reve-de-dragon", "calendrier", duplicate(this.calendrier));
// Notification aux joueurs
@ -266,26 +269,25 @@ export class RdDCalendrier extends Application {
}
/* -------------------------------------------- */
fillCalendrierData(formData = {}) {
fillCalendrierData() {
let moisKey = heuresList[this.calendrier.moisRdD];
let heureKey = heuresList[this.calendrier.heureRdD];
const mois = heuresDef[moisKey];
const heure = heuresDef[heureKey];
//console.log(moisKey, heureKey);
formData.heureKey = heureKey;
formData.moisKey = moisKey;
formData.jourMois = this.calendrier.jour + 1;
formData.nomMois = mois.label; // heures et mois nommés identiques
formData.iconMois = dossierIconesHeures + mois.icon;
formData.nomHeure = heure.label;
formData.iconHeure = dossierIconesHeures + heure.icon;
formData.nomSaison = saisonsDef[mois.saison].label;
formData.heureRdD = this.calendrier.heureRdD;
formData.minutesRelative = this.calendrier.minutesRelative;
formData.isGM = game.user.isGM;
return formData;
return {
heureKey: heureKey,
moisKey: moisKey,
jourMois: this.calendrier.jour + 1,
nomMois: mois.label,
iconMois: dossierIconesHeures + mois.icon,
nomHeure: heure.label,
iconHeure: dossierIconesHeures + heure.icon,
nomSaison: saisonsDef[mois.saison].label,
heureRdD: this.calendrier.heureRdD,
minutesRelative: this.calendrier.minutesRelative,
isGM: game.user.isGM
}
}
/* -------------------------------------------- */
@ -371,10 +373,7 @@ export class RdDCalendrier extends Application {
/* -------------------------------------------- */
getData() {
let formData = super.getData();
this.fillCalendrierData(formData);
let formData = this.fillCalendrierData();
this.setPos(this.calendrierPos);
return formData;
}
@ -430,7 +429,7 @@ export class RdDCalendrier extends Application {
game.settings.set("foundryvtt-reve-de-dragon", "calendrier", duplicate(this.calendrier));
await this.rebuildListeNombreAstral();
game.socket.emit("system.foundryvtt-reve-de-dragon", {
msg: "msg_sync_time",
data: duplicate(this.calendrier)
@ -441,7 +440,7 @@ export class RdDCalendrier extends Application {
/* -------------------------------------------- */
async showCalendarEditor() {
let calendrierData = duplicate(this.fillCalendrierData());
let calendrierData = this.fillCalendrierData();
if (this.editeur == undefined) {
calendrierData.jourMoisOptions = Array(28).fill().map((item, index) => 1 + index);
calendrierData.heuresOptions = [0, 1];
@ -455,7 +454,7 @@ export class RdDCalendrier extends Application {
/* -------------------------------------------- */
async showAstrologieEditor() {
let calendrierData = duplicate(this.fillCalendrierData());
let calendrierData = this.fillCalendrierData();
let astrologieArray = [];
for (let astralData of this.listeNombreAstral) {
astralData.humanDate = this.getDateFromIndex(astralData.index);
@ -481,7 +480,7 @@ export class RdDCalendrier extends Application {
HtmlUtility._showControlWhen($(".gm-only"), game.user.isGM);
await this.updateDisplay();
this.updateDisplay();
html.find('.calendar-btn').click(ev => this.onCalendarButton(ev));

View File

@ -210,21 +210,21 @@ function messageDeBienvenue() {
/* -------------------------------------------- */
/* Foundry VTT Initialization */
/* -------------------------------------------- */
Hooks.once("ready", function () {
Hooks.once("ready", async () => {
StatusEffects.onReady();
RdDHerbes.initializeHerbes();
RdDDice.onReady();
/* -------------------------------------------- */
/* Affiche/Init le calendrier */
let calendrier = new RdDCalendrier();
calendrier.initCalendrier();
let templatePath = "systems/foundryvtt-reve-de-dragon/templates/calendar-template.html";
let templateData = {};
game.system.rdd.calendrier = new RdDCalendrier();
await game.system.rdd.calendrier.initCalendrier();
renderTemplate(templatePath, templateData).then(html => {
calendrier.render(true);
game.system.rdd.calendrier.render(true);
});
game.system.rdd.calendrier = calendrier; // Reference;
// Avertissement si joueur sans personnage
if (!game.user.isGM && game.user.character == undefined) {