import { Misc } from "./misc.js"; import { RdDResolutionTable } from "./rdd-resolution-table.js"; const titleTableDeResolution = 'Table de résolution'; /** * Extend the base Dialog entity to select roll parameters * @extends {Dialog} */ /* -------------------------------------------- */ export class RdDRollResolutionTable extends Dialog { /* -------------------------------------------- */ static async open(rollData = {}) { RdDRollResolutionTable._setDefaultOptions(rollData); let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-roll-resolution.html', rollData); const dialog = new RdDRollResolutionTable(rollData, html); dialog.render(true); } /* -------------------------------------------- */ static _setDefaultOptions(rollData) { let defRollData = { show: { title: titleTableDeResolution }, ajustementsConditions: CONFIG.RDD.ajustementsConditions, difficultesLibres: CONFIG.RDD.difficultesLibres, etat: 0, moral: 0, carac: {}, finalLevel: 0, diffConditions: 0, diffLibre: 0, } mergeObject(rollData, defRollData, { overwrite: false }); for (let i = 1; i < 21; i++) { const key = `${i}`; rollData.carac[key] = { type: "number", value: i, label: key } } let selected = (rollData.selectedCarac && rollData.selectedCarac.label) ? rollData.selectedCarac.label : (Number.isInteger(rollData.selectedCarac)) ? rollData.selectedCarac : 10; rollData.selectedCarac = rollData.carac[selected]; } /* -------------------------------------------- */ constructor(rollData, html) { let conf = { title: titleTableDeResolution, content: html, buttons: { 'lancer': { label: 'Lancer les dés', callback: html => this.onAction(html) } } }; super(conf, { classes: ["rdddialog"], width: 800, height: 800, 'z-index': 99999 }); this.rollData = rollData; } /* -------------------------------------------- */ async onAction(html) { await RdDResolutionTable.rollData(this.rollData); console.log("RdDRollResolutionTable -=>", this.rollData, this.rollData.rolled); await RdDResolutionTable.displayRollData(this.rollData, game.user.name); } /* -------------------------------------------- */ activateListeners(html) { super.activateListeners(html); this.bringToTop(); var rollData = this.rollData; var dialog = this; function updateRollResult(rollData) { rollData.caracValue = parseInt(rollData.selectedCarac.value) rollData.finalLevel = dialog._computeFinalLevel(rollData); // Mise à jour valeurs $("#carac").val(rollData.caracValue); $("#roll-param").text(rollData.selectedCarac.value + " / " + Misc.toSignedString(rollData.finalLevel)); $(".table-resolution").remove(); $("#resolutionTable").append(RdDResolutionTable.buildHTMLTable(rollData.caracValue, rollData.finalLevel, 1, 20, -10, 10)); $(".span-valeur").remove(); $("#resolutionValeurs").append(RdDResolutionTable.buildHTMLResults(rollData.caracValue, rollData.finalLevel)); } // Setup everything onload $(function () { $("#diffLibre").val(Misc.toInt(rollData.diffLibre)); $("#diffConditions").val(Misc.toInt(rollData.diffConditions)); updateRollResult(rollData); }); // Update ! html.find('#diffLibre').change((event) => { rollData.diffLibre = Misc.toInt(event.currentTarget.value); updateRollResult(rollData); }); html.find('#diffConditions').change((event) => { rollData.diffConditions = Misc.toInt(event.currentTarget.value); updateRollResult(rollData); }); html.find('#carac').change((event) => { let caracKey = event.currentTarget.value; this.rollData.selectedCarac = rollData.carac[caracKey]; updateRollResult(rollData); }); } /* -------------------------------------------- */ _computeFinalLevel(rollData) { const diffConditions = Misc.toInt(rollData.diffConditions); const diffLibre = this._computeDiffLibre(rollData); return diffLibre + diffConditions; } _computeDiffLibre(rollData) { return Misc.toInt(rollData.diffLibre); } }