From 4281f76dfb1bb33d51d2e33b22403f6f35a49831 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Wed, 15 Jan 2025 19:12:39 +0100 Subject: [PATCH] Simplification des actionPrincipales MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Préparation pour supporter une liste d'actions sur les items --- module/actor.js | 159 ++++++++++++++++++------------------ module/item-sheet.js | 34 +++++--- module/rdd-sheet-utility.js | 9 +- 3 files changed, 113 insertions(+), 89 deletions(-) diff --git a/module/actor.js b/module/actor.js index 369bc762..faa060a5 100644 --- a/module/actor.js +++ b/module/actor.js @@ -1200,22 +1200,27 @@ export class RdDActor extends RdDBaseActorSang { async actionPrincipale(item, onActionItem = async () => { }) { let result = await super.actionPrincipale(item, onActionItem) - if (result) { return result } - - result = await this.actionNourritureboisson(item, onActionItem) - if (result) { return result } - - switch (item.type) { - case ITEM_TYPES.potion: return await this.consommerPotion(item, onActionItem); - case ITEM_TYPES.livre: return await this.actionLire(item); - case ITEM_TYPES.conteneur: return await item.sheet.render(true); - case ITEM_TYPES.herbe: return await this.actionHerbe(item, onActionItem); - case ITEM_TYPES.queue: case ITEM_TYPES.ombre: return await this.actionRefoulement(item); + if (!result){ + result = await this.actionNourritureboisson(item) } - return undefined + if (!result){ + result = await this.itemActionPrincipale(item) + } + await onActionItem() + return result } - async actionNourritureboisson(item, onActionItem) { + async itemActionPrincipale(item) { + switch (item.type) { + case ITEM_TYPES.potion: return await this.consommerPotion(item); + case ITEM_TYPES.livre: return await this.actionLire(item); + case ITEM_TYPES.conteneur: return await item.sheet.render(true); + case ITEM_TYPES.herbe: return await this.actionHerbe(item); + case ITEM_TYPES.queue: case ITEM_TYPES.ombre: return await this.actionRefoulement(item); + } + } + + async actionNourritureboisson(item) { switch (item.getUtilisationCuisine()) { case 'brut': { const utilisation = new Dialog({ @@ -1223,19 +1228,19 @@ export class RdDActor extends RdDBaseActorSang { content: `Que faire de votre ${item.name}`, buttons: { 'cuisiner': { icon: '', label: 'Cuisiner', callback: async () => await this.preparerNourriture(item) }, - 'manger': { icon: '', label: 'Manger cru', callback: async () => await this.mangerNourriture(item, onActionItem) } + 'manger': { icon: '', label: 'Manger cru', callback: async () => await this.mangerNourriture(item) } } }); return utilisation.render(true); } case 'pret': - return await this.mangerNourriture(item, onActionItem); + return await this.mangerNourriture(item); } return undefined; } - async mangerNourriture(item, onActionItem) { - return (await DialogConsommer.create(this, item, onActionItem)).render(true); + async mangerNourriture(item) { + return (await DialogConsommer.create(this, item)).render(true); } async actionLire(item) { @@ -2829,6 +2834,59 @@ export class RdDActor extends RdDBaseActorSang { return guerisonData; } + + /* -------------------------------------------- */ + async fabriquerPotion(herbeData) { + let newPotion = { + name: `Potion de ${herbeData.system.categorie} (${herbeData.name})`, type: 'potion', + img: "systems/foundryvtt-reve-de-dragon/icons/objets/fiole_verre.webp", + system: { + quantite: 1, cout: 0, encombrement: 0.1, + categorie: herbeData.system.categorie, + herbe: herbeData.name, + rarete: herbeData.system.rarete, + herbebrins: herbeData.nbBrins, + herbebonus: herbeData.herbebonus, + description: "" + } + } + await this.createEmbeddedDocuments('Item', [newPotion]); + + let newQuantite = herbeData.system.quantite - herbeData.nbBrins; + let messageData = { + alias: this.getAlias(), + nbBrinsReste: newQuantite, + potion: newPotion, + herbe: herbeData + } + this.diminuerQuantiteObjet(herbeData._id, herbeData.nbBrins); + + ChatMessage.create({ + whisper: ChatUtility.getOwners(this), + content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-fabriquer-potion-base.html`, messageData) + }); + } + + /* -------------------------------------------- */ + async diminuerQuantiteObjet(id, nb, options = { supprimerSiZero: false }) { + const item = this.getItem(id); + if (item) { + await item.diminuerQuantite(nb, options); + } + } + + /* -------------------------------------------- */ + async consommerPotion(potion) { + if (potion.system.categorie.includes('Soin')) { + await this.consommerPotionSoin(potion); + } else if (potion.system.categorie.includes('Repos')) { + await this.consommerPotionRepos(potion); + } else { + await this.consommerPotionGenerique(potion); + } + await this.diminuerQuantiteObjet(potion.id, 1, { supprimerSiZero: potion.supprimer }); + } + /* -------------------------------------------- */ async consommerPotionSoin(potionData) { potionData.alias = this.name; @@ -2890,77 +2948,22 @@ export class RdDActor extends RdDBaseActorSang { } /* -------------------------------------------- */ - async fabriquerPotion(herbeData) { - let newPotion = { - name: `Potion de ${herbeData.system.categorie} (${herbeData.name})`, type: 'potion', - img: "systems/foundryvtt-reve-de-dragon/icons/objets/fiole_verre.webp", - system: { - quantite: 1, cout: 0, encombrement: 0.1, - categorie: herbeData.system.categorie, - herbe: herbeData.name, - rarete: herbeData.system.rarete, - herbebrins: herbeData.nbBrins, - herbebonus: herbeData.herbebonus, - description: "" - } - } - await this.createEmbeddedDocuments('Item', [newPotion], { renderSheet: true }); + async consommerPotionGenerique(potion) { + potion.alias = this.name; - let newQuantite = herbeData.system.quantite - herbeData.nbBrins; - let messageData = { - alias: this.getAlias(), - nbBrinsReste: newQuantite, - potion: newPotion, - herbe: herbeData - } - this.diminuerQuantiteObjet(herbeData._id, herbeData.nbBrins); - - ChatMessage.create({ - whisper: ChatUtility.getOwners(this), - content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-fabriquer-potion-base.html`, messageData) - }); - } - - /* -------------------------------------------- */ - async diminuerQuantiteObjet(id, nb, options = { supprimerSiZero: false }) { - const item = this.getItem(id); - if (item) { - await item.diminuerQuantite(nb, options); - } - } - - /* -------------------------------------------- */ - async consommerPotionGenerique(potionData) { - potionData.alias = this.name; - - if (potionData.system.magique) { + if (potion.system.magique) { // Gestion de la résistance: - potionData.rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8); - if (potionData.rolled.isEchec) { + potion.rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8); + if (potion.rolled.isEchec) { await this.reveActuelIncDec(-1); } } ChatMessage.create({ whisper: ChatUtility.getOwners(this), - content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-generique.html`, potionData) + content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-generique.html`, potion) }); } - /* -------------------------------------------- */ - async consommerPotion(potion, onActionItem = async () => { }) { - const potionData = potion - - if (potionData.system.categorie.includes('Soin')) { - this.consommerPotionSoin(potionData); - } else if (potionData.system.categorie.includes('Repos')) { - this.consommerPotionRepos(potionData); - } else { - this.consommerPotionGenerique(potionData); - } - await this.diminuerQuantiteObjet(potion.id, 1, { supprimerSiZero: potionData.supprimer }); - await onActionItem() - } - /* -------------------------------------------- */ async onUpdateActor(update, options, actorId) { const updatedEndurance = update?.system?.sante?.endurance diff --git a/module/item-sheet.js b/module/item-sheet.js index 386d7b34..e88af8f0 100644 --- a/module/item-sheet.js +++ b/module/item-sheet.js @@ -192,7 +192,6 @@ 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.getActionRenderItem())); this.html.find('.creer-potion-base').click((event) => this._getEventActor(event).actionHerbe(this.item)); this.html.find('input[name="system.cacher_points_de_tache"]').change(async event => await this.item.update({ 'system.cacher_points_de_tache': event.currentTarget.checked })); @@ -200,12 +199,13 @@ export class RdDItemSheet extends ItemSheet { this.html.find('.chat-roll-text').click(async event => await RdDTextEditor.chatRollText(event)) 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('.consommer-potion').click(event => this.itemActionConsommer(event)) + this.html.find('.item-action').click(event => this.itemAction(event)) + this.html.find('.item-split').click( event => this.itemActionSplit(event)) 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) @@ -223,13 +223,27 @@ 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) - } + async itemActionConsommer(event) { + const item = RdDSheetUtility.getItem(event, this.actor) + if (item) { + await actor.consommerPotion(item) + await RdDSheetUtility.renderItemBranch(this.actor, item) + } + } + + async itemActionSplit(event) { + const item = RdDSheetUtility.getItem(event, this.actor) + if (item) { + await RdDSheetUtility.splitItem(item, this.actor) + await RdDSheetUtility.renderItemBranch(this.actor, item) + } + } + + async itemAction(event) { + const item = RdDSheetUtility.getItem(event, this.actor); + if (item) { + await item.actionPrincipale(this.actor) + await RdDSheetUtility.renderItemBranch(this.actor, item) } } diff --git a/module/rdd-sheet-utility.js b/module/rdd-sheet-utility.js index ee8a21da..8dbbf217 100644 --- a/module/rdd-sheet-utility.js +++ b/module/rdd-sheet-utility.js @@ -70,7 +70,7 @@ export class RdDSheetUtility { await RdDSheetUtility._onSplitItem(item, split, actor); onSplit(); }); - dialog.render(true); + dialog.render(true) } static async _onSplitItem(item, split, actor) { @@ -82,4 +82,11 @@ export class RdDSheetUtility { await actor.createEmbeddedDocuments('Item', [splitItem]) } } + + static async renderItemBranch(actor, item) { + while (item) { + await item.sheet?.render() + item = actor.getContenant(item) + } + } } \ No newline at end of file