mirror of
https://github.com/Kornstalx/5etools-mirror-2.github.io.git
synced 2025-10-28 20:45:35 -05:00
130 lines
3.6 KiB
JavaScript
130 lines
3.6 KiB
JavaScript
"use strict";
|
|
|
|
class PageFilterVehicles extends PageFilter {
|
|
constructor () {
|
|
super();
|
|
|
|
this._vehicleTypeFilter = new Filter({
|
|
header: "Vehicle Type",
|
|
items: [],
|
|
displayFn: Parser.vehicleTypeToFull,
|
|
isSortByDisplayItems: true,
|
|
});
|
|
this._upgradeTypeFilter = new Filter({
|
|
header: "Upgrade Type",
|
|
items: [],
|
|
displayFn: Parser.vehicleTypeToFull,
|
|
isSortByDisplayItems: true,
|
|
});
|
|
this._terrainFilter = new Filter({header: "Terrain", items: ["land", "sea", "air"], displayFn: StrUtil.uppercaseFirst});
|
|
this._speedFilter = new RangeFilter({header: "Speed"});
|
|
this._acFilter = new RangeFilter({header: "Armor Class"});
|
|
this._hpFilter = new RangeFilter({header: "Hit Points"});
|
|
this._hpFilter = new RangeFilter({header: "Hit Points"});
|
|
this._creatureCapacityFilter = new RangeFilter({header: "Creature Capacity"});
|
|
this._miscFilter = new Filter({header: "Miscellaneous", items: ["SRD", "Legacy", "Has Images", "Has Info", "Has Token"], isMiscFilter: true});
|
|
}
|
|
|
|
static mutateForFilters (it) {
|
|
it._fSpeed = 0;
|
|
if (typeof it.speed === "number" && it.speed > 0) {
|
|
it._fSpeed = it.speed;
|
|
} else if (it.speed) {
|
|
const maxSpeed = Math.max(...Object.values(it.speed));
|
|
if (maxSpeed > 0) it._fSpeed = maxSpeed;
|
|
} else if (it.pace && typeof it.pace === "number") {
|
|
it._fSpeed = it.pace * 10; // Based on "Special Travel Pace," DMG p242
|
|
}
|
|
|
|
it._fHp = 0;
|
|
if (it.hp && it.hp.hp != null) {
|
|
it._fHp = it.hp.hp;
|
|
} else if (it.hull && it.hull.hp != null) {
|
|
it._fHp = it.hull.hp;
|
|
} else if (it.hp && it.hp.average != null) {
|
|
it._fHp = it.hp.average;
|
|
}
|
|
|
|
it._fAc = 0;
|
|
if (it.hull && it.hull.ac != null) {
|
|
it._fAc = it.hull.ac;
|
|
} else if (it.vehicleType === "INFWAR") {
|
|
it._fAc = 19 + Parser.getAbilityModNumber(it.dex == null ? 10 : it.dex);
|
|
} else if (it.ac instanceof Array) {
|
|
it._fAc = it.ac.map(it => it.special ? null : (it.ac || it)).filter(it => it !== null);
|
|
} else if (it.ac) {
|
|
it._fAc = it.ac;
|
|
}
|
|
|
|
it._fCreatureCapacity = (it.capCrew || 0) + (it.capPassenger || 0) + (it.capCreature || 0);
|
|
|
|
it._fMisc = it.srd ? ["SRD"] : [];
|
|
if (SourceUtil.isLegacySourceWotc(it.source)) it._fMisc.push("Legacy");
|
|
if (it.tokenUrl || it.hasToken) it._fMisc.push("Has Token");
|
|
if (it.hasFluff || it.fluff?.entries) it._fMisc.push("Has Info");
|
|
if (it.hasFluffImages || it.fluff?.images) it._fMisc.push("Has Images");
|
|
}
|
|
|
|
addToFilters (it, isExcluded) {
|
|
if (isExcluded) return;
|
|
|
|
this._sourceFilter.addItem(it.source);
|
|
this._vehicleTypeFilter.addItem(it.vehicleType);
|
|
this._upgradeTypeFilter.addItem(it.upgradeType);
|
|
this._speedFilter.addItem(it._fSpeed);
|
|
this._terrainFilter.addItem(it.terrain);
|
|
this._acFilter.addItem(it._fAc);
|
|
this._hpFilter.addItem(it._fHp);
|
|
this._creatureCapacityFilter.addItem(it._fCreatureCapacity);
|
|
}
|
|
|
|
async _pPopulateBoxOptions (opts) {
|
|
opts.filters = [
|
|
this._sourceFilter,
|
|
this._vehicleTypeFilter,
|
|
this._upgradeTypeFilter,
|
|
this._terrainFilter,
|
|
this._speedFilter,
|
|
this._acFilter,
|
|
this._hpFilter,
|
|
this._creatureCapacityFilter,
|
|
this._miscFilter,
|
|
];
|
|
}
|
|
|
|
toDisplay (values, it) {
|
|
return this._filterBox.toDisplay(
|
|
values,
|
|
it.source,
|
|
it.vehicleType,
|
|
it.upgradeType,
|
|
it.terrain,
|
|
it._fSpeed,
|
|
it._fAc,
|
|
it._fHp,
|
|
it._fCreatureCapacity,
|
|
it._fMisc,
|
|
);
|
|
}
|
|
}
|
|
|
|
globalThis.PageFilterVehicles = PageFilterVehicles;
|
|
|
|
class ListSyntaxVehicles extends ListUiUtil.ListSyntax {
|
|
static _INDEXABLE_PROPS_ENTRIES = [
|
|
"control",
|
|
"movement",
|
|
"weapon",
|
|
"other",
|
|
"entries",
|
|
|
|
"actionStation",
|
|
|
|
"action",
|
|
"trait",
|
|
"reaction",
|
|
];
|
|
}
|
|
|
|
globalThis.ListSyntaxVehicles = ListSyntaxVehicles;
|