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