forked from public/foundryvtt-reve-de-dragon
		
	
		
			
				
	
	
		
			118 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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_BASE, CATEGORIES_DRACONIC, Mapping } from "./mapping.js";
 | |
| 
 | |
| export class RdDActorExportSheet extends RdDActorSheet {
 | |
|   static init() {
 | |
|     foundry.applications.handlebars.loadTemplates([
 | |
|       "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/arme.hbs",
 | |
|       "systems/foundryvtt-reve-de-dragon/templates/actor/export-scriptarium/arme-titre.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",
 | |
|     ])
 | |
|     foundry.documents.collections.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.attaques = this.actor.listActionsAttaque()
 | |
|     formData.export = this.getMappingValues(formData.context, this.actor)
 | |
|     formData.competences = this.getCompetences(CATEGORIES_COMPETENCES_BASE)
 | |
|     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')
 | |
|       })
 | |
|     )
 | |
|     this.html.find('.button-export').click(async event => await
 | |
|       ExportScriptarium.INSTANCE.exportActors([this.actor],
 | |
|         `${this.actor.uuid}-${this.actor.name}`
 | |
|       )
 | |
|     )
 | |
|   }
 | |
| }
 |