diff --git a/module/actor.js b/module/actor.js index 77d31eac..873ed725 100644 --- a/module/actor.js +++ b/module/actor.js @@ -1143,6 +1143,7 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ computeEncombrement() { this.encTotal = this.filterItemsData(it => it.data.encombrement != undefined) + .filter(it => !it.estContenu) .map(it => it.data.encTotal) .reduce(Misc.sum(), 0); return this.encTotal; diff --git a/module/item.js b/module/item.js index 044ed59d..6f72cf3a 100644 --- a/module/item.js +++ b/module/item.js @@ -94,7 +94,7 @@ export class RdDItem extends Item { 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..e628228e 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,35 @@ 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); } } } + RdDUtility.calculEncObjets(objets); return objetVersConteneur; } - + + static calculEncObjets(objets) { + for (let objet of objets) { + objet.data.encTotal = RdDUtility.calculEnc(objet, objets); + } + } + + static calculEnc(objet, objets) { + const contenu = objet.data.contenu ?? []; + return contenu.map(id => objets.find(objet => (id == objet._id))) + .map(inside => RdDUtility.calculEnc(inside, objets)) + .reduce(Misc.sum(), Number(objet.data.encombrement ?? 0) * Number(objet.data.quantite ?? 1)); + } + // 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 +436,7 @@ export class RdDUtility { return ReglesOptionelles.isUsing("appliquer-fatigue") ? { malus: RdDUtility.calculMalusFatigue(fatigue, endurance), html: "