annotate Spotlight.lua @ 14:6ee128c4bd4d v0.7.1.4

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