bbe2492a5b
Each DataStore_* / Altoholic_* addon now lives at the repo root, matching the Exiles fork-layout convention (one folder per addon, no wrapper dir).
143 lines
3.9 KiB
Lua
143 lines
3.9 KiB
Lua
local addonName = ...
|
|
local addon = _G[addonName]
|
|
|
|
local filters = {}
|
|
local searchedItem = {}
|
|
|
|
-- item filtering functions
|
|
local function FilterExistence()
|
|
if searchedItem["itemName"] and searchedItem["itemRarity"] then
|
|
return true -- if both values are valid, the item exists in the game's item cache
|
|
end
|
|
end
|
|
|
|
local function FilterType()
|
|
local itemType = filters["itemType"]
|
|
if not itemType or searchedItem["itemType"] == itemType then
|
|
return true -- no filter, or searched item is the same type as filter, keep it
|
|
end
|
|
end
|
|
|
|
local function FilterSubType()
|
|
local subType = filters["itemSubType"]
|
|
if not subType or searchedItem["itemSubType"] == subType then
|
|
return true -- no filter, or searched item is the same sub type as filter, keep it
|
|
end
|
|
end
|
|
|
|
local function FilterRarity()
|
|
local rarity = filters["itemRarity"]
|
|
if not rarity or searchedItem["itemRarity"] >= rarity then
|
|
return true -- no filter, or searched item has higher rarity than filter, keep it
|
|
end
|
|
end
|
|
|
|
local function FilterItemLevel()
|
|
if searchedItem["itemLevel"] > filters["itemLevel"] then -- strictly superior, fully intentional
|
|
return true -- searched item has higher iLvl than filter, keep it
|
|
end
|
|
end
|
|
|
|
local function FilterEquipmentSlot()
|
|
if addon.Equipment:GetInventoryTypeIndex(searchedItem["itemEquipLoc"]) == filters["itemSlot"] then
|
|
return true -- same slot as filter, keep the item
|
|
end
|
|
end
|
|
|
|
local function FilterName()
|
|
if string.find(strlower(searchedItem["itemName"]), filters["itemName"], 1, true) then
|
|
return true -- name contains the filter value, keep the item
|
|
end
|
|
end
|
|
|
|
local function FilterMinimumLevel()
|
|
local minLevel = searchedItem["itemMinLevel"]
|
|
if minLevel == 0 then
|
|
if (addon.Options:Get("IncludeNoMinLevel") == 1) then
|
|
return true -- include items with no minimum requireement
|
|
end
|
|
else
|
|
if minLevel >= filters["itemMinLevel"] then
|
|
return true -- include if within the right level boundaries
|
|
end
|
|
end
|
|
end
|
|
|
|
local function FilterMaximumLevel()
|
|
if searchedItem["itemMinLevel"] <= filters["itemMaxLevel"] then
|
|
return true -- item min level is below max filter, keep the item
|
|
end
|
|
end
|
|
|
|
local filterFunctions = {
|
|
["Existence"] = FilterExistence,
|
|
["Type"] = FilterType,
|
|
["SubType"] = FilterSubType,
|
|
["Rarity"] = FilterRarity,
|
|
["ItemLevel"] = FilterItemLevel,
|
|
["EquipmentSlot"] = FilterEquipmentSlot,
|
|
["Name"] = FilterName,
|
|
["MinLevel"] = FilterMinimumLevel,
|
|
["Maxlevel"] = FilterMaximumLevel,
|
|
}
|
|
|
|
addon.ItemFilters = {}
|
|
|
|
local ns = addon.ItemFilters -- ns = namespace
|
|
|
|
function ns:SetFilterValue(field, value)
|
|
filters[field] = value
|
|
end
|
|
|
|
function ns:GetFilterValue(field)
|
|
return filters[field]
|
|
end
|
|
|
|
function ns:EnableFilter(filter)
|
|
if filterFunctions[filter] then
|
|
filters.list = filters.list or {}
|
|
table.insert(filters.list, filterFunctions[filter])
|
|
end
|
|
end
|
|
|
|
function ns:ItemPassesFilters()
|
|
-- Exclusive approach:
|
|
-- by default, it is considered that no item if filtered out unless a specific filter is enabled.
|
|
-- ex: if a user wants to filter items based on their level in the UI, it means he doesn't want to see items outside of the specifies boundaries, so the filter "Level" is enabled, and items are filtered out.
|
|
|
|
if filters.list then -- there might not be any filter
|
|
for _, func in pairs(filters.list) do
|
|
if not func() then -- if any of the filters returns false/nil, exit
|
|
return
|
|
end
|
|
end
|
|
end
|
|
return true -- return true if all filters have returned true
|
|
end
|
|
|
|
function ns:ClearFilters()
|
|
wipe(filters)
|
|
end
|
|
|
|
function ns:TryFilter(filter)
|
|
if filterFunctions[filter] then
|
|
return filterFunctions[filter]()
|
|
end
|
|
end
|
|
|
|
-- currently searched item
|
|
function ns:SetSearchedItem(itemID)
|
|
local s = searchedItem
|
|
|
|
s.itemID = itemID
|
|
s.itemName, s.itemLink, s.itemRarity, s.itemLevel, s.itemMinLevel, s.itemType, s.itemSubType, _, s.itemEquipLoc = GetItemInfo(itemID)
|
|
end
|
|
|
|
function ns:GetSearchedItemInfo(field)
|
|
return searchedItem[field]
|
|
end
|
|
|
|
function ns:ClearSearchedItem()
|
|
wipe(searchedItem)
|
|
end
|