0453a59 - Add Uldir instance ID for autologging
[wowui.git] / OmaAB / ExpBar.lua
1 -- ExpBar.lua
2 if true then return end
3 local _;
4 local min = math.min;
5 local IsResting = IsResting;
6 local UnitXP, UnitXPMax, GetXPExhaustion = UnitXP, UnitXPMax, GetXPExhaustion;
7 local CTimerAfter = C_Timer.After;
8 local ExhaustionToolTipText = ExhaustionToolTipText;
9 local GameTooltip = nil;
10
11 local width = 300;
12 local running = false;
13 local frame = CreateFrame("Frame", "OmaExpBar", UIParent);
14
15 local function expBar()
16     frame:SetPoint("CENTER");
17     frame:SetWidth(width);
18     frame:SetHeight(10);
19     frame.base = frame:CreateTexture(nil, "BACKGROUND");
20     frame.base:SetAllPoints();
21     frame.base:SetColorTexture(0, 0, 0, 0.5);
22     frame.bar = frame:CreateTexture(nil, "BORDER");
23     frame.bar:SetPoint("TOPLEFT", frame.base, "TOPLEFT");
24     frame.bar:SetPoint("BOTTOMLEFT", frame.base, "BOTTOMLEFT");
25     frame.bar:SetColorTexture(1, 1, 1);
26     frame.rest = frame:CreateTexture(nil, "BORDER");
27     frame.rest:SetPoint("TOPLEFT", frame.bar, "TOPRIGHT");
28     frame.rest:SetPoint("BOTTOMLEFT", frame.bar, "BOTTOMRIGHT");
29     frame.rest:SetColorTexture(0, 0.3, 1, 0.7);
30     frame.text = frame:CreateFontString(nil, "ARTWORK", "GameFontHighlight");
31     frame.text:SetPoint("BOTTOM");
32     frame.text:Hide();
33
34     local function updateXP()
35         local xp, xpmax = UnitXP("player"), UnitXPMax("player");
36         local rested = GetXPExhaustion();
37         local current = xp/xpmax*width;
38         local space = width - current;
39         frame.bar:SetWidth(current);
40         if rested then
41             local restw = rested/xpmax*width;
42             frame.rest:SetWidth(min(space, restw));
43             frame.rest:Show();
44             frame.text:SetFormattedText("%d / %d (+%d)", xp, xpmax, rested/2);
45             frame.bar:SetVertexColor(0, 0.5, 1, 0.9);
46         else
47             frame.rest:Hide();
48             frame.text:SetFormattedText("%d / %d", xp, xpmax);
49             frame.bar:SetVertexColor(0.6, 0.2, 1, 0.9);
50         end
51     end
52     local function updater()
53         updateXP();
54         if running then CTimerAfter(10, updater) end
55     end
56     updateXP();
57
58     frame:SetScript("OnEvent", function(self, event)
59         if event == "PLAYER_XP_UPDATE" or event == "PLAYER_LEVEL_UP" then
60             updateXP();
61         elseif event == "PLAYER_UPDATE_RESTING" or event == "PLAYER_ENTERING_WORLD" then
62             if IsResting() then
63                 running = true;
64                 CTimerAfter(6, updater);
65             else
66                 running = false;
67             end
68         end
69     end);
70     frame:UnregisterAllEvents();
71     frame:RegisterEvent("PLAYER_XP_UPDATE");
72     frame:RegisterEvent("PLAYER_LEVEL_UP");
73     frame:RegisterEvent("PLAYER_UPDATE_RESTING");
74     frame:RegisterEvent("PLAYER_ENTERING_WORLD");
75     -- from FrameXML/MainMenuBar.lua
76     frame:SetScript("OnEnter", function(frame) frame.text:Show(); end);
77     frame:SetScript("OnLeave", function(frame) frame.text:Hide(); end);
78 end
79
80 frame:RegisterEvent("PLAYER_LOGIN");
81 frame:SetScript("OnEvent", function(self, event)
82     if event == "PLAYER_LOGIN" then
83         GameTooltip = _G["GameTooltip"];
84         if UnitLevel("player") < 120 and not IsXPUserDisabled() then
85             return expBar();
86         end
87     end
88 end);