Nettoyage feuilles acteurs
- template partial pour les compétences - séparation des options/calculs/données - extraction de méthodes pour les calculs (total xp, total carac, ...) - déplacement de code de RdDUtility vers RdDItemCompetence / RdDCarac
This commit is contained in:
@ -10,6 +10,7 @@ import { RdDItemCompetence } from "./item-competence.js";
|
||||
import { RdDBonus } from "./rdd-bonus.js";
|
||||
import { Misc } from "./misc.js";
|
||||
import { RdDCombatManager } from "./rdd-combat.js";
|
||||
import { RdDCarac } from "./rdd-carac.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class RdDActorSheet extends ActorSheet {
|
||||
@ -31,51 +32,66 @@ export class RdDActorSheet extends ActorSheet {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getData() {
|
||||
async getData() {
|
||||
let formData = super.getData();
|
||||
// -------------- version 0.7.9
|
||||
// let formData = {
|
||||
// cssClass: this.entity.owner ? "editable" : "locked",
|
||||
// editable: this.isEditable,
|
||||
// entity: duplicate(this.entity.data),
|
||||
// limited: this.entity.limited,
|
||||
// options: this.options,
|
||||
// owner: this.entity.owner,
|
||||
// title: this.title
|
||||
// }
|
||||
// // Entity data
|
||||
// formData.actor = formData.entity;
|
||||
// formData.data = formData.entity.data;
|
||||
|
||||
if (formData.actor.type == 'creature' || formData.actor.type == 'humanoide') return formData; // Shortcut
|
||||
|
||||
formData.data.editCaracComp = this.options.editCaracComp;
|
||||
formData.data.showCompNiveauBase = this.options.showCompNiveauBase;
|
||||
formData.data.montrerArchetype = this.options.montrerArchetype;
|
||||
// // Owned items
|
||||
// formData.items = formData.actor.items;
|
||||
// formData.items.sort((a, b) => (a.sort || 0) - (b.sort || 0));
|
||||
|
||||
formData.itemsByType = Misc.classify(formData.items);
|
||||
RdDUtility.filterItemsPerTypeForSheet(formData);
|
||||
|
||||
// Competence per category
|
||||
formData.data.comptageArchetype = RdDUtility.getLimitesArchetypes();
|
||||
formData.data.competenceXPTotal = 0;
|
||||
formData.competenceByCategory = Misc.classify(
|
||||
formData.itemsByType.competence,
|
||||
item => item.data.categorie,
|
||||
item => {
|
||||
let archetypeKey = (item.data.niveau_archetype < 0) ? 0 : item.data.niveau_archetype;
|
||||
if (formData.data.comptageArchetype[archetypeKey] == undefined) {
|
||||
formData.data.comptageArchetype[archetypeKey] = { "niveau": archetypeKey, "nombreMax": 0, "nombre": 0 };
|
||||
}
|
||||
formData.data.comptageArchetype[archetypeKey].nombre = (formData.data.comptageArchetype[archetypeKey]?.nombre ?? 0) + 1; //Comptage archetype
|
||||
item.data.xpNext = RdDItemCompetence.getCompetenceNextXp(item.data.niveau);
|
||||
item.data.isLevelUp = item.data.xp >= item.data.xpNext; // Flag de niveau à MAJ
|
||||
//this.actor.checkCompetenceXP(item.name); // Petite vérification experience
|
||||
item.data.showCompetence = !formData.data.showCompNiveauBase || (Number(item.data.niveau) != Number(RdDItemCompetence.getLevelCategory(item.data.categorie)));
|
||||
// Ignorer les compétences 'troncs' à ce stade
|
||||
formData.data.competenceXPTotal += RdDItemCompetence.computeCompetenceXPCost(item);
|
||||
return item;
|
||||
});
|
||||
formData.data.competenceXPTotal -= RdDItemCompetence.computeEconomieCompetenceTroncXP(formData.itemsByType.competence);
|
||||
formData.options.isGM = game.user.isGM;
|
||||
|
||||
// la taille est la taille: on ne peut pas l'utiliser pour un jet
|
||||
formData.data.carac.taille.isTaille = true;
|
||||
|
||||
if (this.actor.data.type == 'creature') return formData; // Shortcut
|
||||
|
||||
// toujours avoir une liste d'armes (pour mettre esquive et corps à corps)
|
||||
formData.itemsByType.arme = formData.itemsByType.arme ?? [];
|
||||
|
||||
formData.competenceByCategory = Misc.classify(formData.data.competences, item => item.data.categorie);
|
||||
|
||||
formData.calc = {
|
||||
comptageArchetype: RdDItemCompetence.computeResumeArchetype(formData.data.competences),
|
||||
competenceXPTotal: RdDItemCompetence.computeTotalXP(formData.data.competences),
|
||||
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(),
|
||||
surprise: RdDBonus.find(this.actor.getSurprise(false)).descr,
|
||||
fatigue: {
|
||||
malus: RdDUtility.calculMalusFatigue(formData.data.sante.fatigue.value, formData.data.sante.endurance.max),
|
||||
html: "<table class='table-fatigue'>" + RdDUtility.makeHTMLfatigueMatrix(formData.data.sante.fatigue.value, formData.data.sante.endurance.max).html() + "</table>"
|
||||
},
|
||||
resumeBlessures: this.actor.computeResumeBlessure(formData.data.blessures),
|
||||
};
|
||||
formData.calc.surEncombrementMessage = (formData.data.compteurs.surenc.value < 0) ? "Sur-Encombrement!" : "";
|
||||
|
||||
formData.data.competences.forEach(item => {
|
||||
item.visible = !this.options.showCompNiveauBase || !RdDItemCompetence.isNiveauBase(item);
|
||||
RdDItemCompetence.levelUp(item);
|
||||
});
|
||||
|
||||
Object.values(formData.data.carac).forEach(c => {
|
||||
RdDCarac.levelUp(c);
|
||||
});
|
||||
|
||||
// Compute current carac sum
|
||||
let sum = 0;
|
||||
for (let caracName in formData.data.carac) {
|
||||
let currentCarac = formData.data.carac[caracName];
|
||||
if (!currentCarac.derivee) {
|
||||
sum += parseInt(currentCarac.value);
|
||||
}
|
||||
currentCarac.xpNext = RdDUtility.getCaracNextXp(currentCarac.value);
|
||||
currentCarac.isLevelUp = (currentCarac.xp >= currentCarac.xpNext);
|
||||
}
|
||||
sum += (formData.data.beaute >= 0) ? (formData.data.beaute - 10) : 0;
|
||||
formData.data.caracSum = sum;
|
||||
|
||||
// Force empty arme, at least for Esquive
|
||||
if (formData.itemsByType.arme == undefined) formData.itemsByType.arme = [];
|
||||
@ -112,14 +128,9 @@ export class RdDActorSheet extends ActorSheet {
|
||||
formData.data.blessures.resume = this.actor.computeResumeBlessure(formData.data.blessures);
|
||||
|
||||
// Mise à jour de l'encombrement total et du prix de l'équipement
|
||||
this.actor.computeEncombrementTotalEtMalusArmure();
|
||||
this.actor.computePrixTotalEquipement();
|
||||
|
||||
// Common data
|
||||
formData.data.competenceByCategory = formData.competenceByCategory;
|
||||
formData.data.encTotal = this.actor.encTotal;
|
||||
formData.data.prixTotalEquipement = this.actor.prixTotalEquipement;
|
||||
formData.data.surprise = RdDBonus.find(this.actor.getSurprise(false)).descr;
|
||||
formData.data.isGM = game.user.isGM;
|
||||
formData.ajustementsConditions = CONFIG.RDD.ajustementsConditions;
|
||||
formData.difficultesLibres = CONFIG.RDD.difficultesLibres;
|
||||
@ -135,13 +146,16 @@ export class RdDActorSheet extends ActorSheet {
|
||||
formData.data.rencontres = duplicate(formData.data.reve.rencontre.list);
|
||||
formData.data.caseSpeciales = formData.itemsByType['casetmr'];
|
||||
RdDUtility.buildArbreDeConteneur(this, formData);
|
||||
formData.data.surEncombrementMessage = (formData.data.compteurs.surenc.value < 0) ? "Sur-Encombrement!" : "";
|
||||
formData.data.vehiculesList = this.actor.buildVehiculesList();
|
||||
formData.data.monturesList = this.actor.buildMonturesList();
|
||||
formData.data.suivantsList = this.actor.buildSuivantsList();
|
||||
return formData;
|
||||
}
|
||||
|
||||
isCompetenceAffichable(competence) {
|
||||
return !this.options.showCompNiveauBase || !RdDItemCompetence.isNiveauBase(competence);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async _onDrop(event) {
|
||||
let toSuper = await RdDUtility.processItemDropEvent(this, event);
|
||||
|
Reference in New Issue
Block a user