From 9fc21e6d97de61c33a316ada09f617e0e70ec12d Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Wed, 15 Jan 2025 19:13:32 +0100 Subject: [PATCH] Gestion des actions sur les items MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - dans la liste d'équipement, liste d'actions fournie par code - support d'actions multiples - listener générique Utilisation du mécanisme pour tous les items, standardisation de l'apparence des boutons d'items --- module/actor-sheet.js | 22 +-- module/actor.js | 182 +++++++----------- module/actor/base-actor-sheet.js | 36 ++-- module/actor/base-actor.js | 9 +- module/actor/commerce-sheet.js | 1 + module/item-sheet.js | 25 ++- module/item.js | 122 ++++++------ module/item/item-actions.js | 154 +++++++++++++++ module/item/potion.js | 22 ++- module/item/sheet-potion.js | 3 +- module/rdd-empoignade.js | 1 - module/rdd-possession.js | 2 +- module/rdd-roll.js | 6 +- module/rdd-tmr-dialog.js | 2 +- module/rdd-utility.js | 54 +++--- module/time/rdd-timestamp.js | 4 +- styles/simple.css | 64 +++--- templates/actor-creature-sheet.html | 4 +- templates/actor-entite-sheet.html | 4 +- templates/actor-sheet.html | 14 +- templates/actor-vehicule-sheet.html | 2 +- templates/actor/alchimie.hbs | 11 ++ templates/actor/alchimie.html | 15 -- templates/actor/armures.hbs | 2 +- templates/actor/blessure.hbs | 7 +- .../actor/{chirurgie.html => chirurgie.hbs} | 9 +- templates/actor/combat.html | 40 ++-- templates/actor/commerce-actor-sheet.html | 37 +--- templates/actor/commerce-inventaire-item.hbs | 18 +- ...nventaire.html => commerce-inventaire.hbs} | 0 .../{comp-creature.html => comp-creature.hbs} | 9 +- ...mp-possession.html => comp-possession.hbs} | 7 +- templates/actor/competence-categorie.html | 8 +- .../actor/{competence.html => competence.hbs} | 9 +- .../{dragon-queue.html => dragon-queue.hbs} | 8 +- templates/actor/dragon-queues.html | 4 +- ...agon-souffles.html => dragon-souffles.hbs} | 5 +- .../{dragon-tetes.html => dragon-tetes.hbs} | 5 +- templates/actor/haut-revant.hbs | 12 +- templates/actor/hr-casetmrs.hbs | 6 +- ...hr-meditations.html => hr-meditations.hbs} | 7 +- .../{hr-rencontres.html => hr-rencontres.hbs} | 4 +- ...oniques.html => hr-signes-draconiques.hbs} | 4 +- ...orts-reserve.html => hr-sorts-reserve.hbs} | 9 +- .../actor/{hr-sorts.html => hr-sorts.hbs} | 11 +- templates/actor/inventaire-item.hbs | 21 -- ...re-monnaie.html => inventaire-monnaie.hbs} | 9 +- templates/actor/item-action-controls.hbs | 16 ++ templates/actor/jeus.hbs | 9 +- templates/actor/liens-suivants.hbs | 6 +- ...dies-poisons.html => maladies-poisons.hbs} | 19 +- templates/actor/non-haut-revant.hbs | 10 +- templates/actor/oeuvre.hbs | 9 + templates/actor/oeuvre.html | 14 -- templates/actor/{oeuvres.html => oeuvres.hbs} | 10 +- templates/actor/possessions.hbs | 19 ++ templates/actor/possessions.html | 24 --- templates/actor/resonances.hbs | 2 + templates/actor/{taches.html => taches.hbs} | 9 +- templates/item/potion-sheet.hbs | 4 +- 60 files changed, 560 insertions(+), 601 deletions(-) create mode 100644 module/item/item-actions.js create mode 100644 templates/actor/alchimie.hbs delete mode 100644 templates/actor/alchimie.html rename templates/actor/{chirurgie.html => chirurgie.hbs} (71%) rename templates/actor/{commerce-inventaire.html => commerce-inventaire.hbs} (100%) rename templates/actor/{comp-creature.html => comp-creature.hbs} (81%) rename templates/actor/{comp-possession.html => comp-possession.hbs} (57%) rename templates/actor/{competence.html => competence.hbs} (85%) rename templates/actor/{dragon-queue.html => dragon-queue.hbs} (61%) rename templates/actor/{dragon-souffles.html => dragon-souffles.hbs} (62%) rename templates/actor/{dragon-tetes.html => dragon-tetes.hbs} (62%) rename templates/actor/{hr-meditations.html => hr-meditations.hbs} (61%) rename templates/actor/{hr-rencontres.html => hr-rencontres.hbs} (84%) rename templates/actor/{hr-signes-draconiques.html => hr-signes-draconiques.hbs} (79%) rename templates/actor/{hr-sorts-reserve.html => hr-sorts-reserve.hbs} (69%) rename templates/actor/{hr-sorts.html => hr-sorts.hbs} (67%) rename templates/actor/{inventaire-monnaie.html => inventaire-monnaie.hbs} (79%) create mode 100644 templates/actor/item-action-controls.hbs rename templates/actor/{maladies-poisons.html => maladies-poisons.hbs} (50%) create mode 100644 templates/actor/oeuvre.hbs delete mode 100644 templates/actor/oeuvre.html rename templates/actor/{oeuvres.html => oeuvres.hbs} (61%) create mode 100644 templates/actor/possessions.hbs delete mode 100644 templates/actor/possessions.html rename templates/actor/{taches.html => taches.hbs} (60%) diff --git a/module/actor-sheet.js b/module/actor-sheet.js index 10273649..dfc00f87 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -185,22 +185,19 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { await blessure?.setSoinsBlessure({ soinscomplets: { bonus: Number(event.currentTarget.value) } }) }); - // Equip Inventory Item - this.html.find('.item-equip').click(async event => this.actor.equiperObjet(RdDSheetUtility.getItemId(event))) this.html.find('.roll-chance-actuelle').click(async event => this.actor.rollCarac('chance-actuelle')) - this.html.find('.button-appel-chance').click(async event => this.actor.rollAppelChance()) this.html.find('[name="jet-astrologie"]').click(async event => this.actor.astrologieNombresAstraux()) - this.html.find('.tache-label a').click(async event => this.actor.rollTache(RdDSheetUtility.getItemId(event))) + this.html.find('.action-tache').click(async event => this.actor.rollTache(RdDSheetUtility.getItemId(event))) this.html.find('.meditation-label a').click(async event => this.actor.rollMeditation(RdDSheetUtility.getItemId(event))) - this.html.find('.chant-label a').click(async event => this.actor.rollChant(RdDSheetUtility.getItemId(event))) - this.html.find('.danse-label a').click(async event => this.actor.rollDanse(RdDSheetUtility.getItemId(event))) - this.html.find('.musique-label a').click(async event => this.actor.rollMusique(RdDSheetUtility.getItemId(event))) - this.html.find('.oeuvre-label a').click(async event => this.actor.rollOeuvre(RdDSheetUtility.getItemId(event))) - this.html.find('.jeu-label a').click(async event => this.actor.rollJeu(RdDSheetUtility.getItemId(event))) - this.html.find('.recettecuisine-label a').click(async event => this.actor.rollRecetteCuisine(RdDSheetUtility.getItemId(event))) + this.html.find('.action-chant').click(async event => this.actor.rollChant(RdDSheetUtility.getItemId(event))) + this.html.find('.action-danse').click(async event => this.actor.rollDanse(RdDSheetUtility.getItemId(event))) + this.html.find('.action-musique').click(async event => this.actor.rollMusique(RdDSheetUtility.getItemId(event))) + this.html.find('.action-oeuvre').click(async event => this.actor.rollOeuvre(RdDSheetUtility.getItemId(event))) + this.html.find('.action-jeu').click(async event => this.actor.rollJeu(RdDSheetUtility.getItemId(event))) + this.html.find('.action-recettecuisine').click(async event => this.actor.rollRecetteCuisine(RdDSheetUtility.getItemId(event))) this.html.find('.description-aleatoire').click(async event => new AppPersonnageAleatoire(this.actor).render(true)) if (game.user.isGM) { @@ -218,13 +215,12 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { // Boutons spéciaux MJs this.html.find('.forcer-tmr-aleatoire').click(async event => this.actor.reinsertionAleatoire("Action MJ")) this.html.find('.don-de-haut-reve').click(async event => this.actor.addDonDeHautReve()) - this.html.find('.sortreserve-add').click(async event => this.actor.addSortReserve(RdDSheetUtility.getItemId(event))) this.html.find('.afficher-tmr').click(async event => this.actor.changeTMRVisible()) } // Points de reve actuel this.html.find('.roll-reve-actuel').click(async event => this.actor.rollCarac('reve-actuel', {resistance:true})) - this.html.find('.empoignade-label a').click(async event => RdDEmpoignade.onAttaqueEmpoignadeFromItem(RdDSheetUtility.getItem(event, this.actor))) + this.html.find('.action-empoignade').click(async event => RdDEmpoignade.onAttaqueEmpoignadeFromItem(RdDSheetUtility.getItem(event, this.actor))) this.html.find('.roll-arme').click(async event => this.actor.rollArme(foundry.utils.duplicate(this._getEventArmeCombat(event)), 'competence')) @@ -328,7 +324,7 @@ export class RdDActorSheet extends RdDBaseActorSangSheet { /* -------------------------------------------- */ async selectTypeOeuvreToCreate() { let types = RdDItem.getTypesOeuvres(); - let content = `Selectionnez le type d'oeuvre`; for (let typeName of types) { content += `` } diff --git a/module/actor.js b/module/actor.js index a21e2410..ffa65fbc 100644 --- a/module/actor.js +++ b/module/actor.js @@ -167,8 +167,7 @@ export class RdDActor extends RdDBaseActorSang { /* -------------------------------------------- */ async $perteRevePotionsEnchantees() { - const potionUpdates = this.itemTypes[ITEM_TYPES.potion].map( - it.perteRevePotion()) + const potionUpdates = this.itemTypes[ITEM_TYPES.potion].map(it => it.perteRevePotion()) .filter(it => it != undefined) if (potionUpdates.length > 0) { console.log('perte rêve de potions', potionUpdates) @@ -987,13 +986,10 @@ export class RdDActor extends RdDBaseActorSang { } } - async addSortReserve(itemId) { - if (itemId) { - const item = this.items.get(itemId) - if (item.type == ITEM_TYPES.sort && !item.system.isrituel) { - this.$createSortReserve(item) - return - } + async addSortReserve(item) { + if (item?.type == ITEM_TYPES.sort && !item.system.isrituel) { + this.$createSortReserve(item) + return } const selectSortReserve = { title: "Créer un sort en réserve", @@ -1197,49 +1193,8 @@ export class RdDActor extends RdDBaseActorSang { new RdDRollDialogEthylisme(html, rollData, this, r => this.saouler(r.forceAlcool)).render(true); } - async actionPrincipale(item, onActionItem = async () => { }) { - let result = await super.actionPrincipale(item, onActionItem) - if (!result){ - result = await this.actionNourritureboisson(item) - } - if (!result){ - result = await this.itemActionPrincipale(item) - } - await onActionItem() - return result - } - - 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({ - title: "Nourriture brute", - 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) } - } - }); - return utilisation.render(true); - } - case 'pret': - return await this.mangerNourriture(item); - } - return undefined; - } - - async mangerNourriture(item) { - return (await DialogConsommer.create(this, item)).render(true); + async mangerNourriture(item, onActionItem) { + return (await DialogConsommer.create(this, item, onActionItem)).render(true); } async actionLire(item) { @@ -2569,8 +2524,7 @@ export class RdDActor extends RdDBaseActorSang { } /* -------------------------------------------- */ - async equiperObjet(itemID) { - let item = this.getEmbeddedDocument('Item', itemID); + async equiperObjet(item) { if (item?.isEquipable()) { const isEquipe = !item.system.equipe; await item.update({ "system.equipe": isEquipe }); @@ -2833,59 +2787,6 @@ 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; @@ -2947,22 +2848,77 @@ export class RdDActor extends RdDBaseActorSang { } /* -------------------------------------------- */ - async consommerPotionGenerique(potion) { - potion.alias = this.name; + 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 }); - if (potion.system.magique) { + 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) { // Gestion de la résistance: - potion.rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8); - if (potion.rolled.isEchec) { + potionData.rolled = await RdDResolutionTable.roll(this.getReveActuel(), -8); + if (potionData.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`, potion) + content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-consommer-potion-generique.html`, potionData) }); } + /* -------------------------------------------- */ + 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/actor/base-actor-sheet.js b/module/actor/base-actor-sheet.js index 6e99e08c..b7a2be14 100644 --- a/module/actor/base-actor-sheet.js +++ b/module/actor/base-actor-sheet.js @@ -7,6 +7,7 @@ import { ITEM_TYPES } from "../constants.js"; import { RdDItem } from "../item.js"; import { RdDItemCompetenceCreature } from "../item-competencecreature.js"; import { RdDTextEditor } from "../apps/rdd-text-roll-editor.js"; +import { ItemAction } from "../item/item-actions.js"; /* -------------------------------------------- */ /** @@ -84,39 +85,32 @@ export class RdDBaseActorSheet extends ActorSheet { super.activateListeners(html); this.html = html; - this.html.find('.conteneur-name a').click(async event => { - RdDUtility.toggleAfficheContenu(this.getItemId(event)); - this.render(true); - }); - this.html.find('.actor-montrer').click(async event => this.actor.postActorToChat()); + this.html.find('.actionItem').click(event => ItemAction.onActionItem(event, this.actor, this.options)) this.html.find('.item-edit').click(async event => this.itemActionEdit(event)) - this.html.find('.item-montrer').click(async event => this.getItem(event)?.postItemToChat()); + this.html.find('.conteneur-name a').click(async event => { + RdDUtility.toggleAfficheContenu(this.getItemId(event)) + this.render(true) + }) + + this.html.find('.actor-montrer').click(async event => this.actor.postActorToChat()); this.html.find('.recherche') .each((index, field) => { this._rechercheSelectArea(field); }) .keyup(async event => this._rechercherKeyup(event)) - .change(async event => this._rechercherKeyup(event)); - this.html.find('.recherche').prop("disabled", false); + .change(async event => this._rechercherKeyup(event)) + + this.html.find('.recherche').prop("disabled", false) // Everything below here is only needed if the sheet is editable if (!this.options.editable) return; - 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('.item-split').click(async event => { - const item = this.getItem(event); - RdDSheetUtility.splitItem(item, this.actor); - }); + this.html.find('.item-equip-armure').click(async event => this.actor.equiperObjet(this.getItem(event))) + this.html.find('.item-delete').click(async event => RdDUtility.confirmActorItemDelete(this.getItem(event), this.actor)); + this.html.find('.item-split').click(async event => RdDSheetUtility.splitItem(this.getItem(event), this.actor)) this.html.find('.item-quantite-plus').click(async event => this.actor.itemQuantiteIncDec(this.getItemId(event), 1)); this.html.find('.item-quantite-moins').click(async event => this.actor.itemQuantiteIncDec(this.getItemId(event), -1)); - this.html.find('.item-delete').click(async event => RdDUtility.confirmActorItemDelete(this, this.getItem(event))); - this.html.find('.item-vendre').click(async event => this.vendre(this.getItem(event))); this.html.find('.creer-un-objet').click(async event => { this.selectObjetTypeToCreate(); @@ -202,7 +196,7 @@ export class RdDBaseActorSheet extends ActorSheet { /* -------------------------------------------- */ async selectObjetTypeToCreate() { let types = this.getTypesInventaire().sort(Misc.ascending(type => Misc.typeName('Item', type))); - let content = `Selectionnez le type d'équipement`; for (let typeName of types) { content += `` } diff --git a/module/actor/base-actor.js b/module/actor/base-actor.js index 4d23aa22..2cdd2834 100644 --- a/module/actor/base-actor.js +++ b/module/actor/base-actor.js @@ -737,25 +737,20 @@ export class RdDBaseActor extends Actor { actionImpossible(action) { ui.notifications.info(`${this.getAlias()} ne peut pas faire cette action: ${action}`) - } async jetEthylisme() { this.actionImpossible("jet d'éthylisme") } async rollAppelChance() { this.actionImpossible("appel à la chance") } async jetDeMoral() { this.actionImpossible("jet de moral") } - async actionPrincipale(item, onActionItem = async () => { }) { - switch (item.type) { - case ITEM_TYPES.conteneur: return await item.sheet.render(true); - } - return undefined - } async resetItemUse() { } async incDecItemUse(itemId, inc = 1) { } getItemUse(itemId) { return 0; } + async finDeRound(options = { terminer: false }) { } isActorCombat() { return false } getCaracInit(competence) { return 0 } + listActionsCombat() { return [] } listActionsPossessions() { return this.itemTypes[ITEM_TYPES.possession] diff --git a/module/actor/commerce-sheet.js b/module/actor/commerce-sheet.js index 7a305195..ca617fec 100644 --- a/module/actor/commerce-sheet.js +++ b/module/actor/commerce-sheet.js @@ -45,6 +45,7 @@ export class RdDCommerceSheet extends RdDBaseActorSheet { super.activateListeners(html); this.html.find('a.item-acheter').click(async event => await this.vente(this.getItem(event))); + this.html.find('.service-acheter').click(async event => await this.vente(this.getItem(event))); if (!this.options.editable) return; diff --git a/module/item-sheet.js b/module/item-sheet.js index e88af8f0..4cfb3985 100644 --- a/module/item-sheet.js +++ b/module/item-sheet.js @@ -14,6 +14,7 @@ import { RdDItemCompetenceCreature } from "./item-competencecreature.js"; import { RdDItem } from "./item.js"; import { FLEUVE_COORD, TMRUtility } from "./tmr-utility.js"; import { RdDTextEditor } from "./apps/rdd-text-roll-editor.js"; +import { ItemAction } from "./item/item-actions.js"; /** * Extend the basic ItemSheet for RdD specific items @@ -199,13 +200,14 @@ export class RdDItemSheet extends ItemSheet { this.html.find('.chat-roll-text').click(async event => await RdDTextEditor.chatRollText(event)) if (this.actor) { - this.html.find('.consommer-potion').click(event => this.itemActionConsommer(event)) - this.html.find('.item-action').click(event => this.itemAction(event)) + // TODO + this.html.find('.actionItem').click(event => ItemAction.onActionItem(event, this.actor, this.options)) + + this.html.find('.item-potion-consommer').click(event => this.itemActionConsommer(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-delete').click(async event => this.itemActionDelete(event)); this.html.find('.item-quantite-plus').click(async event => { await this.actor.itemQuantiteIncDec(RdDSheetUtility.getItemId(event), 1) @@ -223,6 +225,11 @@ export class RdDItemSheet extends ItemSheet { RdDTimestamp.handleTimestampEditor(this.html, 'system.temporel.fin', updateItemTimestamp); } + itemActionDelete(event) { + const item = RdDSheetUtility.getItem(event, this.actor) + return RdDUtility.confirmActorItemDelete(item, this.actor) + } + async itemActionConsommer(event) { const item = RdDSheetUtility.getItem(event, this.actor) if (item) { @@ -239,14 +246,6 @@ export class RdDItemSheet extends ItemSheet { } } - async itemAction(event) { - const item = RdDSheetUtility.getItem(event, this.actor); - if (item) { - await item.actionPrincipale(this.actor) - await RdDSheetUtility.renderItemBranch(this.actor, 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 6b545694..c51fffe8 100644 --- a/module/item.js +++ b/module/item.js @@ -9,6 +9,7 @@ import { RdDRaretes } from "./item/raretes.js"; import { CATEGORIES_COMPETENCES } from "./item-competence.js"; import { CATEGORIES_COMPETENCES_CREATURES } from "./item-competencecreature.js"; import { BASE_CORPS_A_CORPS, BASE_ESQUIVE } from "./item/base-items.js"; +import { ITEM_ACTIONS, DEFAULT_ACTIONS, COMMON_ACTIONS } from "./item/item-actions.js"; const typesInventaireMateriel = [ ITEM_TYPES.arme, @@ -45,41 +46,41 @@ densité 3.5 (~2.3 à 4, parfois plus) -- https://www.juwelo.fr/guide-des-pierre */ export const defaultItemImg = { - competence: "systems/foundryvtt-reve-de-dragon/icons/competence_defaut.webp", - competencecreature: "systems/foundryvtt-reve-de-dragon/icons/competence_defaut.webp", arme: "systems/foundryvtt-reve-de-dragon/icons/armes_armures/epee_gnome.webp", armure: "systems/foundryvtt-reve-de-dragon/icons/armes_armures/armure_plaques.webp", - conteneur: "systems/foundryvtt-reve-de-dragon/icons/objets/sac_a_dos.webp", - sort: "systems/foundryvtt-reve-de-dragon/icons/competence_oniros.webp", - herbe: "systems/foundryvtt-reve-de-dragon/icons/botanique/Endorlotte.webp", - faune: "systems/foundryvtt-reve-de-dragon/icons/faune/rongeur.webp", - ingredient: "systems/foundryvtt-reve-de-dragon/icons/objets/sable_poudre.webp", - livre: "systems/foundryvtt-reve-de-dragon/icons/objets/livre.webp", - potion: "systems/foundryvtt-reve-de-dragon/icons/objets/liqueur_de_bagdol.webp", - rencontre: "systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp", - queue: "systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp", - ombre: "systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp", - souffle: "systems/foundryvtt-reve-de-dragon/icons/souffle_dragon.webp", - tete: "systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp", - meditation: "systems/foundryvtt-reve-de-dragon/icons/meditations_ecrits/meditation_alchimie.webp", - recettealchimique: "systems/foundryvtt-reve-de-dragon/icons/competence_alchimie.webp", chant: "systems/foundryvtt-reve-de-dragon/icons/arts/chant_0.webp", + competence: "systems/foundryvtt-reve-de-dragon/icons/competence_defaut.webp", + competencecreature: "systems/foundryvtt-reve-de-dragon/icons/competence_defaut.webp", + conteneur: "systems/foundryvtt-reve-de-dragon/icons/objets/sac_a_dos.webp", danse: "systems/foundryvtt-reve-de-dragon/icons/arts/danse_0.webp", + empoignade: "systems/foundryvtt-reve-de-dragon/icons/empoignade.webp", + extraitpoetique: "systems/foundryvtt-reve-de-dragon/icons/competence_ecriture.webp", + faune: "systems/foundryvtt-reve-de-dragon/icons/faune/rongeur.webp", + gemme: "systems/foundryvtt-reve-de-dragon/icons/gemmes/almaze.webp", + herbe: "systems/foundryvtt-reve-de-dragon/icons/botanique/Endorlotte.webp", + ingredient: "systems/foundryvtt-reve-de-dragon/icons/objets/sable_poudre.webp", jeu: "systems/foundryvtt-reve-de-dragon/icons/arts/jeux_petasse.webp", - recettecuisine: "systems/foundryvtt-reve-de-dragon/icons/arts/recette_cuisine_1.webp", - musique: "systems/foundryvtt-reve-de-dragon/icons/arts/chant_0.webp", + livre: "systems/foundryvtt-reve-de-dragon/icons/objets/livre.webp", maladie: "systems/foundryvtt-reve-de-dragon/icons/maladies_venins/maladie.webp", - poison: "systems/foundryvtt-reve-de-dragon/icons/maladies_venins/venin.webp", - oeuvre: "systems/foundryvtt-reve-de-dragon/icons/competence_comedie.webp", + meditation: "systems/foundryvtt-reve-de-dragon/icons/meditations_ecrits/meditation_alchimie.webp", + musique: "systems/foundryvtt-reve-de-dragon/icons/arts/chant_0.webp", nourritureboisson: "systems/foundryvtt-reve-de-dragon/icons/objets/provision_crue.webp", + oeuvre: "systems/foundryvtt-reve-de-dragon/icons/competence_comedie.webp", + ombre: "systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp", + poison: "systems/foundryvtt-reve-de-dragon/icons/maladies_venins/venin.webp", + possession: "systems/foundryvtt-reve-de-dragon/icons/entites/possession2.webp", + potion: "systems/foundryvtt-reve-de-dragon/icons/objets/liqueur_de_bagdol.webp", + queue: "systems/foundryvtt-reve-de-dragon/icons/queue_dragon.webp", + recettealchimique: "systems/foundryvtt-reve-de-dragon/icons/competence_alchimie.webp", + recettecuisine: "systems/foundryvtt-reve-de-dragon/icons/arts/recette_cuisine_1.webp", + rencontre: "systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp", service: "systems/foundryvtt-reve-de-dragon/icons/services/lit.webp", signedraconique: "systems/foundryvtt-reve-de-dragon/icons/tmr/signe_draconique.webp", - gemme: "systems/foundryvtt-reve-de-dragon/icons/gemmes/almaze.webp", - possession: "systems/foundryvtt-reve-de-dragon/icons/entites/possession2.webp", + sort: "systems/foundryvtt-reve-de-dragon/icons/competence_oniros.webp", sortreserve: "systems/foundryvtt-reve-de-dragon/icons/competence_oniros.webp", - extraitpoetique: "systems/foundryvtt-reve-de-dragon/icons/competence_ecriture.webp", + souffle: "systems/foundryvtt-reve-de-dragon/icons/souffle_dragon.webp", tarot: "systems/foundryvtt-reve-de-dragon/icons/tarots/dos-tarot.webp", - empoignade: "systems/foundryvtt-reve-de-dragon/icons/competence_corps_a_corps.webp" + tete: "systems/foundryvtt-reve-de-dragon/icons/tete_dragon.webp", } /* -------------------------------------------- */ @@ -409,54 +410,51 @@ export class RdDItem extends Item { // appliquer le pourcentage return this.parent.calculerPrix(this); } - return this.system.cout; + return this.system.cout } prepareDerivedData() { super.prepareDerivedData(); if (this.isInventaire()) { - this.system.encTotal = this.getEncTotal(); - this.system.actionPrincipale = this.getActionPrincipale({ warnIfNot: false }); + this.system.encTotal = this.getEncTotal() } - this.equipable = this.isEquipable(); + this.equipable = this.isEquipable() } - getActionPrincipale(options = { warnIfNot: true }) { + itemActions() { + return COMMON_ACTIONS.concat(this.itemSpecificActions()).concat(DEFAULT_ACTIONS) + } + + itemSpecificActions() { + const actions = ITEM_ACTIONS[this.type] ?? [] + // const actorTypes = actions.actorTypes ?? [ACTOR_TYPES.personnage] + // if (!actorTypes.includes(this.actor?.type)) { + // return [] + // } + return actions + } + + isActionAllowed(code) { switch (this.type) { - case ITEM_TYPES.conteneur: return 'Ouvrir'; - } - if (this.actor?.isPersonnage()) { - const warn = options.warnIfNot; - if (this.getUtilisationCuisine() == 'brut') { - return 'Cuisiner'; - } - switch (this.type) { - case ITEM_TYPES.nourritureboisson: return this._actionOrWarnQuantiteZero(this.system.boisson ? 'Boire' : 'Manger', warn); - case ITEM_TYPES.potion: return this._actionOrWarnQuantiteZero('Consommer', warn); - case ITEM_TYPES.livre: return this._actionOrWarnQuantiteZero('Lire', warn); - case ITEM_TYPES.herbe: return this.isHerbeAPotion() ? this._actionOrWarnQuantiteZero('Décoction', warn) : undefined; - case ITEM_TYPES.queue: case ITEM_TYPES.ombre: return this.system.refoulement > 0 ? 'Refouler' : undefined; - } - } - return undefined - } - - /* -------------------------------------------- */ - async actionPrincipale(actor, onActionItem = async () => { }) { - if (!this.getActionPrincipale()) { return } - await actor?.actionPrincipale(this, onActionItem); - } - - _actionOrWarnQuantiteZero(actionName, warn) { - if ((this.system.quantite ?? 0) <= 0) { - if (warn) { - ui.notifications.warn(`Vous n'avez plus de ${this.name}.`); - } - return undefined; - } - else { - return actionName; + case ITEM_TYPES.possession: + case ITEM_TYPES.empoignade: + case ITEM_TYPES.rencontre: + case ITEM_TYPES.signedraconique: + switch (code) { + case 'item-edit': + case 'item-delete': + return game.user.isGM + } + case ITEM_TYPES.maladie: + case ITEM_TYPES.poison: + return game.user.isGM + case ITEM_TYPES.casetmr: + switch (code) { + case 'item-delete': + return game.user.isGM + } } + return true } async diminuerQuantite(nombre, options = { diminuerQuantite: true, supprimerSiZero: false }) { diff --git a/module/item/item-actions.js b/module/item/item-actions.js new file mode 100644 index 00000000..74e17268 --- /dev/null +++ b/module/item/item-actions.js @@ -0,0 +1,154 @@ +import { Misc } from "../misc.js" +import { RdDSheetUtility } from "../rdd-sheet-utility.js" +import { RdDUtility } from "../rdd-utility.js" + + + +/** + * TODO: + * options.editable ? + * + */ +const _SPACEHOLDER = { placeholder: true } + +const _VENDRE = { + code: 'item-vendre', label: 'Vendre ou donner', icon: it => 'fa-solid fa-comments-dollar', + filter: it => Misc.toInt(it.system.quantite) > 0, + optionsFilter: options => options.editable, + action: (item, actor) => item.proposerVente() +} +const _ACHAT_SERVICE = { + code: 'item-service-acheter', label: 'Acheter', icon: it => 'fa-regular fa-coins', + //filter: it => Misc.toInt(it.system.quantite) > 0, + //optionsFilter: options => options.editable, + //action: (item, actor) => item.proposerVente() +} +const _MONTRER = { + code: 'item-montrer', label: 'Montrer', icon: it => 'fa-solid fa-comment', + action: (item, actor) => item.postItemToChat() +} +const _EDIT = { + code: 'item-edit', label: 'Editer', icon: it => 'fa-solid fa-edit', + action: (item, actor) => item.sheet.render(true) +} +const _DELETE = { + code: 'item-delete', label: 'Supprimer', icon: it => 'fa-solid fa-trash', + optionsFilter: options => options.editable && options.isOwner, + action: (item, actor) => RdDUtility.confirmActorItemDelete(item, actor) +} +const _EQUIPER = { + code: 'item-equip', label: 'Equiper', icon: it => it.system.equipe ? 'fa-solid fa-hand-rock' : 'fa-regular fa-hand-paper', + filter: it => !it.estContenu && it.isEquipable(), + action: (item, actor) => actor.equiperObjet(item) +} + +const _CUISINER = { + code: 'item-cuisiner', label: 'Cuisiner', icon: it => 'fa-solid fa-utensils', + filter: it => it.getUtilisation() == 'cuisine' && it.system.sust > 0, + optionsFilter: options => options.editable, + action: (item, actor) => actor.preparerNourriture(item) +} +const _MANGER_CRU = { + code: 'item-manger-cru', label: 'Manger cru', icon: it => 'fa-solid fa-drumstick-bite', + filter: it => it.getUtilisation() == 'cuisine' && it.system.sust > 0, + optionsFilter: options => options.editable, + action: (item, actor) => actor.mangerNourriture(item) +} +const _MANGER = { + code: 'item-manger', label: 'Manger', icon: it => 'fa-solid fa-utensils', + filter: it => !(it.system.boisson), + optionsFilter: options => options.editable, + action: (item, actor) => actor.mangerNourriture(item) +} +const _BOIRE = { + code: 'item-boire', label: 'Boire', icon: it => 'fa-solid fa-glass-water', + filter: it => it.system.boisson, + optionsFilter: options => options.editable, + action: (item, actor) => actor.mangerNourriture(item) +} +const _DECOCTION = { + code: 'item-decoction', label: 'Décoction', icon: it => 'fa-solid fa-flask-vial', + optionsFilter: options => options.editable, + action: (item, actor) => actor.actionHerbe(item) +} +const _OUVRIR = { + code: 'item-edit', label: 'Ouvrir', icon: it => 'fa-solid fa-eye', + action: (item, actor) => item.sheet.render(true) +} + +const _LIRE = { + code: 'item-lire', label: 'Lire', icon: it => 'fa-solid fa-book-open', + optionsFilter: options => options.editable, + action: (item, actor) => actor.actionLire(item) +} + +const _REFOULER = { + code: 'item-refouler', label: 'Refouler', icon: it => 'fa-solid fa-burst', + filter: it => it.system.refoulement > 0, + optionsFilter: options => options.editable, + action: (item, actor) => actor.actionRefoulement(item) +} + +const _CONSOMMER_POTION = { + code: 'item-potion-consommer', label: 'Consommer', icon: it => 'fa-solid fa-vial', + optionsFilter: options => options.editable, + action: (item, actor) => actor.consommerPotion(item) +} + +const _ENCHANTER = { + code: 'item-enchanter', label: 'Enchanter', icon: it => 'fa-solid fa-sparkles', + filter: it => it.isEnchantable(), + optionsFilter: options => options.editable, + action: (item, actor) => item.enchanterPotion() +} + +const _SORT_RESERVE = { + code: 'item-sortreserve-add', label: 'Ajouter en réserve', icon: it => 'fa-solid fa-sparkles', + filter: it => game.user.isGM && !it.system.isrituel, + action: (item, actor) => actor.addSortReserve(item) +} + +export const COMMON_ACTIONS = [_EQUIPER] +export const DEFAULT_ACTIONS = [_SPACEHOLDER, _VENDRE, _MONTRER, _EDIT, _DELETE] + +export const ITEM_ACTIONS = { + faune: [_CUISINER, _MANGER_CRU], + ingredient: [_CUISINER, _MANGER_CRU], + conteneur: [_OUVRIR], + herbe: [_DECOCTION, _CUISINER, _MANGER_CRU], + livre: [_LIRE], + nourritureboisson: [_MANGER, _BOIRE], + ombre: [_REFOULER], + plante: [_CUISINER, _MANGER_CRU], + potion: [_CONSOMMER_POTION, _ENCHANTER], + queue: [_REFOULER], + sort: [_SORT_RESERVE], + service: [_ACHAT_SERVICE] +} + + +export class ItemAction { + + static applies(action, item, options) { + return action + && item.isActionAllowed(action.code) + && (!action.filter || action.filter(item)) + && (!action.optionsFilter || action.optionsFilter(options)) + } + + static icon(action, item) { + if (action && action.icon) { + return action.icon(item) + } + return undefined + } + + static onActionItem(event, actor, options) { + const item = RdDSheetUtility.getItem(event, actor) + const code = $(event.currentTarget).data('code') + const action = item.itemActions().find(it => it.code == code) + if (action && (!action.optionsFilter || action.optionsFilter(options))) { + action.action(item, actor) + } + } +} diff --git a/module/item/potion.js b/module/item/potion.js index 5110c151..f0af84d4 100644 --- a/module/item/potion.js +++ b/module/item/potion.js @@ -1,7 +1,8 @@ +import { ITEM_TYPES } from "../constants.js"; import { Grammar } from "../grammar.js"; import { RdDItem } from "../item.js"; import { SystemCompendiums } from "../settings/system-compendiums.js"; -import { RdDTimestamp } from "../time/rdd-timestamp.js"; +import { ITEM_ACTIONS } from "./item-actions.js"; import { DialogEnchanter } from "./potion/dialog-enchanter.js"; const POTION_MAGIQUE = ['AlchimieEnchante', 'ReposEnchante', 'SoinEnchante', 'AutreEnchante'] @@ -41,6 +42,10 @@ export class RdDItemPotion extends RdDItem { isEnchantable() { return POTION_ENCHANTABLE.includes(this.system.categorie) } isMagique() { return POTION_MAGIQUE.includes(this.system.categorie) } + itemSpecificActions() { + return ITEM_ACTIONS[ITEM_TYPES.potion] + } + getActions(options = { warnIfNot: true }) { const actionConsommer = this.prepareAction('Consommer', options.warnIfNot); if (this.isEnchantable()) { @@ -53,8 +58,7 @@ export class RdDItemPotion extends RdDItem { actionConsommer ] } - - + // TDOD: purifier? getUtilisation() { switch (this.system.categorie) { case 'Alchimie': case 'AlchimieEnchante': @@ -89,11 +93,11 @@ export class RdDItemPotion extends RdDItem { if (this.system.magique && !this.system.prpermanent && this.system.pr > 0) { const nouveauReve = Math.max(this.system.pr - 1, 0) return { - _id: it._id, + _id: this.id, name: this.name, img: this.img, 'system.pr': nouveauReve, - 'system.quantite': nouveauReve > 0 ? it.system.quantite : 0, + 'system.quantite': nouveauReve > 0 ? this.system.quantite : 0, 'system.magique': nouveauReve > 0 } } @@ -113,16 +117,16 @@ export class RdDItemPotion extends RdDItem { }) } else { - const updates = { + await this.update({ 'system.pr': enchanter.nouveaupr, 'system.purifie': enchanter.purifier, 'system.magique': true, 'system.categorie': this.categorieEnchantement().enchante, 'system.prpermanent': enchanter.prpermanent, 'system.prdate': RdDItemPotion.dateEnchantement() - } - this.update(updates) + }) } + this.sheet?.render(true) } calculPuissance() { return this.system.herbebonus * this.system.pr } @@ -134,7 +138,7 @@ export class RdDItemPotion extends RdDItem { } static dateEnchantement() { - return game.system.rdd.calendrier.getTimestamp().debutJournee() + return game.system.rdd.calendrier.getTimestamp().debutJournee().indexDate } static buildHerbesList(listeHerbes, max) { diff --git a/module/item/sheet-potion.js b/module/item/sheet-potion.js index c37a846f..d556c36e 100644 --- a/module/item/sheet-potion.js +++ b/module/item/sheet-potion.js @@ -43,7 +43,8 @@ export class RdDPotionItemSheet extends RdDItemInventaireSheet { activateListeners(html) { super.activateListeners(html); - this.html.find('.enchanter-potion').click((event) => this.potion.enchanterPotion()) + + this.html.find('.item-enchanter').click((event) => this.potion.enchanterPotion()) this.html.find('.date-enchantement').change((event) => { const jour = Number(this.html.find('input.date-enchantement[name="enchantement.jour"]').val()) diff --git a/module/rdd-empoignade.js b/module/rdd-empoignade.js index 51a155e9..cd49d881 100644 --- a/module/rdd-empoignade.js +++ b/module/rdd-empoignade.js @@ -428,7 +428,6 @@ export class RdDEmpoignade { return await Item.create({ name: "Empoignade en cours de " + attacker.name + ' sur ' + defender.name, type: 'empoignade', - img: "systems/foundryvtt-reve-de-dragon/icons/entites/possession2.webp", system: { description: "", empoignadeid: foundry.utils.randomID(16), compteempoigne: 0, empoigneurid: attacker.id, empoigneid: defender.id, ptsemp: 0, empoigneurname: attacker.name, empoignename: defender.name } }, { diff --git a/module/rdd-possession.js b/module/rdd-possession.js index cdcb5864..483a9603 100644 --- a/module/rdd-possession.js +++ b/module/rdd-possession.js @@ -174,7 +174,7 @@ export class RdDPossession { await RdDResolutionTable.displayRollData(rollData, rollData.attacker, 'chat-resultat-possession.html') if (rollData.possession.isPosseder || rollData.possession.isConjurer) { // conjuration - victime.deleteEmbeddedDocuments("Item", [rollData.possession._id]) + await victime.deleteEmbeddedDocuments("Item", [rollData.possession._id]) } } diff --git a/module/rdd-roll.js b/module/rdd-roll.js index 99b270da..6c88cd8e 100644 --- a/module/rdd-roll.js +++ b/module/rdd-roll.js @@ -137,7 +137,11 @@ export class RdDRoll extends Dialog { this.rollData.selectedCarac = this.rollData.carac[this.actor.mapCarac(this.rollData.competence.system.defaut_carac)] } if (this.rollData.selectedCarac) { - this.html.find("[name='carac']").val(RdDCarac.caracDetails(this.rollData.selectedCarac.label).code) + this.html.find("[name='carac']").val( + this.actor?.type == ACTOR_TYPES.personnage + ? RdDCarac.caracDetails(this.rollData.selectedCarac.label).code + : this.rollData.selectedCarac.label + ) } if (this.rollData.selectedSort) { this.setSelectedSort(this.rollData.selectedSort); diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js index e738c971..221fc278 100644 --- a/module/rdd-tmr-dialog.js +++ b/module/rdd-tmr-dialog.js @@ -241,7 +241,7 @@ export class RdDTMRDialog extends Dialog { this._getTokensRencontres().forEach(t => this._trackToken(t)) this._getTokensSortsReserve().forEach(t => this._trackToken(t)) } - + /* -------------------------------------------- */ updateTokens() { this._removeTokens(t => true); diff --git a/module/rdd-utility.js b/module/rdd-utility.js index c7aeeb6d..8c22cb41 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -24,6 +24,7 @@ import { RdDBaseActor } from "./actor/base-actor.js"; import { RdDCarac } from "./rdd-carac.js"; import { RdDTextEditor } from "./apps/rdd-text-roll-editor.js"; import { Monnaie } from "./item-monnaie.js"; +import { ItemAction } from "./item/item-actions.js"; /* -------------------------------------------- */ // This table starts at 0 -> niveau -10 @@ -116,6 +117,7 @@ export class RdDUtility { 'systems/foundryvtt-reve-de-dragon/templates/actor-entite-sheet.html', 'systems/foundryvtt-reve-de-dragon/templates/actor-vehicule-sheet.html', // sous-parties de feuilles de personnages + 'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs', 'systems/foundryvtt-reve-de-dragon/templates/actor/header-buttons.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/header-etat.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/header-compteurs.html', @@ -130,47 +132,46 @@ export class RdDUtility { 'systems/foundryvtt-reve-de-dragon/templates/actor/carac-derivee.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/carac-creature.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/carac-entitee.html', - 'systems/foundryvtt-reve-de-dragon/templates/actor/comp-creature.html', - 'systems/foundryvtt-reve-de-dragon/templates/actor/comp-possession.html', + 'systems/foundryvtt-reve-de-dragon/templates/actor/comp-creature.hbs', + 'systems/foundryvtt-reve-de-dragon/templates/actor/comp-possession.hbs', 'systems/foundryvtt-reve-de-dragon/templates/actor/carac-total.html', - 'systems/foundryvtt-reve-de-dragon/templates/actor/competence.html', + 'systems/foundryvtt-reve-de-dragon/templates/actor/competence.hbs', 'systems/foundryvtt-reve-de-dragon/templates/actor/competence-categorie.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/xp-competences.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/combat.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/blessures.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/blessure.hbs', - 'systems/foundryvtt-reve-de-dragon/templates/actor/maladies-poisons.html', - 'systems/foundryvtt-reve-de-dragon/templates/actor/possessions.html', + 'systems/foundryvtt-reve-de-dragon/templates/actor/maladies-poisons.hbs', + 'systems/foundryvtt-reve-de-dragon/templates/actor/possessions.hbs', 'systems/foundryvtt-reve-de-dragon/templates/actor/resonances.hbs', - 'systems/foundryvtt-reve-de-dragon/templates/actor/taches.html', - 'systems/foundryvtt-reve-de-dragon/templates/actor/taches.html', - 'systems/foundryvtt-reve-de-dragon/templates/actor/oeuvres.html', - 'systems/foundryvtt-reve-de-dragon/templates/actor/oeuvre.html', + 'systems/foundryvtt-reve-de-dragon/templates/actor/taches.hbs', + 'systems/foundryvtt-reve-de-dragon/templates/actor/oeuvres.hbs', + 'systems/foundryvtt-reve-de-dragon/templates/actor/oeuvre.hbs', 'systems/foundryvtt-reve-de-dragon/templates/actor/jeus.hbs', - 'systems/foundryvtt-reve-de-dragon/templates/actor/alchimie.html', + 'systems/foundryvtt-reve-de-dragon/templates/actor/alchimie.hbs', 'systems/foundryvtt-reve-de-dragon/templates/actor/astrologie.html', - 'systems/foundryvtt-reve-de-dragon/templates/actor/chirurgie.html', + 'systems/foundryvtt-reve-de-dragon/templates/actor/chirurgie.hbs', 'systems/foundryvtt-reve-de-dragon/templates/actor/non-haut-revant.hbs', 'systems/foundryvtt-reve-de-dragon/templates/actor/haut-revant.hbs', 'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-queues.html', - 'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-queue.html', - 'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-souffles.html', - 'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-tetes.html', - 'systems/foundryvtt-reve-de-dragon/templates/actor/hr-signes-draconiques.html', - 'systems/foundryvtt-reve-de-dragon/templates/actor/hr-rencontres.html', - 'systems/foundryvtt-reve-de-dragon/templates/actor/hr-sorts.html', - 'systems/foundryvtt-reve-de-dragon/templates/actor/hr-sorts-reserve.html', - 'systems/foundryvtt-reve-de-dragon/templates/actor/hr-meditations.html', + 'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-queue.hbs', + 'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-souffles.hbs', + 'systems/foundryvtt-reve-de-dragon/templates/actor/dragon-tetes.hbs', + 'systems/foundryvtt-reve-de-dragon/templates/actor/hr-signes-draconiques.hbs', + 'systems/foundryvtt-reve-de-dragon/templates/actor/hr-rencontres.hbs', + 'systems/foundryvtt-reve-de-dragon/templates/actor/hr-sorts.hbs', + 'systems/foundryvtt-reve-de-dragon/templates/actor/hr-sorts-reserve.hbs', + 'systems/foundryvtt-reve-de-dragon/templates/actor/hr-meditations.hbs', 'systems/foundryvtt-reve-de-dragon/templates/actor/hr-casetmrs.hbs', 'systems/foundryvtt-reve-de-dragon/templates/actor/xp-journal.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/editor-notes-mj.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/inventaire.html', 'systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-item.hbs', - "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-monnaie.html", + "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-monnaie.hbs", 'systems/foundryvtt-reve-de-dragon/templates/actor/liens-animaux.hbs', 'systems/foundryvtt-reve-de-dragon/templates/actor/liens-suivants.hbs', 'systems/foundryvtt-reve-de-dragon/templates/actor/liens-vehicules.hbs', - 'systems/foundryvtt-reve-de-dragon/templates/actor/commerce-inventaire.html', + 'systems/foundryvtt-reve-de-dragon/templates/actor/commerce-inventaire.hbs', 'systems/foundryvtt-reve-de-dragon/templates/actor/commerce-inventaire-item.hbs', //Items 'systems/foundryvtt-reve-de-dragon/templates/scripts/autocomplete-script.hbs', @@ -336,6 +337,8 @@ export class RdDUtility { Handlebars.registerHelper('isFieldInventaireModifiable', (type, field) => RdDItem.isFieldInventaireModifiable(type, field)); // Items Handlebars.registerHelper('rarete-getChamp', (rarete, field) => RdDRaretes.getChamp(rarete, field)); + Handlebars.registerHelper('item-action-applies', (action, item, options) => ItemAction.applies(action, item, options)) + Handlebars.registerHelper('item-action-icon', (action, item) => ItemAction.icon(action, item)) // TMRs Handlebars.registerHelper('caseTmr-label', coord => TMRUtility.getTMRLabel(coord)); @@ -469,6 +472,7 @@ export class RdDUtility { static filterItemsPerTypeForSheet(formData, itemTypes) { Object.values(ITEM_TYPES).forEach(t => { formData[t + 's'] = Misc.arrayOrEmpty(itemTypes[t]) + itemTypes[t].forEach(item => item.actions = item.itemActions()) }) formData.maladiesPoisons = formData.maladies.concat(formData.poisons) @@ -898,7 +902,7 @@ export class RdDUtility { } /* -------------------------------------------- */ - static async confirmActorItemDelete(sheet, item, htmlToDelete) { + static async confirmActorItemDelete(item, actor) { const itemId = item.id; const confirmationSuppression = { settingConfirmer: "confirmation-supprimer-" + item.getItemGroup(), @@ -907,8 +911,7 @@ export class RdDUtility { buttonLabel: "Supprimer", onAction: () => { console.log('Delete : ', itemId); - sheet.actor.deleteEmbeddedDocuments('Item', [itemId], { renderSheet: false }); - RdDUtility.slideOnDelete(sheet, htmlToDelete); + actor.deleteEmbeddedDocuments('Item', [itemId], { renderSheet: false }); } }; if (item.isConteneurNonVide()) { @@ -921,8 +924,7 @@ export class RdDUtility { label: "Supprimer conteneur et contenu", callback: () => { console.log("Delete : ", itemId); - sheet.actor.deleteAllConteneur(itemId, { renderSheet: false }); - RdDUtility.slideOnDelete(sheet, htmlToDelete); + actor.deleteAllConteneur(itemId, { renderSheet: false }); } } }); diff --git a/module/time/rdd-timestamp.js b/module/time/rdd-timestamp.js index 6e010cff..bdf4107a 100644 --- a/module/time/rdd-timestamp.js +++ b/module/time/rdd-timestamp.js @@ -335,9 +335,7 @@ export class RdDTimestamp { } debutJournee() { - return RdDTimestamp.timestamp(this.timestamp.annee, - this.timestamp.mois, - this.timestamp.jour) + return RdDTimestamp.timestamp(this.annee, this.mois, this.jour) } async appliquerDuree(duree, actor) { diff --git a/styles/simple.css b/styles/simple.css index fa3020a9..38d4d89d 100644 --- a/styles/simple.css +++ b/styles/simple.css @@ -67,7 +67,8 @@ /* =================== 3. some constants ============ */ --color-controls:rgba(0, 0, 0, 0.9); - --color-controls-hover:rgba(255, 255, 128, 0.7); + --color-controls-light:hsla(0, 0%, 20%, 0.8); + --color-controls-hover:hsla(60, 100%, 75%, 0.7); --color-control-border-hover:rgba(255, 128, 0, 0.8); --color-gold: rgba(191, 149, 63, 0.8); --gradient-gold: linear-gradient(30deg, rgba(191, 149, 63, 0.3), rgba(252, 246, 186, 0.3), rgba(179, 135, 40, 0.3), rgba(251, 245, 183, 0.3), rgba(170, 119, 28, 0.3)); @@ -391,9 +392,7 @@ table {border: 1px solid #7a7971;} grid-template-columns: repeat(12, minmax(0, 1fr)); } -.flex-group-center, -.flex-group-left, -.flex-group-right { +.flex-group-center { -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; @@ -405,8 +404,11 @@ table {border: 1px solid #7a7971;} } .flex-group-left { + -webkit-box-align: start; -webkit-box-pack: start; + -ms-flex-align: start; -ms-flex-pack: start; + align-items: start; justify-content: flex-start; text-align: left; } @@ -417,8 +419,11 @@ table {border: 1px solid #7a7971;} } .flex-group-right { + -webkit-box-align: end; -webkit-box-pack: end; + -ms-flex-align: end; -ms-flex-pack: end; + align-items: end; justify-content: flex-end; text-align: right; } @@ -440,9 +445,9 @@ table {border: 1px solid #7a7971;} } .flex-shrink { flex: 'flex-shrink' ; - flex-shrink: 2; + flex-shrink: 0; } -:is(.flex-grow, .flex-grow-3) { +.flex-grow, .flex-grow-3 { flex-grow: 3; } .flex-grow-2 { @@ -493,12 +498,13 @@ span.equipement-detail-buttons { justify-content: center; text-align: center; } +.item-actions-controls, .equipement-actions { margin: 0; flex-grow: 2; - align-items: center; - justify-content: center; - text-align: left; + align-items: end; + justify-content: flex-end; + text-align: right; } .blessure-control { @@ -813,16 +819,21 @@ input:is(.blessure-premiers_soins, .blessure-soins_complets) { margin: 0; } -.competence-list .item-controls { +.competence-list .item-controls, +.competence-list .item-actions-controls { display: contents !important; } +.competence-list .item-actions-controls.hidden-controls, .competence-list .item-controls.hidden-controls { display: none !important; } + +.item-actions-controls a.actionItem i:is(.fas, .fa, .fa-solid, .fa-regular), .item-controls i:is(.fas, .fa, .fa-solid, .fa-regular) { font-size: 0.8em; - color: var(--color-controls); + color: var(--color-controls-light); } +.item-actions-controls a.actionItem i:is(.fas, .fa, .fa-solid, .fa-regular):hover, .item-controls i:is(.fas, .far, .fa-solid, .fa-regular):hover { opacity: 0.6; } @@ -1088,25 +1099,29 @@ li label.compteur { padding: 0.25rem; } -.window-app.sheet .window-content .carac-value, .window-app.sheet .window-content .competence-xp { +.window-app.sheet .window-content .carac-value, +.window-app.sheet .window-content .competence-xp { flex-grow: 0; margin: 0.05rem; flex-basis: 2rem; text-align: center; } -.window-app.sheet .window-content .carac-value, .window-app.sheet .window-content .competence-value { +.window-app.sheet .window-content .carac-value, +.window-app.sheet .window-content .competence-value { flex-grow: 0; margin: 0.05rem; flex-basis: 2rem; text-align: center; } -.window-app.sheet .window-content .carac-value, .window-app.sheet .window-content .competence-archetype { +.window-app.sheet .window-content .carac-value, +.window-app.sheet .window-content .competence-archetype { flex-grow: 0; margin: 0.05rem; flex-basis: 2rem; text-align: center; } -.window-app.sheet .window-content .carac-value, .window-app.sheet .window-content .competence-xp-sort { +.window-app.sheet .window-content .carac-value, +.window-app.sheet .window-content .competence-xp-sort { flex-grow: 0; margin: 0.05rem; flex-basis: 2rem; @@ -1196,6 +1211,9 @@ ul.chat-list li:nth-child(odd) { .item-controls i.fas.allouer-stress.level-up { color: var(--color-gold); } +.item-action-controls i.fa-solid.allouer-stress.level-up { + color: var(--color-gold); +} .blessures-list ul { display: flex; } @@ -1312,21 +1330,11 @@ div.competence-column div.categorie-competence{ font-weight: bold; flex-grow: 0; } -.arme-label, -.generic-label, -.competence-label, .astrologie-label, -.tache-label, +.generic-label, .subacteur-label, -.chant-label, -.musique-label, -.oeuvre-label, -.chant-label, -.danse-label, -.recette-label, -.jeu-label, -.recettecuisine-label, -.description-label { +.list-item-label, +.list-title-label { flex-grow: 2; } .attribut-value, diff --git a/templates/actor-creature-sheet.html b/templates/actor-creature-sheet.html index 5ac324ed..83d39de4 100644 --- a/templates/actor-creature-sheet.html +++ b/templates/actor-creature-sheet.html @@ -53,7 +53,7 @@
- {{>"systems/foundryvtt-reve-de-dragon/templates/actor/comp-creature.html"}} + {{>"systems/foundryvtt-reve-de-dragon/templates/actor/comp-creature.hbs"}}
@@ -62,7 +62,7 @@ {{!-- Equipment Tab --}}
- {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-monnaie.html"}} + {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-monnaie.hbs"}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire.html"}}
diff --git a/templates/actor-entite-sheet.html b/templates/actor-entite-sheet.html index 89de5e74..68ea2b48 100644 --- a/templates/actor-entite-sheet.html +++ b/templates/actor-entite-sheet.html @@ -40,8 +40,8 @@
- {{>"systems/foundryvtt-reve-de-dragon/templates/actor/comp-creature.html"}} - {{>"systems/foundryvtt-reve-de-dragon/templates/actor/comp-possession.html"}} + {{>"systems/foundryvtt-reve-de-dragon/templates/actor/comp-creature.hbs"}} + {{>"systems/foundryvtt-reve-de-dragon/templates/actor/comp-possession.hbs"}}
{{>"systems/foundryvtt-reve-de-dragon/templates/actor/resonances.hbs"}} diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html index d6f4d61b..ee639d95 100644 --- a/templates/actor-sheet.html +++ b/templates/actor-sheet.html @@ -111,19 +111,19 @@
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/combat.html"}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/blessures.html"}} - {{> "systems/foundryvtt-reve-de-dragon/templates/actor/maladies-poisons.html"}} - {{> "systems/foundryvtt-reve-de-dragon/templates/actor/possessions.html"}} + {{> "systems/foundryvtt-reve-de-dragon/templates/actor/maladies-poisons.hbs"}} + {{> "systems/foundryvtt-reve-de-dragon/templates/actor/possessions.hbs"}}
{{/if}} {{#if options.isObserver}}{{!-- Connaissances Tab --}}
{{> "systems/foundryvtt-reve-de-dragon/templates/actor/astrologie.html"}} - {{> "systems/foundryvtt-reve-de-dragon/templates/actor/taches.html"}} - {{> "systems/foundryvtt-reve-de-dragon/templates/actor/chirurgie.html"}} - {{> "systems/foundryvtt-reve-de-dragon/templates/actor/oeuvres.html"}} + {{> "systems/foundryvtt-reve-de-dragon/templates/actor/taches.hbs"}} + {{> "systems/foundryvtt-reve-de-dragon/templates/actor/chirurgie.hbs"}} + {{> "systems/foundryvtt-reve-de-dragon/templates/actor/oeuvres.hbs"}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor/jeus.hbs"}} - {{> "systems/foundryvtt-reve-de-dragon/templates/actor/alchimie.html"}} + {{> "systems/foundryvtt-reve-de-dragon/templates/actor/alchimie.hbs"}}
{{/if}} {{#if options.isObserver}}{{!-- hautreve Tab --}} @@ -143,7 +143,7 @@ {{!-- Equipment Tab --}}
- {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-monnaie.html"}} + {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-monnaie.hbs"}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire.html"}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor/liens-animaux.hbs"}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor/liens-vehicules.hbs"}} diff --git a/templates/actor-vehicule-sheet.html b/templates/actor-vehicule-sheet.html index 709ce3ae..8c8b4a2f 100644 --- a/templates/actor-vehicule-sheet.html +++ b/templates/actor-vehicule-sheet.html @@ -91,7 +91,7 @@ {{!-- Equipment Tab --}}
- {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-monnaie.html"}} + {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-monnaie.hbs"}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire.html"}}
diff --git a/templates/actor/alchimie.hbs b/templates/actor/alchimie.hbs new file mode 100644 index 00000000..e15f58f3 --- /dev/null +++ b/templates/actor/alchimie.hbs @@ -0,0 +1,11 @@ +{{#if recettealchimiques.length}} +

Recettes Alchimiques

+
    + {{#each (trier recettealchimiques) as |recette id|}} +
  • + {{recette.name}} + {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=recette options=@root.options}} +
  • + {{/each}} +
+{{/if}} \ No newline at end of file diff --git a/templates/actor/alchimie.html b/templates/actor/alchimie.html deleted file mode 100644 index 2b0f5826..00000000 --- a/templates/actor/alchimie.html +++ /dev/null @@ -1,15 +0,0 @@ -{{#if recettealchimiques.length}} -

Recettes Alchimiques

-
    - {{#each (trier recettealchimiques) as |recette id|}} -
  • {{recette.name}} -
    - - -   - -
    -
  • - {{/each}} -
-{{/if}} \ No newline at end of file diff --git a/templates/actor/armures.hbs b/templates/actor/armures.hbs index 78edda87..cab6b93a 100644 --- a/templates/actor/armures.hbs +++ b/templates/actor/armures.hbs @@ -3,7 +3,7 @@
  • - {{#if armure.system.equipe}}{{else}}{{/if}} + {{#if armure.system.equipe}}{{else}}{{/if}} {{armure.name}} {{#if armure.system.malus}} ({{armure.system.malus}}) diff --git a/templates/actor/blessure.hbs b/templates/actor/blessure.hbs index ef6ec483..095258d2 100644 --- a/templates/actor/blessure.hbs +++ b/templates/actor/blessure.hbs @@ -33,10 +33,5 @@ {{#if system.origine}}Par {{system.origine}}{{/if}} {{#if system.localisation}}{{system.localisation}}{{/if}} - - - -   - - + {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=this options=@root.options}}
  • diff --git a/templates/actor/chirurgie.html b/templates/actor/chirurgie.hbs similarity index 71% rename from templates/actor/chirurgie.html rename to templates/actor/chirurgie.hbs index 4c9aba22..80efe8cf 100644 --- a/templates/actor/chirurgie.html +++ b/templates/actor/chirurgie.hbs @@ -10,14 +10,9 @@
  • - {{tache.name}} + {{tache.name}} ({{tache.system.points_de_tache_courant}}/{{tache.system.points_de_tache}}) -
    - - -   - -
    + {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=tache options=@root.options}}
  • {{/if}} {{/each}} diff --git a/templates/actor/combat.html b/templates/actor/combat.html index 8179a27b..a7765cbd 100644 --- a/templates/actor/combat.html +++ b/templates/actor/combat.html @@ -1,10 +1,10 @@

    - {{> "systems/foundryvtt-reve-de-dragon/templates/actor/commerce-inventaire.html"}} + {{> "systems/foundryvtt-reve-de-dragon/templates/actor/commerce-inventaire.hbs"}} {{#unless system.illimite}} {{#if @root.options.isObserver}}
    - {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-monnaie.html"}} + {{> "systems/foundryvtt-reve-de-dragon/templates/actor/inventaire-monnaie.hbs"}} {{/if}} {{/unless}} - {{!-- -
    -
    -
      -
    • - - - - - -
    • - {{#each (trier system.services) as |service key|}} -
    • - - - - -
      - - {{#unless @root.disabled}} - - - {{/unless}} -
      -
    • - {{/each}} -
    -
    - --}}
    {{> "systems/foundryvtt-reve-de-dragon/templates/actor/editor-notes-mj.html"}}
    diff --git a/templates/actor/commerce-inventaire-item.hbs b/templates/actor/commerce-inventaire-item.hbs index b6548b1c..7cf0f09d 100644 --- a/templates/actor/commerce-inventaire-item.hbs +++ b/templates/actor/commerce-inventaire-item.hbs @@ -39,23 +39,7 @@ {{/if}} /> {{/unless}} - - {{#if options.isOwner}} - - {{#unless (and (eq item.type 'conteneur') (not vide))}} - - {{#if (or item.parent.system.illimite (ne item.system.quantite 0))}} - - {{/if}} - {{/unless}} - {{/if}} - {{#unless (and (eq item.type 'conteneur') (not vide))}} - {{#if (or item.parent.system.illimite (gt item.system.quantite 0))}} - - {{/if}} - - {{/unless}} - + {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=item options=@root.options}} {{/if}} {{/unless}} \ No newline at end of file diff --git a/templates/actor/commerce-inventaire.html b/templates/actor/commerce-inventaire.hbs similarity index 100% rename from templates/actor/commerce-inventaire.html rename to templates/actor/commerce-inventaire.hbs diff --git a/templates/actor/comp-creature.html b/templates/actor/comp-creature.hbs similarity index 81% rename from templates/actor/comp-creature.html rename to templates/actor/comp-creature.hbs index c22297f8..2baf2420 100644 --- a/templates/actor/comp-creature.html +++ b/templates/actor/comp-creature.hbs @@ -4,7 +4,7 @@
      {{#each (trier competences) as |comp key|}}
    • - + {{comp.name}} @@ -23,12 +23,7 @@ {{#unless @root.options.vueDetaillee}}disabled{{/unless}} {{else}}disabled{{/if}} /> - {{#if @root.options.vueDetaillee}} -
      - - -
      - {{/if}} + {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=comp options=@root.options}}
    • {{/each}}
    diff --git a/templates/actor/comp-possession.html b/templates/actor/comp-possession.hbs similarity index 57% rename from templates/actor/comp-possession.html rename to templates/actor/comp-possession.hbs index c82d584a..8d726d77 100644 --- a/templates/actor/comp-possession.html +++ b/templates/actor/comp-possession.hbs @@ -4,11 +4,8 @@ {{#each possessions as |possession key|}}
  • - {{possession.name}} -
    - - -
    + {{possession.name}} + {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=possession options=@root.options}}
  • {{/each}} diff --git a/templates/actor/competence-categorie.html b/templates/actor/competence-categorie.html index 8c1e8122..626731b7 100644 --- a/templates/actor/competence-categorie.html +++ b/templates/actor/competence-categorie.html @@ -14,17 +14,17 @@ sort {{/if}}
    - + Arch. - + {{#if @root.options.isGM}} - + {{/if}}
    {{/if}} {{#each competences as |comp key|}} - {{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence.html" comp}} + {{> "systems/foundryvtt-reve-de-dragon/templates/actor/competence.hbs" comp}} {{/each}}
  • diff --git a/templates/actor/competence.html b/templates/actor/competence.hbs similarity index 85% rename from templates/actor/competence.html rename to templates/actor/competence.hbs index fb1624de..1f82426b 100644 --- a/templates/actor/competence.html +++ b/templates/actor/competence.hbs @@ -1,7 +1,7 @@ {{#unless system.isHidden}}
  • - + {{name}} @@ -46,13 +46,8 @@ - - {{#if @root.options.isGM}} - - {{/if}} -   -
  • + {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=this options=@root.options}} {{/if}} {{/unless}} \ No newline at end of file diff --git a/templates/actor/dragon-queue.html b/templates/actor/dragon-queue.hbs similarity index 61% rename from templates/actor/dragon-queue.html rename to templates/actor/dragon-queue.hbs index 5e2664a9..0d6212e5 100644 --- a/templates/actor/dragon-queue.html +++ b/templates/actor/dragon-queue.hbs @@ -7,11 +7,5 @@ {{/if}} {{queue.name}} -
    - - - {{#if queue.system.refoulement}} - Refouler - {{/if}} -
    + {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=queue options=@root.options}} diff --git a/templates/actor/dragon-queues.html b/templates/actor/dragon-queues.html index c04ef0ff..e2b565b4 100644 --- a/templates/actor/dragon-queues.html +++ b/templates/actor/dragon-queues.html @@ -6,10 +6,10 @@ {{/if}} diff --git a/templates/actor/dragon-souffles.html b/templates/actor/dragon-souffles.hbs similarity index 62% rename from templates/actor/dragon-souffles.html rename to templates/actor/dragon-souffles.hbs index c5839a73..165589b5 100644 --- a/templates/actor/dragon-souffles.html +++ b/templates/actor/dragon-souffles.hbs @@ -5,10 +5,7 @@
  • {{souffle.name}} -
    - - -
    + {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=souffle options=@root.options}}
  • {{/each}} diff --git a/templates/actor/dragon-tetes.html b/templates/actor/dragon-tetes.hbs similarity index 62% rename from templates/actor/dragon-tetes.html rename to templates/actor/dragon-tetes.hbs index f05c8f10..672ab156 100644 --- a/templates/actor/dragon-tetes.html +++ b/templates/actor/dragon-tetes.hbs @@ -5,10 +5,7 @@
  • {{tete.name}} -
    - - -
    + {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=tete options=@root.options}}
  • {{/each}} diff --git a/templates/actor/haut-revant.hbs b/templates/actor/haut-revant.hbs index 0932a2f3..340ed9c4 100644 --- a/templates/actor/haut-revant.hbs +++ b/templates/actor/haut-revant.hbs @@ -10,7 +10,7 @@ {{/if}}
  • - Demi rêve : + Demi rêve : {{#if options.isGM}} {{caseTmr-label system.reve.tmrpos.coord}} @@ -28,9 +28,9 @@
  • {{> "systems/foundryvtt-reve-de-dragon/templates/actor/non-haut-revant.hbs"}}
    -{{> "systems/foundryvtt-reve-de-dragon/templates/actor/hr-signes-draconiques.html"}} -{{> "systems/foundryvtt-reve-de-dragon/templates/actor/hr-rencontres.html"}} -{{> "systems/foundryvtt-reve-de-dragon/templates/actor/hr-sorts.html"}} -{{> "systems/foundryvtt-reve-de-dragon/templates/actor/hr-sorts-reserve.html"}} -{{> "systems/foundryvtt-reve-de-dragon/templates/actor/hr-meditations.html"}} +{{> "systems/foundryvtt-reve-de-dragon/templates/actor/hr-signes-draconiques.hbs"}} +{{> "systems/foundryvtt-reve-de-dragon/templates/actor/hr-rencontres.hbs"}} +{{> "systems/foundryvtt-reve-de-dragon/templates/actor/hr-sorts.hbs"}} +{{> "systems/foundryvtt-reve-de-dragon/templates/actor/hr-sorts-reserve.hbs"}} +{{> "systems/foundryvtt-reve-de-dragon/templates/actor/hr-meditations.hbs"}} {{> "systems/foundryvtt-reve-de-dragon/templates/actor/hr-casetmrs.hbs"}} diff --git a/templates/actor/hr-casetmrs.hbs b/templates/actor/hr-casetmrs.hbs index 9a292f1d..8d558ebf 100644 --- a/templates/actor/hr-casetmrs.hbs +++ b/templates/actor/hr-casetmrs.hbs @@ -6,11 +6,7 @@ {{casetmr.name}} {{casetmr.system.coord}} - {{caseTmr-label casetmr.system.coord}} -
    - -   - -
    + {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=casetmr options=@root.options}} {{/each}} diff --git a/templates/actor/hr-meditations.html b/templates/actor/hr-meditations.hbs similarity index 61% rename from templates/actor/hr-meditations.html rename to templates/actor/hr-meditations.hbs index af9dc52e..dae569de 100644 --- a/templates/actor/hr-meditations.html +++ b/templates/actor/hr-meditations.hbs @@ -5,12 +5,7 @@
  • {{meditation.name}} - {{meditation.system.competence}} -
    - - -   - -
    + {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=meditation options=@root.options}}
  • {{/each}} diff --git a/templates/actor/hr-rencontres.html b/templates/actor/hr-rencontres.hbs similarity index 84% rename from templates/actor/hr-rencontres.html rename to templates/actor/hr-rencontres.hbs index d049c815..fc649a33 100644 --- a/templates/actor/hr-rencontres.html +++ b/templates/actor/hr-rencontres.hbs @@ -10,9 +10,7 @@ {{#if rencontre.system.date}} {{upperFirst rencontre.system.heure}}, le {{rencontre.system.date}} {{/if}} -
    - -
    + {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=rencontre options=@root.options}} {{/each}} diff --git a/templates/actor/hr-signes-draconiques.html b/templates/actor/hr-signes-draconiques.hbs similarity index 79% rename from templates/actor/hr-signes-draconiques.html rename to templates/actor/hr-signes-draconiques.hbs index 16afeb28..1a190bd6 100644 --- a/templates/actor/hr-signes-draconiques.html +++ b/templates/actor/hr-signes-draconiques.hbs @@ -6,9 +6,7 @@ {{signe.name}} {{signe.system.difficulte}} -
    - -
    + {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=signe options=@root.options}} {{/each}} diff --git a/templates/actor/hr-sorts-reserve.html b/templates/actor/hr-sorts-reserve.hbs similarity index 69% rename from templates/actor/hr-sorts-reserve.html rename to templates/actor/hr-sorts-reserve.hbs index 1e338dea..b048be51 100644 --- a/templates/actor/hr-sorts-reserve.html +++ b/templates/actor/hr-sorts-reserve.hbs @@ -1,8 +1,5 @@ {{#if sortreserves.length}} -

    Sorts en Réserve{{#if options.isGM}} - -{{/if}} -

    +

    Sorts en Réserve

    diff --git a/templates/actor/hr-sorts.html b/templates/actor/hr-sorts.hbs similarity index 67% rename from templates/actor/hr-sorts.html rename to templates/actor/hr-sorts.hbs index 0f9d1c72..edde88da 100644 --- a/templates/actor/hr-sorts.html +++ b/templates/actor/hr-sorts.hbs @@ -15,16 +15,7 @@ {{#if sort.system.caseTMRspeciale}}{{sort.system.caseTMRspeciale}}{{else}}{{upperFirst sort.system.caseTMR}}{{/if}} R{{itemSort-spaceIfText sort.system.difficulte}} r{{itemSort-spaceIfText sort.system.ptreve}} -
    - - - - {{#if (and @root.options.isGM (not sort.system.isrituel))}} - - - - {{/if}} -
    + {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=sort options=@root.options}} {{/each}} diff --git a/templates/actor/inventaire-item.hbs b/templates/actor/inventaire-item.hbs index f604d783..26137e2d 100644 --- a/templates/actor/inventaire-item.hbs +++ b/templates/actor/inventaire-item.hbs @@ -31,27 +31,6 @@ {{numberFormat item.system.encTotal decimals=2}} {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=item options=options}} - {{!-- - {{#if options.isOwner}} - {{#unless item.estContenu}} - {{#if item.equipable}} - {{#if item.system.equipe}}{{else}}{{/if}} - {{/if}} - {{/unless}} - - -   - {{#if (ne item.system.quantite 0)}} - - {{/if}} - {{/if}} - - {{#if options.isOwner}} - {{#if item.system.actionPrincipale}} - {{item.system.actionPrincipale}} - {{/if}} - {{/if}} - --}} {{/if}} {{/unless}} diff --git a/templates/actor/inventaire-monnaie.html b/templates/actor/inventaire-monnaie.hbs similarity index 79% rename from templates/actor/inventaire-monnaie.html rename to templates/actor/inventaire-monnaie.hbs index 6553cbb2..6421a15d 100644 --- a/templates/actor/inventaire-monnaie.html +++ b/templates/actor/inventaire-monnaie.hbs @@ -21,12 +21,9 @@ {{/if}} - - {{#if @root.options.isOwner}} - - - {{/if}} - + {{#if @root.options.isOwner}} + {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=signe options=@root.options}} + {{/if}} {{/each}} diff --git a/templates/actor/item-action-controls.hbs b/templates/actor/item-action-controls.hbs new file mode 100644 index 00000000..5027b35c --- /dev/null +++ b/templates/actor/item-action-controls.hbs @@ -0,0 +1,16 @@ + + {{#each item.actions as |action|}} + {{#if action.placeholder}} +   + {{/if}} + {{#if (item-action-applies action ../item ../options)}} + + {{#if (item-action-icon action ../item)}} + + {{else}} + {{action.label}} + {{/if}} + + {{/if}} + {{/each}} + diff --git a/templates/actor/jeus.hbs b/templates/actor/jeus.hbs index 2d790788..0baff5bd 100644 --- a/templates/actor/jeus.hbs +++ b/templates/actor/jeus.hbs @@ -3,13 +3,8 @@ diff --git a/templates/actor/liens-suivants.hbs b/templates/actor/liens-suivants.hbs index 919f702b..04ec2d58 100644 --- a/templates/actor/liens-suivants.hbs +++ b/templates/actor/liens-suivants.hbs @@ -3,20 +3,20 @@ {{#each subacteurs.suivants as |suivant id|}}
  • - + {{suivant.name}} {{#if suivant.ephemere}} {{else}} - + {{>'systems/foundryvtt-reve-de-dragon/templates/coeur/afficher-coeur.hbs' numero=1 courant=suivant.coeur prochain=suivant.prochainCoeur}} {{>'systems/foundryvtt-reve-de-dragon/templates/coeur/afficher-coeur.hbs' numero=2 courant=suivant.coeur prochain=suivant.prochainCoeur}} {{>'systems/foundryvtt-reve-de-dragon/templates/coeur/afficher-coeur.hbs' numero=3 courant=suivant.coeur prochain=suivant.prochainCoeur}} {{>'systems/foundryvtt-reve-de-dragon/templates/coeur/afficher-coeur.hbs' numero=4 courant=suivant.coeur prochain=suivant.prochainCoeur}} - + {{#if (gte suivant.coeur 1)}} Tendre moment {{/if}} diff --git a/templates/actor/maladies-poisons.html b/templates/actor/maladies-poisons.hbs similarity index 50% rename from templates/actor/maladies-poisons.html rename to templates/actor/maladies-poisons.hbs index a97fa240..6177c5e2 100644 --- a/templates/actor/maladies-poisons.html +++ b/templates/actor/maladies-poisons.hbs @@ -2,32 +2,29 @@

    Maladies & Poisons:

    • - Nom - Type - Remèdes - Edition + Nom + Type + Remèdes + Edition
    • {{#each maladiesPoisons as |maladie key|}}
    • - + {{#if (or @root.options.isGM maladie.system.identifie)}} {{maladie.name}} {{else}} Inconnue {{/if}} - {{maladie.type}} - + {{maladie.type}} + {{#if (or @root.options.isGM maladie.system.remedesconnus)}} {{maladie.system.remedes}} {{else}} Remèdes Inconnus {{/if}} -
      - - -
      + {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=maladie options=@root.options}}
    • {{/each}}
    diff --git a/templates/actor/non-haut-revant.hbs b/templates/actor/non-haut-revant.hbs index c91ed10b..ae1f9c54 100644 --- a/templates/actor/non-haut-revant.hbs +++ b/templates/actor/non-haut-revant.hbs @@ -8,7 +8,7 @@ pour rendre le personnage Haut-Rêvant.

    {{/if}}
  • - Seuil de Rêve : + Seuil de Rêve : {{#if options.isGM}} @@ -18,7 +18,7 @@
  • - Refoulement : + Refoulement : {{#if options.isGM}} @@ -29,7 +29,7 @@
  • {{#if system.reve.reve.thanatosused}}
  • - La prochaine queue est une Ombre + La prochaine queue est une Ombre @@ -37,5 +37,5 @@ {{/if}}
    {{> "systems/foundryvtt-reve-de-dragon/templates/actor/dragon-queues.html"}} -{{> "systems/foundryvtt-reve-de-dragon/templates/actor/dragon-souffles.html"}} -{{> "systems/foundryvtt-reve-de-dragon/templates/actor/dragon-tetes.html"}} +{{> "systems/foundryvtt-reve-de-dragon/templates/actor/dragon-souffles.hbs"}} +{{> "systems/foundryvtt-reve-de-dragon/templates/actor/dragon-tetes.hbs"}} diff --git a/templates/actor/oeuvre.hbs b/templates/actor/oeuvre.hbs new file mode 100644 index 00000000..daac7f6f --- /dev/null +++ b/templates/actor/oeuvre.hbs @@ -0,0 +1,9 @@ +
  • + + {{upperFirst typeOeuvre}} + + {{oeuvre.name}} (niveau {{oeuvre.system.niveau}}) + + {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=oeuvre options=@root.options}} +
  • + diff --git a/templates/actor/oeuvre.html b/templates/actor/oeuvre.html deleted file mode 100644 index 606bfe64..00000000 --- a/templates/actor/oeuvre.html +++ /dev/null @@ -1,14 +0,0 @@ -
  • - - {{upperFirst typeOeuvre}} - - {{oeuvre.name}} (niveau {{oeuvre.system.niveau}}) - -
    - - -   - -
    -
  • - diff --git a/templates/actor/oeuvres.html b/templates/actor/oeuvres.hbs similarity index 61% rename from templates/actor/oeuvres.html rename to templates/actor/oeuvres.hbs index e413334f..50cffcd1 100644 --- a/templates/actor/oeuvres.html +++ b/templates/actor/oeuvres.hbs @@ -1,18 +1,18 @@

    Oeuvres diverses

    Créer une oeuvre diff --git a/templates/actor/possessions.hbs b/templates/actor/possessions.hbs new file mode 100644 index 00000000..2d9ce67c --- /dev/null +++ b/templates/actor/possessions.hbs @@ -0,0 +1,19 @@ +{{#if possessions.length}} +{{!-- Possession --}} +

    Possession:

    + +{{/if}} diff --git a/templates/actor/possessions.html b/templates/actor/possessions.html deleted file mode 100644 index 31ab3da6..00000000 --- a/templates/actor/possessions.html +++ /dev/null @@ -1,24 +0,0 @@ -{{#if possessions.length}} -{{!-- Possession --}} -

    Possession:

    - -{{/if}} diff --git a/templates/actor/resonances.hbs b/templates/actor/resonances.hbs index a0dbdea6..1e1eb1fe 100644 --- a/templates/actor/resonances.hbs +++ b/templates/actor/resonances.hbs @@ -6,6 +6,8 @@
  • {{actor.name}} + + {{!-- {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=oeuvre options=@root.options}} --}}
    diff --git a/templates/actor/taches.html b/templates/actor/taches.hbs similarity index 60% rename from templates/actor/taches.html rename to templates/actor/taches.hbs index 7a8d54cb..cb88bc04 100644 --- a/templates/actor/taches.html +++ b/templates/actor/taches.hbs @@ -4,16 +4,11 @@ {{#unless (eq tache.system.competence 'Chirurgie')}}
  • - {{tache.name}} + {{tache.name}} ({{tache.system.points_de_tache_courant}}{{#if (or @root.options.isGM (not tache.system.cacher_points_de_tache)) }}/{{tache.system.points_de_tache}}{{/if}}) -
    - - -   - -
    + {{>'systems/foundryvtt-reve-de-dragon/templates/actor/item-action-controls.hbs' item=tache options=@root.options}}
  • {{/unless}} {{/each}} diff --git a/templates/item/potion-sheet.hbs b/templates/item/potion-sheet.hbs index ede90bbf..fe6429b0 100644 --- a/templates/item/potion-sheet.hbs +++ b/templates/item/potion-sheet.hbs @@ -5,10 +5,10 @@

    {{#if options.isOwned}} - Consommer + Consommer {{/if}} {{#if enchantable}} - Enchanter + Enchanter {{/if}}