Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
7734edb
Add build comparison tab
oboking Mar 6, 2026
f1e5217
color code summary, add name for imported build, add item hover tooltips
oboking Mar 7, 2026
c1c7c8e
update calcs and config tabs to behave like their regular counterparts
oboking Mar 10, 2026
8939a56
add overlay option to the passive tree comparison
oboking Mar 10, 2026
ad9da2a
pair skill groups using Jaccard similarity
oboking Mar 17, 2026
849e269
add tooltip to calculation comparisons
oboking Mar 17, 2026
e1d0c3b
make tree overlay default comparison
oboking Mar 17, 2026
88f465a
Remove use of 'Jackard' in comment to fix spellcheck issue
oboking Mar 17, 2026
58e9884
add an expanded mode for item comparison
oboking Mar 18, 2026
7a43acc
add buttons to copy and copy+use the compared builds tree or items
oboking Mar 18, 2026
5dc8c22
improve ui/ux of compared item eg fixing overlapping texts
oboking Mar 19, 2026
4f22e99
split up draw into dedicated methods and add layout constants
oboking Mar 20, 2026
84f4949
include power report feature in summary
oboking Mar 21, 2026
2f42df2
add support for jewels
oboking Mar 22, 2026
05e02cf
included config options in the comparative power report
oboking Mar 22, 2026
a2038e6
add indicator on gems in similar gem groups if they are mismatching
oboking Mar 22, 2026
a234481
add functionality to buy similar items
oboking Mar 22, 2026
93866aa
improve UX of items tab
oboking Mar 24, 2026
396e8d6
clean up duplication in PassiveTreeView
oboking Mar 24, 2026
b56cbcc
expand mod support when buying similar items
oboking Mar 28, 2026
b7b98d6
add listing type when buying similar items
oboking Mar 29, 2026
0aeb7f2
handle Ring 3 slot
oboking Mar 29, 2026
b9b24e9
persist compared imported builds through saves
oboking Mar 30, 2026
a78c823
add hover effects on 'tree' and 'item' list items in the compare powe…
oboking Mar 30, 2026
cfd0871
rework interface of configuration comparison
oboking Apr 3, 2026
f6157b7
update colors and text alignment of stats summary
oboking Apr 3, 2026
197ee01
handle mouse scroll in compare power report list
oboking Apr 3, 2026
24de425
include compared builds in save name
oboking Apr 3, 2026
f8b308f
handle overlapping build names in summary tab
oboking Apr 3, 2026
03e4f5b
skill gem highlighting
oboking Apr 3, 2026
8e9aeb7
handle unprotected state mutation in power report
oboking Apr 3, 2026
afc641d
handling unsaved changes for compared build
oboking Apr 3, 2026
97e4ab5
include support gems in compare power report
oboking Apr 3, 2026
3a60492
add constant for cluster node threshold limit/offset
oboking Apr 3, 2026
39bce75
create CompareTradeHelpers
oboking Apr 4, 2026
48e3b24
add CompareBuySimilar.lua for logic related to buying similar items
oboking Apr 4, 2026
40d7219
adds CompareCalcsHelpers for isolated calcs logic
oboking Apr 4, 2026
be41832
include notes from compared build
oboking Apr 4, 2026
e0cbe0f
add local helpers to remove duplicate blocks
oboking Apr 4, 2026
c9824af
add skill and calc controls to calcs tab
oboking Apr 6, 2026
2296ab4
rename tmpl to template
oboking Apr 12, 2026
9a60271
improve compared gems/skills sorting and grouping
oboking Apr 12, 2026
00ebedd
update compare tab top content layout/spacing
oboking Apr 12, 2026
faa4a66
remove redundant Name label
oboking Apr 14, 2026
e2b1450
disable re-import current button instead of using a popup when none i…
oboking Apr 14, 2026
e249a05
fix power report metric dropdown tooltip
oboking Apr 14, 2026
e3a4a22
improve spacings/positions of inputs
oboking Apr 14, 2026
0ee2c75
filter out same and non-impacting items in power report
oboking Apr 17, 2026
dab3609
add scrollbar to calcs tab
oboking Apr 17, 2026
3307d92
properly handle minion damage calculation
oboking Apr 17, 2026
d8a169c
cleanup controls layout
oboking Apr 17, 2026
89d99f2
move common calc format code between CompareTab and CalcSectionContro…
oboking Apr 17, 2026
1727224
use CheckFlag and CalculatePowerStat from CalcsTab
oboking Apr 17, 2026
8ac927c
EXTRAct common trade category info between TradeQueryGenerator and Co…
oboking Apr 17, 2026
a837359
remove compared build from save
oboking Apr 17, 2026
7f182d6
add option to import compared builds from local build folder
oboking Apr 17, 2026
23a6169
fix overlapping save names in config tab when main characters name is…
oboking Apr 17, 2026
885e780
fix hover error on exclusive jewel nodes after cleanup
oboking Apr 17, 2026
0123926
Remove Notes from Compare tab
Wires77 Apr 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 2 additions & 60 deletions src/Classes/CalcSectionControl.lua
Original file line number Diff line number Diff line change
Expand Up @@ -157,64 +157,6 @@ function CalcSectionClass:UpdatePos()
end
end

function CalcSectionClass:FormatVal(val, p)
return formatNumSep(tostring(round(val, p)))
end

function CalcSectionClass:FormatStr(str, actor, colData)
str = str:gsub("{output:([%a%.:]+)}", function(c)
local ns, var = c:match("^(%a+)%.(%a+)$")
if ns then
return actor.output[ns] and actor.output[ns][var] or ""
else
return actor.output[c] or ""
end
end)
str = str:gsub("{(%d+):output:([%a%.:]+)}", function(p, c)
local ns, var = c:match("^(%a+)%.(%a+)$")
if ns then
return self:FormatVal(actor.output[ns] and actor.output[ns][var] or 0, tonumber(p))
else
return self:FormatVal(actor.output[c] or 0, tonumber(p))
end
end)
str = str:gsub("{(%d+):mod:([%d,]+)}", function(p, n)
local numList = { }
for num in n:gmatch("%d+") do
t_insert(numList, tonumber(num))
end
local modType = colData[numList[1]].modType
local modTotal = modType == "MORE" and 1 or 0
for _, num in ipairs(numList) do
local sectionData = colData[num]
local modCfg = (sectionData.cfg and actor.mainSkill[sectionData.cfg.."Cfg"]) or { }
if sectionData.modSource then
modCfg.source = sectionData.modSource
end
if sectionData.actor then
modCfg.actor = sectionData.actor
end
local modVal
local modStore = (sectionData.enemy and actor.enemy.modDB) or (sectionData.cfg and actor.mainSkill.skillModList) or actor.modDB
if type(sectionData.modName) == "table" then
modVal = modStore:Combine(sectionData.modType, modCfg, unpack(sectionData.modName))
else
modVal = modStore:Combine(sectionData.modType, modCfg, sectionData.modName)
end
if modType == "MORE" then
modTotal = modTotal * modVal
else
modTotal = modTotal + modVal
end
end
if modType == "MORE" then
modTotal = (modTotal - 1) * 100
end
return self:FormatVal(modTotal, tonumber(p))
end)
return str
end

function CalcSectionClass:Draw(viewPort, noTooltip)
local x, y = self:GetPos()
local width, height = self:GetSize()
Expand Down Expand Up @@ -245,7 +187,7 @@ function CalcSectionClass:Draw(viewPort, noTooltip)
DrawString(x + 3, lineY + 3, "LEFT", 16, "VAR BOLD", textColor..subSec.label..":")
if subSec.data.extra then
local x = x + 3 + DrawStringWidth(16, "VAR BOLD", subSec.label) + 10
DrawString(x, lineY + 3, "LEFT", 16, "VAR", "^7"..self:FormatStr(subSec.data.extra, actor))
DrawString(x, lineY + 3, "LEFT", 16, "VAR", "^7"..formatCalcStr(subSec.data.extra, actor))
end
end
-- Draw line below label
Expand Down Expand Up @@ -300,7 +242,7 @@ function CalcSectionClass:Draw(viewPort, noTooltip)
end
local textSize = rowData.textSize or 14
SetViewport(colData.x + 3, colData.y, colData.width - 4, colData.height)
DrawString(1, 9 - textSize/2, "LEFT", textSize, "VAR", "^7"..self:FormatStr(colData.format, actor, colData))
DrawString(1, 9 - textSize/2, "LEFT", textSize, "VAR", "^7"..formatCalcStr(colData.format, actor, colData))
SetViewport()
end
end
Expand Down
4 changes: 2 additions & 2 deletions src/Classes/CalcsTab.lua
Original file line number Diff line number Diff line change
Expand Up @@ -372,8 +372,8 @@ function CalcsTabClass:SetDisplayStat(displayData, pin)
self.controls.breakdown:SetBreakdownData(displayData, pin)
end

function CalcsTabClass:CheckFlag(obj)
local actor = self.input.showMinion and self.calcsEnv.minion or self.calcsEnv.player
function CalcsTabClass:CheckFlag(obj, actor)
actor = actor or (self.input.showMinion and self.calcsEnv.minion or self.calcsEnv.player)
local skillFlags = actor.mainSkill.skillFlags
if obj.flag and not skillFlags[obj.flag] then
return
Expand Down
Loading
Loading