GnomishVendorShrinker/frames/RowShader.lua

95 lines
2.2 KiB
Lua

local myname, ns = ...
local RECIPE = GetItemClassInfo(LE_ITEM_CLASS_RECIPE)
local MISC = GetItemClassInfo(LE_ITEM_CLASS_MISCELLANEOUS)
local GARRISON_ICONS = {[1001489] = true, [1001490] = true, [1001491] = true}
local function Knowable(link)
local id = ns.ids[link]
if not id then return false end
local _, _, _, _, _, class, _, _, _, texture = GetItemInfo(link)
if class == RECIPE or GARRISON_ICONS[texture] then return true end
end
local function RecipeNeedsRank(link)
local _, _, _, _, _, class = GetItemInfo(link)
if class ~= RECIPE then return end
return ns.unmet_requirements[link]
end
local DEFAULT_GRAD = {0,1,0,0.75, 0,1,0,0} -- green
local GRADS = {
red = {1,0,0,0.75, 1,0,0,0},
[1] = {1,1,1,0.75, 1,1,1,0}, -- white
[2] = DEFAULT_GRAD, -- green
[3] = {0.5,0.5,1,1, 0,0,1,0}, -- blue
[4] = {1,0,1,0.75, 1,0,1,0}, -- purple
}
GRADS = setmetatable(GRADS, {
__index = function(t,i)
t[i] = DEFAULT_GRAD
return DEFAULT_GRAD
end
})
function ns.GetRowGradient(index)
local gradient = DEFAULT_GRAD
local shown = false
local _, _, _, _, _, isUsable = GetMerchantItemInfo(index)
if not isUsable then
gradient = GRADS.red
shown = true
end
local link = GetMerchantItemLink(index)
if not (link and Knowable(link)) then return gradient, shown end
if ns.knowns[link] then
return gradient, false
elseif RecipeNeedsRank(link) then
return GRADS.red, true
else
local _, _, quality = GetItemInfo(link)
return GRADS[quality], true
end
end
local QUALITY_COLORS = setmetatable({}, {
__index = function(t,i)
-- GetItemQualityColor only takes numbers, so fall back to white
local _, _, _, hex = GetItemQualityColor(tonumber(i) or 1)
t[i] = "|c".. hex
return "|c".. hex
end
})
function ns.GetRowTextColor(index)
local link = GetMerchantItemLink(index)
if not link then return QUALITY_COLORS.default end
-- Grey out if already known
if Knowable(link) and ns.knowns[link] then return QUALITY_COLORS[0] end
local _, _, quality = GetItemInfo(link)
return QUALITY_COLORS[quality or 1]
end
function ns.GetRowVertexColor(index)
local _, _, _, _, _, isUsable = GetMerchantItemInfo(index)
if isUsable then return 1.0, 1.0, 1.0
else return 0.9, 0.0, 0.0
end
end