mischivin@0
|
1 local dataobj = LibStub:GetLibrary("LibDataBroker-1.1"):NewDataObject("Spotlight", {
|
mischivin@0
|
2 type = "data source",
|
mischivin@0
|
3 text = "Everything Unlocked!",
|
mischivin@0
|
4 icon = GetInventoryItemTexture("player", 16),
|
mischivin@0
|
5 OnClick = function(clickedframe, button)
|
mischivin@0
|
6 Spotlight.ShowPercent = not Spotlight.ShowPercent;
|
mischivin@0
|
7 Spotlight.Update();
|
mischivin@0
|
8 end,
|
mischivin@0
|
9 })
|
mischivin@0
|
10
|
mischivin@0
|
11 local function Initialize ()
|
mischivin@0
|
12 if not Spotlight.Status then
|
mischivin@0
|
13 Spotlight.Status = {
|
mischivin@0
|
14 Dungeons = {
|
mischivin@0
|
15 Completed = false,
|
mischivin@0
|
16 Progress = 0,
|
mischivin@0
|
17 Max = 100,
|
mischivin@0
|
18 },
|
mischivin@0
|
19 WorldQuests = {
|
mischivin@0
|
20 Completed = false,
|
mischivin@0
|
21 Progress = 0,
|
mischivin@0
|
22 Max = 200,
|
mischivin@0
|
23 },
|
mischivin@0
|
24 PvP = {
|
mischivin@0
|
25 Completed = false,
|
mischivin@0
|
26 Progress = 0,
|
mischivin@0
|
27 Max = 1000,
|
mischivin@0
|
28 },
|
mischivin@0
|
29 };
|
mischivin@0
|
30 Spotlight.ShowPercent = true;
|
mischivin@0
|
31 end
|
mischivin@0
|
32
|
mischivin@0
|
33 Spotlight.IDs = {
|
mischivin@0
|
34 Dungeons = 11152,
|
mischivin@0
|
35 WorldQuests = 11153,
|
mischivin@0
|
36 PvP = 11154,
|
mischivin@0
|
37 };
|
mischivin@0
|
38
|
mischivin@0
|
39 Spotlight.Calculate = function (key)
|
mischivin@0
|
40 local value = 0;
|
mischivin@0
|
41 for index = 1, GetAchievementNumCriteria(Spotlight.IDs[key]) do
|
mischivin@0
|
42 value = value + select(4, GetAchievementCriteriaInfo(Spotlight.IDs[key], index));
|
mischivin@0
|
43 end
|
mischivin@0
|
44 return value;
|
mischivin@0
|
45 end
|
mischivin@0
|
46
|
mischivin@0
|
47 Spotlight.GetColor = function (value)
|
mischivin@0
|
48 value = value * 2;
|
mischivin@0
|
49 local r = (2 - value);
|
mischivin@0
|
50 local g = value;
|
mischivin@0
|
51 local b = 0;
|
mischivin@0
|
52
|
mischivin@0
|
53 if r > 1 then r = 1 end
|
mischivin@0
|
54 if g > 1 then g = 1 end
|
mischivin@0
|
55 if b > 1 then b = 1 end
|
mischivin@0
|
56
|
mischivin@0
|
57 r = string.format("%i", r * 255);
|
mischivin@0
|
58 g = string.format("%i", g * 255);
|
mischivin@0
|
59 b = string.format("%i", b * 255);
|
mischivin@0
|
60
|
mischivin@0
|
61 return "ff" .. string.format("%02x", r) .. string.format("%02x", g) .. string.format("%02x", b);
|
mischivin@0
|
62 end
|
mischivin@0
|
63
|
mischivin@0
|
64 Spotlight.Format = function (key)
|
mischivin@0
|
65 local value = Spotlight.Status[key].Progress / Spotlight.Status[key].Max;
|
mischivin@0
|
66 if Spotlight.ShowPercent then
|
mischivin@0
|
67 value = string.format("|c" .. Spotlight.GetColor(value) .. "%.1f|cffffffff%%|r", value * 100);
|
mischivin@0
|
68 else
|
mischivin@0
|
69 value = "|c" .. Spotlight.GetColor(value) .. Spotlight.Status[key].Progress .. "|cffffffff/" .. Spotlight.Status[key].Max .. "|r";
|
mischivin@0
|
70 end
|
mischivin@0
|
71 return value;
|
mischivin@0
|
72 end
|
mischivin@0
|
73
|
mischivin@0
|
74 Spotlight.Update = function (self)
|
mischivin@0
|
75 local output = "";
|
mischivin@0
|
76 for key, value in pairs(Spotlight.IDs) do
|
mischivin@0
|
77 Spotlight.Status[key].Completed = select(3, GetAchievementCriteriaInfo(value,1));
|
mischivin@0
|
78 if not Spotlight.Status[key].Completed then
|
mischivin@0
|
79 Spotlight.Status[key].Progress = Spotlight.Calculate(key);
|
mischivin@0
|
80 output = output .. string.format(" %.1s", key) .. ":" .. Spotlight.Format(key);
|
mischivin@0
|
81 end
|
mischivin@0
|
82 end
|
mischivin@0
|
83 dataobj.icon = GetInventoryItemTexture("player", 16);
|
mischivin@0
|
84 dataobj.text = output;
|
mischivin@0
|
85 end
|
mischivin@0
|
86
|
mischivin@0
|
87 Spotlight.Update();
|
mischivin@0
|
88 end
|
mischivin@0
|
89
|
mischivin@0
|
90 function dataobj:OnTooltipShow()
|
mischivin@0
|
91 self:AddLine("Spotlight - Hidden Artifact Tracker|n|n");
|
mischivin@0
|
92 for k, v in pairs(Spotlight.IDs) do
|
mischivin@0
|
93 self:AddDoubleLine(k .. ":", Spotlight.Format(k));
|
mischivin@0
|
94 end
|
mischivin@0
|
95 self:AddLine("|nClick to toggle display method");
|
mischivin@0
|
96 end
|
mischivin@0
|
97
|
mischivin@0
|
98 function dataobj:OnEnter()
|
mischivin@0
|
99 GameTooltip:SetOwner(self, "ANCHOR_NONE");
|
mischivin@0
|
100 GameTooltip:SetPoint("TOP", self, "BOTTOM");
|
mischivin@0
|
101 GameTooltip:ClearLines();
|
mischivin@0
|
102 dataobj.OnTooltipShow(GameTooltip);
|
mischivin@0
|
103 GameTooltip:Show();
|
mischivin@0
|
104 end
|
mischivin@0
|
105
|
mischivin@0
|
106 function dataobj:OnLeave()
|
mischivin@0
|
107 GameTooltip:Hide()
|
mischivin@0
|
108 end
|
mischivin@0
|
109
|
mischivin@0
|
110 local function EventHandler(self, event, ...)
|
mischivin@0
|
111 if event == "VARIABLES_LOADED" then
|
mischivin@0
|
112 Initialize();
|
mischivin@0
|
113 end
|
mischivin@0
|
114 if event == "CRITERIA_UPDATE" then
|
mischivin@0
|
115 Spotlight.Update();
|
mischivin@0
|
116 end
|
mischivin@0
|
117 end
|
mischivin@0
|
118
|
mischivin@0
|
119 local EventListener = CreateFrame("FRAME", "Spotlight");
|
mischivin@0
|
120 EventListener:RegisterEvent("VARIABLES_LOADED");
|
mischivin@0
|
121 EventListener:RegisterEvent("CRITERIA_UPDATE");
|
mischivin@0
|
122 EventListener:SetScript("OnEvent", EventHandler);
|
mischivin@0
|
123
|