Fix calcul encTotal

Autant le calculer depuis les objets eux-mêmes
This commit is contained in:
Vincent Vandemeulebrouck 2021-05-27 22:40:12 +02:00
parent 46642d31a9
commit 95bcc2e77c
3 changed files with 43 additions and 29 deletions

View File

@ -1142,9 +1142,7 @@ export class RdDActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
computeEncombrement() { computeEncombrement() {
this.encTotal = this.filterItemsData(it => it.data.encombrement != undefined) this.encTotal = this.items.map(it => it.getEncTotal()).reduce(Misc.sum(), 0);
.map(it => it.data.encTotal)
.reduce(Misc.sum(), 0);
return this.encTotal; return this.encTotal;
} }

View File

@ -88,13 +88,17 @@ export class RdDItem extends Item {
return Misc.templateData(this).magique; return Misc.templateData(this).magique;
} }
getEncTotal() {
const itemData = Misc.data(this);
return Number(itemData.data.encombrement ?? 0) * Number(itemData.data.quantite ?? 1);
}
getEnc() { getEnc() {
const itemData = Misc.data(this); const itemData = Misc.data(this);
switch (itemData.type) { switch (itemData.type) {
case 'herbe': case 'herbe':
return encBrin; return encBrin;
} }
return itemData.data.encombrement return itemData.data.encombrement ?? 0;
} }
prepareDerivedData() { prepareDerivedData() {

View File

@ -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-surenc.html',
'systems/foundryvtt-reve-de-dragon/templates/partial-roll-enctotal.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-roll-moral.html',
'systems/foundryvtt-reve-de-dragon/templates/partial-select-carac.html', 'systems/foundryvtt-reve-de-dragon/templates/partial-select-carac.html',
// Calendrier // Calendrier
'systems/foundryvtt-reve-de-dragon/templates/calendar-template.html', 'systems/foundryvtt-reve-de-dragon/templates/calendar-template.html',
'systems/foundryvtt-reve-de-dragon/templates/calendar-editor-template.html', 'systems/foundryvtt-reve-de-dragon/templates/calendar-editor-template.html',
@ -339,28 +339,40 @@ 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é let objet = objets.find(objet => (id == objet._id));
if (conteneur.data.contenu) { if (objet) {
for (let id of conteneur.data.contenu) { objet.estContenu = true; // Permet de filtrer ce qui est porté dans le template
let objet = objets.find(objet => (id == objet._id)); objetVersConteneur[id] = conteneur._id;
if (objet) { conteneur.subItems.push(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 conteneur of conteneurs) {
conteneur.data.encTotal = RdDUtility.calculEncContenu(conteneur, objets);
}
return objetVersConteneur; 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) // 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);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -429,7 +441,7 @@ export class RdDUtility {
return ReglesOptionelles.isUsing("appliquer-fatigue") ? { return ReglesOptionelles.isUsing("appliquer-fatigue") ? {
malus: RdDUtility.calculMalusFatigue(fatigue, endurance), malus: RdDUtility.calculMalusFatigue(fatigue, endurance),
html: "<table class='table-fatigue'>" + RdDUtility.makeHTMLfatigueMatrix(fatigue, endurance).html() + "</table>" html: "<table class='table-fatigue'>" + RdDUtility.makeHTMLfatigueMatrix(fatigue, endurance).html() + "</table>"
} : { malus:0, html:''}; } : { malus: 0, html: '' };
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -513,7 +525,7 @@ export class RdDUtility {
if (ReglesOptionelles.isUsing("appliquer-fatigue")) { if (ReglesOptionelles.isUsing("appliquer-fatigue")) {
max = Math.max(1, Math.min(max, 60)); max = Math.max(1, Math.min(max, 60));
value = Math.min(max * 2, Math.max(0, value)); value = Math.min(max * 2, Math.max(0, value));
let fatigueTab = fatigueMatrix[max]; let fatigueTab = fatigueMatrix[max];
let fatigueRem = value; let fatigueRem = value;
for (let idx = 0; idx < fatigueTab.length; idx++) { for (let idx = 0; idx < fatigueTab.length; idx++) {
@ -558,7 +570,7 @@ export class RdDUtility {
return RdDUtility.responseNombreAstral(sockmsg.data); return RdDUtility.responseNombreAstral(sockmsg.data);
case "msg_tmr_move": case "msg_tmr_move":
let actor = game.actors.get(sockmsg.data.actorId); let actor = game.actors.get(sockmsg.data.actorId);
if (actor.isOwner || game.user.isGM ) { if (actor.isOwner || game.user.isGM) {
actor.refreshTMRView(sockmsg.data.tmrPos); actor.refreshTMRView(sockmsg.data.tmrPos);
} }
break; break;
@ -587,7 +599,7 @@ export class RdDUtility {
// gestion bouton tchat Acheter // gestion bouton tchat Acheter
html.on("click", '.button-acheter', event => DialogItemAchat.onButtonAcheter(event)); html.on("click", '.button-acheter', event => DialogItemAchat.onButtonAcheter(event));
// Gestion du bouton payer // Gestion du bouton payer
html.on("click", '.payer-button', event => { html.on("click", '.payer-button', event => {
let sumdenier = event.currentTarget.attributes['data-somme-denier']?.value ?? 0; let sumdenier = event.currentTarget.attributes['data-somme-denier']?.value ?? 0;
@ -637,14 +649,14 @@ export class RdDUtility {
if (token.actor && token.data.actorLink) { if (token.actor && token.data.actorLink) {
return token.actor; return token.actor;
} }
if (msgPlayer != undefined){ if (msgPlayer != undefined) {
msgPlayer += "<br>le token sélectionné doit être lié à un personnage"; msgPlayer += "<br>le token sélectionné doit être lié à un personnage";
} }
} }
if (game.user.character) { if (game.user.character) {
return game.user.character; return game.user.character;
} }
if (msgPlayer != undefined){ if (msgPlayer != undefined) {
msgPlayer += "<br>vous pouvez sélectionner un seul token lié à un personnage"; msgPlayer += "<br>vous pouvez sélectionner un seul token lié à un personnage";
msgPlayer += "<br>vous devez être connecté comme joueur avec un personnage sélectionné"; msgPlayer += "<br>vous devez être connecté comme joueur avec un personnage sélectionné";
ui.notifications.warn(msgPlayer); ui.notifications.warn(msgPlayer);
@ -805,9 +817,9 @@ export class RdDUtility {
} }
/*-------------------------------------------- */ /*-------------------------------------------- */
static distribuerStress( stressValue, raison = 'Inconnu', nomJoueur = undefined) { static distribuerStress(stressValue, raison = 'Inconnu', nomJoueur = undefined) {
if (game.user.isGM) { if (game.user.isGM) {
if( nomJoueur == undefined) { if (nomJoueur == undefined) {
for (let actor of game.actors) { for (let actor of game.actors) {
if (actor.hasPlayerOwner) { if (actor.hasPlayerOwner) {
actor.addCompteurValue('stress', stressValue, raison); actor.addCompteurValue('stress', stressValue, raison);
@ -816,7 +828,7 @@ export class RdDUtility {
} }
} else { } else {
//console.log(stressValue, nomJoueur); //console.log(stressValue, nomJoueur);
let joueur = game.users.find( user => user.name.toLowerCase() == nomJoueur.toLowerCase() ); let joueur = game.users.find(user => user.name.toLowerCase() == nomJoueur.toLowerCase());
//console.log("Player", joueur, joueur.character ); //console.log("Player", joueur, joueur.character );
joueur.character.addCompteurValue('stress', stressValue, raison); joueur.character.addCompteurValue('stress', stressValue, raison);
ui.notifications.info(`${joueur.character.name} a reçu ${stressValue} points de Stress (raison : ${raison})`); ui.notifications.info(`${joueur.character.name} a reçu ${stressValue} points de Stress (raison : ${raison})`);