/* -------------------------------------------- */ import { Misc } from "./misc.js"; const matchOperations = new RegExp(/@(\w*){([\w\-]+)}/ig); const matchOperationTerms = new RegExp(/@(\w*){([\w\-]+)}/i); /* -------------------------------------------- */ export class RdDAlchimie { /* -------------------------------------------- */ static processManipulation(recette, actorId = undefined) { let manip = recette.system.manipulation; 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); manip = manip.replace(result[0], replacement); } } } recette.system.manipulation_update = manip; } /* -------------------------------------------- */ static _alchimieCouleur(recette, couleurs, actorId) { return RdDAlchimie._alchimieLink(recette, couleurs, actorId, 'couleur', 'Température'); } /* -------------------------------------------- */ 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>`; } /* -------------------------------------------- */ 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--; } return Math.min(0, -composantes); } static getCaracTache(tache) { switch (tache) { case "consistance": return 'dexterite'; case "couleur": return 'vue'; } return 'intellect'; } }