| 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 |