Skip to content

Commit 1727224

Browse files
committed
use CheckFlag and CalculatePowerStat from CalcsTab
1 parent 89d99f2 commit 1727224

2 files changed

Lines changed: 11 additions & 71 deletions

File tree

src/Classes/CalcsTab.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -372,8 +372,8 @@ function CalcsTabClass:SetDisplayStat(displayData, pin)
372372
self.controls.breakdown:SetBreakdownData(displayData, pin)
373373
end
374374

375-
function CalcsTabClass:CheckFlag(obj)
376-
local actor = self.input.showMinion and self.calcsEnv.minion or self.calcsEnv.player
375+
function CalcsTabClass:CheckFlag(obj, actor)
376+
actor = actor or (self.input.showMinion and self.calcsEnv.minion or self.calcsEnv.player)
377377
local skillFlags = actor.mainSkill.skillFlags
378378
if obj.flag and not skillFlags[obj.flag] then
379379
return

src/Classes/CompareTab.lua

Lines changed: 9 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1051,46 +1051,6 @@ function CompareTabClass:PopulateSetDropdown(tab, orderListField, setsField, act
10511051
control:SetList(list)
10521052
end
10531053

1054-
-- Check visibility flags for a section/row against an actor
1055-
function CompareTabClass:CheckCalcFlag(obj, actor)
1056-
if not actor or not actor.mainSkill then return true end
1057-
local skillFlags = actor.mainSkill.skillFlags or {}
1058-
if obj.flag and not skillFlags[obj.flag] then
1059-
return false
1060-
end
1061-
if obj.flagList then
1062-
for _, flag in ipairs(obj.flagList) do
1063-
if not skillFlags[flag] then
1064-
return false
1065-
end
1066-
end
1067-
end
1068-
if obj.playerFlag and not skillFlags[obj.playerFlag] then
1069-
return false
1070-
end
1071-
if obj.notFlag and skillFlags[obj.notFlag] then
1072-
return false
1073-
end
1074-
if obj.notFlagList then
1075-
for _, flag in ipairs(obj.notFlagList) do
1076-
if skillFlags[flag] then
1077-
return false
1078-
end
1079-
end
1080-
end
1081-
if obj.haveOutput then
1082-
local ns, var = obj.haveOutput:match("^(%a+)%.(%a+)$")
1083-
if ns then
1084-
if not actor.output[ns] or not actor.output[ns][var] or actor.output[ns][var] == 0 then
1085-
return false
1086-
end
1087-
elseif not actor.output[obj.haveOutput] or actor.output[obj.haveOutput] == 0 then
1088-
return false
1089-
end
1090-
end
1091-
return true
1092-
end
1093-
10941054
-- Format a config value for read-only display
10951055
function CompareTabClass:FormatConfigValue(varData, val)
10961056
if val == nil then return "^8(not set)" end
@@ -2287,26 +2247,6 @@ end
22872247
-- COMPARE POWER REPORT
22882248
-- ============================================================
22892249

2290-
-- Calculate the stat difference for a given power stat selection
2291-
-- output: result from calcFunc (with the change applied)
2292-
-- calcBase: baseline output (without the change)
2293-
-- Returns positive value if the change improves the stat
2294-
function CompareTabClass:CalculatePowerStat(selection, output, calcBase)
2295-
local withChange = output
2296-
local baseline = calcBase
2297-
if baseline.Minion and not selection.stat == "FullDPS" then
2298-
withChange = withChange.Minion
2299-
baseline = baseline.Minion
2300-
end
2301-
local withValue = withChange[selection.stat] or 0
2302-
local baseValue = baseline[selection.stat] or 0
2303-
if selection.transform then
2304-
withValue = selection.transform(withValue)
2305-
baseValue = selection.transform(baseValue)
2306-
end
2307-
return withValue - baseValue
2308-
end
2309-
23102250
-- Resolve the granted effect for a gem instance
23112251
function CompareTabClass:GetGemGrantedEffect(gem)
23122252
if gem.gemData and gem.gemData.grantedEffect then
@@ -2515,7 +2455,7 @@ function CompareTabClass:ComparePowerBuilder(compareEntry, powerStat, categories
25152455
output = calcFunc({ addNodes = { [pNode] = true } }, useFullDPS)
25162456
cache[pNode.modKey] = output
25172457
end
2518-
local impact = self:CalculatePowerStat(powerStat, output, calcBase)
2458+
local impact = self.primaryBuild.calcsTab:CalculatePowerStat(powerStat, output, calcBase)
25192459
local pathDist = pNode.pathDist or 0
25202460
if pathDist == 0 then
25212461
pathDist = #(pNode.path or {})
@@ -2570,7 +2510,7 @@ function CompareTabClass:ComparePowerBuilder(compareEntry, powerStat, categories
25702510
local newItem = new("Item", cItem.raw)
25712511
newItem:NormaliseQuality()
25722512
local output = calcFunc({ repSlotName = slotName, repItem = newItem }, useFullDPS)
2573-
local impact = self:CalculatePowerStat(powerStat, output, calcBase)
2513+
local impact = self.primaryBuild.calcsTab:CalculatePowerStat(powerStat, output, calcBase)
25742514
local impactStr, impactVal, combinedImpactStr, impactPercent, impactIsZero = formatImpact(impact)
25752515

25762516
if not impactIsZero then
@@ -2638,7 +2578,7 @@ function CompareTabClass:ComparePowerBuilder(compareEntry, powerStat, categories
26382578
if jEntry.pNodeAllocated then
26392579
-- Socket is allocated in primary build, test directly in that socket
26402580
local output = calcFunc({ repSlotName = jEntry.cSlotName, repItem = newItem }, useFullDPS)
2641-
bestImpactVal = self:CalculatePowerStat(powerStat, output, calcBase)
2581+
bestImpactVal = self.primaryBuild.calcsTab:CalculatePowerStat(powerStat, output, calcBase)
26422582
else
26432583
-- Socket is NOT allocated in primary build; try the jewel in every
26442584
-- jewel socket on the primary build's tree, temporarily allocating
@@ -2649,7 +2589,7 @@ function CompareTabClass:ComparePowerBuilder(compareEntry, powerStat, categories
26492589
override.addNodes = { [socketInfo.node] = true }
26502590
end
26512591
local output = calcFunc(override, useFullDPS)
2652-
local impact = self:CalculatePowerStat(powerStat, output, calcBase)
2592+
local impact = self.primaryBuild.calcsTab:CalculatePowerStat(powerStat, output, calcBase)
26532593
if bestImpactVal == nil or impact > bestImpactVal then
26542594
bestImpactVal = impact
26552595
bestSlotLabel = jEntry.label .. " (best socket)"
@@ -2721,7 +2661,7 @@ function CompareTabClass:ComparePowerBuilder(compareEntry, powerStat, categories
27212661
-- gemCalcFunc contains the error message on failure; skip this group
27222662
ConPrintf("Compare power (gem): %s", tostring(gemCalcFunc))
27232663
else
2724-
local impact = self:CalculatePowerStat(powerStat, gemCalcBase, calcBase)
2664+
local impact = self.primaryBuild.calcsTab:CalculatePowerStat(powerStat, gemCalcBase, calcBase)
27252665
local impactStr, impactVal, combinedImpactStr, impactPercent, impactIsZero = formatImpact(impact)
27262666
if not impactIsZero then
27272667
local label = self:GetSocketGroupLabel(cGroup)
@@ -2803,7 +2743,7 @@ function CompareTabClass:ComparePowerBuilder(compareEntry, powerStat, categories
28032743
if not ok then
28042744
ConPrintf("Compare power (support gem): %s", tostring(sgCalcFunc))
28052745
else
2806-
local impact = self:CalculatePowerStat(powerStat, sgCalcBase, calcBase)
2746+
local impact = self.primaryBuild.calcsTab:CalculatePowerStat(powerStat, sgCalcBase, calcBase)
28072747
local impactStr, impactVal, combinedImpactStr, impactPercent, impactIsZero = formatImpact(impact)
28082748

28092749
if not impactIsZero then
@@ -2874,7 +2814,7 @@ function CompareTabClass:ComparePowerBuilder(compareEntry, powerStat, categories
28742814
-- cfgCalcFunc contains the error message on failure; skip this config
28752815
ConPrintf("Compare power (config): %s", tostring(cfgCalcFunc))
28762816
else
2877-
local impact = self:CalculatePowerStat(powerStat, cfgCalcBase, calcBase)
2817+
local impact = self.primaryBuild.calcsTab:CalculatePowerStat(powerStat, cfgCalcBase, calcBase)
28782818
local impactStr, impactVal, combinedImpactStr, impactPercent, impactIsZero = formatImpact(impact)
28792819

28802820
-- Only include configs with non-zero impact
@@ -4233,15 +4173,15 @@ function CompareTabClass:DrawCalcs(vp, compareEntry)
42334173
local secWidth, id, group, colour, subSections = secDef[1], secDef[2], secDef[3], secDef[4], secDef[5]
42344174
local secData = subSections[1].data
42354175
-- Check section-level flags against primary actor
4236-
if self:CheckCalcFlag(secData, primaryActor) then
4176+
if self.primaryBuild.calcsTab:CheckFlag(secData, primaryActor) then
42374177
local subSecInfo = {}
42384178
local sectionHasRows = false
42394179
for _, subSec in ipairs(subSections) do
42404180
local rows = {}
42414181
for _, rowData in ipairs(subSec.data) do
42424182
-- Only include rows with a label and a first column with a format string
42434183
if rowData.label and rowData[1] and rowData[1].format then
4244-
if self:CheckCalcFlag(rowData, primaryActor) or self:CheckCalcFlag(rowData, compareActor) then
4184+
if self.primaryBuild.calcsTab:CheckFlag(rowData, primaryActor) or self.primaryBuild.calcsTab:CheckFlag(rowData, compareActor) then
42454185
t_insert(rows, rowData)
42464186
end
42474187
end

0 commit comments

Comments
 (0)