From ebe19959fa6c5bc0d58155818e6b80aa4fe979c2 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Sun, 25 Sep 2022 17:51:57 +0200 Subject: [PATCH] Drop sur un objet met dans le conteneur parent MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Augmenter la zone pour lacher un objet: * si c'est un objet similaire, on regroupe * si c'est un conteneur: on met dans le conteneur * si c'est un objet dans un conteneur, on met dans le conteneur * si c'est un objet porté, on met dans les objets portés --- module/actor.js | 61 ++++++++++++------- module/item.js | 11 ++-- .../actor-sheet-inventaire-conteneur.html | 52 ---------------- templates/actor-sheet-inventaire-item.html | 24 +++----- templates/actor-sheet-inventaire-monnaie.html | 6 -- 5 files changed, 51 insertions(+), 103 deletions(-) delete mode 100644 templates/actor-sheet-inventaire-conteneur.html diff --git a/module/actor.js b/module/actor.js index 527f44c1..3084d0e9 100644 --- a/module/actor.js +++ b/module/actor.js @@ -1123,28 +1123,29 @@ export class RdDActor extends Actor { * de leurs ID */ async enleverDeConteneur(item, conteneur, onEnleverDeConteneur) { if (conteneur?.isConteneur()) { - let data2use = duplicate(conteneur); - let contenu = data2use.system.contenu; - let index = contenu.indexOf(item.id); - while (index >= 0) { // Force cleanup, itemId is unique - contenu.splice(index, 1); - index = contenu.indexOf(item.id); - } - item.system.estContenu = false; - await this.updateEmbeddedDocuments('Item', [data2use]); + item.estContenu = false; + await this.updateEmbeddedDocuments('Item', [{ + _id: conteneur.id, + 'system.contenu': conteneur.system.contenu.filter(id => id != item.id) + }]); onEnleverDeConteneur(); } } - + /* -------------------------------------------- */ /** Ajoute un item dans un conteneur, sur la base * de leurs ID */ async ajouterDansConteneur(item, conteneur, onAjouterDansConteneur) { - if (conteneur?.isConteneur()) { - let data2use = duplicate(conteneur); - data2use.system.contenu.push(item.id); - item.system.estContenu = true; - await this.updateEmbeddedDocuments('Item', [data2use]); + if (!conteneur) { + // TODO: afficher + item.estContenu = false; + } + else if (conteneur.isConteneur()) { + item.estContenu = true; + await this.updateEmbeddedDocuments('Item', [{ + _id: conteneur.id, + 'system.contenu': [...conteneur.system.contenu, item.id] + }]); onAjouterDansConteneur(item.id, conteneur.id); } } @@ -1182,23 +1183,39 @@ export class RdDActor extends Actor { if (item?.isEquipement() && sourceActorId == targetActorId) { // rangement if (srcId != destId && itemId != destId) { // déplacement de l'objet - const dest = this.getObjet(destId); const src = this.getObjet(srcId); - // changer de conteneur - if (this.conteneurPeutContenir(dest, item)) { - await this.enleverDeConteneur(item, src, params.onEnleverConteneur); - await this.ajouterDansConteneur(item, dest, params.onAjouterDansConteneur); - } - else if (dest?.isEquipementSimilaire(item)) { + const dest = this.getObjet(destId); + const cible = this.getContenantOrParent(dest); + const messageEquipementDifferent = item.messageEquipementDifferent(dest); + if (dest && !messageEquipementDifferent) { await this.regrouperEquipementsSimilaires(item, dest); result = false; } + // changer de conteneur + else if (!cible || this.conteneurPeutContenir(cible, item)) { + await this.enleverDeConteneur(item, src, params.onEnleverConteneur); + await this.ajouterDansConteneur(item, cible, params.onAjouterDansConteneur); + } + else { + ui.notifications.info(messageEquipementDifferent); + } } } await this.computeEncombrementTotalEtMalusArmure(); return result; } + getContenantOrParent(dest) { + if (!dest || dest.isConteneur()) { + return dest; + } + return this.getContenant(dest); + } + + getContenant(item) { + return this.itemTypes['conteneur'].find(it => it.system.contenu.includes(item.id)); + } + /* -------------------------------------------- */ conteneurPeutContenir(dest, item) { if (!dest) { diff --git a/module/item.js b/module/item.js index 7544d17d..88673ec4 100644 --- a/module/item.js +++ b/module/item.js @@ -198,8 +198,9 @@ export class RdDItem extends Item { /* -------------------------------------------- */ // détermine si deux équipements sont similaires: de même type, et avec les même champs hormis la quantité - isEquipementSimilaire(other) { - if (!this.isEquipement()) return false; + messageEquipementDifferent(other) { + if (!other || !this.isEquipement()) return undefined; + let message = undefined; if (this.type != other.type) { message = `Impossible de regrouper ${this.type} avec ${other.type}`; @@ -220,11 +221,7 @@ export class RdDItem extends Item { } } } - if (message){ - ui.notifications.info(message) - return false; - } - return true; + return message; } async proposerVente() { diff --git a/templates/actor-sheet-inventaire-conteneur.html b/templates/actor-sheet-inventaire-conteneur.html deleted file mode 100644 index 011e5f45..00000000 --- a/templates/actor-sheet-inventaire-conteneur.html +++ /dev/null @@ -1,52 +0,0 @@ -
  • - {{#if (eq item.type 'conteneur')}} - - {{#if vide}} - - {{else}} - - {{#if ouvert}} - - - {{else}} - - - {{/if}} - - {{/if}} - - - - - {{item.name}} - - - {{else}} - - {{item.name}} - {{/if}} - {{item.system.quantite}} - {{#if (gt item.system.quantite 1)}} - - {{/if}} - - {{numberFormat item.system.encTotal decimals=2}} -
    - {{#unless item.estContenu}} - {{#if (ne item.type 'conteneur')}} - {{#if item.system.equipe}}{{else}}{{/if}} - {{/if}} - {{/unless}} - - - {{#if (or (eq item.type 'arme') (eq item.type 'conteneur') item.system.quantite)}} -   - - {{/if}} - - {{#if item.system.actionPrincipale}} - {{item.system.actionPrincipale}} - {{/if}} -
    -
  • - diff --git a/templates/actor-sheet-inventaire-item.html b/templates/actor-sheet-inventaire-item.html index 74d14643..4b4010a2 100644 --- a/templates/actor-sheet-inventaire-item.html +++ b/templates/actor-sheet-inventaire-item.html @@ -1,24 +1,16 @@
  • {{#if (eq item.type 'conteneur')}} - {{#if vide}} - - {{else}} - - {{#if ouvert}} - - {{else}} - - {{/if}} - - {{/if}} - - - {{item.name}} - - {{else}} + + + {{/if}} {{item.name}} + {{#if (eq item.type 'conteneur')}} + {{/if}} {{item.system.quantite}} diff --git a/templates/actor-sheet-inventaire-monnaie.html b/templates/actor-sheet-inventaire-monnaie.html index dfccc8bd..31498b52 100644 --- a/templates/actor-sheet-inventaire-monnaie.html +++ b/templates/actor-sheet-inventaire-monnaie.html @@ -13,12 +13,6 @@ - -