diff --git a/module/actor-sheet.js b/module/actor-sheet.js index 00f2fa96..5f37c9c5 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -117,7 +117,10 @@ export class RdDActorSheet extends RdDBaseActorSheet { // Everything below here is only needed if the sheet is editable if (!this.options.editable) return; - this.html.find('.item-action').click(async event => RdDSheetUtility.getItem(event, this.actor)?.actionPrincipale(this.actor)); + this.html.find('.item-action').click(async event => { + const item = RdDSheetUtility.getItem(event, this.actor); + item?.actionPrincipale(this.actor, async () => this.render()) + }); this.html.find('.subacteur-delete').click(async event => { const li = RdDSheetUtility.getEventElement(event); diff --git a/module/actor.js b/module/actor.js index 5f308945..3833f413 100644 --- a/module/actor.js +++ b/module/actor.js @@ -1625,11 +1625,6 @@ export class RdDActor extends RdDBaseActor { new RdDRollDialogEthylisme(html, rollData, this, r => this.saouler(r.forceAlcool)).render(true); } - /* -------------------------------------------- */ - async actionItem(item, onActionItem = async () => { }) { - item.actionPrincipale(this, onActionItem); - } - async actionNourritureboisson(item, onActionItem) { switch (item.getUtilisationCuisine()) { case 'brut': { @@ -1662,9 +1657,9 @@ export class RdDActor extends RdDBaseActor { await this.rollTache(tache.id); } } - async actionHerbe(item) { + async actionHerbe(item, onActionItem = async () => {}) { if (item.isHerbeAPotion()) { - return this.dialogFabriquerPotion(item); + return DialogFabriquerPotion.create(this, item, onActionItem); } return; } @@ -3607,12 +3602,6 @@ export class RdDActor extends RdDBaseActor { content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-repos.html`, potionData) }); } - /* -------------------------------------------- */ - dialogFabriquerPotion(herbe) { - DialogFabriquerPotion.create(this, herbe, { - html: 'systems/foundryvtt-reve-de-dragon/templates/dialog-fabriquer-potion-base.html', - }, []); - } /* -------------------------------------------- */ async fabriquerPotion(herbeData) { diff --git a/module/dialog-fabriquer-potion.js b/module/dialog-fabriquer-potion.js index 3d3dd236..f5d4f823 100644 --- a/module/dialog-fabriquer-potion.js +++ b/module/dialog-fabriquer-potion.js @@ -5,7 +5,7 @@ import { RdDUtility } from "./rdd-utility.js"; export class DialogFabriquerPotion extends Dialog { /* -------------------------------------------- */ - static async create(actor, item, dialogConfig) { + static async create(actor, item, onActionItem) { const min = DialogFabriquerPotion.nombreBrinsMinimum(item); if (item.system.quantite < min) { ui.notifications.warn(`Vous avez ${item.system.quantite} brins de ${item.name}, il en faut au moins ${min} pour faire une potion!`); @@ -13,12 +13,10 @@ export class DialogFabriquerPotion extends Dialog { } let potionData = DialogFabriquerPotion.prepareData(actor, item); - const html = await renderTemplate(dialogConfig.html, potionData); + const html = await renderTemplate( 'systems/foundryvtt-reve-de-dragon/templates/dialog-fabriquer-potion-base.html', potionData); let options = { classes: ["dialogfabriquerpotion"], width: 600, height: 160, 'z-index': 99999 }; - mergeObject(options, dialogConfig.options ?? {}, { overwrite: true }) - - new DialogFabriquerPotion(actor, potionData, html, options).render(true); + new DialogFabriquerPotion(actor, potionData, onActionItem, html, options).render(true); } /* -------------------------------------------- */ @@ -34,14 +32,14 @@ export class DialogFabriquerPotion extends Dialog { } /* -------------------------------------------- */ - constructor(actor, potionData, html, options) { + constructor(actor, potionData, onActionItem, html, options) { const conf = { title: `Fabriquer une potion de ${potionData.system.categorie}`, content: html, default: 'fabriquer', buttons: { 'fabriquer': { - label: potionData.buttonName, callback: it => this.onFabriquer(html) + label: potionData.buttonName, callback: it => this.onFabriquer() } } }; @@ -50,6 +48,7 @@ export class DialogFabriquerPotion extends Dialog { this.actor = actor; this.potionData = potionData; + this.onActionItem = onActionItem; } /* -------------------------------------------- */ @@ -64,10 +63,11 @@ export class DialogFabriquerPotion extends Dialog { } /* -------------------------------------------- */ - async onFabriquer(html) { + async onFabriquer() { await this.html.find("[name='nbBrins']").change(); - this.actor.fabriquerPotion(this.potionData); + await this.actor.fabriquerPotion(this.potionData); this.close(); + await this.onActionItem() } static nombreBrinsMinimum(herbeData) { diff --git a/module/item-sheet.js b/module/item-sheet.js index 62add209..75c95920 100644 --- a/module/item-sheet.js +++ b/module/item-sheet.js @@ -188,7 +188,7 @@ export class RdDItemSheet extends ItemSheet { }); this.html.find('.creer-tache-livre').click((event) => this._getEventActor(event).creerTacheDepuisLivre(this.item)); - this.html.find('.consommer-potion').click((event) => this._getEventActor(event).consommerPotion(this.item)); + this.html.find('.consommer-potion').click((event) => this._getEventActor(event).consommerPotion(this.item, this.getActionRenderItem())); this.html.find('.creer-potion-base').click((event) => this._getEventActor(event).dialogFabriquerPotion(this.item)); this.html.find('.alchimie-tache a').click((event) => { @@ -203,12 +203,14 @@ export class RdDItemSheet extends ItemSheet { } }); - this.html.find('.item-split').click(async event => RdDSheetUtility.splitItem(RdDSheetUtility.getItem(event, this.actor), this.actor, async () => this.render(true))); - this.html.find('.item-edit').click(async event => RdDSheetUtility.getItem(event, this.actor)?.sheet.render(true)); - this.html.find('.item-delete').click(async event => RdDUtility.confirmActorItemDelete(this, RdDSheetUtility.getItem(event, this.actor))); - this.html.find('.item-vendre').click(async event => RdDSheetUtility.getItem(event, this.actor)?.proposerVente()); - this.html.find('.item-montrer').click(async event => RdDSheetUtility.getItem(event, this.actor)?.postItemToChat()); - this.html.find('.item-action').click(async event => RdDSheetUtility.getItem(event, this.actor)?.actionPrincipale(this.actor, async () => this.render(true))); + if (this.actor) { + this.html.find('.item-split').click(async event => RdDSheetUtility.splitItem(RdDSheetUtility.getItem(event, this.actor), this.actor, this.getActionRenderItem())); + this.html.find('.item-edit').click(async event => RdDSheetUtility.getItem(event, this.actor)?.sheet.render(true)); + this.html.find('.item-delete').click(async event => RdDUtility.confirmActorItemDelete(this, RdDSheetUtility.getItem(event, this.actor))); + this.html.find('.item-vendre').click(async event => RdDSheetUtility.getItem(event, this.actor)?.proposerVente()); + this.html.find('.item-montrer').click(async event => RdDSheetUtility.getItem(event, this.actor)?.postItemToChat()); + this.html.find('.item-action').click(async event => RdDSheetUtility.getItem(event, this.actor)?.actionPrincipale(this.actor, this.getActionRenderItem())); + this.html.find('.item-quantite-plus').click(async event => { await this.actor.itemQuantiteIncDec(RdDSheetUtility.getItemId(event), 1) this.render(); @@ -217,6 +219,7 @@ export class RdDItemSheet extends ItemSheet { await this.actor.itemQuantiteIncDec(RdDSheetUtility.getItemId(event), -1) this.render(); }); + } const updateItemTimestamp = (path, timestamp) => this.item.update({ [path]: duplicate(timestamp) }) @@ -224,6 +227,16 @@ export class RdDItemSheet extends ItemSheet { RdDTimestamp.handleTimestampEditor(this.html, 'system.temporel.fin', updateItemTimestamp); } + getActionRenderItem() { + return async () => { + let item = this.item; + while (item) { + await item.sheet?.render() + item = this.actor.getContenant(item) + } + } + } + _getEventActor(event) { let actorId = event.currentTarget.attributes['data-actor-id'].value; let actor = game.actors.get(actorId); diff --git a/module/item.js b/module/item.js index 05e2762b..3cd7b9c3 100644 --- a/module/item.js +++ b/module/item.js @@ -411,7 +411,7 @@ export class RdDItem extends Item { case 'potion': return await actor.consommerPotion(this, onActionItem); case 'livre': return await actor.actionLire(this); case 'conteneur': return await this.sheet.render(true); - case 'herbe': return await actor.actionHerbe(this); + case 'herbe': return await actor.actionHerbe(this, onActionItem); case 'queue': case 'ombre': return await actor.actionRefoulement(this); } }