From 043b792dc37b6fe05c354e57bac349d216369d99 Mon Sep 17 00:00:00 2001 From: Christopher Rosell Date: Tue, 6 Apr 2010 02:15:24 +0200 Subject: [PATCH] Added a tooltip showing a more detailed breakdown of mount types --- CompanionCount.lua | 147 +++++++++++++++++++++++++++++++++++++++++++++++----- CompanionCount.toc | 2 +- 2 files changed, 135 insertions(+), 14 deletions(-) diff --git a/CompanionCount.lua b/CompanionCount.lua index 6183472..dfea4b6 100644 --- a/CompanionCount.lua +++ b/CompanionCount.lua @@ -1,17 +1,138 @@ --- Localization -local TOTAL_FORMAT = ' ('..NUMBER_OF_RESULTS_TEMPLATE:match('%( (.-) %)')..')' +-- 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 + } -hooksecurefunc("PetPaperDollFrame_SetCompanionPage", function(num) - local text = CompanionPageNumber:GetText() - local count = GetNumCompanions(PetPaperDollFrameCompanionFrame.mode) + local cache = {} + local scantt = CreateFrame('GameTooltip', 'CompanionCountTooltip', UIParent, 'GameTooltipTemplate') - CompanionPageNumber:SetFormattedText(text..TOTAL_FORMAT, count) -end) + function GetMountType(spellid) + local rval + if not cache[spellid] then + local link = GetSpellLink(spellid) -local point1, parent, point2, x, y = CompanionPrevPageButton:GetPoint(1) -CompanionPrevPageButton:ClearAllPoints() -CompanionPrevPageButton:SetPoint(point1, parent, point2, x-20, y) + scantt:SetOwner(UIParent, 'ANCHOR_NONE') + scantt:SetHyperlink(link) -point1, parent, point2, x, y = CompanionNextPageButton:GetPoint(1) -CompanionNextPageButton:ClearAllPoints() -CompanionNextPageButton:SetPoint(point1, parent, point2, x+33, y) + 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 diff --git a/CompanionCount.toc b/CompanionCount.toc index 69be9c2..765aba0 100644 --- a/CompanionCount.toc +++ b/CompanionCount.toc @@ -1,7 +1,7 @@ ## Interface: 30300 ## Title: Companion Count ## Notes: Display number of companions on pet/mount tab -## Version: 1.0 +## Version: 1.1 ## Author: chrippa ## LoadManagers: AddonLoader -- 1.7.9.5