annotate ReagentMaker.lua @ 124:f17fc88e971e

Remove trailing spaces
author contrebasse
date Sun, 11 Aug 2013 23:24:11 +0200
parents e6bb47c6d8d6
children
rev   line source
contrebasse@98 1 local addonName, A = ...
contrebasse@98 2
contrebasse@111 3 -- @todo add support for cross tradeskill, like mining + forge/ingé
contrebasse@98 4 -- @todo add support for dez ?
contrebasse@111 5 -- @todo scroll to the selected recipe on opening ?
contrebasse@111 6 -- @todo add a button to clear search ?
contrebasse@111 7
contrebasse@111 8 -- @bug Enter when choosing number of crafts
contrebasse@98 9
contrebasse@98 10 ---------------------------------------------------
contrebasse@98 11 -- Variables
contrebasse@98 12 ---------------------------------------------------
contrebasse@98 13 -- Used by findglobals
contrebasse@111 14 -- GLOBALS: _G, CreateFrame, DEFAULT_CHAT_FRAME, UIParent
contrebasse@98 15
contrebasse@98 16 -- Lua functions
contrebasse@98 17
contrebasse@98 18 -- Wow functions
contrebasse@111 19 local GetTradeSkillLine = GetTradeSkillLine
contrebasse@111 20 local IsTradeSkillGuild = IsTradeSkillGuild
contrebasse@111 21 local IsTradeSkillLinked = IsTradeSkillLinked
contrebasse@111 22 local GetTradeSkillSelectionIndex = GetTradeSkillSelectionIndex
contrebasse@111 23 local GetTradeSkillNumReagents = GetTradeSkillNumReagents
contrebasse@111 24 local GetTradeSkillReagentItemLink = GetTradeSkillReagentItemLink
contrebasse@98 25
contrebasse@98 26 -- constant vars
contrebasse@111 27 local GameTooltip = GameTooltip
contrebasse@98 28
contrebasse@98 29 ---------------------------------------------------
contrebasse@111 30 -- Manage events and throttling
contrebasse@98 31 ---------------------------------------------------
contrebasse@98 32 A.EventsFrame = CreateFrame("Frame")
contrebasse@98 33
contrebasse@98 34 local SCAN_DELAY = 0.2
contrebasse@98 35 local t_throttle = SCAN_DELAY
contrebasse@98 36 local function throttleScan(self, t_elapsed)
contrebasse@98 37 t_throttle = t_throttle - t_elapsed
contrebasse@98 38 if t_throttle<0 then
contrebasse@98 39 self:SetScript("OnUpdate", nil)
contrebasse@98 40
contrebasse@98 41 -- Close the external window if the tradeskill changed
contrebasse@98 42 if A.currentTradeSkill ~= GetTradeSkillLine() then
contrebasse@98 43 A.MenuFrame:Hide()
contrebasse@98 44 end
contrebasse@98 45 if IsTradeSkillGuild() or IsTradeSkillLinked() then
contrebasse@98 46 A.MenuFrame:Hide()
contrebasse@98 47 return
contrebasse@98 48 end
contrebasse@98 49
contrebasse@98 50 -- Scan availabe recipes
contrebasse@98 51 -- Rescan in case of problem
contrebasse@98 52 if not A:ScanSimpleRecipes() then
contrebasse@98 53 t_throttle = SCAN_DELAY
contrebasse@98 54 self:SetScript("OnUpdate", throttleScan)
contrebasse@98 55 end
contrebasse@98 56
contrebasse@98 57 -- Show makables reagents
contrebasse@115 58 A.updateCount_throttle()
contrebasse@98 59 end
contrebasse@98 60 end
contrebasse@98 61 A.EventsFrame:SetScript("OnEvent", function(self, event)
contrebasse@98 62 if event == "TRADE_SKILL_UPDATE" then
contrebasse@98 63 t_throttle = SCAN_DELAY
contrebasse@98 64 self:SetScript("OnUpdate", throttleScan)
contrebasse@101 65 A.ManageCampFireBtn()
contrebasse@101 66
contrebasse@101 67 elseif event == "PLAYER_REGEN_DISABLED" then
contrebasse@101 68 A.HideCampFireBtn()
contrebasse@111 69
contrebasse@101 70 elseif event == "PLAYER_REGEN_ENABLED" then
contrebasse@101 71 A.ManageCampFireBtn()
contrebasse@98 72
contrebasse@98 73 elseif event == "TRADE_SKILL_SHOW" then
contrebasse@98 74 A:Initialize()
contrebasse@98 75 A.EventsFrame:UnregisterEvent("TRADE_SKILL_SHOW")
contrebasse@98 76 end -- if
contrebasse@98 77 end) -- function
contrebasse@111 78
contrebasse@98 79 A.EventsFrame:RegisterEvent("TRADE_SKILL_SHOW")
contrebasse@98 80 A.EventsFrame:RegisterEvent("TRADE_SKILL_UPDATE")
contrebasse@98 81
contrebasse@111 82
contrebasse@98 83 ---------------------------------------------------
contrebasse@98 84 -- Initialize
contrebasse@98 85 ---------------------------------------------------
contrebasse@98 86 function A:Initialize()
contrebasse@98 87
contrebasse@98 88 -- Register clics on reagent's buttons
contrebasse@98 89 for i=1,7 do
contrebasse@98 90 local btn = _G["TradeSkillReagent"..i]
contrebasse@98 91 btn:HookScript("OnDoubleClick", A.ProcessReagent)
contrebasse@98 92 btn:HookScript("OnEnter", A.btnEntered)
contrebasse@98 93 btn:HookScript("OnLeave", A.btnLeft)
contrebasse@98 94 btn.SplitStack = A.SplitStack
contrebasse@98 95
contrebasse@98 96 local textureHighlight = btn:CreateTexture()
contrebasse@98 97 textureHighlight:Hide()
contrebasse@98 98 textureHighlight:SetTexture("Interface\\BUTTONS\\CheckButtonHilight")
contrebasse@110 99 --textureHighlight:SetTexture("Interface\\BUTTONS\\ButtonHilight-Square")
contrebasse@98 100 textureHighlight:SetBlendMode("ADD")
contrebasse@98 101 textureHighlight:SetAllPoints("TradeSkillReagent"..i.."IconTexture")
contrebasse@98 102 btn.textureHighlight = textureHighlight
contrebasse@98 103
contrebasse@98 104 local label = btn:CreateFontString(nil,"ARTWORK","GameFontHighlight")
contrebasse@98 105 label:SetSize(100,20)
contrebasse@98 106 label:SetPoint("TOPLEFT",btn,"TOPLEFT",4,-4)
contrebasse@98 107 label:SetJustifyH("LEFT")
contrebasse@98 108 label:SetJustifyV("TOP")
contrebasse@98 109 label:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE")
contrebasse@98 110 btn.label = label
contrebasse@98 111 end -- for
contrebasse@98 112
contrebasse@98 113 -- Secondary Tooltip
contrebasse@98 114 A.tooltipRecipe = CreateFrame("GameTooltip", "ReagentMaker_tooltipRecipe",UIParent, "GameTooltipTemplate")
contrebasse@98 115 A.tooltipRecipe:SetFrameStrata("TOOLTIP")
contrebasse@98 116 A.tooltipRecipe:Hide()
contrebasse@101 117
contrebasse@113 118 -- Used for the campfire button only
contrebasse@113 119 A.EventsFrame:RegisterEvent("PLAYER_REGEN_ENABLED")
contrebasse@113 120 A.EventsFrame:RegisterEvent("PLAYER_REGEN_DISABLED")
contrebasse@113 121
contrebasse@98 122 -- Button for enchanting directy on a scroll
contrebasse@98 123 A.LoadEnchantOnScroll()
contrebasse@98 124 end -- function
contrebasse@98 125
contrebasse@98 126 ---------------------------------------------------
contrebasse@111 127 -- Dynamic display
contrebasse@98 128 ---------------------------------------------------
contrebasse@111 129 -- Button hovering (entered)
contrebasse@98 130 function A.btnEntered(btn)
contrebasse@98 131 -- Do not manage guild tradeskill
contrebasse@98 132 if IsTradeSkillGuild() or IsTradeSkillLinked() then return end
contrebasse@98 133
contrebasse@98 134 -- Index of the reagent in the recipe, taken from the button name
contrebasse@111 135 local reagentIndexInRecipe = A.buttonNumber(btn)
contrebasse@98 136
contrebasse@98 137 -- ID of the reagent we want to craft
contrebasse@111 138 local reagentLink = GetTradeSkillReagentItemLink(GetTradeSkillSelectionIndex(), reagentIndexInRecipe)
contrebasse@98 139 local reagentID = A.link2ID(reagentLink)
contrebasse@98 140
contrebasse@98 141 -- Continue only if the reagent is known
contrebasse@98 142 if not reagentID or not A.data[reagentID] then return end
contrebasse@98 143
contrebasse@98 144 btn.textureHighlight:Show()
contrebasse@98 145
contrebasse@98 146 -- Check if the item is made by only one recipe. If not, return
contrebasse@98 147 if not A.isRecipeUnique(A.data[reagentID]) then return end
contrebasse@98 148
contrebasse@98 149 -- Tooltips
contrebasse@98 150 local link = A.data[reagentID][1].spellLink
contrebasse@98 151 if link then
contrebasse@98 152 A.tooltipRecipe:SetOwner(btn)
contrebasse@98 153 A.tooltipRecipe:SetHyperlink(link)
contrebasse@98 154 A.tooltipRecipe:Show()
contrebasse@98 155 A.tooltipRecipe:ClearAllPoints()
contrebasse@98 156 A.tooltipRecipe:SetPoint("BOTTOMLEFT",GameTooltip,"BOTTOMRIGHT")
contrebasse@98 157 end
contrebasse@98 158 end
contrebasse@98 159
contrebasse@111 160 -- Button hovering (left)
contrebasse@98 161 function A.btnLeft(btn)
contrebasse@98 162 btn.textureHighlight:Hide()
contrebasse@98 163 A.tooltipRecipe:Hide()
contrebasse@98 164 end -- function
contrebasse@98 165
contrebasse@111 166 -- Show counts on buttons
contrebasse@115 167 local CountThrottleFrame = CreateFrame("Frame")
contrebasse@115 168 local COUNT_DELAY = 0.1
contrebasse@115 169 local t_throttleCount = SCAN_DELAY
contrebasse@115 170 function UpdateCounts(recipeIndex)
contrebasse@98 171 -- Needs an argument
contrebasse@98 172 if not recipeIndex then return end
contrebasse@98 173
contrebasse@98 174 -- Do not manage guild tradeskill
contrebasse@98 175 if IsTradeSkillGuild() or IsTradeSkillLinked() then
contrebasse@111 176 for reagentIndexInRecipe = 1,GetTradeSkillNumReagents(recipeIndex) do
contrebasse@98 177 -- If the normal tradeskill hasn't been opened yet, the field 'label' doesn't exists yet
contrebasse@111 178 local label = _G["TradeSkillReagent"..reagentIndexInRecipe].label
contrebasse@98 179 if label then
contrebasse@98 180 label:Hide()
contrebasse@98 181 end
contrebasse@98 182 end
contrebasse@98 183 return
contrebasse@98 184 end
contrebasse@98 185
contrebasse@98 186 -- Count makable items and show it
contrebasse@111 187 for reagentIndexInRecipe = 1,GetTradeSkillNumReagents(recipeIndex) do
contrebasse@98 188 -- ID of the reagent we want to craft
contrebasse@111 189 local reagentID = A.link2ID(GetTradeSkillReagentItemLink(recipeIndex, reagentIndexInRecipe))
contrebasse@98 190
contrebasse@111 191 local label = _G["TradeSkillReagent"..reagentIndexInRecipe].label
contrebasse@111 192 if label then
contrebasse@111 193 -- Continue only if the reagent is known
contrebasse@111 194 if not reagentID or not A.data[reagentID] then
contrebasse@111 195 label:Hide()
contrebasse@98 196 else
contrebasse@111 197 -- Count and show
contrebasse@116 198 local numMakableMin, numMakableMax, numMakableIsApprox = A.numMakable(reagentID)
contrebasse@116 199 if not numMakableMin then
contrebasse@111 200 label:SetText("?")
contrebasse@111 201 label:SetTextColor(0, 0.5, 1, 1) -- blue
contrebasse@98 202 else
contrebasse@116 203 local txt = numMakableIsApprox and "~" or ""
contrebasse@116 204 if numMakableMin == numMakableMax then
contrebasse@116 205 label:SetFormattedText("%s%.2g",txt,numMakableMin)
contrebasse@116 206 else
contrebasse@116 207 label:SetFormattedText("%s%.2g-%.2g",txt,numMakableMin,numMakableMax)
contrebasse@116 208 end
contrebasse@116 209 if numMakableMax==0 then
contrebasse@111 210 label:SetTextColor(1, 0, 0, 1) -- red
contrebasse@111 211 else
contrebasse@111 212 label:SetTextColor(0, 1, 0, 1) -- green
contrebasse@111 213 end
contrebasse@111 214 end -- if
contrebasse@111 215 label:Show()
contrebasse@98 216 end -- if
contrebasse@98 217 end -- if
contrebasse@98 218 end -- for
contrebasse@98 219 end -- function
contrebasse@115 220 local function throttleCount(self, t_elapsed)
contrebasse@115 221 t_throttle = t_throttle - t_elapsed
contrebasse@115 222 if t_throttle<0 then
contrebasse@115 223 self:SetScript("OnUpdate", nil)
contrebasse@115 224
contrebasse@115 225 -- Show makables reagents
contrebasse@115 226 UpdateCounts(GetTradeSkillSelectionIndex())
contrebasse@115 227 end
contrebasse@115 228 end
contrebasse@115 229 function A.updateCount_throttle(self,event)
contrebasse@115 230 if not TradeSkillFrame or not TradeSkillFrame:IsVisible() or event=="TRADE_SKILL_CLOSE" then
contrebasse@115 231 CountThrottleFrame:UnregisterEvent("BAG_UPDATE")
contrebasse@115 232 t_throttleCount = 0
contrebasse@115 233 CountThrottleFrame:SetScript("OnUpdate", nil)
contrebasse@115 234 return
contrebasse@115 235 else
contrebasse@115 236 CountThrottleFrame:RegisterEvent("BAG_UPDATE")
contrebasse@115 237 end
contrebasse@115 238 t_throttleCount = SCAN_DELAY
contrebasse@115 239 CountThrottleFrame:SetScript("OnUpdate", throttleCount)
contrebasse@115 240
contrebasse@115 241 A.MenuFrame.updateCounts()
contrebasse@115 242 end
contrebasse@115 243 CountThrottleFrame:SetScript("OnEvent", A.updateCount_throttle)
contrebasse@115 244 CountThrottleFrame:RegisterEvent("TRADE_SKILL_SHOW")
contrebasse@115 245 CountThrottleFrame:RegisterEvent("TRADE_SKILL_UPDATE")
contrebasse@115 246 CountThrottleFrame:RegisterEvent("TRADE_SKILL_CLOSE")
contrebasse@115 247 hooksecurefunc("SelectTradeSkill",A.updateCount_throttle)