foundryvtt-reve-de-dragon/module/rdd-alchimie.js

63 lines
2.3 KiB
JavaScript
Raw Normal View History

2021-01-07 20:04:10 +01:00
/* -------------------------------------------- */
import { Misc } from "./misc.js";
2021-03-31 22:50:58 +02:00
const matchOperations = new RegExp(/@(\w*){([\w\-]+)}/ig);
const matchOperationTerms = new RegExp(/@(\w*){([\w\-]+)}/i);
2021-01-07 20:04:10 +01:00
/* -------------------------------------------- */
export class RdDAlchimie {
/* -------------------------------------------- */
2022-09-07 09:01:23 +02:00
static processManipulation(recette, actorId = undefined) {
let manip = recette.system.manipulation;
2021-03-31 22:50:58 +02:00
let matchArray = manip.match(matchOperations);
if (matchArray) {
for (let matchStr of matchArray) {
let result = matchStr.match(matchOperationTerms);
if (result[1] && result[2]) {
let commande = Misc.upperFirst(result[1]);
let replacement = this[`_alchimie${commande}`](recette, result[2], actorId);
2021-03-31 22:50:58 +02:00
manip = manip.replace(result[0], replacement);
2021-01-07 22:29:43 +01:00
}
2021-01-07 20:04:10 +01:00
}
}
recette.system.manipulation_update = manip;
2021-01-07 20:04:10 +01:00
}
/* -------------------------------------------- */
2021-03-31 22:50:58 +02:00
static _alchimieCouleur(recette, couleurs, actorId) {
return RdDAlchimie._alchimieLink(recette, couleurs, actorId, 'couleur', 'Température');
2021-01-07 20:04:10 +01:00
}
/* -------------------------------------------- */
2021-03-31 22:50:58 +02:00
static _alchimieConsistance(recette, consistances, actorId) {
return RdDAlchimie._alchimieLink(recette, consistances, actorId, 'consistance', 'Consistance');
}
static _alchimieLink(recette, termes, actorId, tacheAlchimie, labelTache) {
const difficulte = RdDAlchimie.getDifficulte(termes);
const link = actorId ? ` <a data-recette-id="${recette._id}" data-actor-id="${actorId}" data-alchimie-tache="${tacheAlchimie}" data-alchimie-data="${termes}">` : '';
const endLink = actorId ? '</a>' : '';
return `<span class="alchimie-tache">${link}${labelTache} ${termes} (${difficulte})${endLink}</span>`;
2021-01-07 20:04:10 +01:00
}
/* -------------------------------------------- */
static getDifficulte(aspects) {
let elements = aspects.split('-');
let composantes = elements.length;
let distincts = Object.keys(Misc.classifyFirst(elements, it => it)).length;
if (distincts == 1) {
composantes--;
2021-01-07 20:04:10 +01:00
}
return Math.min(0, -composantes);
2021-01-07 20:04:10 +01:00
}
2021-04-20 23:16:18 +02:00
static getCaracTache(tache) {
switch (tache) {
case "consistance": return 'dexterite';
case "couleur": return 'vue';
}
return 'intellect';
}
2021-01-07 20:04:10 +01:00
}