annotate CampFireButton.lua @ 130:c6041a8cb7b8

Simplify error messages
author contrebasse <contrebasse@gmail.com>
date Wed, 29 Jul 2015 15:25:24 +0200
parents c79ab5443ee5
children
rev   line source
contrebasse@98 1 local addonName, A = ...
contrebasse@98 2
contrebasse@98 3 local CAMPFIRE_ID = 818
contrebasse@98 4 local COOKING_ID = 2550
contrebasse@98 5 local btn
contrebasse@98 6 local cookingName
contrebasse@105 7 local CooldownFrame_SetTimer = CooldownFrame_SetTimer
contrebasse@105 8 local GetSpellCooldown = GetSpellCooldown
contrebasse@105 9
contrebasse@111 10 -- The cooldown info is not directly obtainable
contrebasse@105 11 local function WaitCooldown(self)
contrebasse@105 12 local start, duration, enable = GetSpellCooldown(CAMPFIRE_ID)
contrebasse@105 13 if start>0 then
contrebasse@105 14 CooldownFrame_SetTimer(btn.cooldown,GetSpellCooldown(CAMPFIRE_ID))
contrebasse@105 15 self:SetScript("OnUpdate",nil)
contrebasse@105 16 end
contrebasse@105 17 end
contrebasse@98 18
contrebasse@98 19 -- Create button
contrebasse@98 20 function A.InitialiseCampFireBtn()
contrebasse@103 21 if not GetTradeSkillLine() or InCombatLockdown() then return end
contrebasse@103 22
contrebasse@111 23 -- Create the frame
contrebasse@98 24 btn = CreateFrame("Button", nil, TradeSkillFrame, "SecureActionButtonTemplate")
contrebasse@98 25 btn:SetNormalTexture(select(3,GetSpellInfo(CAMPFIRE_ID)))
contrebasse@105 26 btn:SetHighlightTexture("Interface\\BUTTONS\\ButtonHilight-Square")
contrebasse@98 27 btn:SetSize(24,24)
contrebasse@98 28 btn:SetPoint("BOTTOMRIGHT",TradeSkillFrame,"BOTTOMRIGHT",-10,179)
contrebasse@98 29
contrebasse@98 30 -- Set the action
contrebasse@98 31 btn:SetAttribute("type", "spell")
contrebasse@98 32 btn:SetAttribute("spell", CAMPFIRE_ID)
contrebasse@98 33
contrebasse@98 34 -- Set the tooltip
contrebasse@98 35 btn:SetScript("OnEnter",function(self)
contrebasse@98 36 GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT")
contrebasse@98 37 GameTooltip:SetSpellByID(CAMPFIRE_ID)
contrebasse@98 38 GameTooltip:Show()
contrebasse@98 39 end)
contrebasse@98 40 btn:SetScript("OnLeave",function() GameTooltip:Hide(); end)
contrebasse@98 41
contrebasse@98 42 -- Add cooldown
contrebasse@98 43 btn.cooldown = CreateFrame("Cooldown",nil,btn)
contrebasse@98 44 btn.cooldown:SetAllPoints(btn)
contrebasse@98 45
contrebasse@105 46 -- Check if recipe failed due to lack of campfire
contrebasse@105 47 local campfireName = GetSpellInfo(CAMPFIRE_ID)
contrebasse@105 48 local errorMsg
contrebasse@105 49 btn:SetScript("OnEvent",function(self,event,arg1,arg2)
contrebasse@105 50 if not errorMsg or errorMsg==LOCKED_WITH_ITEM then
contrebasse@105 51 local i = GetTradeSkillSelectionIndex()
contrebasse@105 52 if i and i>01 then
contrebasse@105 53 errorMsg = LOCKED_WITH_ITEM:format(GetTradeSkillTools(GetTradeSkillSelectionIndex()))
contrebasse@105 54 end
contrebasse@105 55 end
contrebasse@105 56 if event == "UNIT_SPELLCAST_SUCCEEDED" then
contrebasse@105 57 if arg1 == "player" and arg2 == campfireName then
contrebasse@105 58 self:SetScript("OnUpdate",WaitCooldown)
contrebasse@105 59 --CooldownFrame_SetTimer(self.cooldown,GetSpellCooldown(CAMPFIRE_ID))
contrebasse@105 60 end
contrebasse@105 61 elseif arg1 == errorMsg and GetSpellCooldown(CAMPFIRE_ID)==0 then
contrebasse@105 62 -- Flash the button if the user tried to cook something without fire
contrebasse@105 63 self.cooldown:SetCooldown(0,0)
contrebasse@105 64 end
contrebasse@105 65 end)
contrebasse@98 66 end
contrebasse@98 67
contrebasse@98 68 -- Hide button
contrebasse@98 69 function A.HideCampFireBtn()
contrebasse@113 70 if btn then
contrebasse@113 71 btn:Hide()
contrebasse@113 72 btn:UnregisterAllEvents()
contrebasse@113 73 end
contrebasse@98 74 end
contrebasse@98 75
contrebasse@98 76 -- Show button if applicable
contrebasse@98 77 function A.ManageCampFireBtn()
contrebasse@98 78 -- Display only if the tradeskill is Cooking
contrebasse@103 79 if not cookingName then cookingName = GetSpellInfo(COOKING_ID) end
contrebasse@103 80 if GetTradeSkillLine() ~= cookingName then
contrebasse@105 81 if btn then btn:Hide(); btn:UnregisterAllEvents() end
contrebasse@98 82 else
contrebasse@103 83 -- create button if necessary
contrebasse@103 84 if not btn then
contrebasse@103 85 A.InitialiseCampFireBtn()
contrebasse@103 86 end
contrebasse@103 87 -- It may not have been created
contrebasse@103 88 if not btn then return end
contrebasse@98 89 btn:Show()
contrebasse@105 90 btn:RegisterEvent("UI_ERROR_MESSAGE")
contrebasse@105 91 btn:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")
contrebasse@105 92 CooldownFrame_SetTimer(btn.cooldown,GetSpellCooldown(CAMPFIRE_ID))
contrebasse@98 93 end
contrebasse@98 94 end