From 0bae3e82a83f0173034343f09d254b1ae31e3f1a Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Thu, 1 Apr 2021 21:31:13 +0200 Subject: [PATCH] clean malusArmure/enc/prix --- module/actor-sheet.js | 2 +- module/actor.js | 71 ++++++++++++++++++++++--------------------- 2 files changed, 38 insertions(+), 35 deletions(-) diff --git a/module/actor-sheet.js b/module/actor-sheet.js index 0e6b2402..4113343e 100644 --- a/module/actor-sheet.js +++ b/module/actor-sheet.js @@ -95,7 +95,7 @@ export class RdDActorSheet extends ActorSheet { caracTotal: RdDCarac.computeTotal(formData.data.carac, formData.data.beaute), // Mise à jour de l'encombrement total et du prix de l'équipement encTotal: await this.actor.computeEncombrementTotalEtMalusArmure(), - prixTotalEquipement: await this.actor.computePrixTotalEquipement(), + prixTotalEquipement: this.actor.computePrixTotalEquipement(), surprise: RdDBonus.find(this.actor.getSurprise(false)).descr, fatigue: { malus: RdDUtility.calculMalusFatigue(formData.data.sante.fatigue.value, formData.data.sante.endurance.max), diff --git a/module/actor.js b/module/actor.js index 457134ea..c4fb17c4 100644 --- a/module/actor.js +++ b/module/actor.js @@ -89,7 +89,6 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ prepareData() { super.prepareData(); - const actorData = this.data; // Dynamic computing fields @@ -232,7 +231,7 @@ export class RdDActor extends Actor { return Math.floor(this.encTotal ?? 0); } getPrixTotalEquipement() { - return Math.floor(this.prixTotalEquipement ?? 0); + return Math.floor(Misc.templateData(this).prixTotalEquipement ?? 0); } getSurenc() { return Misc.toInt(Misc.templateData(this).compteurs.surenc?.value); @@ -948,57 +947,61 @@ export class RdDActor extends Actor { /* -------------------------------------------- */ detectSurEncombrement() { - let maxEnc = 0; - if (this.data.type == 'vehicule') - maxEnc = Misc.templateData(this).capacite_encombrement; - else - maxEnc = Misc.templateData(this).attributs.encombrement.value; - let diffEnc = Number(this.data.encTotal) - Number(maxEnc); - return Math.max(0, Math.ceil(diffEnc)); + return Math.max(0, Math.ceil(Number(this.data.encTotal) - this.getEncombrementMax())); + } + getEncombrementMax() { + return (this.data.type == 'vehicule') + ? Misc.templateData(this).capacite_encombrement + : Misc.templateData(this).attributs.encombrement.value; + } + } /* -------------------------------------------- */ async computeEncombrementTotalEtMalusArmure() { - let encTotal = 0; - let newMalusArmure = 0; - for (const itemData of this.filterItemsData(it => it.data.encombrement)) { - if (itemData.type == 'armure' && itemData.data.equipe) { // Armure équipée, intégration du malus armure total - newMalusArmure += itemData.data.malus; - } - // Calcul encombrement - if (itemData.data && itemData.data.encombrement != undefined) { - if (!Number(itemData.data.encombrement)) itemData.data.encombrement = 0; // Auto-fix - if (itemData.data.quantite == undefined) itemData.data.quantite = 1; // Auto-fix - if (itemData.data.quantite < 0) itemData.data.quantite = 0; // Auto-fix - itemData.data.encTotal = Number(itemData.data.encombrement) * Number(itemData.data.quantite); - encTotal += itemData.data.encTotal; - } else { - itemData.data.encTotal = 0; // Force default enc - } - } - // Mise à jour valeur totale et états - this.data.encTotal = encTotal; - this.detectSurEncombrement(); + await this.computeMalusArmure(); + return this.computeEncombrement(); + } + /* -------------------------------------------- */ + computeEncombrement() { + Misc.templateData(this).encTotal = this.filterItemsData(it => it.data.encombrement) + .map(it => this._calcEncItem(it)) + .reduce(Misc.sum(), 0); + return Misc.templateData(this).encTotal; + } + + _calcEncItem(it) { + it.data.encombrement = Number(it.data.encombrement ?? 0); + it.data.quantite = Math.min(1, Number(it.data.quantite ?? 1)); + it.data.encTotal = it.data.encombrement * it.data.quantite; + return it.data.encTotal; + } + + /* -------------------------------------------- */ + async computeMalusArmure() { + const newMalusArmure = this.filterItemsData(it => it.type == 'armure' && it.data.equipe) + .map(it => it.data.malus ?? 0) + .reduce(Misc.sum(), 0); // Mise à jour éventuelle du malus armure if (newMalusArmure && Misc.templateData(this).attributs?.malusarmure?.value != newMalusArmure) { await this.updateAttributeValue("malusarmure", newMalusArmure); } - return encTotal; + return newMalusArmure; } /* -------------------------------------------- */ - async computePrixTotalEquipement() { + computePrixTotalEquipement() { let prixTotalEquipement = 0; // prix total de l'équipement est la somme du cout de chaque équipement multiplié par sa quantité. for (const itemData of this.filterItemsData(it => it?.data.cout)) { - const cout = Math.min(Number(itemData.data.cout) ?? 0, 0); - const quantite = Math.min(Number(itemData.data.quantite) ?? 1, 1); + const cout = Math.min(Number(itemData.data.cout ?? 0), 0); + const quantite = Math.min(Number(itemData.data?.quantite ?? 1), 1); prixTotalEquipement += cout * quantite; } // Mise à jour valeur totale de l'équipement - this.prixTotalEquipement = prixTotalEquipement; + Misc.templateData(this).prixTotalEquipement = prixTotalEquipement; return prixTotalEquipement; }