NPC: Damage & Conditions

pull/12/head
Matheus Clemente 2024-04-01 17:15:12 -03:00
parent 855cdcdc1b
commit daea5d6212
1 changed files with 78 additions and 3 deletions

View File

@ -76,7 +76,7 @@
<div class="filtercontainer">
<h3>{{ game.i18n.localize('Ability Scores') }}</h3>
<div class="filters">
<div class="filters" style="display: none;">
<div v-for="(ability, key) in abilities" class="filter">
<label class="unit-title" for="compendiumBrowser.str">{{ ability.label }}</label>
<div class="level-range flexrow">
@ -88,6 +88,52 @@
</div>
</div>
</div>
<div class="filtercontainer">
<h3>{{ game.i18n.localize('Damage & Conditions') }}</h3>
<div class="filters" style="display: none;">
<div class="filter">
<label class="unit-title" for="compendiumBrowser.damageImmunities">{{ game.i18n.localize('Damage Immunities') }}</label>
<Multiselect
v-model="damageImmunities"
mode="tags"
:searchable="false"
:create-option="false"
:options="getOptions(CONFIG.DND5E.damageTypes)"
/>
</div>
<div class="filter">
<label class="unit-title" for="compendiumBrowser.damageResistances">{{ game.i18n.localize('Damage Resistances') }}</label>
<Multiselect
v-model="damageResistances"
mode="tags"
:searchable="false"
:create-option="false"
:options="getOptions(CONFIG.DND5E.damageTypes)"
/>
</div>
<div class="filter">
<label class="unit-title" for="compendiumBrowser.damageVulnerabilities">{{ game.i18n.localize('Damage Vulnerabilities') }}</label>
<Multiselect
v-model="damageVulnerabilities"
mode="tags"
:searchable="false"
:create-option="false"
:options="getOptions(CONFIG.DND5E.damageTypes)"
/>
</div>
<div class="filter">
<label class="unit-title" for="compendiumBrowser.conditionImmunities">{{ game.i18n.localize('Condition Immunities') }}</label>
<Multiselect
v-model="conditionImmunities"
mode="tags"
:searchable="false"
:create-option="false"
:options="getOptions(CONFIG.DND5E.conditionTypes)"
/>
</div>
</div>
</div>
</div>
<footer>
<!-- Reset. -->
@ -165,7 +211,9 @@ export default {
},
data() {
const abilities = {};
Object.entries(CONFIG.DND5E.abilities).forEach(([k, v]) => abilities[k] = { label: v.label, range: [1, 30] });
for (const [key, value] of Object.entries(CONFIG.DND5E.abilities)) {
abilities[key] = { label: value.label, range: [1, 30] };
}
return {
// Props used for infinite scroll and pagination.
observer: null,
@ -193,6 +241,10 @@ export default {
abilities,
legact: '',
legres: '',
damageImmunities: [],
damageResistances: [],
damageVulnerabilities: [],
conditionImmunities: [],
size: [],
creatureType: [],
}
@ -230,6 +282,10 @@ export default {
this.crRange = [0, 30];
this.legact = '';
this.legres = '';
this.damageImmunities = [];
this.damageResistances= [];
this.damageVulnerabilities= [];
this.conditionImmunities= [];
this.size = [];
this.creatureType = [];
},
@ -242,7 +298,15 @@ export default {
options[key] = value.label;
}
return options;
},
applyFilter(property, entries, result) {
if (property.length) {
property.forEach(value => {
result = result.filter(entry => entry.system.traits[entries].value.includes(value));
});
}
return result;
},
},
computed: {
entries() {
@ -289,12 +353,19 @@ export default {
Object.entries(this.abilities)
.forEach(([k, v]) => {
// Don't bother filtering if filter wasn't changed.
if (v.range[0] === 1 && v.range[1] === 30) return;
result = result.filter((entry) =>
Number(entry.system.abilities[k].value) >= v.range[0] &&
Number(entry.system.abilities[k].value) <= v.range[1]
)
});
result = this.applyFilter(this.damageImmunities, 'di', result);
result = this.applyFilter(this.damageResistances, 'dr', result);
result = this.applyFilter(this.damageVulnerabilities, 'dv', result);
result = this.applyFilter(this.conditionImmunities, 'ci', result);
// Reflow pager.
if (result.length > this.pager.perPage) {
this.pager.totalRows = result.length;
@ -345,6 +416,10 @@ export default {
'system.details.type',
'system.resources.legact',
'system.resources.legres',
'system.traits.di.value',
'system.traits.dr.value',
'system.traits.dv.value',
'system.traits.ci.value',
'system.traits.size'
// insert additional properties as needed.
]).then(packIndex => {