--[[ -- Name: TinyTip -- Author: Thrae of Maelstrom (aka "Matthew Carras") -- Release Date: 6-25-06 -- -- These functions include more extragant features having -- specifically to do with textures, -- such as the PvP Rank Icon or buffs and debuffs. --]] local _G = getfenv(0) local GameTooltip, UIParent,GTStatusBar = _G.GameTooltip, _G.UIParent, _G.GameTooltipStatusBar local fClearAllPoints, fSetPoint, fHide,fShow,fGetScale = UIParent.ClearAllPoints, UIParent.SetPoint, UIParent.Hide, UIParent.Show, UIParent.GetScale local txSetTexture, txSetTexCoord, txShow, txHide = _G.CharacterFramePortrait.SetTexture, _G.CharacterFramePortrait.SetTexCoord, _G.CharacterFramePortrait.Show, _G.CharacterFramePortrait.Hide local db,EventFrame,ExtrasFrame local tooltip = GameTooltip local gtAddLine = GameTooltip.AddLine local fsSetText, fsGetText, fsShow, fsHide = _G.GameTooltipTextLeft1.SetText, _G.GameTooltipTextLeft1.GetText, _G.GameTooltipTextLeft1.Show, _G.GameTooltipTextLeft1.Hide local strformat= string.format local TextureTable,NumTextures, NumUnusedTextures, BuffFrame, PvPTexture, PvPIconFrame, RTIcon, RTIconFrame local i,dtable,tmp,tmp2 _G.TinyTipIconsExists = true local function SetTextureTable(path,count) local tx if NumUnusedTextures > 0 then tx = TextureTable[ (NumTextures - NumUnusedTextures) + 1 ] txSetTexture(tx, path) if count and count > 0 then fsSetText(tx.fs, count ) else fsHide(tx.fs) end txShow(tx) NumUnusedTextures = NumUnusedTextures - 1 else NumTextures = NumTextures + 1 tinsert(TextureTable, BuffFrame:CreateTexture()) tx = TextureTable[ NumTextures ] txSetTexture(tx, path) tx.fs = ExtrasFrame:CreateFontString(nil, "ARTWORK", "NumberFontNormal") if count and count > 0 then fsSetText(tx.fs, count) else fsHide(tx.fs) end fsShow(tx.fs) txShow(tx) end return tx end function TinyTipIcons_ResetTextureTable() NumUnusedTextures = NumTextures end function TinyTipIcons_Init(_db,_EventFrame, _ExtrasFrame, _gtAddLine, _tooltip) if _db then db = _db end if _EventFrame then EventFrame = _EventFrame end if _ExtrasFrame then ExtrasFrame = _ExtrasFrame end if _gtAddLine then gtAddLine = _gtAddLine end if _tooltip then tooltip = _tooltip end if db["PvPIcon"] then if not PvPIconFrame then PvPIconFrame = _G.CreateFrame("Frame", nil, ExtrasFrame) PvPIconFrame:Show() end if not PvPTexture then PvPTexture = PvPIconFrame:CreateTexture(nil, "ARTWORK") end PvPTexture:SetPoint(db["PvPIconAnchor1"] or "TOPRIGHT", tooltip, db["PvPIconAnchor2"] or "TOPLEFT", db["PvPIconOffX"] or 0, db["PvPIconOffY"] or 0) txHide(PvPTexture) PvPIconFrame:SetScale(db["PvPIconScale"] or 0.7) end if db["RTIcon"] then if not RTIconFrame then RTIconFrame = _G.CreateFrame("Frame", nil, ExtrasFrame) RTIconFrame:Show() end RTIconFrame:SetScale(db["RTIconScale"] or 0.1) if not RTIcon then RTIcon = RTIconFrame:CreateTexture(nil, "ARTWORK") txSetTexture(RTIcon, "Interface\\TargetingFrame\\UI-RaidTargetingIcons") txHide(RTIcon) end if db["PvPIcon"] and PvPTexture then RTIcon:SetPoint(db["RTIconAnchor1"] or "TOPLEFT", PvPTexture, db["RTIconAnchor2"] or "BOTTOMLEFT", db["RTIconOffX"] or 0, db["RTIconOffY"] or 0) else RTIcon:SetPoint(db["RTIconAnchor1"] or "TOPRIGHT", tooltip, db["RTIconAnchor2"] or "TOPLEFT", db["RTIconOffX"] or 0, db["RTIconOffY"] or 0) end end if (db["Buffs"] or db["Debuffs"]) then if not BuffFrame then BuffFrame = _G.CreateFrame("Frame", nil, ExtrasFrame) BuffFrame:Show() end BuffFrame:SetScale(db["BuffScale"] or 0.2) if not TextureTable then TextureTable = {} NumTextures,NumUnusedTextures = 0,0 end else TextureTable = nil end end function TinyTipIcons_ResetRTIcon(unit,numRaid) tmp = GetRaidTargetIndex(unit) if numRaid and numRaid > 0 and tmp and tmp > 0 then tmp = _G.UnitPopupButtons["RAID_TARGET_" .. tmp] if tmp then txSetTexCoord(RTIcon, tmp.tCoordLeft, tmp.tCoordRight, tmp.tCoordTop, tmp.tCoordBottom ) txShow(RTIcon) fShow(ExtrasFrame) end else txHide(RTIcon) end end function TinyTipIcons_ResetPvPIcon(rank,isplayer) if isplayer and rank > 0 then txSetTexture(PvPTexture, strformat("%s%02d", "Interface\\PvPRankBadges\\PvPRank", rank)) txShow(PvPTexture) fShow(ExtrasFrame) else txHide(PvPTexture) end end function TinyTipIcons_HideUnusedTextures() local tx i = NumUnusedTextures while i > 0 do tx = TextureTable[ NumTextures - i + 1 ] txHide(tx) fsHide(tx.fs) i = i - 1 end end local lastTx function TinyTipIcons_ShowBuffs(unit) local flag, count = db["Buffs"], 0 tmp,tmp2 = nil,nil if flag then if flag == 1 then num = 8 else num = 32 end for i = 1,num,1 do tmp,tmp2 = _G.UnitBuff(unit, i, flag ~= 1) if tmp then count = count + 1 if flag ~= 3 then tmp = SetTextureTable( tmp,tmp2 ) fClearAllPoints(tmp) if count == 1 then fSetPoint(tmp, db["BuffAnchor1"] or "BOTTOM", (db["ExtraTooltip"] and _G.TinyTipExtras_Tooltip) or GameTooltip, db["BuffAnchor2"] or "TOPLEFT", db["BuffOffX"] or 0, db["BuffOffY"] or (-2 / fGetScale(UIParent)) ) else fSetPoint(tmp, "LEFT", lastTx, "RIGHT", 0, 0) end fSetPoint(tmp.fs, "BOTTOM", tmp, "TOP", 0, 0) lastTx = tmp end end end if flag == 3 and count > 0 then gtAddLine( tooltip, strformat("%s %s: (|cFFFFFFFF%d|r)", _G.UnitClass("player"), TinyTipExtrasLocale_Buffs, count) ) end fShow(ExtrasFrame) end end function TinyTipIcons_ShowDebuffs(unit) local flag, count = db["Debuffs"], 0 tmp,tmp2 = nil,nil if flag then if flag >= 4 then if not dtable then dtable = {} end for i,_ in TinyTipExtrasLocale_DebuffMap do dtable[i] = 0 end end if flag == 1 then num = 8 else num = 32 end for i = 1,num,1 do if flag >= 4 and _G.UnitIsFriend(unit,"player") then _,_,tmp = _G.UnitDebuff(unit,i,flag ~= 5) if tmp then dtable[ tmp ] = dtable[ tmp ] + 1 end else tmp,tmp2 = _G.UnitDebuff(unit, i, flag ~= 1) if tmp then count = count + 1 if flag ~= 3 then tmp = SetTextureTable( tmp,tmp2 ) fClearAllPoints(tmp) if count == 1 then fSetPoint(tmp, db["DebuffAnchor1"] or "TOP", (db["ManaBar"] and _G.TinyTipExtras_ManaBar) or GTStatusBar, db["DebuffAnchor2"] or "BOTTOMLEFT", db["DebuffOffX"] or 0, db["DebuffOffY"] or (2 / fGetScale(UIParent)) ) else fSetPoint(tmp, "LEFT", lastTx, "RIGHT", 0, 0) end fSetPoint(tmp.fs, "TOP", tmp, "BOTTOM", 0, 0) lastTx = tmp end end end end if dtable then for i,num in dtable do if num > 0 then gtAddLine(tooltip, strformat( "%s: (|cFFFFFFFF%d|r)", TinyTipExtrasLocale_DebuffMap[ i ], num) ) end end elseif flag == 3 and count > 0 then gtAddLine(tooltip, strformat("%s: (|cFFFFFFFF%d|r)", TinyTipExtrasLocale_DispellableDebuffs, count) ) end fShow(ExtrasFrame) end end