You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
3.7 KiB

local _,rematch = ...
local L = rematch.localization
local C = rematch.constants
-- mixin for ability bar within a loadout slot and also for flyout abilities (if self.isFlyoutAbility is true)
RematchAbilityBarButtonMixin = {}
function RematchAbilityBarButtonMixin:OnEnter()
if not self.isFlyoutAbility and not self.noClick and rematch.utils:IsJournalUnlocked() then
local arrow = self:GetParent():GetParent():GetParent().FlyoutArrow
arrow:SetParent(self) -- parent arrow to abilityBar that contains this ability
if arrow.direction=="LEFT" then -- this is for the miniLoadoutPanel
arrow:SetPoint("CENTER",self,"LEFT",-3,1)
elseif arrow.direction=="BOTTOM" then -- this is for main loadout
arrow:SetPoint("CENTER",self,"BOTTOM",2,-4)
end
arrow:Show()
end
rematch.textureHighlight:Show(self.Icon)
rematch.abilityTooltip:ShowTooltip(self,self.petID,self.abilityID,rematch.frame)
end
function RematchAbilityBarButtonMixin:OnLeave()
if not self.isFlyoutAbility and not self.noClick then
local arrow = self:GetParent():GetParent():GetParent().FlyoutArrow
arrow:Hide()
end
rematch.textureHighlight:Hide()
rematch.abilityTooltip:Hide()
end
function RematchAbilityBarButtonMixin:OnMouseDown()
if rematch.utils:IsJournalUnlocked() then
rematch.textureHighlight:Hide()
end
end
function RematchAbilityBarButtonMixin:OnMouseUp()
if GetMouseFocus()==self and rematch.utils:IsJournalUnlocked() then
rematch.textureHighlight:Show(self.Icon)
end
end
-- click of ability on ability bar or flyout
function RematchAbilityBarButtonMixin:OnClick(button)
if self.noClick or rematch.utils:IsJournalLocked() then -- this is not part of an ability bar within or with a flyout, leave
return
elseif rematch.utils:HandleSpecialAbilityClicks(self.abilityID,self:GetParent().petID) then -- shift+click ability to chat
return
elseif button=="RightButton" then
rematch.menus:Show("AbilityMenu",self,self.abilityID,"cursor")
return
elseif self.isFlyoutAbility then -- this is a flyout ability button
local flyout = self:GetParent()
-- load the ability into the flyout parent's GetID slot
if self.isUsable and self.abilityID then
local flyout = self:GetParent()
C_PetJournal.SetAbility(flyout.petSlot,flyout.abilitySlot,self.abilityID)
flyout:Hide()
--rematch.frame:Update() -- don't use this, the addon should be watching for ability changes
end
else -- this is an ability button on an abilityBar
local abilityBar = self:GetParent()
local loadout = abilityBar:GetParent()
local panel = loadout:GetParent()
local flyout = panel.AbilityFlyout
local petSlot = loadout:GetID()
local petID = loadout.petID
-- if clicking ability slot when flyout already opened for it, close flyout and leave
if flyout.petSlot==petSlot and flyout.abilitySlot==self:GetID() and flyout:IsVisible() then
flyout:Hide()
else
flyout.petSlot = petSlot
flyout.abilitySlot = self:GetID()
flyout.anchoredTo = self -- used by flyout's OnUpdate to know what opened the flyout
flyout:SetParent(abilityBar)
if flyout.horizontal then
flyout:SetPoint("TOP",self,"BOTTOM",0,-3)
else
flyout:SetPoint("RIGHT",self,"LEFT",-1,0)
end
flyout:FillAbilityFlyout(petSlot,self:GetID())
flyout:Show()
end
end
end