Preparation access documentData

Ajout de méthode Misc.data pour accéder aux data des Actor/Item
Dans le cas où on est sur un Actor/Item, retourne le document
(noeud data)

Dans les autres cas, retourne l'objet lkui même (donc, le document)

Du coup, on devrait pouvoir facilement changer en 0.8.0
This commit is contained in:
Vincent Vandemeulebrouck
2021-03-22 20:10:37 +01:00
parent 2b6d1d8de1
commit 25d7a447a8
14 changed files with 543 additions and 483 deletions

View File

@ -1,4 +1,5 @@
import { RdDItemCompetenceCreature } from "./item-competencecreature.js"
import { Misc } from "./misc.js";
import { RdDCombatManager } from "./rdd-combat.js";
const nomCategorieParade = {
@ -17,16 +18,18 @@ const nomCategorieParade = {
/* -------------------------------------------- */
export class RdDItemArme extends Item {
static isArme(item) {
return (item.type == 'competencecreature' && item.data.iscombat) || item.type == 'arme';
static isArme(itemData) {
itemData = Misc.data(itemData);
return (itemData.type == 'competencecreature' && itemData.data.iscombat) || itemData.type == 'arme';
}
/* -------------------------------------------- */
static getArmeData(item) {
switch (item ? item.data.type : '') {
case 'arme': return item.data;
static getArmeData(armeData) {
armeData = Misc.data(armeData);
switch (armeData ? armeData.type : '') {
case 'arme': return armeData;
case 'competencecreature':
return RdDItemCompetenceCreature.toArme(item.data);
return RdDItemCompetenceCreature.toArme(armeData);
}
return RdDItemArme.mainsNues();
}
@ -61,21 +64,22 @@ export class RdDItemArme extends Item {
}
/* -------------------------------------------- */
static getCategorieParade(arme) {
if (arme.data.categorie_parade) {
return arme.data.categorie_parade;
static getCategorieParade(armeData) {
armeData = Misc.data(armeData);
if (armeData.data.categorie_parade) {
return armeData.data.categorie_parade;
}
// pour compatibilité avec des personnages existants
if (arme.type == 'competencecreature' || arme.data.categorie == 'creature') {
return arme.data.categorie_parade || (arme.data.isparade ? 'sans-armes' : '');
if (armeData.type == 'competencecreature' || armeData.data.categorie == 'creature') {
return armeData.data.categorie_parade || (armeData.data.isparade ? 'sans-armes' : '');
}
if (!arme.type.match(/arme|competencecreature/)) {
if (!armeData.type.match(/arme|competencecreature/)) {
return '';
}
if (arme.data.competence == undefined) {
if (armeData.data.competence == undefined) {
return 'competencecreature';
}
let compname = arme.data.competence.toLowerCase();
let compname = armeData.data.competence.toLowerCase();
if (compname.match(/^(dague de jet|javelot|fouet|arc|arbalête|fronde|hache de jet|fléau)$/)) return '';
if (compname.match('hache')) return 'haches';
@ -84,9 +88,9 @@ export class RdDItemArme extends Item {
if (compname.match('bouclier')) return 'boucliers';
if (compname.match('masse')) return 'masses';
if (compname.match('epée') || compname.match('épée')) {
if (arme.name.toLowerCase().match(/(gnome)/))
if (armeData.name.toLowerCase().match(/(gnome)/))
return 'epees-courtes';
if (arme.name.toLowerCase().match(/((e|é)pée dragone|esparlongue|demi-dragonne)/))
if (armeData.name.toLowerCase().match(/((e|é)pée dragone|esparlongue|demi-dragonne)/))
return 'epees-longues';
return 'epees-lourdes';
}
@ -131,33 +135,35 @@ export class RdDItemArme extends Item {
}
/* -------------------------------------------- */
static armeUneOuDeuxMains(arme, aUneMain) {
if (arme) {
arme.data.unemain = arme.data.unemain || !arme.data.deuxmains;
const uneOuDeuxMains = arme.data.unemain && arme.data.deuxmains;
const containsSlash = !Number.isInteger(arme.data.dommages) && arme.data.dommages.includes("/");
static armeUneOuDeuxMains(armeData, aUneMain) {
armeData = Misc.data(armeData);
if (armeData) {
armeData.data.unemain = armeData.data.unemain || !armeData.data.deuxmains;
const uneOuDeuxMains = armeData.data.unemain && armeData.data.deuxmains;
const containsSlash = !Number.isInteger(armeData.data.dommages) && armeData.data.dommages.includes("/");
if (containsSlash) { // Sanity check
arme = duplicate(arme);
armeData = duplicate(armeData);
const tableauDegats = arme.data.dommages.split("/");
const tableauDegats = armeData.data.dommages.split("/");
if (aUneMain)
arme.data.dommagesReels = Number(tableauDegats[0]);
armeData.data.dommagesReels = Number(tableauDegats[0]);
else // 2 mains
arme.data.dommagesReels = Number(tableauDegats[1]);
armeData.data.dommagesReels = Number(tableauDegats[1]);
}
else {
arme.data.dommagesReels = Number(arme.data.dommages);
armeData.data.dommagesReels = Number(armeData.data.dommages);
}
if (uneOuDeuxMains != containsSlash) {
ui.notifications.info("Les dommages de l'arme à 1/2 mains " + arme.name + " ne sont pas corrects (ie sous la forme X/Y)");
ui.notifications.info("Les dommages de l'arme à 1/2 mains " + armeData.name + " ne sont pas corrects (ie sous la forme X/Y)");
}
}
return arme;
return armeData;
}
static isArmeUtilisable(item) {
return item.type == 'arme' && item.data.equipe && (item.data.resistance > 0 || item.data.portee_courte > 0);
static isArmeUtilisable(itemData) {
itemData = Misc.data(itemData);
return itemData.type == 'arme' && itemData.data.equipe && (itemData.data.resistance > 0 || itemData.data.portee_courte > 0);
}
static ajoutCorpsACorps(armes, competences, carac) {