foundryvtt-reve-de-dragon/module/dialog-create-signedraconique.js

128 lines
5.5 KiB
JavaScript
Raw Permalink Normal View History

2021-05-11 00:52:25 +02:00
import { ChatUtility } from "./chat-utility.js";
import { HtmlUtility } from "./html-utility.js";
import { RdDItemSigneDraconique } from "./item/signedraconique.js";
2021-10-08 23:26:10 +02:00
import { TMRUtility } from "./tmr-utility.js";
2021-05-11 00:52:25 +02:00
2021-05-11 21:21:33 +02:00
export class DialogCreateSigneDraconique extends Dialog {
2021-05-11 00:52:25 +02:00
static async createSigneForActors() {
2021-05-18 19:51:12 +02:00
const signe = await RdDItemSigneDraconique.randomSigneDraconique({ephemere: true});
2021-05-11 00:52:25 +02:00
let dialogData = {
2021-05-11 21:21:33 +02:00
signe: signe,
tmrs: TMRUtility.buildSelectionTypesTMR(signe.system.typesTMR),
actors: game.actors.filter(actor => actor.isPersonnage() && actor.isHautRevant())
.map(actor => ({
id: actor.id,
name: actor.name,
selected: true
}))
2021-05-11 00:52:25 +02:00
};
2021-05-11 21:21:33 +02:00
const html = await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/dialog-create-signedraconique.html", dialogData);
new DialogCreateSigneDraconique(dialogData, html)
2021-05-11 00:52:25 +02:00
.render(true);
}
constructor(dialogData, html) {
2021-05-11 00:52:25 +02:00
let options = { classes: ["DialogCreateSigneDraconiqueActorsActors"], width: 500, height: 650, 'z-index': 99999 };
let conf = {
2021-05-11 21:21:33 +02:00
title: "Créer un signe",
2021-05-11 00:52:25 +02:00
content: html,
2021-05-11 21:21:33 +02:00
buttons: {
"Ajouter aux haut-rêvants": { label: "Ajouter aux haut-rêvants", callback: it => { this._onCreerSigneActeurs(); } }
}
2021-05-11 00:52:25 +02:00
};
super(conf, options);
this.dialogData = dialogData;
}
2021-05-11 21:21:33 +02:00
async _onCreerSigneActeurs() {
await this.html.find("[name='signe.system.ephemere']").change();
await this.html.find(".signe-xp-sort").change();
2021-05-11 21:21:33 +02:00
this.validerSigne();
this.dialogData.actors.filter(it => it.selected)
.map(it => game.actors.get(it.id))
.forEach(actor => this._createSigneForActor(actor, this.dialogData.signe));
2021-05-11 00:52:25 +02:00
}
2021-05-11 00:52:25 +02:00
async _createSigneForActor(actor, signe) {
actor.createEmbeddedDocuments("Item", [signe]);
ChatMessage.create({
2022-06-12 09:46:58 +02:00
whisper: ChatUtility.getWhisperRecipientsAndGMs(actor.name),
2021-05-11 00:52:25 +02:00
content: await renderTemplate("systems/foundryvtt-reve-de-dragon/templates/chat-signe-draconique-actor.html", {
signe: signe,
2022-06-12 09:46:58 +02:00
alias: actor.name
2021-05-11 00:52:25 +02:00
})
});
}
2021-05-11 21:21:33 +02:00
validerSigne() {
this.dialogData.signe.name = this.html.find("[name='signe.name']").val();
this.dialogData.signe.system.valeur.norm = this.html.find("[name='signe.system.valeur.norm']").val();
this.dialogData.signe.system.valeur.sign = this.html.find("[name='signe.system.valeur.sign']").val();
this.dialogData.signe.system.valeur.part = this.html.find("[name='signe.system.valeur.part']").val();
this.dialogData.signe.system.difficulte = this.html.find("[name='signe.system.difficulte']").val();
this.dialogData.signe.system.ephemere = this.html.find("[name='signe.system.ephemere']").prop("checked");
this.dialogData.signe.system.duree = this.html.find("[name='signe.system.duree']").val();
this.dialogData.signe.system.typesTMR = TMRUtility.buildListTypesTMRSelection(this.dialogData.tmrs);
2021-05-11 21:21:33 +02:00
}
2021-05-11 00:52:25 +02:00
/* -------------------------------------------- */
activateListeners(html) {
super.activateListeners(html);
this.html = html;
2022-09-07 09:01:23 +02:00
this.setEphemere(this.dialogData.signe.system.ephemere);
2021-05-11 21:21:33 +02:00
html.find(".signe-aleatoire").click(event => this.setSigneAleatoire());
2022-09-07 09:01:23 +02:00
html.find("[name='signe.system.ephemere']").change((event) => this.setEphemere(event.currentTarget.checked));
2021-05-11 21:21:33 +02:00
html.find(".signe-xp-sort").change((event) => this.onValeurXpSort(event));
html.find("input.select-actor").change((event) => this.onSelectActor(event));
html.find("input.select-tmr").change((event) => this.onSelectTmr(event));
2021-05-11 00:52:25 +02:00
}
2021-05-11 21:21:33 +02:00
async setSigneAleatoire() {
2021-05-18 19:51:12 +02:00
const newSigne = await RdDItemSigneDraconique.randomSigneDraconique({ephemere: true});
2021-05-11 21:21:33 +02:00
this.html.find("[name='signe.name']").val(newSigne.name);
this.html.find("[name='signe.system.valeur.norm']").val(newSigne.system.valeur.norm);
this.html.find("[name='signe.system.valeur.sign']").val(newSigne.system.valeur.sign);
this.html.find("[name='signe.system.valeur.part']").val(newSigne.system.valeur.part);
this.html.find("[name='signe.system.difficulte']").val(newSigne.system.difficulte);
this.html.find("[name='signe.system.duree']").val(newSigne.system.duree);
this.html.find("[name='signe.system.ephemere']").prop("checked", newSigne.system.ephemere);
this.dialogData.tmrs = TMRUtility.buildSelectionTypesTMR(newSigne.system.typesTMR);
this.dialogData.tmrs.forEach(t => {
this.html.find(`[data-tmr-name='${t.name}']`).prop( "checked", t.selected);
})
2022-09-07 09:01:23 +02:00
this.setEphemere(newSigne.system.ephemere);
2021-05-11 00:52:25 +02:00
}
2021-05-11 21:21:33 +02:00
async setEphemere(ephemere) {
2022-09-07 09:01:23 +02:00
this.dialogData.signe.system.ephemere = ephemere;
HtmlUtility.showControlWhen(this.html.find(".signe-system-duree"), ephemere);
2021-05-11 00:52:25 +02:00
}
async onSelectActor(event) {
const actorId = this.html.find(event.currentTarget)?.data("actor-id");
const actor = this.dialogData.actors.find(it => it.id == actorId);
if (actor) {
actor.selected = event.currentTarget.checked;
}
2021-05-11 00:52:25 +02:00
}
onSelectTmr(event) {
const tmrName = this.html.find(event.currentTarget)?.data("tmr-name");
const onTmr = this.tmrs.find(it => it.name == tmrName);
if (onTmr){
onTmr.selected = event.currentTarget.checked;
}
}
2021-05-11 00:52:25 +02:00
onValeurXpSort(event) {
const codeReussite = event.currentTarget.attributes['data-typereussite']?.value ?? 0;
const xp = Number(event.currentTarget.value);
2022-09-07 09:01:23 +02:00
const oldValeur = this.dialogData.signe.system.valeur;
this.dialogData.signe.system.valeur = RdDItemSigneDraconique.calculValeursXpSort(codeReussite, xp, oldValeur);
2021-05-11 00:52:25 +02:00
}
}