Files
5etools-mirror-2.github.io/js/lootgen.js
TheGiddyLimit e3bf75f42a v1.198.3
2024-01-06 14:47:30 +00:00

82 lines
2.1 KiB
JavaScript

"use strict";
class LootGenPage {
constructor () {
this._lootGenUi = null;
}
async pInit () {
await Promise.all([
PrereleaseUtil.pInit(),
BrewUtil2.pInit(),
]);
await ExcludeUtil.pInitialise();
const $stgLhs = $(`#lootgen-lhs`);
const $stgRhs = $(`#lootgen-rhs`);
this._lootGenUi = new LootGenUi({
spells: await this._pLoadSpells(),
items: await this._pLoadItems(),
});
await this._lootGenUi.pInit();
this._lootGenUi.render({$stgLhs, $stgRhs});
const savedState = await StorageUtil.pGetForPage(LootGenPage._STORAGE_KEY_STATE);
if (savedState != null) this._lootGenUi.setStateFrom(savedState);
const savedStateDebounced = MiscUtil.throttle(this._pDoSaveState.bind(this), 100);
this._lootGenUi.addHookAll("state", () => savedStateDebounced());
this._lootGenUi.addHookAll("meta", () => savedStateDebounced());
$(`#wrp-loading`).remove();
$(`#wrp-content`).showVe();
window.dispatchEvent(new Event("toolsLoaded"));
}
async _pLoadSpells () {
const [stockSpells, prerelease, brew] = await Promise.all([
DataUtil.spell.pLoadAll(),
PrereleaseUtil.pGetBrewProcessed(),
BrewUtil2.pGetBrewProcessed(),
]);
return stockSpells
.concat(prerelease?.spell || [])
.concat(brew?.spell || [])
.filter(sp => {
return !ExcludeUtil.isExcluded(
UrlUtil.URL_TO_HASH_BUILDER[UrlUtil.PG_SPELLS](sp),
"spell",
sp.source,
{isNoCount: true},
);
});
}
async _pLoadItems () {
const stockItems = (await Renderer.item.pBuildList()).filter(it => !it._isItemGroup);
return stockItems
.concat(await Renderer.item.pGetItemsFromPrerelease())
.concat(await Renderer.item.pGetItemsFromBrew())
.filter(it => {
return !ExcludeUtil.isExcluded(
UrlUtil.URL_TO_HASH_BUILDER[UrlUtil.PG_ITEMS](it),
"item",
it.source,
{isNoCount: true},
);
});
}
async _pDoSaveState () {
const statGenState = this._lootGenUi.getSaveableState();
await StorageUtil.pSetForPage(LootGenPage._STORAGE_KEY_STATE, statGenState);
}
}
LootGenPage._STORAGE_KEY_STATE = "state";
const lootGenPage = new LootGenPage();
window.addEventListener("load", () => void lootGenPage.pInit());