Nettoyage de data
* séparation de options, calc, ...
* extraction de méthodes pour clarifier ce qui est fait dans getData
* fix de la feuille: utiliser data.data
* fix d'Actor: update({ data.data
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,122 +32,92 @@ export class RdDActorSheet extends ActorSheet {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getData() {
|
||||
let data = super.getData();
|
||||
if ( data.actor.type == 'creature' || data.actor.type == 'humanoide') return data; // Shortcut
|
||||
async getData() {
|
||||
// Partie commune
|
||||
let sheetData = await super.getData();
|
||||
|
||||
data.data.editCaracComp = this.options.editCaracComp;
|
||||
data.data.showCompNiveauBase = this.options.showCompNiveauBase;
|
||||
data.data.montrerArchetype = this.options.montrerArchetype;
|
||||
sheetData.options = this.options;
|
||||
sheetData.itemsByType = Misc.classify(sheetData.items, item => item.type);
|
||||
sheetData.options.isGM = game.user.isGM;
|
||||
|
||||
data.itemsByType = Misc.classify(data.items);
|
||||
const carac = sheetData.data.data.carac;
|
||||
// la taille est la taille: on ne peut pas l'utiliser pour un jet
|
||||
carac.taille.isTaille = true;
|
||||
|
||||
// Competence per category
|
||||
data.data.comptageArchetype = RdDUtility.getLimitesArchetypes();
|
||||
data.data.competenceXPTotal = 0;
|
||||
data.competenceByCategory = Misc.classify(
|
||||
data.itemsByType.competence,
|
||||
item => item.data.categorie,
|
||||
item => {
|
||||
let archetypeKey = (item.data.niveau_archetype < 0) ? 0 : item.data.niveau_archetype;
|
||||
if (data.data.comptageArchetype[archetypeKey] == undefined) {
|
||||
data.data.comptageArchetype[archetypeKey] = { "niveau": archetypeKey, "nombreMax": 0, "nombre": 0};
|
||||
}
|
||||
data.data.comptageArchetype[archetypeKey].nombre = (data.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 = !data.data.showCompNiveauBase || (Number(item.data.niveau) != Number(RdDUtility.getLevelCategory(item.data.categorie)));
|
||||
// Ignorer les compétences 'troncs' à ce stade
|
||||
data.data.competenceXPTotal += RdDItemCompetence.computeCompetenceXPCost(item);
|
||||
return item;
|
||||
});
|
||||
data.data.competenceXPTotal -= RdDItemCompetence.computeEconomieCompetenceTroncXP(data.itemsByType.competence);
|
||||
if (sheetData.actor.type == 'creature') return sheetData; // Shortcut
|
||||
|
||||
// Compute current carac sum
|
||||
let sum = 0;
|
||||
let caracList = data.data.data.carac;
|
||||
for (let caracName in caracList) {
|
||||
let currentCarac = caracList[caracName];
|
||||
if (!currentCarac.derivee) {
|
||||
sum += parseInt(currentCarac.value);
|
||||
}
|
||||
currentCarac.xpNext = RdDUtility.getCaracNextXp(currentCarac.value);
|
||||
currentCarac.isLevelUp = (currentCarac.xp >= currentCarac.xpNext);
|
||||
}
|
||||
sum += (data.data.beaute >= 0) ? (data.data.beaute - 10) : 0;
|
||||
data.data.caracSum = sum;
|
||||
/* -- partie spécifique aux personnages -- */
|
||||
|
||||
// Force empty arme, at least for Esquive
|
||||
if (data.itemsByType.arme == undefined) data.itemsByType.arme = [];
|
||||
for (const arme of data.itemsByType.arme) {
|
||||
arme.data.niveau = 0; // Per default, TODO to be fixed
|
||||
for (const melee of data.competenceByCategory.melee) {
|
||||
if (melee.name == arme.data.competence)
|
||||
arme.data.niveau = melee.data.niveau
|
||||
}
|
||||
for (const tir of data.competenceByCategory.tir) {
|
||||
if (tir.name == arme.data.competence)
|
||||
arme.data.niveau = tir.data.niveau
|
||||
}
|
||||
for (const lancer of data.competenceByCategory.lancer) {
|
||||
if (lancer.name == arme.data.competence)
|
||||
arme.data.niveau = lancer.data.niveau
|
||||
}
|
||||
const competences = sheetData.itemsByType.competence;
|
||||
// toujours avoir une liste d'armes (pour mettre esquive et corps à corps)
|
||||
sheetData.itemsByType.arme = sheetData.itemsByType.arme ?? [];
|
||||
sheetData.competenceByCategory = Misc.classify(competences, comp => comp.data.categorie);
|
||||
|
||||
sheetData.calc = {
|
||||
comptageArchetype: RdDItemCompetence.computeResumeArchetype(competences),
|
||||
competenceXPTotal: RdDItemCompetence.computeTotalXP(competences),
|
||||
caracTotal: RdDCarac.computeTotal(carac),
|
||||
// Mise à jour de l'encombrement total et du prix de l'équipement
|
||||
encTotal: await sheetData.actor.computeEncombrementTotalEtMalusArmure(),
|
||||
prixTotalEquipement: await sheetData.actor.computePrixTotalEquipement(),
|
||||
surprise: RdDBonus.find(sheetData.actor.getSurprise(false)).descr,
|
||||
surEncombrementMessage: (sheetData.data.data.compteurs.surenc.value < 0) ? "Sur-Encombrement!" : "",
|
||||
fatigue: {
|
||||
malus: RdDUtility.calculMalusFatigue(sheetData.data.data.sante.fatigue.value, sheetData.data.data.sante.endurance.max),
|
||||
html: "<table class='table-fatigue'>" + RdDUtility.makeHTMLfatigueMatrix(sheetData.data.data.sante.fatigue.value, sheetData.data.data.sante.endurance.max).html() + "</table>"
|
||||
},
|
||||
resumeBlessures: sheetData.actor.computeResumeBlessure(sheetData.data.data.blessures),
|
||||
};
|
||||
|
||||
competences.forEach(it => it.visible = this.isCompetenceAffichable(it));
|
||||
RdDItemCompetence.setLevelUp(competences);
|
||||
RdDCarac.setLevelUp(carac);
|
||||
|
||||
sheetData.armes = sheetData.itemsByType.arme;
|
||||
RdDItemArme.computeNiveauArmes(sheetData.armes, competences);
|
||||
RdDItemArme.ajoutCorpsACorps(sheetData.armes, competences, carac);
|
||||
sheetData.esquive = RdDItemCompetence.getEsquive(competences);
|
||||
sheetData.armes = RdDCombatManager.finalizeArmeList(sheetData.armes, competences, carac);
|
||||
|
||||
sheetData.data.data.compteurs.chance.isChance = true;
|
||||
|
||||
|
||||
RdDUtility.filterItemsPerTypeForSheet(sheetData);
|
||||
|
||||
sheetData.tmr = {
|
||||
sortsReserve: sheetData.data.data.reve.reserve.list,
|
||||
rencontres: sheetData.data.data.reve.rencontre.list,
|
||||
caseSpeciales: sheetData.itemsByType.casetmr
|
||||
}
|
||||
|
||||
// To avoid armour and so on...
|
||||
data.data.combat = duplicate(RdDUtility.checkNull(data.itemsByType['arme']));
|
||||
data.data.combat = RdDCombatManager.finalizeArmeList(data.data.combat, data.itemsByType.competence, data.data.carac);
|
||||
RdDUtility.buildArbreDeConteneur(this, sheetData);
|
||||
|
||||
data.esquive = { name: "Esquive", niveau: data.competenceByCategory?.melee.find(it => it.name == 'Esquive')?.data.niveau ?? -6};
|
||||
let corpsACorps = data.competenceByCategory?.melee.find(it => it.name == 'Corps à corps');
|
||||
if (corpsACorps) {
|
||||
let cc_init = RdDCombatManager.calculInitiative(corpsACorps.data.niveau, data.data.carac['melee'].value);
|
||||
data.data.combat.push(RdDItemArme.mainsNues({ niveau: corpsACorps.data.niveau, initiative: cc_init }));
|
||||
}
|
||||
this.armesList = duplicate(data.data.combat);
|
||||
|
||||
caracList.isTaille = true; // To avoid button link;
|
||||
let compteursList = data.data.data.compteurs
|
||||
compteursList.chance.isChance = true;
|
||||
data.data.data.blessures.resume = this.actor.computeResumeBlessure(data.data.data.blessures);
|
||||
|
||||
// Mise à jour de l'encombrement total et du prix de l'équipement
|
||||
this.actor.computeEncombrementTotalEtMalusArmure();
|
||||
this.actor.computePrixTotalEquipement();
|
||||
|
||||
// Common data
|
||||
data.data.competenceByCategory = data.competenceByCategory;
|
||||
data.data.encTotal = this.actor.encTotal;
|
||||
data.data.prixTotalEquipement = this.actor.prixTotalEquipement;
|
||||
data.data.surprise = RdDBonus.find(this.actor.getSurprise(false)).descr;
|
||||
data.data.isGM = game.user.isGM;
|
||||
data.ajustementsConditions = CONFIG.RDD.ajustementsConditions;
|
||||
data.difficultesLibres = CONFIG.RDD.difficultesLibres;
|
||||
|
||||
// low is normal, this the base used to compute the grid.
|
||||
data.data.fatigue = {
|
||||
malus: RdDUtility.calculMalusFatigue(data.data.data.sante.fatigue.value, data.data.data.sante.endurance.max),
|
||||
html: "<table class='table-fatigue'>" + RdDUtility.makeHTMLfatigueMatrix(data.data.data.sante.fatigue.value, data.data.data.sante.endurance.max).html() + "</table>"
|
||||
sheetData.subacteurs = {
|
||||
vehiculesList: sheetData.actor.buildVehiculesList(),
|
||||
montures: sheetData.actor.buildMonturesList(),
|
||||
suivants: sheetData.actor.buildSuivantsList()
|
||||
}
|
||||
|
||||
RdDUtility.filterItemsPerTypeForSheet(data);
|
||||
data.data.sortReserve = data.data.data.reve.reserve.list;
|
||||
data.data.rencontres = duplicate(data.data.data.reve.rencontre.list);
|
||||
data.data.caseSpeciales = data.itemsByType['casetmr'];
|
||||
RdDUtility.buildArbreDeConteneur(this, data);
|
||||
data.data.surEncombrementMessage = (data.data.data.compteurs.surenc.value < 0) ? "Sur-Encombrement!" : "";
|
||||
data.data.vehiculesList = this.actor.buildVehiculesList();
|
||||
data.data.monturesList = this.actor.buildMonturesList();
|
||||
data.data.suivantsList = this.actor.buildSuivantsList();
|
||||
return data;
|
||||
// conserver la liste des armes
|
||||
this.armesList = sheetData.armes;
|
||||
return sheetData;
|
||||
}
|
||||
|
||||
computeNiveauArme(armes, competences) {
|
||||
for (const arme of armes) {
|
||||
const compArme = competences.find(it => it.name == arme.data.competence);
|
||||
arme.data.niveau = compArme?.data.niveau ?? -8;
|
||||
}
|
||||
}
|
||||
|
||||
isCompetenceAffichable(competence) {
|
||||
return !this.options.showCompNiveauBase || !RdDItemCompetence.isNiveauBase(competence);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async _onDrop(event) {
|
||||
let toSuper = await RdDUtility.processItemDropEvent(this, event);
|
||||
if ( toSuper) {
|
||||
if (toSuper) {
|
||||
super._onDrop(event);
|
||||
}
|
||||
}
|
||||
@@ -215,12 +186,12 @@ export class RdDActorSheet extends ActorSheet {
|
||||
html.find('.item-delete').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
RdDUtility.confirmerSuppression(this, li);
|
||||
});
|
||||
});
|
||||
html.find('.subacteur-delete').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
RdDUtility.confirmerSuppressionSubacteur(this, li);
|
||||
});
|
||||
|
||||
|
||||
html.find('#encaisser-direct').click(ev => {
|
||||
this.actor.encaisser();
|
||||
});
|
||||
@@ -337,12 +308,12 @@ export class RdDActorSheet extends ActorSheet {
|
||||
html.find('.subacteur-label a').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
let actorId = li.data('actor-id');
|
||||
let actor = game.actors.get( actorId) ;
|
||||
if ( actor ) {
|
||||
let actor = game.actors.get(actorId);
|
||||
if (actor) {
|
||||
actor.sheet.render(true);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// Points de reve actuel
|
||||
html.find('.ptreve-actuel a').click((event) => {
|
||||
this.actor.rollCarac('reve-actuel');
|
||||
|
||||
Reference in New Issue
Block a user