mischivin@0: local dataobj = LibStub:GetLibrary("LibDataBroker-1.1"):NewDataObject("Spotlight", { mischivin@0: type = "data source", mischivin@0: text = "Everything Unlocked!", mischivin@0: icon = GetInventoryItemTexture("player", 16), mischivin@0: OnClick = function(clickedframe, button) mischivin@0: Spotlight.ShowPercent = not Spotlight.ShowPercent; mischivin@0: Spotlight.Update(); mischivin@0: end, mischivin@0: }) mischivin@0: mischivin@0: local function Initialize () mischivin@0: if not Spotlight.Status then mischivin@0: Spotlight.Status = { mischivin@0: Dungeons = { mischivin@0: Completed = false, mischivin@0: Progress = 0, mischivin@0: Max = 100, mischivin@0: }, mischivin@0: WorldQuests = { mischivin@0: Completed = false, mischivin@0: Progress = 0, mischivin@0: Max = 200, mischivin@0: }, mischivin@0: PvP = { mischivin@0: Completed = false, mischivin@0: Progress = 0, mischivin@0: Max = 1000, mischivin@0: }, mischivin@0: }; mischivin@0: Spotlight.ShowPercent = true; mischivin@0: end mischivin@0: mischivin@0: Spotlight.IDs = { mischivin@0: Dungeons = 11152, mischivin@0: WorldQuests = 11153, mischivin@0: PvP = 11154, mischivin@0: }; mischivin@0: mischivin@0: Spotlight.Calculate = function (key) mischivin@0: local value = 0; mischivin@0: for index = 1, GetAchievementNumCriteria(Spotlight.IDs[key]) do mischivin@0: value = value + select(4, GetAchievementCriteriaInfo(Spotlight.IDs[key], index)); mischivin@0: end mischivin@0: return value; mischivin@0: end mischivin@0: mischivin@0: Spotlight.GetColor = function (value) mischivin@0: value = value * 2; mischivin@0: local r = (2 - value); mischivin@0: local g = value; mischivin@0: local b = 0; mischivin@0: mischivin@0: if r > 1 then r = 1 end mischivin@0: if g > 1 then g = 1 end mischivin@0: if b > 1 then b = 1 end mischivin@0: mischivin@0: r = string.format("%i", r * 255); mischivin@0: g = string.format("%i", g * 255); mischivin@0: b = string.format("%i", b * 255); mischivin@0: mischivin@0: return "ff" .. string.format("%02x", r) .. string.format("%02x", g) .. string.format("%02x", b); mischivin@0: end mischivin@0: mischivin@0: Spotlight.Format = function (key) mischivin@0: local value = Spotlight.Status[key].Progress / Spotlight.Status[key].Max; mischivin@0: if Spotlight.ShowPercent then mischivin@0: value = string.format("|c" .. Spotlight.GetColor(value) .. "%.1f|cffffffff%%|r", value * 100); mischivin@0: else mischivin@0: value = "|c" .. Spotlight.GetColor(value) .. Spotlight.Status[key].Progress .. "|cffffffff/" .. Spotlight.Status[key].Max .. "|r"; mischivin@0: end mischivin@0: return value; mischivin@0: end mischivin@0: mischivin@0: Spotlight.Update = function (self) mischivin@0: local output = ""; mischivin@0: for key, value in pairs(Spotlight.IDs) do mischivin@0: Spotlight.Status[key].Completed = select(3, GetAchievementCriteriaInfo(value,1)); mischivin@0: if not Spotlight.Status[key].Completed then mischivin@0: Spotlight.Status[key].Progress = Spotlight.Calculate(key); mischivin@0: output = output .. string.format(" %.1s", key) .. ":" .. Spotlight.Format(key); mischivin@0: end mischivin@0: end mischivin@0: dataobj.icon = GetInventoryItemTexture("player", 16); mischivin@0: dataobj.text = output; mischivin@0: end mischivin@0: mischivin@0: Spotlight.Update(); mischivin@0: end mischivin@0: mischivin@0: function dataobj:OnTooltipShow() mischivin@0: self:AddLine("Spotlight - Hidden Artifact Tracker|n|n"); mischivin@0: for k, v in pairs(Spotlight.IDs) do mischivin@0: self:AddDoubleLine(k .. ":", Spotlight.Format(k)); mischivin@0: end mischivin@0: self:AddLine("|nClick to toggle display method"); mischivin@0: end mischivin@0: mischivin@0: function dataobj:OnEnter() mischivin@0: GameTooltip:SetOwner(self, "ANCHOR_NONE"); mischivin@0: GameTooltip:SetPoint("TOP", self, "BOTTOM"); mischivin@0: GameTooltip:ClearLines(); mischivin@0: dataobj.OnTooltipShow(GameTooltip); mischivin@0: GameTooltip:Show(); mischivin@0: end mischivin@0: mischivin@0: function dataobj:OnLeave() mischivin@0: GameTooltip:Hide() mischivin@0: end mischivin@0: mischivin@0: local function EventHandler(self, event, ...) mischivin@0: if event == "VARIABLES_LOADED" then mischivin@0: Initialize(); mischivin@0: end mischivin@0: if event == "CRITERIA_UPDATE" then mischivin@0: Spotlight.Update(); mischivin@0: end mischivin@0: end mischivin@0: mischivin@0: local EventListener = CreateFrame("FRAME", "Spotlight"); mischivin@0: EventListener:RegisterEvent("VARIABLES_LOADED"); mischivin@0: EventListener:RegisterEvent("CRITERIA_UPDATE"); mischivin@0: EventListener:SetScript("OnEvent", EventHandler); mischivin@0: