| 
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@101
 | 
    70 	if btn then btn:Hide() end
 | 
| 
contrebasse@111
 | 
    71 	btn:UnregisterAllEvents()
 | 
| 
contrebasse@98
 | 
    72 end
 | 
| 
contrebasse@98
 | 
    73 
 | 
| 
contrebasse@98
 | 
    74 -- Show button if applicable
 | 
| 
contrebasse@98
 | 
    75 function A.ManageCampFireBtn()
 | 
| 
contrebasse@98
 | 
    76 	-- Display only if the tradeskill is Cooking
 | 
| 
contrebasse@103
 | 
    77 	if not cookingName then cookingName = GetSpellInfo(COOKING_ID) end
 | 
| 
contrebasse@103
 | 
    78 	if GetTradeSkillLine() ~= cookingName then
 | 
| 
contrebasse@105
 | 
    79 		if btn then btn:Hide(); btn:UnregisterAllEvents() end
 | 
| 
contrebasse@98
 | 
    80 	else
 | 
| 
contrebasse@103
 | 
    81 		-- create button if necessary
 | 
| 
contrebasse@103
 | 
    82 		if not btn then
 | 
| 
contrebasse@103
 | 
    83 			A.InitialiseCampFireBtn()
 | 
| 
contrebasse@103
 | 
    84 		end
 | 
| 
contrebasse@103
 | 
    85 		-- It may not have been created
 | 
| 
contrebasse@103
 | 
    86 		if not btn then return end
 | 
| 
contrebasse@98
 | 
    87 		btn:Show()
 | 
| 
contrebasse@105
 | 
    88 		btn:RegisterEvent("UI_ERROR_MESSAGE")
 | 
| 
contrebasse@105
 | 
    89 		btn:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED")
 | 
| 
contrebasse@105
 | 
    90 		CooldownFrame_SetTimer(btn.cooldown,GetSpellCooldown(CAMPFIRE_ID))
 | 
| 
contrebasse@98
 | 
    91 	end
 | 
| 
contrebasse@98
 | 
    92 end
 |