diff --git a/module/actor.js b/module/actor.js index 77d31eac..cdd90a49 100644 --- a/module/actor.js +++ b/module/actor.js @@ -1142,9 +1142,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ computeEncombrement() { - this.encTotal = this.filterItemsData(it => it.data.encombrement != undefined) - .map(it => it.data.encTotal) - .reduce(Misc.sum(), 0); + this.encTotal = this.items.map(it => it.getEncTotal()).reduce(Misc.sum(), 0); return this.encTotal; } diff --git a/module/item.js b/module/item.js index 044ed59d..21db5b80 100644 --- a/module/item.js +++ b/module/item.js @@ -88,13 +88,17 @@ export class RdDItem extends Item { return Misc.templateData(this).magique; } + getEncTotal() { + const itemData = Misc.data(this); + return Number(itemData.data.encombrement ?? 0) * Number(itemData.data.quantite ?? 1); + } getEnc() { const itemData = Misc.data(this); switch (itemData.type) { case 'herbe': return encBrin; } - return itemData.data.encombrement + return itemData.data.encombrement ?? 0; } prepareDerivedData() { diff --git a/module/rdd-utility.js b/module/rdd-utility.js index de4da058..44f5708a 100644 --- a/module/rdd-utility.js +++ b/module/rdd-utility.js @@ -177,7 +177,7 @@ export class RdDUtility { 'systems/foundryvtt-reve-de-dragon/templates/partial-roll-surenc.html', 'systems/foundryvtt-reve-de-dragon/templates/partial-roll-enctotal.html', 'systems/foundryvtt-reve-de-dragon/templates/partial-roll-moral.html', - 'systems/foundryvtt-reve-de-dragon/templates/partial-select-carac.html', + 'systems/foundryvtt-reve-de-dragon/templates/partial-select-carac.html', // Calendrier 'systems/foundryvtt-reve-de-dragon/templates/calendar-template.html', 'systems/foundryvtt-reve-de-dragon/templates/calendar-editor-template.html', @@ -339,28 +339,40 @@ export class RdDUtility { // Attribution des objets aux conteneurs for (let conteneur of conteneurs) { conteneur.subItems = []; - conteneur.data.encTotal = conteneur.data.encombrement; - //conteneur.data.encTotal = ; Deja calculé - if (conteneur.data.contenu) { - for (let id of conteneur.data.contenu) { - let objet = objets.find(objet => (id == objet._id)); - if (objet) { - if (!objet.data.encombrement) - objet.data.encombrement = 0; // Auto-fix - objet.estContenu = true; // Permet de filtrer ce qifui est porté dans le template - objetVersConteneur[id] = conteneur._id; - conteneur.data.encTotal += Number(objet.data.encombrement) * Number(((objet.data.quantite) ? objet.data.quantite : 1)); - conteneur.subItems.push(objet); - } + for (let id of conteneur.data.contenu ?? []) { + let objet = objets.find(objet => (id == objet._id)); + if (objet) { + objet.estContenu = true; // Permet de filtrer ce qui est porté dans le template + objetVersConteneur[id] = conteneur._id; + conteneur.subItems.push(objet); } } } + for (let conteneur of conteneurs) { + conteneur.data.encTotal = RdDUtility.calculEncContenu(conteneur, objets); + } return objetVersConteneur; } - + + static calculEncContenu(conteneur, objets) { + const itemData = Misc.data(conteneur); + const contenuDatas = (itemData.data.contenu ?? []).filter(id => id != undefined) + .map(id => Misc.data(objets.find(it => (id == it._id)))); + let enc = Number(itemData.data.encombrement ?? 0) * Number(itemData.data.quantite ?? 1); + for (let itemData of contenuDatas){ + if (itemData.type == 'conteneur') { + enc += RdDUtility.calculEncContenu(itemData, objets); + } + else{ + enc += Number(itemData.data.encombrement ?? 0) * Number(itemData.data.quantite ?? 1); + } + } + return enc; + } + // Construit la liste des conteneurs de niveau 1 (c'est à dire non contenu eux-même dans un conteneur) static conteneursRacine(conteneurs) { - return conteneurs.filter( (conteneur, index, arr) => !conteneur.estContenu); + return conteneurs.filter((conteneur, index, arr) => !conteneur.estContenu); } /* -------------------------------------------- */ @@ -429,7 +441,7 @@ export class RdDUtility { return ReglesOptionelles.isUsing("appliquer-fatigue") ? { malus: RdDUtility.calculMalusFatigue(fatigue, endurance), html: "