foundryvtt-reve-de-dragon/module/dialog-item-consommer.js

112 lines
3.8 KiB
JavaScript
Raw Permalink Normal View History

2021-04-06 23:44:57 +02:00
import { Misc } from "./misc.js";
export class DialogConsommer extends Dialog {
2022-12-05 15:29:00 +01:00
static async create(actor, item, onActionItem = async () => { }) {
const consommerData = DialogConsommer.prepareData(actor, item);
const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-item-consommer.html', consommerData);
return new DialogConsommer(actor, item, consommerData, html, onActionItem)
2021-04-11 23:01:10 +02:00
}
2022-12-05 15:29:00 +01:00
constructor(actor, item, consommerData, html, onActionItem = async () => { }) {
const options = { classes: ["dialogconsommer"], width: 350, height: 'fit-content', 'z-index': 99999 };
2021-04-06 23:44:57 +02:00
let conf = {
title: consommerData.title,
2021-04-11 23:01:10 +02:00
content: html,
2021-04-06 23:44:57 +02:00
default: consommerData.buttonName,
2021-04-11 23:01:10 +02:00
buttons: {
[consommerData.buttonName]: {
label: consommerData.buttonName, callback: async it => {
await this.onConsommer();
2022-12-05 15:29:00 +01:00
await onActionItem();
}
2021-04-11 23:01:10 +02:00
}
}
2021-04-06 23:44:57 +02:00
};
2021-04-11 23:01:10 +02:00
super(conf, options);
2021-04-06 23:44:57 +02:00
2021-04-11 23:01:10 +02:00
this.actor = actor;
this.item = item;
this.consommerData = consommerData;
2021-04-06 23:44:57 +02:00
}
activateListeners(html) {
super.activateListeners(html);
this.html = html;
this.html.find(".se-forcer").change(event => this.setSeForcer(event));
this.html.find(".consommer-doses").change(event => this.selectDoses(event));
}
async onConsommer() {
await this.html.find(".se-forcer").change();
await this.html.find(".consommer-doses").change();
await this.actor.consommer(this.item, this.consommerData.choix);
}
2021-04-11 23:01:10 +02:00
/* -------------------------------------------- */
static prepareData(actor, item) {
2021-04-11 23:01:10 +02:00
let consommerData = {
2024-05-02 14:08:02 +02:00
item: foundry.utils.duplicate(item),
2022-06-12 09:46:58 +02:00
cuisine: actor.getCompetence('cuisine'),
2021-04-11 23:01:10 +02:00
choix: {
doses: 1,
seForcer: false,
2021-04-11 23:01:10 +02:00
}
}
switch (item.type) {
case 'herbe': case 'faune':
consommerData.title = 'Manger une portion crue: ';
consommerData.buttonName = "Manger";
break;
2021-04-06 23:44:57 +02:00
case 'nourritureboisson':
consommerData.title = item.system.boisson ? 'Boire une dose: ' : 'Manger une portion: ';
consommerData.buttonName = item.system.boisson ? "Boire" : "Manger";
2021-04-06 23:44:57 +02:00
break;
case 'potion':
consommerData.title = 'Boire la potion: ';
2021-04-06 23:44:57 +02:00
consommerData.buttonName = "Boire";
break;
}
consommerData.title += item.name;
DialogConsommer.calculDoses(consommerData, item)
2021-04-06 23:44:57 +02:00
return consommerData;
}
static calculDoses(consommer, item) {
const doses = consommer.choix.doses;
switch (item.type) {
case 'herbe': case 'faune':
consommer.totalSust = doses;
consommer.totalDesaltere = 0;
consommer.choix.sust = 1;
consommer.choix.quantite = 0;
consommer.choix.encombrement = Misc.keepDecimals(consommer.item.system.encombrement / item.system.sust, 2);
return;
case 'nourritureboisson':
consommer.choix.sust = consommer.item.system.sust;
consommer.choix.quantite = doses;
consommer.choix.encombrement = 0
consommer.totalSust = Misc.keepDecimals(doses * (consommer.item.system.sust ?? 0), 2);
consommer.totalDesaltere = consommer.item.system.boisson
? Misc.keepDecimals(doses * (consommer.item.system.desaltere ?? 0), 2)
: 0;
break;
case 'potion':
consommer.totalSust = 0
consommer.totalDesaltere = 0
}
2021-04-06 23:44:57 +02:00
}
2021-04-11 23:01:10 +02:00
setSeForcer(event) {
this.consommerData.choix.seForcer = event.currentTarget.checked;
2021-04-06 23:44:57 +02:00
}
selectDoses(event) {
this.consommerData.choix.doses = Number(event.currentTarget.value);
DialogConsommer.calculDoses(this.consommerData, this.item);
this.html.find(".total-sust").text(this.consommerData.totalSust);
this.html.find(".total-desaltere").text(this.consommerData.totalDesaltere);
}
2021-04-06 23:44:57 +02:00
}