WoWInterface SVN oUF_Experience

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 29 to Rev 30
    Reverse comparison

Rev 29 → Rev 30

trunk/oUF_Experience/oUF_Experience.lua
3,6 → 3,7
Elements handled:
.Experience [statusbar]
.Experience.Text [fontstring] (optional)
.Experience.Rested [statusbar] (optional)
 
Shared:
- MouseOver [boolean]
10,26 → 11,29
 
Functions that can be overridden from within a layout:
- :PostUpdate(event, unit, bar, min, max)
- :OverrideText(min, max)
- :OverrideText(unit, min, max)
- :OverrideTooltip(unit, min, max, bars)
 
--]]
local localized, class = UnitClass('player')
 
local function Tooltip(self, unit, min, max, num)
if(self.MouseOver) then self:SetAlpha(1) end
local function showTooltip(self, unit, min, max, bars)
if(self.MouseOver) then
self:SetAlpha(1)
end
 
GameTooltip:SetOwner(self, 'ANCHOR_BOTTOMRIGHT', 5, -5)
GameTooltip:AddLine(string.format('XP: %d/%d (%.1f%%)', min, max, min/max*100))
GameTooltip:AddLine(string.format('%d needed (%.1f%% - %.1f bars)', max-min, (max-min)/max*100, num*(max-min)/max))
GameTooltip:AddLine(format('XP: %d/%d (%.1f%%)', min, max, min / max * 100))
GameTooltip:AddLine(format('%d needed (%.1f%% - %.1f bars)', max - min, (max - min) / max * 100, bars * (max - min) / max))
 
if(unit == 'player' and GetXPExhaustion()) then
GameTooltip:AddLine(string.format('|cff0090ffRested: +%d (%.1f%%)', GetXPExhaustion(), GetXPExhaustion()/max*100))
local rested = GetXPExhaustion()
if(unit == 'player' and rested > 0) then
GameTooltip:AddLine(format('|cff0090ffRested: +%d (%.1f%%)', rested, rested / max * 100))
end
 
GameTooltip:Show()
end
 
local function GetXP(unit)
local function getXP(unit)
if(unit == 'pet') then
return GetPetExperience()
else
37,77 → 41,108
end
end
 
local function Update(self, event, unit)
if(event == 'UNIT_PET' and unit ~= 'player') then return end
local function Update(self, event)
local bar, unit = self.Experience, self.unit
 
local bar = self.Experience
if(self.unit == 'player' and UnitLevel('player') == MAX_PLAYER_LEVEL) then return bar:Hide() end
if(self.unit == 'pet' and class ~= 'HUNTER') then return bar:Hide() end
if(self.unit == 'pet' and UnitLevel('pet') >= UnitLevel('player')) then bar:Hide() end
if(UnitLevel(unit) == MAX_PLAYER_LEVEL) then
self:DisableElement('Experience')
 
local min, max = GetXP(self.unit)
bar:SetMinMaxValues(0, max)
if(bar.Rested) then
bar.Rested:Hide()
end
 
return bar:Hide()
end
 
if(UnitLevel('pet') == 0 and unit == 'pet') then
bar:Hide()
else
bar:Show()
end
 
local min, max = getXP(unit)
bar:SetMinMaxValues(math.min(0, min), max)
bar:SetValue(min)
bar:Show()
 
if(bar.Text) then
if(bar.OverrideText) then
bar:OverrideText(min, max)
bar:OverrideText(unit, min, max)
else
bar.Text:SetFormattedText('%d / %d', min, max)
end
end
 
if(bar.Rested and unit == 'player') then
if(GetXPExhaustion() > 0) then
bar.Rested:SetMinMaxValues(min, max)
bar.Rested:SetValue(math.min(min + GetXPExhaustion(), max))
else
bar.Rested:SetMinMaxValues(0, 1)
bar.Rested:SetValue(0)
end
end
 
if(bar.PostUpdate) then
bar.PostUpdate(self, event, unit, bar, min, max)
end
 
if(bar.Tooltip) then
bar:SetScript('OnEnter', function()
Tooltip(bar, self.unit, min, max, self.unit == 'pet' and 6 or 20)
return (bar.OverrideTooltip or showTooltip) (bar, unit, min, max, unit == 'pet' and 6 or 20)
end)
end
 
if(bar.PostUpdate) then bar.PostUpdate(self, event, unit, bar, min, max) end
end
 
local function Enable(self, unit)
local experience = self.Experience
if(experience and (unit == 'pet' or unit == 'player')) then
self:RegisterEvent('PLAYER_XP_UPDATE', Update)
self:RegisterEvent('UNIT_PET', Update)
local xp = self.Experience
if(xp) then
if(not xp:GetStatusBarTexture()) then
xp:SetStatusBarTexture([=[Interface\TargetingFrame\UI-StatusBar]=])
end
 
if(class == 'HUNTER') then
if(unit == 'player') then
self:RegisterEvent('PLAYER_XP_UPDATE', Update)
self:RegisterEvent('PLAYER_LEVEL_UP', Update)
 
if(xp.Rested) then
self:RegisterEvent('UPDATE_EXHAUSTION', Update)
end
elseif(unit == 'pet' and select(2, UnitClass('player')) == 'HUNTER') then -- only called once so select is "ok"
self:RegisterEvent('UNIT_PET_EXPERIENCE', Update)
end
 
if(experience.MouseOver or experience.Tooltip) then
experience:EnableMouse()
if(xp.MouseOver or xp.Tooltip) then
xp:EnableMouse()
end
 
if(experience.Tooltip and experience.MouseOver) then
experience:SetAlpha(0)
experience:SetScript('OnLeave', function(self) self:SetAlpha(0); GameTooltip:Hide() end)
elseif(experience.MouseOver and not experience.Tooltip) then
experience:SetAlpha(0)
experience:SetScript('OnEnter', function(self) self:SetAlpha(1) end)
experience:SetScript('OnLeave', function(self) self:SetAlpha(0) end)
elseif(experience.Tooltip and not experience.MouseOver) then
experience:SetScript('OnLeave', function() GameTooltip:Hide() end)
if(xp.MouseOver and xp.Tooltip) then
xp:SetAlpha(0)
xp:SetScript('OnLeave', function() xp:SetAlpha(0); GameTooltip:Hide() end)
elseif(xp.MouseOver and not xp.Tooltip) then
xp:SetAlpha(0)
xp:SetScript('OnEnter', function() xp:SetAlpha(1) end)
xp:SetScript('OnLeave', function() xp:SetAlpha(0) end)
elseif(not xp.MouseOver and xp.Tooltip) then
xp:SetScript('OnLeave', function() GameTooltip:Hide() end)
end
 
if(not experience:GetStatusBarTexture()) then
experience:SetStatusBarTexture([=[Interface\TargetingFrame\UI-StatusBar]=])
end
 
return true
end
end
end
 
local function Disable(self)
if(self.Experience) then
self:UnregisterEvent('PLAYER_XP_UPDATE', Update)
self:UnregisterEvent('UNIT_PET', Update)
local function Disable(self, unit)
local xp = self.Experience
if(xp) then
if(unit == 'player') then
self:UnregisterEvent('PLAYER_XP_UPDATE', Update)
self:UnregisterEvent('PLAYER_LEVEL_UP', Update)
 
if(class == 'HUNTER') then
if(xp.Rested) then
self:UnregisterEvent('UPDATE_EXHAUSTION', Update)
end
elseif(unit == 'pet') then
self:UnregisterEvent('UNIT_PET_EXPERIENCE', Update)
end
end
end
end