From a5311bf15ede1e53dea2a21bde04a2765ef60bb9 Mon Sep 17 00:00:00 2001 From: sladecraven Date: Fri, 29 Jan 2021 20:42:40 +0100 Subject: [PATCH] Controle recursif de l'encombrement lors de deplacement de contenants --- module/actor.js | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/module/actor.js b/module/actor.js index b310de20..60c57ca7 100644 --- a/module/actor.js +++ b/module/actor.js @@ -722,6 +722,25 @@ export class RdDActor extends Actor { return true; } + /* -------------------------------------------- */ + getRecursiveEnc( objet ) { + let sumEnc = 0; + if ( objet.type == 'conteneur') { + for (let id of objet.data.data.contenu) { + let subobjet = this.items.find(objet => (id == objet._id)); + if ( subobjet.type == 'conteneur') { + sumEnc += this.getRecursiveEnc( subobjet ); + } else { + sumEnc += Number(subobjet.data.data.encombrement) * Number(subobjet.data.data.quantite); + } + } + sumEnc += Number(objet.data.data.encombrement) + } else { + sumEnc += Number(objet.data.data.encombrement) * Number(objet.data.data.quantite); + } + return sumEnc; + } + /* -------------------------------------------- */ /** Teste si le conteneur de destination a suffisament de capacité * pour recevoir le nouvel objet @@ -731,14 +750,11 @@ export class RdDActor extends Actor { let conteneur = this.items.find(conteneur => conteneurId == conteneur._id); // recup conteneur //console.log("Conteneur trouvé : ", conteneur); if (conteneur && conteneur.type == "conteneur") { - let currentEnc = 0; // Calculer le total actuel des contenus - for (let id of conteneur.data.data.contenu) { - let objet = this.items.find(objet => (id == objet._id)); - currentEnc += (objet) ? objet.data.data.encombrement : 0; - } - // Et gérer le nouvel objet - let nouvelObjet = this.items.find(objet => (itemId == objet._id)); - if (nouvelObjet && currentEnc + nouvelObjet.data.data.encombrement > Number(conteneur.data.data.capacite)) { + let currentEnc = this.getRecursiveEnc( conteneur ); // Calculer le total actuel des contenus + let nouvelObjet = this.items.find(objet => (itemId == objet._id)); // On chope l'objet + let newEnc = (nouvelObjet) ? this.getRecursiveEnc( nouvelObjet ) : 0; // Calculer le total actuel du nouvel objet + //console.log( currentEnc, newEnc, conteneur.data.data.capacite, conteneur.name); + if (nouvelObjet && ( (currentEnc + newEnc) > Number(conteneur.data.data.capacite)) ) { ui.notifications.warn("Capacité d'encombrement insuffisante dans le conteneur !"); return false; }