import { RdDActorSheet } from "../../actor-sheet.js" import { SYSTEM_RDD } from "../../constants.js"; import { Misc } from "../../misc.js"; import { EXPORT_CSV_SCRIPTARIUM, OptionsAvancees } from "../../settings/options-avancees.js"; import { ExportScriptarium } from "./export-scriptarium.js"; import { CATEGORIES_COMPETENCES, CATEGORIES_DRACONIC, Mapping } from "./mapping.js"; export class RdDActorExportSheet extends RdDActorSheet { static async init() { await loadTemplates([ "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/arme.hbs", "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/blessure.hbs", "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/blessures.hbs", "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac.hbs", "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac-compteur.hbs", "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac-derivee.hbs", "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/carac-derivee-compteur.hbs", "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/competences.hbs", "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/esquive.hbs", "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/fatigue.hbs", "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/protection.hbs", "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/sort.hbs", ]) Actors.registerSheet(SYSTEM_RDD, RdDActorExportSheet, { types: ["personnage"], makeDefault: false, label: "Feuille simplifiée" }) } static get defaultOptions() { return foundry.utils.mergeObject(RdDActorSheet.defaultOptions, { template: "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/actor-encart-sheet.hbs", width: 550, showCompNiveauBase: false, vueArchetype: false, }, { inplace: false }) } constructor(actor, options) { super(actor, options) } async getData() { const formData = await super.getData() // Add any structured, precomputed list of data formData.context = Mapping.prepareContext(this.actor) formData.export = this.getMappingValues(formData.context, this.actor) formData.competences = this.getCompetences(CATEGORIES_COMPETENCES) formData.draconic = this.getCompetences(CATEGORIES_DRACONIC) const legeres = this.actor.nbBlessuresLegeres() const graves = this.actor.nbBlessuresGraves() const critiques = this.actor.nbBlessuresCritiques() formData.etat = { surenc: this.actor.computeMalusSurEncombrement(), fatigue: { value: this.actor.getFatigueActuelle(), max: this.actor.getFatigueMax(), malus: this.actor.malusFatigue() }, blessures: legeres + graves + critiques, blessure: [legeres > 0, legeres > 1, legeres > 2, legeres > 3, legeres > 4, graves > 0, graves > 1, critiques > 0], } formData.options.exportScriptarium = OptionsAvancees.isUsing(EXPORT_CSV_SCRIPTARIUM) return formData } getMappingValues(context, actor) { return Object.fromEntries(Mapping.getMapping().map(it => [it.column, { colName: it.colName ?? it.column, column: it.column, rollClass: it.rollClass, value: String(it.getter(actor, context)) }])) } getCompetences(categories) { const competences = Mapping.getCompetencesCategorie(this.actor, categories) if (competences.length == 0) { return '' } const byCategories = Mapping.competencesByCategoriesByNiveau(competences, categories) const listByCategories = Object.values(byCategories) .map(it => it.competencesParNiveau) .map(byNiveau => { const niveaux = Object.keys(byNiveau).map(it => Number(it)).sort(Misc.ascending()) if (niveaux.length == 0) { return undefined } const listCategorieByNiveau = niveaux.map(niveau => { const list = byNiveau[niveau].sort(Misc.ascending(it => it.name)) return { niveau, list } }) return Misc.concat(listCategorieByNiveau) }).filter(it => it != undefined) return Misc.concat(listByCategories) } activateListeners(html) { super.activateListeners(html); this.html.find('.click-blessure-remove').click(async event => await this.actor.supprimerBlessure({ gravite: this.html.find(event.currentTarget).data('gravite') }) ) this.html.find('.click-blessure-add').click(async event => await this.actor.ajouterBlessure({ gravite: this.html.find(event.currentTarget).data('gravite') // event.currentTarget.attributes['data-gravite'].value }) ) this.html.find('.button-export').click(async event => { ExportScriptarium.INSTANCE.exportActors([this.actor], `${this.actor.uuid}-${this.actor.name}` ) }) } }