Vincent Vandemeulebrouck
7a67cb7cea
Les filtrages par milieux prennent en compte la rareté/fréquence du milieu
79 lines
2.6 KiB
JavaScript
79 lines
2.6 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('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);
|
|
}
|
|
}
|