Skip to content

Commit 3307d92

Browse files
committed
properly handle minion damage calculation
1 parent dab3609 commit 3307d92

1 file changed

Lines changed: 60 additions & 15 deletions

File tree

src/Classes/CompareTab.lua

Lines changed: 60 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,12 @@ function CompareTabClass:InitControls()
517517
end)
518518
self.controls.primCalcsMineCount.shown = false
519519

520+
self.controls.primCalcsShowMinion = new("CheckBoxControl", nil, {0, 0, 18}, nil, function(state)
521+
self.primaryBuild.calcsTab.input.showMinion = state
522+
self.primaryBuild.buildFlag = true
523+
end, "Show stats for the minion instead of the player.")
524+
self.controls.primCalcsShowMinion.shown = false
525+
520526
self.controls.primCalcsMinion = new("DropDownControl", nil, {0, 0, 140, 18}, {}, function(index, value)
521527
local mainSocketGroup = self.primaryBuild.skillsTab.socketGroupList[self.primaryBuild.calcsTab.input.skill_number]
522528
if mainSocketGroup then
@@ -633,6 +639,16 @@ function CompareTabClass:InitControls()
633639
end)
634640
self.controls.cmpCalcsMineCount.shown = false
635641

642+
self.controls.cmpCalcsShowMinion = new("CheckBoxControl", nil, {0, 0, 18}, nil, function(state)
643+
local entry = self:GetActiveCompare()
644+
if entry then
645+
entry.calcsTab.input.showMinion = state
646+
entry.buildFlag = true
647+
self.modFlag = true
648+
end
649+
end, "Show stats for the minion instead of the player.")
650+
self.controls.cmpCalcsShowMinion.shown = false
651+
636652
self.controls.cmpCalcsMinion = new("DropDownControl", nil, {0, 0, 140, 18}, {}, function(index, value)
637653
local entry = self:GetActiveCompare()
638654
if entry then
@@ -2178,6 +2194,8 @@ function CompareTabClass:RefreshCalcsSkillControls(compareEntry)
21782194
self.controls.primCalcsSocketGroup.shown = true
21792195
self.controls.primCalcsMode.shown = true
21802196
self.controls.primCalcsMode:SelByValue(self.primaryBuild.calcsTab.input.misc_buffMode, "buffMode")
2197+
self.controls.primCalcsShowMinion.shown = self.controls.primCalcsMinion.shown == true
2198+
self.controls.primCalcsShowMinion.state = self.primaryBuild.calcsTab.input.showMinion and true or false
21812199

21822200
local cmpControls = {
21832201
mainSocketGroup = self.controls.cmpCalcsSocketGroup,
@@ -2193,15 +2211,17 @@ function CompareTabClass:RefreshCalcsSkillControls(compareEntry)
21932211
self.controls.cmpCalcsSocketGroup.shown = true
21942212
self.controls.cmpCalcsMode.shown = true
21952213
self.controls.cmpCalcsMode:SelByValue(compareEntry.calcsTab.input.misc_buffMode, "buffMode")
2214+
self.controls.cmpCalcsShowMinion.shown = self.controls.cmpCalcsMinion.shown == true
2215+
self.controls.cmpCalcsShowMinion.state = compareEntry.calcsTab.input.showMinion and true or false
21962216

21972217
-- Wrap .shown booleans set by RefreshSkillSelectControls with a view-mode gate,
21982218
-- so controls auto-hide when not in CALCS mode (matching configShown pattern)
21992219
local calcsControlNames = {
22002220
"primCalcsSocketGroup", "primCalcsMainSkill", "primCalcsSkillPart",
2201-
"primCalcsStageCount", "primCalcsMineCount", "primCalcsMinion",
2221+
"primCalcsStageCount", "primCalcsMineCount", "primCalcsShowMinion", "primCalcsMinion",
22022222
"primCalcsMinionSkill", "primCalcsMode",
22032223
"cmpCalcsSocketGroup", "cmpCalcsMainSkill", "cmpCalcsSkillPart",
2204-
"cmpCalcsStageCount", "cmpCalcsMineCount", "cmpCalcsMinion",
2224+
"cmpCalcsStageCount", "cmpCalcsMineCount", "cmpCalcsShowMinion", "cmpCalcsMinion",
22052225
"cmpCalcsMinionSkill", "cmpCalcsMode",
22062226
}
22072227
for _, name in ipairs(calcsControlNames) do
@@ -2225,7 +2245,7 @@ function CompareTabClass:LayoutCalcsSkillControls(vp, compareEntry)
22252245
local colWidth = m_floor((vp.width - 20) / 2)
22262246
local leftX = vp.x + 4
22272247
local rightX = leftX + colWidth + 12
2228-
local labelW = 100
2248+
local labelW = 140
22292249
local controlW = colWidth - labelW - 8
22302250
local rowH = 22
22312251
local y = vp.y + 4
@@ -2289,6 +2309,14 @@ function CompareTabClass:LayoutCalcsSkillControls(vp, compareEntry)
22892309
rightY = rightY + rowH
22902310
end
22912311

2312+
-- Show Minion Stats
2313+
if layoutRow(self.controls.primCalcsShowMinion, leftX, leftY) then
2314+
leftY = leftY + rowH
2315+
end
2316+
if layoutRow(self.controls.cmpCalcsShowMinion, rightX, rightY) then
2317+
rightY = rightY + rowH
2318+
end
2319+
22922320
-- Minion
22932321
if layoutRow(self.controls.primCalcsMinion, leftX, leftY, controlW) then
22942322
leftY = leftY + rowH
@@ -3038,8 +3066,20 @@ end
30383066
-- SUMMARY VIEW
30393067
-- ============================================================
30403068
function CompareTabClass:DrawSummary(vp, compareEntry)
3041-
local primaryOutput = self.primaryBuild.calcsTab.mainOutput
3042-
local compareOutput = compareEntry:GetOutput()
3069+
local primaryCalcs = self.primaryBuild.calcsTab
3070+
local compareCalcs = compareEntry.calcsTab
3071+
local primaryEnvMain = primaryCalcs and primaryCalcs.mainEnv
3072+
local compareEnvMain = compareCalcs and compareCalcs.mainEnv
3073+
3074+
-- If each selected builds skill is a minion skill, use it
3075+
local primaryMinionSkill = primaryEnvMain and primaryEnvMain.player and primaryEnvMain.player.mainSkill
3076+
and primaryEnvMain.player.mainSkill.minion and primaryEnvMain.minion
3077+
local compareMinionSkill = compareEnvMain and compareEnvMain.player and compareEnvMain.player.mainSkill
3078+
and compareEnvMain.player.mainSkill.minion and compareEnvMain.minion
3079+
local summaryUseMinion = primaryMinionSkill or compareMinionSkill
3080+
3081+
local primaryOutput = primaryMinionSkill and primaryEnvMain.minion.output or primaryCalcs.mainOutput
3082+
local compareOutput = compareMinionSkill and compareEnvMain.minion.output or compareEntry:GetOutput()
30433083
if not primaryOutput or not compareOutput then
30443084
return
30453085
end
@@ -3079,11 +3119,11 @@ function CompareTabClass:DrawSummary(vp, compareEntry)
30793119
drawY = drawY + 6
30803120

30813121
-- Stat comparison
3082-
local displayStats = self.primaryBuild.displayStats
3083-
local primaryEnv = self.primaryBuild.calcsTab.mainEnv
3084-
local compareEnv = compareEntry.calcsTab.mainEnv
3122+
local displayStats = summaryUseMinion and self.primaryBuild.minionDisplayStats or self.primaryBuild.displayStats
3123+
local primaryActor = primaryMinionSkill and primaryEnvMain.minion or primaryEnvMain.player
3124+
local compareActor = compareMinionSkill and compareEnvMain.minion or compareEnvMain.player
30853125

3086-
drawY = self:DrawStatList(drawY, displayStats, primaryOutput, compareOutput, primaryEnv, compareEnv, col1, col4, col2R, col3R)
3126+
drawY = self:DrawStatList(drawY, displayStats, primaryOutput, compareOutput, primaryActor, compareActor, col1, col4, col2R, col3R)
30873127

30883128
-- ========================================
30893129
-- Compare Power Report section
@@ -3173,12 +3213,13 @@ function CompareTabClass:DrawSummary(vp, compareEntry)
31733213
end
31743214

31753215

3176-
function CompareTabClass:DrawStatList(drawY, displayStats, primaryOutput, compareOutput, primaryEnv, compareEnv, col1, col4, col2R, col3R)
3216+
function CompareTabClass:DrawStatList(drawY, displayStats, primaryOutput, compareOutput, primaryActor, compareActor, col1, col4, col2R, col3R)
31773217
local lineHeight = 16
31783218

3179-
-- Get skill flags from both builds for stat filtering
3180-
local primaryFlags = primaryEnv and primaryEnv.player and primaryEnv.player.mainSkill and primaryEnv.player.mainSkill.skillFlags or {}
3181-
local compareFlags = compareEnv and compareEnv.player and compareEnv.player.mainSkill and compareEnv.player.mainSkill.skillFlags or {}
3219+
-- Get skill flags from each build's selected actor (player, or minion when the
3220+
-- top-section "Skill:" is a minion skill) for stat filtering
3221+
local primaryFlags = primaryActor and primaryActor.mainSkill and primaryActor.mainSkill.skillFlags or {}
3222+
local compareFlags = compareActor and compareActor.mainSkill and compareActor.mainSkill.skillFlags or {}
31823223

31833224
for _, statData in ipairs(displayStats) do
31843225
if not statData.stat and not statData.label then
@@ -4194,6 +4235,10 @@ function CompareTabClass:DrawCalcsSkillHeader(vp, compareEntry, headerHeight, pr
41944235
if drawLabel("Mines", leftX, leftY, self.controls.primCalcsMineCount) then leftY = leftY + rowH end
41954236
if drawLabel("Mines", rightX, rightY, self.controls.cmpCalcsMineCount) then rightY = rightY + rowH end
41964237

4238+
-- Show Minion Stats
4239+
if drawLabel("Show Minion Stats", leftX, leftY, self.controls.primCalcsShowMinion) then leftY = leftY + rowH end
4240+
if drawLabel("Show Minion Stats", rightX, rightY, self.controls.cmpCalcsShowMinion) then rightY = rightY + rowH end
4241+
41974242
-- Minion
41984243
if drawLabel("Minion", leftX, leftY, self.controls.primCalcsMinion) then leftY = leftY + rowH end
41994244
if drawLabel("Minion", rightX, rightY, self.controls.cmpCalcsMinion) then rightY = rightY + rowH end
@@ -4265,8 +4310,8 @@ function CompareTabClass:DrawCalcs(vp, compareEntry)
42654310
local primaryEnv = self.primaryBuild.calcsTab.calcsEnv
42664311
local compareEnv = compareEntry.calcsTab and compareEntry.calcsTab.calcsEnv
42674312
if not primaryEnv or not compareEnv then return end
4268-
local primaryActor = primaryEnv.player
4269-
local compareActor = compareEnv.player
4313+
local primaryActor = (self.primaryBuild.calcsTab.input.showMinion and primaryEnv.minion) or primaryEnv.player
4314+
local compareActor = (compareEntry.calcsTab.input.showMinion and compareEnv.minion) or compareEnv.player
42704315
if not primaryActor or not compareActor then return end
42714316

42724317
-- Skill detail header height

0 commit comments

Comments
 (0)