annotate Spotlight.lua @ 8:a30c29933ebc

Fix for a minor bug that would occur if Spotlight loaded out of order with LDB
author Vynn <mischivin@gmail.com>
date Wed, 01 Feb 2017 13:06:22 -0500
parents 59c355620405
children cbf645630277
rev   line source
mischivin@0 1 local dataobj = LibStub:GetLibrary("LibDataBroker-1.1"):NewDataObject("Spotlight", {
mischivin@0 2 type = "data source",
mischivin@3 3 text = "Nothing to track!",
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@5 11 SLASH_SPOTLIGHT1, SLASH_SPOTLIGHT2 = "/spotlight", "/Spotlight";
mischivin@5 12
mischivin@5 13 local function SlashHandler(msg)
mischivin@5 14 print("|T" .. dataobj.icon .. ":0|t |cffe5cc80Spotlight|r - Artifact Hidden Skin Progress:");
mischivin@5 15 if Spotlight.IDs then
mischivin@5 16 for key, value in pairs(Spotlight.IDs) do
mischivin@5 17 print(" |cffe5cc80" .. key .. " - " .. Spotlight.Format(key, false) .. " (" .. Spotlight.Format(key, true) .. ")|r");
mischivin@5 18 end
mischivin@5 19 end
mischivin@5 20 end
mischivin@5 21
mischivin@5 22 function SlashCmdList.SPOTLIGHT(msg, editbox)
mischivin@5 23 SlashHandler(msg);
mischivin@5 24 end
mischivin@5 25
mischivin@0 26 local function Initialize ()
mischivin@0 27 if not Spotlight.Status then
mischivin@0 28 Spotlight.Status = {
mischivin@0 29 Dungeons = {
mischivin@0 30 Completed = false,
mischivin@0 31 Progress = 0,
mischivin@0 32 Max = 100,
mischivin@0 33 },
mischivin@0 34 WorldQuests = {
mischivin@0 35 Completed = false,
mischivin@0 36 Progress = 0,
mischivin@0 37 Max = 200,
mischivin@0 38 },
mischivin@0 39 PvP = {
mischivin@0 40 Completed = false,
mischivin@0 41 Progress = 0,
mischivin@0 42 Max = 1000,
mischivin@0 43 },
mischivin@0 44 };
mischivin@0 45 Spotlight.ShowPercent = true;
mischivin@0 46 end
mischivin@0 47
mischivin@0 48 Spotlight.IDs = {
mischivin@0 49 Dungeons = 11152,
mischivin@0 50 WorldQuests = 11153,
mischivin@0 51 PvP = 11154,
mischivin@0 52 };
mischivin@0 53
mischivin@0 54 Spotlight.Calculate = function (key)
mischivin@0 55 local value = 0;
mischivin@0 56 for index = 1, GetAchievementNumCriteria(Spotlight.IDs[key]) do
mischivin@0 57 value = value + select(4, GetAchievementCriteriaInfo(Spotlight.IDs[key], index));
mischivin@0 58 end
mischivin@0 59 return value;
mischivin@0 60 end
mischivin@0 61
mischivin@0 62 Spotlight.GetColor = function (value)
mischivin@0 63 value = value * 2;
mischivin@0 64 local r = (2 - value);
mischivin@0 65 local g = value;
mischivin@0 66 local b = 0;
mischivin@0 67
mischivin@0 68 if r > 1 then r = 1 end
mischivin@0 69 if g > 1 then g = 1 end
mischivin@0 70 if b > 1 then b = 1 end
mischivin@0 71
mischivin@0 72 r = string.format("%i", r * 255);
mischivin@0 73 g = string.format("%i", g * 255);
mischivin@0 74 b = string.format("%i", b * 255);
mischivin@0 75
mischivin@0 76 return "ff" .. string.format("%02x", r) .. string.format("%02x", g) .. string.format("%02x", b);
mischivin@0 77 end
mischivin@0 78
mischivin@5 79 Spotlight.Format = function (key, showPercent)
mischivin@0 80 local value = Spotlight.Status[key].Progress / Spotlight.Status[key].Max;
mischivin@5 81 if showPercent then
mischivin@0 82 value = string.format("|c" .. Spotlight.GetColor(value) .. "%.1f|cffffffff%%|r", value * 100);
mischivin@0 83 else
mischivin@0 84 value = "|c" .. Spotlight.GetColor(value) .. Spotlight.Status[key].Progress .. "|cffffffff/" .. Spotlight.Status[key].Max .. "|r";
mischivin@0 85 end
mischivin@0 86 return value;
mischivin@0 87 end
mischivin@0 88
mischivin@0 89 Spotlight.Update = function (self)
mischivin@0 90 local output = "";
mischivin@0 91 for key, value in pairs(Spotlight.IDs) do
mischivin@0 92 Spotlight.Status[key].Completed = select(3, GetAchievementCriteriaInfo(value,1));
mischivin@0 93 if not Spotlight.Status[key].Completed then
mischivin@0 94 Spotlight.Status[key].Progress = Spotlight.Calculate(key);
mischivin@5 95 if output == "" then
mischivin@5 96 else
mischivin@5 97 output = output .. " ||";
mischivin@5 98 end
mischivin@3 99 if Spotlight.Status[key].Progress > 0 then
mischivin@5 100 output = output .. string.format("|cffe5cc80 %.1s", key) .. ":|r " .. Spotlight.Format(key, Spotlight.ShowPercent);
mischivin@3 101 end
mischivin@0 102 end
mischivin@0 103 end
mischivin@0 104 dataobj.icon = GetInventoryItemTexture("player", 16);
mischivin@0 105 dataobj.text = output;
mischivin@0 106 end
mischivin@0 107
mischivin@0 108 Spotlight.Update();
mischivin@5 109
mischivin@5 110 return true
mischivin@0 111 end
mischivin@0 112
mischivin@0 113 function dataobj:OnTooltipShow()
mischivin@5 114 self:AddLine("|cffe5cc80Spotlight - Hidden Artifact Skins|r|n|n");
mischivin@0 115 for k, v in pairs(Spotlight.IDs) do
mischivin@5 116 self:AddDoubleLine(k .. ":", Spotlight.Format(k, false) .. " (" .. Spotlight.Format(k, true) .. ")");
mischivin@0 117 end
mischivin@0 118 self:AddLine("|nClick to toggle display method");
mischivin@0 119 end
mischivin@0 120
mischivin@0 121 function dataobj:OnEnter()
mischivin@0 122 GameTooltip:SetOwner(self, "ANCHOR_NONE");
mischivin@0 123 GameTooltip:SetPoint("TOP", self, "BOTTOM");
mischivin@0 124 GameTooltip:ClearLines();
mischivin@0 125 dataobj.OnTooltipShow(GameTooltip);
mischivin@0 126 GameTooltip:Show();
mischivin@0 127 end
mischivin@0 128
mischivin@0 129 function dataobj:OnLeave()
mischivin@0 130 GameTooltip:Hide()
mischivin@0 131 end
mischivin@0 132
mischivin@0 133 local function EventHandler(self, event, ...)
mischivin@0 134 if event == "VARIABLES_LOADED" then
mischivin@5 135 if Initialize() then
mischivin@8 136 print("|T" .. GetInventoryItemTexture("player", 16) .. ":0|t |cffe5cc80Spotlight v" .. GetAddOnMetadata("Spotlight", "Version") .. " Loaded!|r")
mischivin@5 137 end
mischivin@0 138 end
mischivin@3 139 if event == "CRITERIA_UPDATE" or "PLAYER_ENTERING_WORLD" then
mischivin@0 140 Spotlight.Update();
mischivin@0 141 end
mischivin@0 142 end
mischivin@0 143
mischivin@0 144 local EventListener = CreateFrame("FRAME", "Spotlight");
mischivin@0 145 EventListener:RegisterEvent("VARIABLES_LOADED");
mischivin@0 146 EventListener:RegisterEvent("CRITERIA_UPDATE");
mischivin@3 147 EventListener:RegisterEvent("PLAYER_ENTERING_WORLD");
mischivin@0 148 EventListener:SetScript("OnEvent", EventHandler);
mischivin@0 149