import { Misc } from "./misc.js"; import { RdDUtility } from "./rdd-utility.js"; export class DialogFabriquerPotion extends Dialog { /* -------------------------------------------- */ static async create(actor, item) { const brinsMinimum = DialogFabriquerPotion.nombreBrinsMinimum(item) if (item.system.quantite < brinsMinimum) { ui.notifications.warn(`Vous avez ${item.system.quantite} brins de ${item.name}, il en faut au moins ${brinsMinimum} pour faire une potion!`) return } const potionData = DialogFabriquerPotion.prepareData(item, brinsMinimum) const options = { classes: ["dialogfabriquerpotion"], width: 600, height: 160, 'z-index': 99999 } const html = await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/dialog-fabriquer-potion-base.html', potionData) new DialogFabriquerPotion(actor, potionData, html, options).render(true) } /* -------------------------------------------- */ static prepareData(item, brinsMinimum) { const brinsOptimal = DialogFabriquerPotion.nombreBrinsOptimal(item) return foundry.utils.mergeObject(foundry.utils.duplicate(item), { nbBrinsSelect: RdDUtility.buildListOptions(brinsMinimum, brinsOptimal), nbBrins: Math.min(item.system.quantite, brinsOptimal), herbebonus: item.system.niveau }) } /* -------------------------------------------- */ constructor(actor, potionData, html, options) { const conf = { title: `Fabriquer une potion de ${potionData.system.categorie}`, content: html, default: 'fabriquer', buttons: { 'fabriquer': { label: "Fabriquer", callback: it => this.onFabriquer() } } } super(conf, options) this.actor = actor this.potionData = potionData } /* -------------------------------------------- */ activateListeners(html) { super.activateListeners(html) this.html = html this.html.find("[name='nbBrins']").change(event => { this.potionData.nbBrins = Misc.toInt(event.currentTarget.value) const brinsManquants = Math.max(0, DialogFabriquerPotion.nombreBrinsOptimal(this.potionData) - this.potionData.nbBrins) this.potionData.herbebonus = Math.max(0, this.potionData.system.niveau - brinsManquants) }) } /* -------------------------------------------- */ async onFabriquer() { await this.html.find("[name='nbBrins']").change() await this.actor.fabriquerPotion(this.potionData) this.close() } static nombreBrinsMinimum(herbeData) { switch (herbeData.system.categorie ?? '') { case "Soin": return 1 + Math.max(0, 12 - 2 * herbeData.system.niveau) case "Repos": return 1 + Math.max(0, 7 - 2 * herbeData.system.niveau) } return 1 } static nombreBrinsOptimal(herbeData) { switch (herbeData.system.categorie ?? '') { case "Soin": return 12 - herbeData.system.niveau case "Repos": return 7 - herbeData.system.niveau } return 1 } }