Draft: Fix calcul encTotal #473

Closed
vincent.vandeme wants to merge 1 commits from v1.4-fix-enc into v1.4
3 changed files with 34 additions and 26 deletions
Showing only changes of commit 37de279a65 - Show all commits

View File

@ -1143,6 +1143,7 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
computeEncombrement() { computeEncombrement() {
this.encTotal = this.filterItemsData(it => it.data.encombrement != undefined) this.encTotal = this.filterItemsData(it => it.data.encombrement != undefined)
.filter(it => !it.estContenu)
.map(it => it.data.encTotal) .map(it => it.data.encTotal)
.reduce(Misc.sum(), 0); .reduce(Misc.sum(), 0);
return this.encTotal; return this.encTotal;

View File

@ -94,7 +94,7 @@ export class RdDItem extends Item {
case 'herbe': case 'herbe':
return encBrin; return encBrin;
} }
return itemData.data.encombrement return itemData.data.encombrement ?? 0;
} }
prepareDerivedData() { prepareDerivedData() {

View File

@ -339,25 +339,32 @@ export class RdDUtility {
// Attribution des objets aux conteneurs // Attribution des objets aux conteneurs
for (let conteneur of conteneurs) { for (let conteneur of conteneurs) {
conteneur.subItems = []; conteneur.subItems = [];
conteneur.data.encTotal = conteneur.data.encombrement; for (let id of conteneur.data.contenu ?? []) {
//conteneur.data.encTotal = ; Deja calculé
if (conteneur.data.contenu) {
for (let id of conteneur.data.contenu) {
let objet = objets.find(objet => (id == objet._id)); let objet = objets.find(objet => (id == objet._id));
if (objet) { if (objet) {
if (!objet.data.encombrement) objet.estContenu = true; // Permet de filtrer ce qui est porté dans le template
objet.data.encombrement = 0; // Auto-fix
objet.estContenu = true; // Permet de filtrer ce qifui est porté dans le template
objetVersConteneur[id] = conteneur._id; objetVersConteneur[id] = conteneur._id;
conteneur.data.encTotal += Number(objet.data.encombrement) * Number(((objet.data.quantite) ? objet.data.quantite : 1));
conteneur.subItems.push(objet); conteneur.subItems.push(objet);
} }
} }
} }
} RdDUtility.calculEncObjets(objets);
return objetVersConteneur; 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) // Construit la liste des conteneurs de niveau 1 (c'est à dire non contenu eux-même dans un conteneur)
static conteneursRacine(conteneurs) { static conteneursRacine(conteneurs) {
return conteneurs.filter((conteneur, index, arr) => !conteneur.estContenu); return conteneurs.filter((conteneur, index, arr) => !conteneur.estContenu);