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.
167 lines
6.8 KiB
167 lines
6.8 KiB
local _,rematch = ...
|
|
local L = rematch.localization
|
|
local C = rematch.constants
|
|
local settings = rematch.settings
|
|
rematch.petHerder = {}
|
|
|
|
-- one of "cage", "favorite", "leveling", "marker:1"-"marker:8" and "marker:0"
|
|
local actionID
|
|
|
|
-- sets dialog text based on whether an action chosen in the PetHerderPicker dialog
|
|
local function updateDialogText()
|
|
local canvas = rematch.dialog.Canvas
|
|
local actionID = rematch.petHerder:GetActionID()
|
|
if actionID then
|
|
canvas.Text:SetText(rematch.utils:GetFormattedActionName(actionID))
|
|
canvas.Text2:SetText(L["Now click on pets in the pet list to use this action on the pets"])
|
|
canvas.Text2:SetTextColor(1,0.82,0)
|
|
canvas.Help:SetTextColor(0.85,0.85,0.85)
|
|
else
|
|
canvas.Text:SetText(L["Pick an action to use on multiple pets"])
|
|
canvas.Text2:SetText(L["Then click on pets in the pet list to use this action on the pets"])
|
|
canvas.Text2:SetTextColor(0.5,0.5,0.5)
|
|
canvas.Help:SetTextColor(0.5,0.5,0.5)
|
|
end
|
|
end
|
|
|
|
rematch.events:Register(rematch.petHerder,"PLAYER_LOGIN",function(self)
|
|
|
|
rematch.dialog:Register("PetHerder",{
|
|
title = L["Pet Herder"],
|
|
accept = L["Done"],
|
|
layouts = {
|
|
Default = {"Text","PetHerderPicker","Text2","Help"},
|
|
Cage = {"Text","PetHerderPicker","Text2","CheckButton","Help"}
|
|
},
|
|
refreshFunc = function(self,info,subject,firstRun)
|
|
if firstRun then
|
|
ClearCursor()
|
|
--rematch.layout:SummonView("pets")
|
|
updateDialogText()
|
|
rematch.petHerder:SetActionID(nil)
|
|
self.PetHerderPicker:Update()
|
|
self.CheckButton:SetText(L["Allow caging pets in a team"])
|
|
self.Help:SetText(L["When the cursor changes to a \124TInterface\\Cursor\\Crosshairs:16\124t over a pet, click the pet to use the chosen action"])
|
|
end
|
|
end,
|
|
changeFunc = function(self,info,subject)
|
|
updateDialogText()
|
|
local actionID = rematch.petHerder:GetActionID()
|
|
local dialogLayout = rematch.dialog:GetOpenLayout()
|
|
if actionID=="cage" and dialogLayout~="Cage" then
|
|
rematch.dialog:ChangeLayout("Cage")
|
|
elseif actionID~="cage" and dialogLayout~="Default" then
|
|
rematch.dialog:ChangeLayout("Default")
|
|
else -- selecting/unselecting an action may change elements enough to need a resize
|
|
rematch.dialog:Resize()
|
|
rematch.frame:Update() -- also may need to show/hide badges
|
|
end
|
|
end,
|
|
})
|
|
|
|
end)
|
|
|
|
-- sets the local actionID (typically from PetHerderPicker dialog)
|
|
function rematch.petHerder:SetActionID(newActionID)
|
|
actionID = newActionID or nil
|
|
end
|
|
|
|
-- returns the action chosen in the PerHerderPicker dialog control (or nil if no action chosen)
|
|
function rematch.petHerder:GetActionID()
|
|
return actionID
|
|
end
|
|
|
|
-- returns true if dialog is up and an action chosen
|
|
function rematch.petHerder:IsTargeting()
|
|
return self:GetActionID() and rematch.dialog:GetOpenDialog()=="PetHerder"
|
|
end
|
|
|
|
-- meant to be called in a pet's OnEnter (so there is a pet under the mouse), makes the crosshairs dimmed if
|
|
-- the pet can't be targeted with the current action
|
|
function rematch.petHerder:SetCursorForPetID(petID)
|
|
local actionID = rematch.petHerder:GetActionID()
|
|
local petInfo = rematch.petInfo:Fetch(petID)
|
|
if not petID then
|
|
SetCursor(nil)
|
|
elseif (actionID=="leveling" and petInfo.isOwned and petInfo.canBattle and petInfo.level and petInfo.level<25) or (actionID=="cage" and petInfo.isOwned and petInfo.isTradable and not petInfo.isInjured and not petInfo.isSlotted and (not petInfo.inTeams or rematch.dialog.Canvas.CheckButton:GetChecked())) or (actionID=="favorite" and petInfo.idType=="pet") or (actionID=="marker:0" and petInfo.marker) or (actionID~="leveling" and actionID~="cage" and actionID~="favorite" and actionID~="marker:0") then
|
|
SetCursor("Interface\\Cursor\\Crosshairs")
|
|
else
|
|
SetCursor("Interface\\Cursor\\UnableCrosshairs")
|
|
end
|
|
end
|
|
|
|
-- called from the OnClick of a petID, performs the chosen action if there is one
|
|
function rematch.petHerder:HerdPetID(petID)
|
|
local actionID = rematch.petHerder:GetActionID()
|
|
local petInfo = rematch.petInfo:Fetch(petID)
|
|
local speciesID = petInfo.speciesID
|
|
|
|
if not actionID or not petInfo.isValid then
|
|
return
|
|
end
|
|
|
|
local markerID = tonumber(actionID:match("marker:(%d+)"))
|
|
|
|
local needsUpdate -- change to true if a pet has an action that may reflect as a change in the pet list
|
|
local warning -- change to a tooltipBody to display at the cursor when an action can't be completed
|
|
|
|
if actionID=="cage" then
|
|
if petInfo.idType~="pet" then
|
|
warning = L["You don't own this pet"]
|
|
elseif petInfo.isInjured then
|
|
warning = L["Injured pets can't be caged"]
|
|
elseif petInfo.isSlotted then
|
|
warning = L["Slotted pets can't be caged"]
|
|
elseif not petInfo.isTradable then
|
|
warning = L["This pet is not tradable"]
|
|
elseif petInfo.inTeams and not rematch.dialog.Canvas.CheckButton:GetChecked() then
|
|
warning = L["This pet is in a team"]
|
|
else
|
|
C_PetJournal.CagePetByID(petID)
|
|
end
|
|
elseif actionID=="favorite" then
|
|
if petInfo.idType~="pet" then
|
|
warning = L["You don't own this pet"]
|
|
else
|
|
C_PetJournal.SetFavorite(petID,petInfo.isFavorite and 0 or 1)
|
|
needsUpdate = true
|
|
end
|
|
elseif actionID=="leveling" then
|
|
if petInfo.idType~="pet" then
|
|
warning = L["You don't own this pet"]
|
|
elseif not (petInfo.isOwned and petInfo.canBattle and petInfo.level and petInfo.level<25) then
|
|
warning = L["This pet can't level"]
|
|
elseif petInfo.isLeveling then
|
|
rematch.queue:RemovePetID(petID)
|
|
needsUpdate = true
|
|
else
|
|
rematch.queue:AddPetID(petID)
|
|
needsUpdate = true
|
|
end
|
|
elseif actionID=="marker:0" and speciesID then
|
|
if petInfo.marker then
|
|
settings.PetMarkers[speciesID] = nil
|
|
needsUpdate = true
|
|
else
|
|
warning = L["This pet has no pet tag"]
|
|
end
|
|
elseif markerID and markerID>=1 and markerID<=8 and speciesID then
|
|
if petInfo.marker==markerID then
|
|
settings.PetMarkers[speciesID] = nil
|
|
else
|
|
settings.PetMarkers[speciesID] = markerID
|
|
end
|
|
needsUpdate = true
|
|
end
|
|
|
|
-- if an action couldn't be done and has a warning, show it as a tooltip at the cursor
|
|
if warning then
|
|
rematch.tooltip:ShowSimpleTooltip(self,nil,warning,"cursor")
|
|
end
|
|
-- if an action requires an update to the pet list/queue/UI, udpate it
|
|
if needsUpdate then
|
|
rematch.filters:ForceUpdate()
|
|
rematch.frame:Update()
|
|
end
|
|
|
|
end
|