110 lines
4.3 KiB
JavaScript
110 lines
4.3 KiB
JavaScript
import { MournbladeCYD2Utility } from "../mournblade-cyd2-utility.js";
|
|
|
|
/**
|
|
* Dialogue de jet de dé pour MournbladeCYD2 - Version DialogV2
|
|
*/
|
|
export class MournbladeCYD2RollDialog {
|
|
|
|
/**
|
|
* Create and display the roll dialog
|
|
* @param {MournbladeCYD2Actor} actor
|
|
* @param {Object} rollData
|
|
*/
|
|
static async create(actor, rollData) {
|
|
const context = {
|
|
...rollData,
|
|
difficulte: String(rollData.difficulte || 0),
|
|
img: actor.img,
|
|
name: actor.name,
|
|
config: game.system.mournbladecyd2.config,
|
|
attributs: game.system.mournbladecyd2.config.attributs,
|
|
};
|
|
|
|
const content = await foundry.applications.handlebars.renderTemplate(
|
|
"systems/fvtt-mournblade-cyd-2-0/templates/roll-dialog-generic.hbs",
|
|
context
|
|
);
|
|
|
|
return foundry.applications.api.DialogV2.wait({
|
|
window: { title: "Test de Capacité", icon: "fa-solid fa-dice-d20" },
|
|
classes: ["mournblade-cyd2-roll-dialog"],
|
|
position: { width: 470 },
|
|
modal: false,
|
|
content,
|
|
buttons: [
|
|
{
|
|
action: "rolld10",
|
|
label: "Lancer 1d10",
|
|
icon: "fa-solid fa-dice-d10",
|
|
default: true,
|
|
callback: (event, button, dialog) => {
|
|
MournbladeCYD2RollDialog._updateRollDataFromForm(rollData, button.form, actor);
|
|
rollData.mainDice = "d10";
|
|
MournbladeCYD2Utility.rollMournbladeCYD2(rollData);
|
|
}
|
|
},
|
|
{
|
|
action: "rolld20",
|
|
label: "Lancer 1d20",
|
|
icon: "fa-solid fa-dice-d20",
|
|
callback: (event, button, dialog) => {
|
|
MournbladeCYD2RollDialog._updateRollDataFromForm(rollData, button.form, actor);
|
|
rollData.mainDice = "d20";
|
|
MournbladeCYD2Utility.rollMournbladeCYD2(rollData);
|
|
}
|
|
},
|
|
{
|
|
action: "cancel",
|
|
label: "Annuler",
|
|
icon: "fa-solid fa-times"
|
|
}
|
|
]
|
|
});
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
static _updateRollDataFromForm(rollData, form, actor) {
|
|
const el = form.elements;
|
|
const getVal = (name) => el[name]?.value;
|
|
const getChecked = (name) => {
|
|
const e = form.querySelector(`#${name}`);
|
|
return e ? e.checked : false;
|
|
};
|
|
|
|
if (el.modificateur) rollData.modificateur = Number(getVal("modificateur"));
|
|
if (el["bonus-malus-context"]) rollData.bonusMalusContext = Number(getVal("bonus-malus-context"));
|
|
if (el.difficulte) rollData.difficulte = Number(getVal("difficulte"));
|
|
if (el.attrKey) rollData.attrKey = String(getVal("attrKey"));
|
|
if (el.attrKey2) rollData.attrKey2 = String(getVal("attrKey2"));
|
|
if (el["select-maitrise"]) rollData.maitriseId = String(getVal("select-maitrise"));
|
|
if (el["competence-talents"]) {
|
|
const sel = el["competence-talents"];
|
|
rollData.selectedTalents = Array.from(sel.selectedOptions).map(o => o.value);
|
|
}
|
|
if (el["taille-cible"]) rollData.tailleCible = String(getVal("taille-cible"));
|
|
if (el["tireur-deplacement"]) rollData.tireurDeplacement = String(getVal("tireur-deplacement"));
|
|
if (el["cible-couvert"]) rollData.cibleCouvert = String(getVal("cible-couvert"));
|
|
if (el["distance-tir"]) rollData.distanceTir = String(getVal("distance-tir"));
|
|
if (el["soutiens"]) rollData.soutiens = Number(getVal("soutiens"));
|
|
if (el["runemode"]) rollData.runemode = String(getVal("runemode"));
|
|
if (el["runeame"]) rollData.runeame = Number(getVal("runeame"));
|
|
|
|
rollData.defenseurAuSol = getChecked("defenseur-au-sol");
|
|
rollData.defenseurAveugle = getChecked("defenseur-aveugle");
|
|
rollData.defenseurDeDos = getChecked("defenseur-de-dos");
|
|
rollData.defenseurRestreint = getChecked("defenseur-restreint");
|
|
rollData.defenseurImmobilise = getChecked("defenseur-immobilise");
|
|
rollData.attaquantsMultiples = getChecked("attaquants-multiple");
|
|
rollData.ambidextre1 = getChecked("ambidextre-1");
|
|
rollData.ambidextre2 = getChecked("ambidextre-2");
|
|
rollData.feinte = getChecked("feinte");
|
|
rollData.attaqueCharge = getChecked("attaque-charge");
|
|
rollData.chargeCavalerie = getChecked("charge-cavalerie");
|
|
rollData.contenir = getChecked("contenir");
|
|
rollData.attaqueDesarme = getChecked("attaque-desarme");
|
|
rollData.cibleDeplace = getChecked("tireur-cible-deplace");
|
|
rollData.cibleCaC = getChecked("cible-cac");
|
|
rollData.cibleconsciente = getChecked("cibleconsciente");
|
|
}
|
|
}
|