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.

230 lines
8.0 KiB

local _,L = ...
local rematch = Rematch
local panel = RematchMiniPanel
local settings
-- MiniPanel is 92 px high
-- MiniPanel+Target is 154 px high (92 + 2 + 60(for Target))
rematch:InitModule(function()
settings = RematchSettings
rematch.MiniPanel = panel
for i=1,3 do
panel.Pets[i].HP:SetMinMaxValues(0,100)
panel.Pets[i].XP:SetMinMaxValues(0,100)
panel.Pets[i]:RegisterForClicks("AnyUp")
panel.Pets[i]:RegisterForDrag("LeftButton")
panel.Pets[i].Footnote:RegisterForClicks("AnyUp")
for j=1,3 do
panel.Pets[i].Abilities[j].Arrow:SetTexCoord(1,0,0,0,1,1,0,1) -- rotate arrow
end
end
panel.Target.SaveStatus:SetText(L["This target has a saved team"])
panel.Target.LoadButton:SetText(L["Load"])
panel.Target.LoadButton.tooltipTitle = L["Load"]
panel.Target.LoadButton.tooltipBody = L["Load the team saved for this target."]
panel.timer = 0
panel.elapsedLeaving = 0
-- create models if Debug: No Models is disabled
if not settings.DebugNoModels then
-- target panel model
panel.Target.Model = CreateFrame("PlayerModel",nil,panel.Target)
local model = panel.Target.Model
model:SetSize(36,42)
model:SetPoint("BOTTOMLEFT",panel.Target,"BOTTOM",-120,8)
Model_OnLoad(model)
model:SetRotation(MODELFRAME_DEFAULT_ROTATION)
model:SetPortraitZoom(0.75)
model:SetPosition(0,0,-0.075)
model:SetScript("OnEvent",Model_OnEvent)
-- border frame here is a sibling to the above target model
panel.Target.ModelBorder = CreateFrame("Frame",nil,panel.Target,"RematchUseParentLevel,BackdropTemplate")
local border = panel.Target.ModelBorder
border:SetBackdrop({edgeFile="Interface\\Tooltips\\UI-Tooltip-Border", tile=true, edgeSize=12})
border:SetBackdropBorderColor(0.5,0.5,0.5)
border:SetPoint("TOPLEFT",model,"TOPLEFT",-5,5)
border:SetPoint("BOTTOMRIGHT",model,"BOTTOMRIGHT",5,-5)
local back = border:CreateTexture(nil,"BACKGROUND",nil,2)
back:SetTexture("Interface\\Destiny\\EndScreenBG")
back:SetPoint("TOPLEFT",3,-3)
back:SetPoint("BOTTOMRIGHT",-3,3)
back:SetVertexColor(0.25,0.25,0.25)
end
end)
function panel:Update()
local info,petID = rematch.info
for i=1,3 do
petID,info[1],info[2],info[3] = C_PetJournal.GetPetLoadOutInfo(i)
local button = panel.Pets[i]
rematch:FillPetSlot(button,petID)
-- fill in abilities (even if petID is nil)
for j=1,3 do
rematch.LoadoutPanel:FillAbilityButton(button.Abilities[j],petID,info[j],true)
end
if petID then
-- xp bars
local _,_,level,xp,maxXP,_,_,_,_,petType = C_PetJournal.GetPetInfoByPetID(petID)
if level<25 then
button.XP:Show()
button.XP:SetValue(xp/maxXP*100)
button.HP:SetPoint("TOP",button,"BOTTOM",0,-9)
else
button.XP:Hide()
button.HP:SetPoint("TOP",button,"BOTTOM",0,-19)
end
-- hp bar
local hp,maxHP = C_PetJournal.GetPetStats(petID)
local hpPercent = hp/maxHP*100
button.HP:SetValue(hpPercent)
if level==25 then
button.HP.Icon:Show()
button.HP.Text:Show()
button.HP.Text:SetText(hp==0 and DEAD or hp==maxHP and hp or format("%d%%",hpPercent))
else
button.HP.Icon:Hide()
button.HP.Text:Hide()
end
button.HP:Show()
-- if slot is special (leveling, ignored, random)
local specialPetID = rematch:GetSpecialSlot(i)
if specialPetID then
button.SpecialBorder:Show()
button.Footnote:Show()
rematch:SetFootnoteIcon(button.Footnote,specialPetID)
button.Footnote.tooltipTitle,button.Footnote.tooltipBody = rematch:GetSpecialTooltip(specialPetID)
else
button.SpecialBorder:Hide()
button.Footnote:Hide()
end
else -- pet doesn't exist in the slot
button.Icon:SetTexture("Interface\\PaperDoll\\UI-Backpack-EmptySlot.blp")
button.XP:Hide()
button.HP:Hide()
button.SpecialBorder:Hide()
end
end
panel:UpdateTarget()
panel:UpdateHighlights()
panel.LockOverlay:SetShown((C_PetBattles.GetPVPMatchmakingInfo() or not C_PetJournal.IsJournalUnlocked()) and true)
end
function panel:UpdateTarget(unit,npcID)
if not panel:IsVisible() or (not settings.Minimized and not settings.SinglePanel) then
return
end
if not unit and UnitExists("target") then -- if this update is not being called during a PLAYER_TARGET_CHANGED
_,npcID = rematch:GetUnitNameandID("target")
end
local saved = RematchSaved
local parent = panel:GetParent()
local height
if npcID and saved[npcID] and settings.loadedTeam~=npcID then -- target frame should show
panel:SetHeight(154) -- adds 62 px to MiniPanel's height (192+62=154) while target up
panel.Target:Show()
rematch.LoadoutPanel:UpdateTargetModelandPets(panel.Target,"target",npcID,true)
rematch:MaybeBlingTarget(panel.Target)
height = rematch.Frame.config.frameHeight+62
else -- target should hide
panel:SetHeight(92) -- standard height of MiniPanel is 92
panel.Target:Hide()
height = rematch.Frame.config.frameHeight
end
if rematch.Frame:IsVisible() and settings.Minimized then
rematch.Frame:SetHeight(height)
end
end
-- click of one of the ability buttons beside each pet
function panel:AbilityOnClick(button)
if not self.abilityID then
return -- button doesn't have an ability
end
if rematch.ChatLinkAbility(self) then
return -- was only linking ability, can leave
end
if button=="RightButton" then
rematch:SetMenuSubject(self.abilityID)
rematch:ShowMenu("FindAbility","cursor",nil,nil,nil,nil,true)
return
end
-- check if flyout already open for this ability; close it and leave if so
if panel.Flyout:IsVisible() and panel.Flyout:GetParent()==self then
rematch:HideFlyout()
return
end
rematch:HideWidgets()
local petSlot = self:GetParent():GetID()
local abilitySlot = self:GetID()
panel.Flyout:SetParent(self)
panel.Flyout:SetFrameStrata("DIALOG")
panel.Flyout:SetHeight(settings.ShowAbilityNumbers and 46 or 36)
for i=1,2 do
panel.Flyout.Numbers[i]:SetShown(settings.ShowAbilityNumbers)
end
panel.Flyout:SetPoint("TOPRIGHT",self,"TOPLEFT",0,5)
panel.Flyout:Show()
local info,petID = rematch.info
wipe(info)
petID,info[1],info[2],info[3] = C_PetJournal.GetPetLoadOutInfo(petSlot)
if not petID then return end
C_PetJournal.GetPetAbilityList((C_PetJournal.GetPetInfoByPetID(petID)),rematch.abilityList,rematch.levelList)
panel.Flyout.petID = petID
for i=1,2 do
local listIndex = (i-1)*3+abilitySlot
local abilityID = rematch.abilityList[listIndex]
rematch.LoadoutPanel:FillAbilityButton(panel.Flyout.Abilities[i],petID,abilityID)
end
end
function panel:FlyoutAbilityOnClick()
if rematch.ChatLinkAbility(self) then
return -- only linking ability to chat, leave
end
local petSlot = self:GetParent():GetParent():GetParent():GetID()
local abilitySlot = self:GetParent():GetParent():GetID()
if self.Cover:IsVisible() then
return
else
rematch.timeUIChanged = GetTime()
self:GetParent():Hide()
C_PetJournal.SetAbility(petSlot,abilitySlot,self.abilityID)
end
end
-- possible widths: 260 (minimized), 280 (above queue panel in normal view), 337 (atop all panels in SinglePanel)
function panel:Resize(width)
panel:SetWidth(width)
local xwidth, xoff = 0,0
local narrowTarget
if width==260 then -- minimized
xwidth, xoff = 84, 8
elseif width==280 then -- above queue in normal view
xwidth, xoff = 88, 14
else -- atop pets, teams and queue in Single Panel mode
xwidth, xoff = 102, 28+(settings.UseMiniQueue and 15 or 0)
narrowTarget = settings.UseMiniQueue and settings.ActivePanel==1
end
for i=1,3 do
panel.Pets[i]:SetPoint("TOPLEFT",(i-1)*xwidth+xoff,-12)
panel.Glow.Overlays[i]:SetPoint("TOPLEFT",panel.Pets[i],-3,3)
end
end
-- updates highlights from pet card being locked
function panel:UpdateHighlights()
if panel:IsVisible() then
local card = rematch.PetCard
local petID = (card.petID and card.petID~=0 and card.locked) and card.petID
for i=1,3 do
if petID and panel.Pets[i].petID==petID then
panel.Pets[i]:LockHighlight()
else
panel.Pets[i]:UnlockHighlight()
end
end
end
end