ElvUI/Modules/DataTexts/Experience.lua

81 lines
3.1 KiB
Lua

local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
local DT = E:GetModule('DataTexts')
local _G = _G
local format = format
local UnitXP, UnitXPMax = UnitXP, UnitXPMax
local IsXPUserDisabled, GetXPExhaustion = IsXPUserDisabled, GetXPExhaustion
local IsPlayerAtEffectiveMaxLevel = IsPlayerAtEffectiveMaxLevel
local CurrentXP, XPToLevel, RestedXP, PercentRested
local PercentXP, RemainXP, RemainTotal, RemainBars
local function OnEvent(self)
local displayString = ''
if IsXPUserDisabled() then
displayString = L["Disabled"]
elseif IsPlayerAtEffectiveMaxLevel() then
displayString = L["Max Level"]
else
CurrentXP, XPToLevel, RestedXP = UnitXP('player'), UnitXPMax('player'), GetXPExhaustion()
if XPToLevel <= 0 then XPToLevel = 1 end
local remainXP = XPToLevel - CurrentXP
local remainPercent = remainXP / XPToLevel
-- values we also use in OnEnter
RemainTotal, RemainBars = remainPercent * 100, remainPercent * 20
PercentXP, RemainXP = (CurrentXP / XPToLevel) * 100, E:ShortValue(remainXP)
local textFormat = E.global.datatexts.settings.Experience.textFormat
if textFormat == 'PERCENT' then
displayString = format('%.2f%%', PercentXP)
elseif textFormat == 'CURMAX' then
displayString = format('%s - %s', E:ShortValue(CurrentXP), E:ShortValue(XPToLevel))
elseif textFormat == 'CURPERC' then
displayString = format('%s - %.2f%%', E:ShortValue(CurrentXP), PercentXP)
elseif textFormat == 'CUR' then
displayString = format('%s', E:ShortValue(CurrentXP))
elseif textFormat == 'REM' then
displayString = format('%s', RemainXP)
elseif textFormat == 'CURREM' then
displayString = format('%s - %s', E:ShortValue(CurrentXP), RemainXP)
elseif textFormat == 'CURPERCREM' then
displayString = format('%s - %.2f%% (%s)', E:ShortValue(CurrentXP), PercentXP, RemainXP)
end
if RestedXP and RestedXP > 0 then
PercentRested = (RestedXP / XPToLevel) * 100
if textFormat == 'PERCENT' then
displayString = format('%s R:%.2f%%', displayString, PercentRested)
elseif textFormat == 'CURPERC' then
displayString = format('%s R:%s [%.2f%%]', displayString, E:ShortValue(RestedXP), PercentRested)
elseif textFormat ~= 'NONE' then
displayString = format('%s R:%s', displayString, E:ShortValue(RestedXP))
end
end
end
self.text:SetText(displayString)
end
local function OnEnter()
if IsXPUserDisabled() or IsPlayerAtEffectiveMaxLevel() then return end
DT.tooltip:ClearLines()
DT.tooltip:AddLine(L["Experience"])
DT.tooltip:AddLine(' ')
DT.tooltip:AddDoubleLine(L["XP:"], format(' %d / %d (%.2f%%)', CurrentXP, XPToLevel, PercentXP), 1, 1, 1)
DT.tooltip:AddDoubleLine(L["Remaining:"], format(' %s (%.2f%% - %d '..L["Bars"]..')', RemainXP, RemainTotal, RemainBars), 1, 1, 1)
if RestedXP and RestedXP > 0 then
DT.tooltip:AddDoubleLine(L["Rested:"], format('+%d (%.2f%%)', RestedXP, PercentRested), 1, 1, 1)
end
DT.tooltip:Show()
end
DT:RegisterDatatext('Experience', nil, {'PLAYER_XP_UPDATE', 'DISABLE_XP_GAIN', 'ENABLE_XP_GAIN', 'UPDATE_EXHAUSTION'}, OnEvent, nil, nil, OnEnter, nil, _G.COMBAT_XP_GAIN)