Vincent Vandemeulebrouck
7f051e76be
Le tri étati fait séparément pas compendium, du coup, la présentation des résultats n'était pas toujours pratique
78 lines
2.5 KiB
JavaScript
78 lines
2.5 KiB
JavaScript
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 init() {
|
|
game.settings.register(SYSTEM_RDD, COMPENDIUMS_RECHERCHE, {
|
|
name: COMPENDIUMS_RECHERCHE,
|
|
default: [
|
|
SystemCompendiums.getCompendium('faune-flore-mineraux'),
|
|
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);
|
|
}
|
|
}
|