TradeSkillMaster/Core/Service/Tooltip/Crafting.lua

96 lines
3.3 KiB
Lua

-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster --
-- https://tradeskillmaster.com --
-- All Rights Reserved - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
local _, TSM = ...
local Crafting = TSM.Tooltip:NewPackage("Crafting")
local L = TSM.Include("Locale").GetTable()
local ItemString = TSM.Include("Util.ItemString")
local Theme = TSM.Include("Util.Theme")
local private = {}
-- ============================================================================
-- Module Functions
-- ============================================================================
function Crafting.OnInitialize()
TSM.Tooltip.Register(TSM.Tooltip.CreateInfo()
:SetHeadings(L["TSM Crafting"])
:SetSettingsModule("Crafting")
:AddSettingEntry("craftingCost", true, private.PopulateCostLine)
:AddSettingEntry("detailedMats", false, private.PopulateDetailedMatsLines)
:AddSettingEntry("matPrice", false, private.PopulateMatPriceLine)
)
end
-- ============================================================================
-- Private Helper Functions
-- ============================================================================
function private.PopulateCostLine(tooltip, itemString)
itemString = itemString and ItemString.GetBaseFast(itemString)
assert(itemString)
local cost, profit = nil, nil
if itemString == ItemString.GetPlaceholder() then
-- example tooltip
cost = 55
profit = 20
elseif not TSM.Crafting.CanCraftItem(itemString) then
return
else
cost = TSM.Crafting.Cost.GetLowestCostByItem(itemString)
local buyout = cost and TSM.Crafting.Cost.GetCraftedItemValue(itemString) or nil
profit = buyout and (buyout - cost) or nil
end
local costText = tooltip:FormatMoney(cost)
local profitText = tooltip:FormatMoney(profit, profit and Theme.GetFeedbackColor(profit >= 0 and "GREEN" or "RED") or nil)
tooltip:AddLine(L["Crafting Cost"], format(L["%s (%s profit)"], costText, profitText))
end
function private.PopulateDetailedMatsLines(tooltip, itemString)
itemString = itemString and ItemString.GetBaseFast(itemString)
assert(itemString)
if itemString == ItemString.GetPlaceholder() then
-- example tooltip
tooltip:StartSection()
tooltip:AddSubItemValueLine(ItemString.GetPlaceholder(), 11, 5)
tooltip:EndSection()
return
elseif not TSM.Crafting.CanCraftItem(itemString) then
return
end
local _, spellId = TSM.Crafting.Cost.GetLowestCostByItem(itemString)
if not spellId then
return
end
tooltip:StartSection()
local numResult = TSM.Crafting.GetNumResult(spellId)
for _, matItemString, matQuantity in TSM.Crafting.MatIterator(spellId) do
tooltip:AddSubItemValueLine(matItemString, TSM.Crafting.Cost.GetMatCost(matItemString), matQuantity / numResult)
end
tooltip:EndSection()
end
function private.PopulateMatPriceLine(tooltip, itemString)
itemString = itemString and ItemString.GetBase(itemString) or nil
local matCost = nil
if itemString == ItemString.GetPlaceholder() then
-- example tooltip
matCost = 17
else
matCost = TSM.Crafting.Cost.GetMatCost(itemString)
end
if matCost then
tooltip:AddItemValueLine(L["Material Cost"], matCost)
end
end