diff --git a/app.js b/app.js index a1a2c5f..a4f8934 100644 --- a/app.js +++ b/app.js @@ -764,6 +764,26 @@ function findOptimalDamageSetup(totals, effectCount, combatStyle, optimizationTa return best; } +function createTotalsFromOptimumCounts(totals, optimumCounts, currentSummary = null) { + const effects = createEmptyEffectTotals(); + for (const effect of EFFECTS) { + const count = optimumCounts[effect.id] || 0; + if (!count) continue; + const current = currentSummary?.[effect.id]; + const valuePerEffect = current?.count ? current.total / current.count : effect.cap; + effects[effect.id] = count * valuePerEffect; + } + return { baseDamage: totals.baseDamage, baseHealth: totals.baseHealth, effects }; +} + +function calculateDpsAndRegen(totals) { + const dps = calculateDps(totals, state.combatStyle); + return { + dps, + regen: calculateRegenDetails(totals, dps).total, + }; +} + function renderEffectComparisonRows(optimumCounts, currentSummary) { const rows = EFFECTS.map((effect) => { const optimumCount = optimumCounts[effect.id] || 0; @@ -788,13 +808,20 @@ function renderOptimalDamageSetup(totals, currentDps) { const currentMetric = calculateOptimizationMetric(totals, state.combatStyle, state.optimizationTarget, metricContext); const delta = percentChange(currentMetric, optimum.metric); const currentEffectSummary = summarizeCurrentEffects(); + const optimumCounts = effectCount ? optimum.counts : {}; + const fullOptimumMetrics = calculateDpsAndRegen(createTotalsFromOptimumCounts(totals, optimumCounts)); + const averageOptimumMetrics = calculateDpsAndRegen(createTotalsFromOptimumCounts(totals, optimumCounts, currentEffectSummary)); $("#optimumEffectCount").textContent = `${effectCount} effect${effectCount === 1 ? "" : "s"}`; $("#optimumMetricLabel").textContent = getOptimizationMetricLabel(state.optimizationTarget); $("#optimumDps").textContent = fmt(optimum.metric); $("#optimumDpsDelta").textContent = formatDelta(delta, "%"); $("#optimumDpsDelta").className = deltaClass(delta); - renderEffectComparisonRows(effectCount ? optimum.counts : {}, currentEffectSummary); + $("#optimumFullDps").textContent = fmt(fullOptimumMetrics.dps); + $("#optimumFullRegen").textContent = fmt(fullOptimumMetrics.regen); + $("#optimumAverageDps").textContent = fmt(averageOptimumMetrics.dps); + $("#optimumAverageRegen").textContent = fmt(averageOptimumMetrics.regen); + renderEffectComparisonRows(optimumCounts, currentEffectSummary); } function getOptimizationMetricContext(totals, effectCount, combatStyle, optimizationTarget) { diff --git a/index.html b/index.html index 05ba4ef..2127e47 100644 --- a/index.html +++ b/index.html @@ -108,6 +108,10 @@