diff --git a/module/rdd-roll-resolution.js b/module/rdd-roll-resolution.js new file mode 100644 index 00000000..da37e502 --- /dev/null +++ b/module/rdd-roll-resolution.js @@ -0,0 +1,125 @@ +import { ChatUtility } from "./chat-utility.js"; +import { Misc } from "./misc.js"; +import { RdDResolutionTable } from "./rdd-resolution-table.js"; + +/** + * Extend the base Dialog entity to select roll parameters + * @extends {Dialog} + */ +/* -------------------------------------------- */ +export class RdDRollResolution extends Dialog { + + /* -------------------------------------------- */ + static async open() { + let rollData = RdDRollResolution._prepareDefaultOptions(); + let html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-roll-resolution.html', rollData); + const dialog = new RdDRollResolution(rollData, html); + dialog.render(true); + } + + /* -------------------------------------------- */ + static _prepareDefaultOptions() { + let rollData = { + ajustementsConditions: CONFIG.RDD.ajustementsConditions, + difficultesLibres: CONFIG.RDD.difficultesLibres, + etat: 0, + moral: 0, + carac: {}, + finalLevel: 0, + diffConditions: 0, + diffLibre: 0 + } + for (let i = 1; i < 21; i++) { + rollData.carac[i] = { type: "number", value: i, label: i } + } + rollData.selectedCarac = rollData.carac[10]; + return rollData; + } + + /* -------------------------------------------- */ + constructor(rollData, html) { + + let conf = { + title: 'Lancer les dés', + 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("RdDRollResolution -=>", this.rollData, this.rollData.rolled); + const message = { + content: "Table de résolution: " + RdDResolutionTable.explainRollData(this.rollData) + }; + ChatUtility.chatWithRollMode(message, 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); + } + + /* -------------------------------------------- */ + _getTitle(rollData) { + return 'Table de résolution'; + } +} diff --git a/module/rdd-utility.js b/module/rdd-utility.js index b24746fd..e558795f 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -5,6 +5,7 @@ import { RdDRollTables } from "./rdd-rolltables.js"; import { ChatUtility } from "./chat-utility.js"; import { RdDItemCompetence } from "./item-competence.js"; import { RdDCombat } from "./rdd-combat.js"; +import { RdDRollResolution } from "./rdd-roll-resolution.js"; /* -------------------------------------------- */ const level_category = { @@ -91,9 +92,10 @@ const fatigueMarche = { "aise": { "4":1, "6":2, "8":3, "10":4, "12":6 }, /* -------------------------------------------- */ /* Static tables for commands /table */ -const table2func = { "queues": {descr: "queues : Tire une queue de Dragon", func: RdDRollTables.getQueue}, +const table2func = { "rdd": { descr: "rdd: Ouvre la table de résolution", func: RdDRollResolution.open }, + "queues": { descr: "queues: Tire une queue de Dragon", func: RdDRollTables.getQueue}, "ombre": { descr: "ombre: Tire une Ombre de Dragon", func: RdDRollTables.getOmbre }, - "tetehr": {descr: "tetehr: Tire une Tête de Dragon pour Hauts Revants", fund: RdDRollTables.getTeteHR}, + "tetehr": { descr: "tetehr: Tire une Tête de Dragon pour Hauts Revants", fund: RdDRollTables.getTeteHR}, "tete" : { descr: "tete: Tire une Tête de Dragon", func: RdDRollTables.getTete}, "souffle": { descr: "souffle: Tire un Souffle de Dragon", func: RdDRollTables.getSouffle}, "tarot" : { descr: "tarot: Tire une carte de Tarot Dracnique", func: RdDRollTables.getTarot} }; @@ -173,6 +175,7 @@ export class RdDUtility { 'systems/foundryvtt-reve-de-dragon/templates/sort-tmr.html', 'systems/foundryvtt-reve-de-dragon/templates/niveau-ethylisme.html', // Dialogs + 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-resolution.html', 'systems/foundryvtt-reve-de-dragon/templates/dialog-competence.html', 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-carac.html', 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-sort.html', diff --git a/templates/dialog-roll-resolution.html b/templates/dialog-roll-resolution.html new file mode 100644 index 00000000..203d2a54 --- /dev/null +++ b/templates/dialog-roll-resolution.html @@ -0,0 +1,36 @@ +