Eviter que le chargement d'acteurs ait lieu avant le chargement des settings
		
			
				
	
	
		
			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 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);
 | |
|   }
 | |
| }
 |