-- Scanning functions
local GetMountInfo, GetMountTypeSpeed
do
local L = {
fast = 'This is a very fast %w+',
fastest = 'This is an extremely fast %w+',
flying = 'Outland %w+ Northrend',
turtle = '[Tt]urtle',
aq = 'Emits a high frequency sound, forcing a silithid tank',
}
local speeds = {
flying_fastest = 310, flying_fast = 280, flying = 150,
ground_fast = 100, ground = 60, ground_slow = 0
}
local cache = {}
local scantt = CreateFrame('GameTooltip', 'CompanionCountTooltip', UIParent, 'GameTooltipTemplate')
function GetMountType(spellid)
local rval
if not cache[spellid] then
local link = GetSpellLink(spellid)
scantt:SetOwner(UIParent, 'ANCHOR_NONE')
scantt:SetHyperlink(link)
if CompanionCountTooltipTextLeft3 then
local text = CompanionCountTooltipTextLeft3:GetText()
scantt:Hide()
if text:match(L.flying) then
if text:match(L.fastest) then
rval = 'flying_fastest'
elseif text:match(L.fast) then
rval = 'flying_fast'
else
rval = 'flying'
end
else
if text:match(L.fast) then
rval = 'ground_fast'
elseif text:match(L.turtle) then
rval = 'ground_slow'
elseif text:match(L.aq) then
rval = 'ground'
else
rval = 'ground'
end
end
end
cache[spellid] = rval
else
rval = cache[spellid]
end
return rval
end
function GetMountTypeSpeed(typ)
return speeds[typ] or 0
end
end
-- Text update
do
local TOTAL_FORMAT = ' ('..NUMBER_OF_RESULTS_TEMPLATE:match('%( (.-) %)')..')'
hooksecurefunc("PetPaperDollFrame_SetCompanionPage", function(num)
local text = CompanionPageNumber:GetText()
local count = GetNumCompanions(PetPaperDollFrameCompanionFrame.mode)
CompanionPageNumber:SetFormattedText(text..TOTAL_FORMAT, count)
end)
local point1, parent, point2, x, y = CompanionPrevPageButton:GetPoint(1)
CompanionPrevPageButton:ClearAllPoints()
CompanionPrevPageButton:SetPoint(point1, parent, point2, x-20, y)
point1, parent, point2, x, y = CompanionNextPageButton:GetPoint(1)
CompanionNextPageButton:ClearAllPoints()
CompanionNextPageButton:SetPoint(point1, parent, point2, x+33, y)
end
-- Tooltip
do
local mounts = {}
local function DoMountTooltip(self, tt)
local show = function(msg, typ)
if mounts[typ] then
tt:AddDoubleLine(msg:format(GetMountTypeSpeed(typ)), mounts[typ], 1, 1, 1)
end
end
table.wipe(mounts)
for i=1, GetNumCompanions'MOUNT' do
local id, name, spellid = GetCompanionInfo('MOUNT', i)
local typ = GetMountType(spellid)
mounts[typ] = (mounts[typ] or 0) + 1
end
tt:SetOwner(self, 'ANCHOR_NONE')
tt:SetPoint('BOTTOMLEFT', self, 'TOPRIGHT')
tt:ClearLines()
tt:AddLine'Detailed Info'
show('Flying (%d%%)', 'flying_fastest')
show('Flying (%d%%)', 'flying_fast')
show('Flying (%d%%)', 'flying')
show('Ground (%d%%)', 'ground_fast')
show('Ground (%d%%)', 'ground')
show('Ground (%d%%)', 'ground_slow')
tt:Show()
end
local function OnEnter(self)
if PetPaperDollFrameCompanionFrame.mode == 'MOUNT' then
DoMountTooltip(self, GameTooltip)
end
end
local function OnLeave(self)
GameTooltip:Hide()
end
local ttparent = CreateFrame('Frame', nil, CompanionPageNumber:GetParent())
ttparent:SetWidth(CompanionPageNumber:GetWidth())
ttparent:SetHeight(CompanionPageNumber:GetHeight())
ttparent:SetAllPoints(CompanionPageNumber)
ttparent:EnableMouse(true)
ttparent:SetScript('OnEnter', OnEnter)
ttparent:SetScript('OnLeave', OnLeave)
end