import { SYSTEM_RDD } from "./constants.js"; import { Grammar } from "./grammar.js"; import { Misc } from "./misc.js"; import { CompendiumTableHelpers, CompendiumTable, SystemCompendiums } from "./settings/system-compendiums.js"; const COMPENDIUMS_RECHERCHE = 'compendiums-recherche'; export class Environnement { static initSettings() { game.settings.register(SYSTEM_RDD, COMPENDIUMS_RECHERCHE, { name: COMPENDIUMS_RECHERCHE, default: [ SystemCompendiums.getCompendium('faune-flore-mineraux'), SystemCompendiums.getCompendium('meditations-et-ecrits'), SystemCompendiums.getCompendium('equipement') ], scope: "world", config: false, type: Object }); game.system.rdd.environnement = new Environnement(); Hooks.once('ready', () => game.system.rdd.environnement.onReady()); } constructor() { this.compendiums = []; this.compendiumTables = []; this.mapMilieux = {} } async onReady() { await this.$prepareCompendiums() } async milieux() { return Object.values(this.mapMilieux); } async saveCompendiums(compendiumIds) { game.settings.set(SYSTEM_RDD, COMPENDIUMS_RECHERCHE, compendiumIds); await this.$prepareCompendiums(); } async $prepareCompendiums() { this.compendiums = game.settings.get(SYSTEM_RDD, COMPENDIUMS_RECHERCHE).filter(c => SystemCompendiums.getPack(c)); this.compendiumTables = this.compendiums.map(it => new CompendiumTable(it, 'Item')); const compendiumItems = await this.getElements(it => 1, it => it.isInventaire()); const fromCompendiums = Misc.concat(compendiumItems.map(it => it.getMilieux().filter(m => m))); this.mapMilieux = Misc.indexLowercase(fromCompendiums); } async autresMilieux(item) { const milieuxExistants = item.getMilieux().map(it => Grammar.toLowerCaseNoAccent(it)); return Object.keys(this.mapMilieux) .filter(it => !milieuxExistants.includes(it)) .map(it => this.mapMilieux[it]); } async getElements(itemFrequence, filter) { const compendiumsElement = await Promise.all( this.compendiumTables.map(async compTable => await compTable.getContent(itemFrequence, filter)) ); const elements = compendiumsElement.reduce((a, b) => a.concat(b)); elements.sort(Misc.ascending(it => it.name)) return elements; } async buildTable(itemFrequence, filter = it => true) { if (!itemFrequence) { itemFrequence = it => it.getFrequence() } const elements = await this.getElements(itemFrequence, filter);; return CompendiumTableHelpers.buildTable(elements, itemFrequence); } }