diff --git a/module/rdd-combat.js b/module/rdd-combat.js index c3fb55e0..57a56a64 100644 --- a/module/rdd-combat.js +++ b/module/rdd-combat.js @@ -296,7 +296,7 @@ export class RdDCombat { message += "
Parer à mains nues"; } // esquive - if (rollData.competence.data.categorie == 'melee' || rollData.competence.data.categorie == "lancer" || rollData.competence.data.categorie == 'competencecreature') { + if (rollData.competence.data.categorie != 'tir') { message += "
Esquiver"; } } 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-token-hud.js b/module/rdd-token-hud.js index b2554eb1..490caba3 100644 --- a/module/rdd-token-hud.js +++ b/module/rdd-token-hud.js @@ -17,9 +17,9 @@ export class RdDTokenHud { if (!token.inCombat) return; if (!combatant) return; - const hudData = { combatant: combatant, armes: RdDTokenHud.buildListeActionsCombat(combatant) }; + let armesList = RdDTokenHud.buildListeActionsCombat(combatant) ; + const hudData = { combatant: combatant, armes: armesList }; - let armesList = RdDUtility.buildArmeList(combatant); // initiative await RdDTokenHud._configureSubMenu(html.find('.control-icon.combat'), 'systems/foundryvtt-reve-de-dragon/templates/hud-actor-init.html', hudData, (event) => { @@ -54,6 +54,7 @@ export class RdDTokenHud { const imgHud = hud.find('img.rdd-hud-togglebutton'); const list = hud.find('div.rdd-hud-list'); + hud.toggleClass('active'); HtmlUtility._showControlWhen(list, hud.hasClass('active')); imgHud.click(event => { 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/styles/simple.css b/styles/simple.css index f6789956..6df502b9 100644 --- a/styles/simple.css +++ b/styles/simple.css @@ -679,7 +679,7 @@ ul, li { flex-direction: column; position: absolute; top: 2.75rem; - right: -6rem; + left: 4rem; } .control-icon.tokenhudicon { width: fit-content; 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 @@ +
+
+ + + +
+
+ + + + +
+
+
+
+
+ +