annotate ReagentMaker.lua @ 5:cea9633a6d4e

Added some tooltips and text color
author contrebasse
date Sat, 02 Apr 2011 17:13:16 +0200
parents ed0582126cae
children 43e21c6513e0
rev   line source
contrebasse@0 1 local addonName, A = ...
contrebasse@0 2
contrebasse@0 3 -- @todo clean the A table
contrebasse@0 4 -- @todo check local copy of globals functions
contrebasse@0 5 -- @todo add support for sub-recipes (like ink plus milling)
contrebasse@0 6 -- @todo show a tooltip
contrebasse@0 7 -- @todo show number of craftable items
contrebasse@0 8 -- @todo show owned items
contrebasse@0 9 -- @todo add support for dez ?
contrebasse@0 10 -- @todo add support for cross tradeskill, like mining + forge/ingé
contrebasse@0 11 -- @todo icon on reagent's button
contrebasse@0 12
contrebasse@0 13 ---------------------------------------------------
contrebasse@0 14 -- Variables
contrebasse@0 15 ---------------------------------------------------
contrebasse@0 16 -- Used by findglobals
contrebasse@0 17 -- GLOBALS: _G, CreateFrame, DEFAULT_CHAT_FRAME
contrebasse@0 18
contrebasse@0 19 -- Lua functions
contrebasse@0 20
contrebasse@0 21 -- Wow functions
contrebasse@0 22
contrebasse@0 23 -- constant vars
contrebasse@0 24
contrebasse@0 25 ---------------------------------------------------
contrebasse@0 26 -- Manage events
contrebasse@0 27 ---------------------------------------------------
contrebasse@0 28 A.EventsFrame = CreateFrame("Frame")
contrebasse@0 29
contrebasse@3 30 A.EventsFrame:SetScript("OnEvent", function(self, event, ...)
contrebasse@3 31 if event == "TRADE_SKILL_UPDATE" then
contrebasse@3 32 -- Scan availabe recipes
contrebasse@3 33 A:ScanSimpleRecipes()
contrebasse@3 34
contrebasse@3 35 -- Close the external window if the tradeskill changed
contrebasse@3 36 if A.currentTradeSkill ~= GetTradeSkillLine() then
contrebasse@3 37 A.MenuFrame:Hide()
contrebasse@3 38 end
contrebasse@3 39 elseif event == "TRADE_SKILL_SHOW" then
contrebasse@0 40 A:Initialize()
contrebasse@0 41 end -- if
contrebasse@3 42 end) -- function
contrebasse@0 43 A.EventsFrame:RegisterEvent("TRADE_SKILL_SHOW")
contrebasse@3 44 A.EventsFrame:RegisterEvent("TRADE_SKILL_UPDATE")
contrebasse@0 45
contrebasse@0 46 ---------------------------------------------------
contrebasse@0 47 -- Initialize
contrebasse@0 48 ---------------------------------------------------
contrebasse@1 49 local toInitialize = true
contrebasse@0 50 function A:Initialize()
contrebasse@3 51 A.EventsFrame:UnregisterEvent("TRADE_SKILL_SHOW")
contrebasse@0 52
contrebasse@3 53 -- Register clics on reagent's buttons
contrebasse@3 54 for i=1,7 do
contrebasse@3 55 local btn = _G["TradeSkillReagent"..i];
contrebasse@3 56 btn:HookScript("OnDoubleClick", A.ProcessReagent);
contrebasse@3 57 btn:HookScript("OnEnter", A.btnEntered)
contrebasse@3 58 btn:HookScript("OnLeave", A.btnLeft)
contrebasse@3 59 btn.SplitStack = A.SplitStack
contrebasse@1 60
contrebasse@3 61 local textureHighlight = btn:CreateTexture()
contrebasse@3 62 textureHighlight:Hide()
contrebasse@3 63 textureHighlight:SetTexture("Interface\\BUTTONS\\CheckButtonHilight")
contrebasse@3 64 textureHighlight:SetBlendMode("ADD")
contrebasse@3 65 --textureHighlight:SetPoint("TOPLEFT")
contrebasse@3 66 --textureHighlight:SetSize(btn:GetHeight(),btn:GetHeight())
contrebasse@3 67 textureHighlight:SetAllPoints("TradeSkillReagent"..i.."IconTexture")
contrebasse@3 68 btn.textureHighlight = textureHighlight
contrebasse@3 69
contrebasse@3 70 local label = btn:CreateFontString(nil,"ARTWORK","GameFontHighlight")
contrebasse@3 71 label:SetSize(100,20)
contrebasse@3 72 label:SetPoint("TOPLEFT",btn,"TOPLEFT",4,-4)
contrebasse@3 73 label:SetJustifyH("LEFT")
contrebasse@3 74 label:SetJustifyV("TOP")
contrebasse@3 75 label:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE")
contrebasse@3 76 btn.label = label
contrebasse@3 77 end -- for
contrebasse@3 78
contrebasse@3 79 A.tooltipRecipe = CreateFrame("GameTooltip", "ReagentMaker_tooltipRecipe",UIParent, "GameTooltipTemplate")
contrebasse@3 80 A.tooltipRecipe:SetFrameStrata("TOOLTIP")
contrebasse@3 81 A.tooltipRecipe:Hide()
contrebasse@3 82 A.tooltipReagent = CreateFrame("GameTooltip", "ReagentMaker_tooltipReagent",UIParent, "GameTooltipTemplate")
contrebasse@3 83 A.tooltipReagent:SetFrameStrata("TOOLTIP")
contrebasse@3 84 A.tooltipReagent:Hide()
contrebasse@3 85 end -- function
contrebasse@3 86
contrebasse@3 87
contrebasse@3 88 -- Function run avter selecting a item in the tradeskill window
contrebasse@3 89 function A.ProcessReagent(btn, ...)
contrebasse@3 90 -- We want no modifiers, or shift to choose the number of reagent to craft
contrebasse@3 91 if IsModifierKeyDown() and not IsShiftKeyDown() then return end
contrebasse@3 92 local chooseNumberToCraft = IsShiftKeyDown()
contrebasse@3 93
contrebasse@3 94 -- Index of the reagent in the recipe, taken from the button name
contrebasse@3 95 local reagentRecipeIndex = A.buttonNumber(btn)
contrebasse@3 96
contrebasse@3 97 -- ID of the reagent we want to craft
contrebasse@3 98 local reagentID = A.link2ID(GetTradeSkillReagentItemLink(GetTradeSkillSelectionIndex(), reagentRecipeIndex))
contrebasse@3 99
contrebasse@3 100 -- Continue only if the reagent is known
contrebasse@3 101 if not reagentID or not A.data[reagentID] then return end
contrebasse@3 102
contrebasse@3 103 -- If only one recipe is known for the reagent, use it
contrebasse@3 104 if #(A.data[reagentID]) == 1 and not A.data[reagentID].spell then
contrebasse@3 105 local numMakable, reagentIndex = A.numMakable(reagentID)
contrebasse@3 106 if numMakable>0 then
contrebasse@3 107 A.craft(reagentID,reagentRecipeIndex,reagentIndex,numMakable,chooseNumberToCraft)
contrebasse@3 108 return
contrebasse@3 109 end
contrebasse@3 110 -- If we can make the item needed to make the reagent, open a window to make it
contrebasse@3 111 -- one step recursion, enables to mill to create an ink
contrebasse@3 112 if A.data[A.data[reagentID][1][1]] then
contrebasse@3 113 A.externalCraftWindow(A.data[reagentID][1][1])
contrebasse@3 114 else
contrebasse@3 115 print("Sorry, can not make reagent...")
contrebasse@3 116 end
contrebasse@3 117 else
contrebasse@3 118 A.externalCraftWindow(reagentID)
contrebasse@0 119 end -- if
contrebasse@0 120 end -- function
contrebasse@0 121
contrebasse@0 122
contrebasse@0 123 ---------------------------------------------------
contrebasse@0 124 -- Craft items
contrebasse@0 125 ---------------------------------------------------
contrebasse@3 126 -- function used after choosing the number of reagent to craft
contrebasse@3 127 function A.SplitStack(owner,split)
contrebasse@3 128 DoTradeSkill(owner.ReagentMaker_reagentIndex,tonumber(split))
contrebasse@3 129 owner.ReagentMaker_reagentIndex = nil
contrebasse@0 130 end
contrebasse@0 131
contrebasse@3 132 -- Craft the reagent of an item, given it's position in the recipe
contrebasse@3 133 function A.craft(reagentID,reagentRecipeIndex,reagentIndex,numReagentMakable,chooseNumber)
contrebasse@3 134 -- Look at how many we need to make one item for the selected recipe
contrebasse@3 135 local numToMake = 1
contrebasse@3 136 local selectedIndex = GetTradeSkillSelectionIndex()
contrebasse@3 137 local skillName, skillType, numAvailable, isExpanded, serviceType, numSkillUps = GetTradeSkillInfo(selectedIndex)
contrebasse@3 138 if numAvailable==0 then
contrebasse@3 139 local reagentName, reagentTexture, reagentCount, playerReagentCount = GetTradeSkillReagentInfo(selectedIndex, reagentRecipeIndex)
contrebasse@3 140 numToMake = math.min(reagentCount - playerReagentCount,numReagentMakable)
contrebasse@3 141 end -- if
contrebasse@0 142
contrebasse@3 143 -- Choose number or craft directly
contrebasse@3 144 if chooseNumber and numReagentMakable>1 then
contrebasse@3 145 -- the dialog window is linked to the reagent button
contrebasse@3 146 local btn = _G["TradeSkillReagent"..reagentRecipeIndex]
contrebasse@3 147
contrebasse@3 148 -- Store info to be able to run the function later
contrebasse@3 149 btn.ReagentMaker_reagentIndex = reagentIndex
contrebasse@3 150
contrebasse@3 151 -- Open dialog
contrebasse@3 152 OpenStackSplitFrame(numReagentMakable, btn, "TOP", "BOTTOM")
contrebasse@3 153
contrebasse@3 154 -- Fill in the number to make
contrebasse@3 155 numToMake = tostring(numToMake)
contrebasse@3 156 for i = 1,numToMake:len() do
contrebasse@3 157 StackSplitFrame_OnChar(StackSplitFrame,numToMake:gsub(i,i))
contrebasse@3 158 end
contrebasse@3 159 StackSplitFrame.typing = 0 -- reinit the frame so tha the entered value will be erased on text entry
contrebasse@3 160 else
contrebasse@3 161 DoTradeSkill(reagentIndex,numToMake)
contrebasse@3 162 end -- if
contrebasse@3 163 end -- function
contrebasse@3 164
contrebasse@3 165
contrebasse@3 166 -- Button hovering
contrebasse@3 167 function A.btnEntered(btn)
contrebasse@3 168 -- Index of the reagent in the recipe, taken from the button name
contrebasse@3 169 local reagentRecipeIndex = A.buttonNumber(btn)
contrebasse@3 170
contrebasse@3 171 -- ID of the reagent we want to craft
contrebasse@3 172 local reagentLink = GetTradeSkillReagentItemLink(GetTradeSkillSelectionIndex(), reagentRecipeIndex)
contrebasse@3 173 local reagentID = A.link2ID(reagentLink)
contrebasse@3 174
contrebasse@3 175 -- Continue only if the reagent is known
contrebasse@3 176 if not reagentID or not A.data[reagentID] then return end
contrebasse@3 177
contrebasse@3 178 btn.textureHighlight:Show()
contrebasse@3 179
contrebasse@3 180 if #(A.data[reagentID]) == 1 and not A.data[reagentID].spell then
contrebasse@3 181 local numMakable = A.numMakable(reagentID)
contrebasse@3 182 btn.label:SetText(numMakable)
contrebasse@3 183 if numMakable==0 then
contrebasse@3 184 btn.label:SetTextColor(1, 0, 0, 1)
contrebasse@3 185 else
contrebasse@3 186 btn.label:SetTextColor(0, 5, 0, 1)
contrebasse@3 187 end
contrebasse@3 188 btn.label:Show()
contrebasse@0 189 end
contrebasse@0 190
contrebasse@5 191 -- Tooltips
contrebasse@3 192 A.tooltipRecipe:SetOwner(btn)
contrebasse@3 193 A.tooltipRecipe:SetHyperlink(GetTradeSkillRecipeLink(A.findSkillIndex(reagentID)))
contrebasse@5 194 A.tooltipRecipe:Show()
contrebasse@3 195 A.tooltipRecipe:ClearAllPoints()
contrebasse@5 196 --A.tooltipRecipe:SetPoint("TOPLEFT",btn,"TOPRIGHT")
contrebasse@5 197 A.tooltipRecipe:SetPoint("BOTTOMLEFT",GameTooltip,"BOTTOMRIGHT")
contrebasse@5 198
contrebasse@5 199 A.tooltipReagent:SetOwner(A.tooltipRecipe)
contrebasse@5 200 local name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(A.data[reagentID][1][1])
contrebasse@5 201 A.tooltipReagent:SetHyperlink(link)
contrebasse@5 202 A.tooltipReagent:Show()
contrebasse@3 203 A.tooltipReagent:ClearAllPoints()
contrebasse@5 204 A.tooltipReagent:SetPoint("BOTTOMLEFT",A.tooltipRecipe,"BOTTOMRIGHT")
contrebasse@0 205 end
contrebasse@0 206
contrebasse@3 207 function A.btnLeft(btn)
contrebasse@3 208 btn.textureHighlight:Hide()
contrebasse@3 209 btn.label:Hide()
contrebasse@3 210 A.tooltipRecipe:Hide()
contrebasse@3 211 A.tooltipReagent:Hide()
contrebasse@0 212 end