ElvUI/Modules/DataTexts/BattleStats.lua

119 lines
3.1 KiB
Lua
Raw Permalink Normal View History

2020-11-13 14:27:50 -05:00
local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
local DT = E:GetModule('DataTexts')
local _G = _G
local sort = sort
local ipairs = ipairs
local strlen = strlen
local strjoin = strjoin
local C_PvP_GetMatchPVPStatColumns = C_PvP.GetMatchPVPStatColumns
local GetNumBattlefieldScores = GetNumBattlefieldScores
local GetBattlefieldStatData = GetBattlefieldStatData
local GetBattlefieldScore = GetBattlefieldScore
local BATTLEGROUND = BATTLEGROUND
local displayString = ''
local holder = {
LEFT = { data = {}, _G.KILLS, _G.KILLING_BLOWS, _G.DEATHS },
RIGHT = { data = {}, _G.DAMAGE, _G.SHOW_COMBAT_HEALING, _G.HONOR }
}
DT.BattleStats = holder
function DT:UpdateBattlePanel(which)
local info = which and holder[which]
local panel = info and info.panel
if not panel then return end
for i, name in ipairs(info) do
local dt = panel[i]
if dt and dt.text then
dt.text:SetFormattedText(displayString, name, info.data[i] or 0)
end
end
end
local myIndex
local LEFT = holder.LEFT.data
local RIGHT = holder.RIGHT.data
function DT:UPDATE_BATTLEFIELD_SCORE()
myIndex = nil
for i = 1, GetNumBattlefieldScores() do
local name, kb, hks, deaths, honor, _, _, _, _, dmg, heals = GetBattlefieldScore(i)
if name == E.myname then
LEFT[1], LEFT[2], LEFT[3] = E:ShortValue(hks), E:ShortValue(kb), E:ShortValue(deaths)
RIGHT[1], RIGHT[2], RIGHT[3] = E:ShortValue(dmg), E:ShortValue(heals), E:ShortValue(honor)
myIndex = i
break
end
end
if myIndex then
DT:UpdateBattlePanel('LEFT')
DT:UpdateBattlePanel('RIGHT')
end
end
local function columnSort(lhs,rhs)
return lhs.orderIndex < rhs.orderIndex
end
function DT:HoverBattleStats() -- OnEnter
DT.tooltip:ClearLines()
if myIndex and DT.ShowingBattleStats == 'pvp' then
local columns = C_PvP_GetMatchPVPStatColumns()
if columns then
sort(columns, columnSort)
local firstLine
local classColor = E:ClassColor(E.myclass)
DT.tooltip:AddDoubleLine(BATTLEGROUND, E.MapInfo.name, 1,1,1, classColor.r, classColor.g, classColor.b)
-- Add extra statistics to watch based on what BG you are in.
for i, stat in ipairs(columns) do
local name = stat.name
if name and strlen(name) > 0 then
if not firstLine then
DT.tooltip:AddLine(' ')
firstLine = true
end
DT.tooltip:AddDoubleLine(name, GetBattlefieldStatData(myIndex, i), 1,1,1)
end
end
DT.tooltip:Show()
end
end
end
function DT:ToggleBattleStats()
if DT.ForceHideBGStats then
DT.ForceHideBGStats = nil
E:Print(L["Battleground datatexts will now show again if you are inside a battleground."])
else
DT.ForceHideBGStats = true
E:Print(L["Battleground datatexts temporarily hidden, to show type /bgstats"])
end
DT:UpdatePanelInfo('LeftChatDataPanel')
DT:UpdatePanelInfo('RightChatDataPanel')
if DT.ShowingBattleStats then
DT:UpdateBattlePanel('LEFT')
DT:UpdateBattlePanel('RIGHT')
end
end
local function ValueColorUpdate(hex)
displayString = strjoin('', '%s: ', hex, '%s|r')
if DT.ShowingBattleStats then
DT:UpdateBattlePanel('LEFT')
DT:UpdateBattlePanel('RIGHT')
end
end
E.valueColorUpdateFuncs[ValueColorUpdate] = true