mirror of
https://github.com/brues-code/pfUI.git
synced 2026-09-21 23:26:56 +00:00
Add reverse sort direction and priority options to bag sorter
libbagsort:Sort now accepts an opts table:
- reverse: place the first-ranked item into the last slot of the last
bag (junk fills from the opposite end)
- reversePrio: flip the category ranking (e.g. hearthstone sorts last)
Wired to two new checkboxes under Bags & Bank, both defaulting off.
This commit is contained in:
@@ -174,6 +174,8 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("appearance", "bags", "bagrowlength", "10")
|
||||
pfUI:UpdateConfig("appearance", "bags", "bankrowlength", "10")
|
||||
pfUI:UpdateConfig("appearance", "bags", "autoSortOnOpen", "0")
|
||||
pfUI:UpdateConfig("appearance", "bags", "sortreverse", "0")
|
||||
pfUI:UpdateConfig("appearance", "bags", "sortprioreverse", "0")
|
||||
pfUI:UpdateConfig("appearance", "minimap", "size", "140")
|
||||
pfUI:UpdateConfig("appearance", "minimap", "arrowscale", "1")
|
||||
pfUI:UpdateConfig("appearance", "minimap", "zonetext", "off")
|
||||
|
||||
+39
-5
@@ -53,10 +53,20 @@ end
|
||||
local function ClearSortData()
|
||||
libbagsort.itemGrid = {}
|
||||
libbagsort.bagList = nil
|
||||
libbagsort.opts = nil
|
||||
libbagsort:UnregisterEvent("BAG_UPDATE_DELAYED")
|
||||
libbagsort:SetScript("OnEvent", nil)
|
||||
end
|
||||
|
||||
local function ReverseArray(t)
|
||||
local i, j = 1, table.getn(t)
|
||||
while i < j do
|
||||
t[i], t[j] = t[j], t[i]
|
||||
i = i + 1
|
||||
j = j - 1
|
||||
end
|
||||
end
|
||||
|
||||
-- Two-pointer consolidation: sorts stacks largest-first, then merges from
|
||||
-- both ends toward the middle. n is set explicitly so table.getn / table.sort
|
||||
-- work correctly in Lua 5.0.
|
||||
@@ -181,10 +191,28 @@ local function BuildSortGrid()
|
||||
end
|
||||
end
|
||||
|
||||
table.sort(normalItems, function(a, b) return a.key < b.key end)
|
||||
-- Sort poor items descending so they read in ascending order when placed
|
||||
-- back-to-front (last poor item lands on the last slot).
|
||||
table.sort(poorItems, function(a, b) return a.key > b.key end)
|
||||
local opts = libbagsort.opts or {}
|
||||
local reverse = opts.reverse
|
||||
local reversePrio = opts.reversePrio
|
||||
|
||||
if reverse then
|
||||
ReverseArray(generalCells)
|
||||
for _, cells in pairs(specialtyCells) do
|
||||
ReverseArray(cells)
|
||||
end
|
||||
end
|
||||
|
||||
if reversePrio then
|
||||
table.sort(normalItems, function(a, b) return a.key > b.key end)
|
||||
else
|
||||
table.sort(normalItems, function(a, b) return a.key < b.key end)
|
||||
end
|
||||
|
||||
if reverse then
|
||||
table.sort(poorItems, function(a, b) return a.key < b.key end)
|
||||
else
|
||||
table.sort(poorItems, function(a, b) return a.key > b.key end)
|
||||
end
|
||||
|
||||
-- Forward pass: route each normal item into the next free cell that
|
||||
-- accepts it -- a matching specialty bag first, overflowing to general.
|
||||
@@ -274,9 +302,15 @@ end
|
||||
-- BAG_UPDATE_DELAYED cycle), then place items by category/name/quality.
|
||||
-- e.g. `libbagsort:Sort({0, 1, 2, 3, 4})` for the main bags;
|
||||
-- `{-1, 5, 6, 7, 8, 9, 10}` for the bank.
|
||||
function libbagsort:Sort(bagList)
|
||||
--
|
||||
-- opts (optional): { reverse = bool, reversePrio = bool }
|
||||
-- reverse - place the first-ranked item into the last slot of the last
|
||||
-- bag (junk fills from the opposite end).
|
||||
-- reversePrio - flip the category ranking (e.g. hearthstone sorts last).
|
||||
function libbagsort:Sort(bagList, opts)
|
||||
ClearSortData()
|
||||
self.bagList = bagList
|
||||
self.opts = opts
|
||||
|
||||
-- Phase 1: fire every consolidation op in a single batch.
|
||||
local ops = BuildConsolidateOps(bagList)
|
||||
|
||||
+10
-3
@@ -8,6 +8,13 @@ pfUI:RegisterModule("bags", function ()
|
||||
|
||||
local scanner = libtipscan:GetScanner("input_search")
|
||||
|
||||
local function BagSortOpts()
|
||||
return {
|
||||
reverse = C.appearance.bags.sortreverse == "1",
|
||||
reversePrio = C.appearance.bags.sortprioreverse == "1",
|
||||
}
|
||||
end
|
||||
|
||||
-- function to detect openable items in inventory
|
||||
local openable = { bag = nil, slot = nil, icon = nil }
|
||||
local function GetNextOpenable()
|
||||
@@ -343,7 +350,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
chat:Hide()
|
||||
end
|
||||
if C.appearance.bags.autoSortOnOpen == "1" then
|
||||
libbagsort:Sort({0, 1, 2, 3, 4})
|
||||
libbagsort:Sort({0, 1, 2, 3, 4}, BagSortOpts())
|
||||
end
|
||||
pfUI.bag:CreateBags(object)
|
||||
PlaySound("INTERFACESOUND_BACKPACKOPEN")
|
||||
@@ -993,7 +1000,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
end)
|
||||
|
||||
frame.sort:SetScript("OnClick", function()
|
||||
libbagsort:Sort({0, 1, 2, 3, 4})
|
||||
libbagsort:Sort({0, 1, 2, 3, 4}, BagSortOpts())
|
||||
end)
|
||||
end
|
||||
|
||||
@@ -1231,7 +1238,7 @@ pfUI:RegisterModule("bags", function ()
|
||||
end)
|
||||
|
||||
frame.sort:SetScript("OnClick", function()
|
||||
libbagsort:Sort({-1, 5, 6, 7, 8, 9, 10})
|
||||
libbagsort:Sort({-1, 5, 6, 7, 8, 9, 10}, BagSortOpts())
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -2435,6 +2435,8 @@ pfUI:RegisterModule("gui", function ()
|
||||
CreateConfig(nil, T["Auto Sell Grey Items"], C.global, "autosell", "checkbox")
|
||||
CreateConfig(nil, T["Auto Repair Items"], C.global, "autorepair", "checkbox")
|
||||
CreateConfig(nil, T["Auto Sort When Opening Bags"], C.appearance.bags, "autoSortOnOpen", "checkbox")
|
||||
CreateConfig(nil, T["Reverse Sort Direction (Last Bag First)"], C.appearance.bags, "sortreverse", "checkbox")
|
||||
CreateConfig(nil, T["Reverse Sort Priority (Hearthstone Last)"], C.appearance.bags, "sortprioreverse", "checkbox")
|
||||
end)
|
||||
|
||||
CreateGUIEntry(T["Loot"], nil, function()
|
||||
|
||||
Reference in New Issue
Block a user