diff --git a/renderer/src/web/price-check/filters/create-stat-filters.ts b/renderer/src/web/price-check/filters/create-stat-filters.ts index 5fe5b425..f240d6b0 100644 --- a/renderer/src/web/price-check/filters/create-stat-filters.ts +++ b/renderer/src/web/price-check/filters/create-stat-filters.ts @@ -225,6 +225,7 @@ export function createExactStatFilters( ) { enableAllFilters(ctx.filters); } + if (opts.defaultAllSelected) { enableAllFilters(ctx.filters); } @@ -453,6 +454,18 @@ export function calculatedStatToFilter( } } + let goodness: number | undefined; + if (calc.stat.better !== StatBetter.NotComparable) { + if (roll.min === roll.max) { + goodness = 1; + } else { + goodness = (roll.value - roll.min) / (roll.max - roll.min); + if (calc.stat.better === StatBetter.NegativeRoll) { + goodness = 1 - goodness; + } + } + } + const dp = calc.stat.dp || calc.sources.some( @@ -506,6 +519,7 @@ export function calculatedStatToFilter( dp, isNegated: false, tradeInvert: calc.stat.trade.inverted, + goodness, }; filterFillMinMax(filter.roll, calc.stat.better); @@ -765,3 +779,18 @@ function enableAllFilters(filters: StatFilter[]) { } } } + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +function enableGoodRolledFilters(filters: StatFilter[], abovePct: number) { + for (const filter of filters) { + if (filter.hidden) continue; + if (!filter.roll || filter.roll.goodness == null) { + filter.disabled = false; + continue; + } + + if (filter.roll.goodness >= abovePct) { + filter.disabled = false; + } + } +} diff --git a/renderer/src/web/price-check/filters/interfaces.ts b/renderer/src/web/price-check/filters/interfaces.ts index 3d3dfb4f..d66d2f8e 100644 --- a/renderer/src/web/price-check/filters/interfaces.ts +++ b/renderer/src/web/price-check/filters/interfaces.ts @@ -108,6 +108,7 @@ export interface StatFilterRoll { tradeInvert?: boolean; dp: boolean; isNegated: boolean; + goodness?: number; } export interface StatFilter {