foundryvtt-reve-de-dragon/module/dialog-fabriquer-potion.js

79 lines
2.9 KiB
JavaScript
Raw Normal View History

2021-04-11 12:07:43 +02:00
import { Misc } from "./misc.js";
import { RdDUtility } from "./rdd-utility.js";
export class DialogFabriquerPotion extends Dialog {
/* -------------------------------------------- */
2025-01-21 03:07:58 +01:00
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
}
2025-01-21 03:07:58 +01:00
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)
2021-04-11 12:07:43 +02:00
2025-01-21 03:07:58 +01:00
new DialogFabriquerPotion(actor, potionData, html, options).render(true)
2021-04-11 12:07:43 +02:00
}
/* -------------------------------------------- */
2025-01-21 03:07:58 +01:00
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
})
2021-04-11 12:07:43 +02:00
}
/* -------------------------------------------- */
2025-01-21 03:07:58 +01:00
constructor(actor, potionData, html, options) {
const conf = {
title: `Fabriquer une potion de ${potionData.system.categorie}`,
content: html,
default: 'fabriquer',
buttons: {
2025-01-21 03:07:58 +01:00
'fabriquer': { label: "Fabriquer", callback: it => this.onFabriquer() }
2021-04-11 12:07:43 +02:00
}
2025-01-21 03:07:58 +01:00
}
super(conf, options)
2021-04-11 12:07:43 +02:00
2025-01-21 03:07:58 +01:00
this.actor = actor
this.potionData = potionData
2021-04-11 12:07:43 +02:00
}
/* -------------------------------------------- */
activateListeners(html) {
2025-01-21 03:07:58 +01:00
super.activateListeners(html)
this.html = html
this.html.find("[name='nbBrins']").change(event => {
2025-01-21 03:07:58 +01:00
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)
2025-01-21 03:07:58 +01:00
})
}
/* -------------------------------------------- */
async onFabriquer() {
2025-01-21 03:07:58 +01:00
await this.html.find("[name='nbBrins']").change()
await this.actor.fabriquerPotion(this.potionData)
this.close()
}
static nombreBrinsMinimum(herbeData) {
switch (herbeData.system.categorie ?? '') {
2025-01-21 03:07:58 +01:00
case "Soin": return 1 + Math.max(0, 12 - 2 * herbeData.system.niveau)
case "Repos": return 1 + Math.max(0, 7 - 2 * herbeData.system.niveau)
}
2025-01-21 03:07:58 +01:00
return 1
}
static nombreBrinsOptimal(herbeData) {
switch (herbeData.system.categorie ?? '') {
2025-01-21 03:07:58 +01:00
case "Soin": return 12 - herbeData.system.niveau
case "Repos": return 7 - herbeData.system.niveau
2021-06-04 19:30:29 +02:00
}
2025-01-21 03:07:58 +01:00
return 1
2021-06-04 19:30:29 +02:00
}
2021-04-11 12:07:43 +02:00
}