0524540f5a
Forcer la validation des champs saisis avant de fermer les dialogs et d'appeler le callback pour avoir la dernière valuer saisie par l'utilisateur
119 lines
5.0 KiB
JavaScript
119 lines
5.0 KiB
JavaScript
import { ChatUtility } from "./chat-utility.js";
|
|
import { HtmlUtility } from "./html-utility.js";
|
|
import { RdDItemSigneDraconique } from "./item-signedraconique.js";
|
|
import { Misc } from "./misc.js";
|
|
import { RdDRollTables } from "./rdd-rolltables.js";
|
|
import { TMRType, TMRUtility } from "./tmr-utility.js";
|
|
|
|
export class DialogCreateSigneDraconique extends Dialog {
|
|
|
|
static async createSigneForActors() {
|
|
const signe = await RdDItemSigneDraconique.randomSigneDraconique({ephemere: true});
|
|
let dialogData = {
|
|
signe: signe,
|
|
tmrs: TMRUtility.listSelectedTMR(signe.data.typesTMR ?? []),
|
|
actors: game.actors.filter(actor => actor.isHautRevant()).map(actor => {
|
|
let actorData = duplicate(Misc.data(actor));
|
|
actorData.selected = actor.hasPlayerOwner;
|
|
return actorData;
|
|
})
|
|
};
|
|
|
|
const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-create-signedraconique.html", dialogData);
|
|
new DialogCreateSigneDraconique(dialogData, html)
|
|
.render(true);
|
|
}
|
|
|
|
constructor(dialogData, html, callback) {
|
|
let options = { classes: ["DialogCreateSigneDraconiqueActorsActors"], width: 500, height: 650, 'z-index': 99999 };
|
|
let conf = {
|
|
title: "Créer un signe",
|
|
content: html,
|
|
default: "Ajouter aux haut-rêvants",
|
|
buttons: {
|
|
"Ajouter aux haut-rêvants": { label: "Ajouter aux haut-rêvants", callback: it => { this._onCreerSigneActeurs(); } }
|
|
}
|
|
};
|
|
super(conf, options);
|
|
this.dialogData = dialogData;
|
|
}
|
|
|
|
async _onCreerSigneActeurs() {
|
|
await $("[name='signe.data.ephemere']").change();
|
|
await $(".signe-xp-sort").change();
|
|
this.validerSigne();
|
|
this.dialogData.actors.filter(it => it.selected).map(it => game.actors.get(it._id))
|
|
.forEach(actor => this._createSigneForActor(actor, this.dialogData.signe));
|
|
}
|
|
|
|
async _createSigneForActor(actor, signe) {
|
|
actor.createEmbeddedDocuments("Item", [signe]);
|
|
ChatMessage.create({
|
|
whisper: ChatUtility.getWhisperRecipientsAndGMs(Misc.data(actor).name),
|
|
content: await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-actor.html", {
|
|
signe: signe,
|
|
alias: Misc.data(actor).name
|
|
})
|
|
});
|
|
}
|
|
|
|
validerSigne() {
|
|
this.dialogData.signe.name = $("[name='signe.name']").val();
|
|
this.dialogData.signe.data.valeur.norm = $("[name='signe.data.valeur.norm']").val();
|
|
this.dialogData.signe.data.valeur.sign = $("[name='signe.data.valeur.sign']").val();
|
|
this.dialogData.signe.data.valeur.part = $("[name='signe.data.valeur.part']").val();
|
|
this.dialogData.signe.data.difficulte = $("[name='signe.data.difficulte']").val();
|
|
this.dialogData.signe.data.ephemere = $("[name='signe.data.ephemere']").prop("checked");
|
|
this.dialogData.signe.data.duree = $("[name='signe.data.duree']").val();
|
|
this.dialogData.signe.data.typesTMR = $(".select-tmr").val();
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
activateListeners(html) {
|
|
super.activateListeners(html);
|
|
this.setEphemere(this.dialogData.signe.data.ephemere);
|
|
html.find(".signe-aleatoire").click(event => this.setSigneAleatoire());
|
|
html.find("[name='signe.data.ephemere']").change((event) => this.setEphemere(event.currentTarget.checked));
|
|
html.find(".select-actor").change((event) => this.onSelectActor(event));
|
|
html.find(".signe-xp-sort").change((event) => this.onValeurXpSort(event));
|
|
}
|
|
|
|
async setSigneAleatoire() {
|
|
const newSigne = await RdDItemSigneDraconique.randomSigneDraconique({ephemere: true});
|
|
|
|
$("[name='signe.name']").val(newSigne.name);
|
|
$("[name='signe.data.valeur.norm']").val(newSigne.data.valeur.norm);
|
|
$("[name='signe.data.valeur.sign']").val(newSigne.data.valeur.sign);
|
|
$("[name='signe.data.valeur.part']").val(newSigne.data.valeur.part);
|
|
$("[name='signe.data.difficulte']").val(newSigne.data.difficulte);
|
|
$("[name='signe.data.duree']").val(newSigne.data.duree);
|
|
$("[name='signe.data.ephemere']").prop("checked", newSigne.data.ephemere);
|
|
$(".select-tmr").val(newSigne.data.typesTMR);
|
|
this.setEphemere(newSigne.data.ephemere);
|
|
}
|
|
|
|
async setEphemere(ephemere) {
|
|
this.dialogData.signe.data.ephemere = ephemere;
|
|
HtmlUtility._showControlWhen($(".signe-data-duree"), ephemere);
|
|
}
|
|
|
|
async onSelectActor(event) {
|
|
event.preventDefault();
|
|
const options = event.currentTarget.options;
|
|
for (var i = 0; i < options.length; i++) { // looping over the options
|
|
const actorId = options[i].attributes["data-actor-id"].value;
|
|
const actor = this.dialogData.actors.find(it => it._id == actorId);
|
|
if (actor) {
|
|
actor.selected = options[i].selected;
|
|
}
|
|
};
|
|
}
|
|
|
|
onValeurXpSort(event) {
|
|
const codeReussite = event.currentTarget.attributes['data-typereussite']?.value ?? 0;
|
|
const xp = Number(event.currentTarget.value);
|
|
const oldValeur = this.dialogData.signe.data.valeur;
|
|
this.dialogData.signe.data.valeur = RdDItemSigneDraconique.calculValeursXpSort(codeReussite, xp, oldValeur);
|
|
}
|
|
|
|
} |