ClearAchievementComparisonUnit() |
SetAchievementComparisonUnit(unit) |
end |
|
------------------------------------------------------------- |
--Tracking Stuff |
------------------------------------------------------------- |
function self:CreateTracker() |
if self.tracker then |
self.tracker.header:Show() |
return |
end |
|
if not UASVPC.tracker.list then UASVPC.tracker.list = {} end |
|
self.tracker = CreateFrame("Frame", "UrbanAchieverTrackerFrame", UIParent) |
self.tracker:SetMovable(true) |
self.tracker:SetClampedToScreen(true) |
self.tracker:SetWidth(200) |
self.tracker:SetHeight(200) |
self.tracker:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", UASVPC.tracker.x, UASVPC.tracker.y) |
|
--Create Tracker Header/Drag Frame |
self.tracker.header = CreateFrame("Button", "UrbanAchieverTrackerFrame", self.tracker) |
self.tracker.header:SetBackdrop({ |
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", |
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 16, |
insets = {left = 5, right = 5, top = 5, bottom = 5} |
}) |
self.tracker.header:SetBackdropColor(0,0,0) |
self.tracker.header:SetWidth(200) |
self.tracker.header:SetHeight(25) |
self.tracker.header:SetClampedToScreen(true) |
self.tracker.header:EnableMouse(true) |
self.tracker.header:SetPoint("BOTTOM", self.tracker, "TOP") |
self.tracker.header:SetScript("OnMouseDown",function() |
if ( arg1 == "LeftButton" ) then |
self.tracker:StartMoving() |
end |
end) |
self.tracker.header:SetScript("OnMouseUp",function() |
self.tracker:StopMovingOrSizing() |
if ( arg1 == "RightButton" ) then |
self.tracker.header:Hide() |
end |
UASVPC.tracker.x = self.tracker:GetLeft() |
UASVPC.tracker.y = self.tracker:GetTop() |
end) |
self.tracker.header:SetScript("OnEnter", function() |
GameTooltip:SetOwner(self.tracker.header, "ANCHOR_TOPLEFT") |
GameTooltip:SetText("|cff00ff00Drag|r to move") |
GameTooltip:AddLine("|cff00ff00Right-click|r to hide") |
GameTooltip:Show() |
end) |
|
self.tracker.header:SetScript("OnLeave", function() |
GameTooltip:Hide() |
end) |
|
local text = self.tracker.header:CreateFontString(nil, "OVERLAY", "GameFontNormal") |
text:SetPoint("CENTER") |
text:SetText("UrbanAchiever Tracker") |
|
self.tracker.header:Hide() |
|
self.tracker.achievements = {} |
self.tracker.achievements[1] = self:CreateTrackerAchievementFrame("$parentAchievement1", self.tracker) |
self.tracker.achievements[1]:SetPoint("TOPLEFT") |
for i=2, 5 do |
self.tracker.achievements[i] = self:CreateTrackerAchievementFrame("$parentAchievement" .. i, self.tracker) |
self.tracker.achievements[i]:SetPoint("TOPLEFT", self.tracker.achievements[i-1], "BOTTOMLEFT") |
end |
|
for i=1, 5 do |
self.tracker.achievements[i]:SetID(UASVPC.tracker.list[i] or 0) |
end |
|
self.tracker:SetScript("OnUpdate", function() self:TrackerOnUpdate() end) |
self:ScaleTracker() |
end |
|
function self:CreateTrackerAchievementFrame(name, parent) |
local frame = CreateFrame("Button", name, parent) |
frame:EnableMouse(true) |
frame:SetPoint("TOPLEFT") |
frame:SetPoint("TOPRIGHT") |
frame:SetHeight(20) |
frame:SetScript("OnClick", function() |
if arg1 == "LeftButton" then |
if IsAltKeyDown() then |
self:SubTracker(frame:GetID()) |
end |
end |
end) |
|
frame.icon = frame:CreateTexture("$parentIcon", "ARTWORK") |
frame.icon:SetWidth(16) |
frame.icon:SetHeight(16) |
frame.icon:SetPoint("TOPLEFT") |
|
frame.name = frame:CreateFontString("$parentName", "BORDER", "GameFontNormal") |
frame.name:SetTextColor(1,1,1) |
frame.name:SetPoint("TOPLEFT", frame.icon, "TOPRIGHT") |
frame.name:SetPoint("TOPRIGHT") |
frame.name:SetJustifyH("LEFT") |
|
local click = CreateFrame("Button", nil, frame) |
click:SetHighlightTexture("Interface\\FriendsFrame\\UI-FriendsFrame-HighlightBar", "ADD") |
click:SetPoint("TOPLEFT", frame.icon) |
click:SetPoint("BOTTOMRIGHT", frame.name) |
click:SetScript("OnClick", function() |
if arg1 == "LeftButton" then |
if IsAltKeyDown() then |
self:SubTracker(frame:GetID()) |
else |
local id = frame:GetID() |
self.frame:Show() |
self:SetDisplayAchievement(id) |
self:SetCategory(id) |
end |
end |
end) |
|
frame.bar = CreateFrame("StatusBar", "$parentBar", frame, "AchievementProgressBarTemplate") |
--frame.bar.text:SetFontObject("GameFontHighlight") |
frame.bar.text:SetWidth(150) |
frame.bar:SetWidth(150) |
frame.bar:SetPoint("TOPLEFT", frame.icon, "BOTTOMLEFT", 15, -2) |
|
frame.criteria = frame:CreateFontString("$parentCriteria", "BORDER", "GameFontNormal") |
frame.criteria:SetTextColor(0.5,0.5,0.5) |
frame.criteria:SetPoint("TOPLEFT", frame.bar, "BOTTOMLEFT", -14,0) |
frame.criteria:SetWidth(200) |
frame.criteria:SetJustifyH("LEFT") |
frame.criteria:SetJustifyV("TOP")frame.bar:Hide() |
|
frame:Hide() |
|
return frame |
end |
|
function self:SetTrackerAchievement(num, id) |
self.tracker.achievements[num]:SetID(id) |
UASVPC.tracker.list[num] = id |
|
if not self.masterList[id] then |
self.tracker.achievements[num]:Hide() |
return |
end |
|
local height = 20 |
local id, name, _,completed, _,_,_,_,_,icon = GetAchievementInfo(id) |
|
--If the achievement is completed, color it green. |
if completed then |
name = "|Cff00ff00" .. name |
end |
self.tracker.achievements[num].icon:SetTexture(icon) |
self.tracker.achievements[num].name:SetText(name) |
self.tracker.achievements[num].bar:Hide() |
self.tracker.achievements[num].bar:SetHeight(1) |
|
--Now the criteria |
local str = "" |
if self.isAchList[GetAchievementCategory(id)] then |
self.tracker.achievements[num].icon:Show() |
for i=1, GetAchievementNumCriteria(id) do |
cName, _,cCompleted, cQuantity, cReqQuantity, _,cFlags, _,cQuantityStr = GetAchievementCriteriaInfo(id, i) |
|
if (not cCompleted) or (cQuantity < cReqQuantity) then |
if (bit.band(cFlags, ACHIEVEMENT_CRITERIA_PROGRESS_BAR) == ACHIEVEMENT_CRITERIA_PROGRESS_BAR) then |
self.tracker.achievements[num].bar:Show() |
self.tracker.achievements[num].bar:SetHeight(14) |
self.tracker.achievements[num].bar:SetMinMaxValues(0, cReqQuantity) |
self.tracker.achievements[num].bar:SetValue(cQuantity) |
local cQ, cRQ = cQuantity, cReqQuantity |
if cQuantityStr:find("|T") then |
cQ, cRQ = self:FormatMoney(cQuantity, cReqQuantity) |
end |
self.tracker.achievements[num].bar.text:SetText(cQ .. " / " .. cRQ) |
height = height + 20 |
else |
if UASVPC.specificCriteria and cReqQuantity > 1 then |
cName = string.format("%s (%d/%d)", cName, cQuantity, cReqQuantity) |
end |
str = str .. " - " .. cName .. "\n" |
end |
end |
end |
if self.timers[id] then --There's an active timer for this achievement, display it |
local timer = self.timers[id] |
local timeLeft = math.floor(timer.start + timer.duration - GetTime()) |
str = str .. " - " .. SecondsToTime(timeLeft) .. "\n" |
end |
|
else --Its a Statistic, display the stat |
self.tracker.achievements[num].icon:Hide() |
str = "|cffffffff - " .. GetStatistic(id) |
end |
self.tracker.achievements[num].criteria:SetText(str) |
self.tracker.achievements[num]:SetHeight(height + self.tracker.achievements[num].criteria:GetHeight()) |
|
self.tracker.achievements[num]:Show() |
end |
|
function self:ToggleTracker(id) |
if self:IsTracking(id) then |
self:SubTracker(id) |
else |
self:AddTracker(id) |
end |
end |
|
function self:AddTracker(id) |
--Make sure we're not already tracking |
for i=1, #self.tracker.achievements do |
if self.tracker.achievements[i]:GetID() == id then |
self:SetTrackerAchievement(i, id) --Refresh it for timer purposes |
return |
end |
end |
|
--Add to the end |
for i=1, #self.tracker.achievements do |
if self.tracker.achievements[i]:GetID() == 0 then |
self:SetTrackerAchievement(i, id) |
break |
end |
end |
end |
|
function self:SubTracker(id) |
local deleted = 0 |
for i=1, #self.tracker.achievements do |
if self.tracker.achievements[i]:GetID() == id then |
deleted = i |
end |
end |
|
if deleted > 0 then |
self:SetTrackerAchievement(deleted, 0) |
if deleted < #self.tracker.achievements then |
for i=deleted, #self.tracker.achievements-1 do |
self:SetTrackerAchievement(i, self.tracker.achievements[i+1]:GetID()) |
end |
end |
self:SetTrackerAchievement(#self.tracker.achievements, 0) |
end |
end |
|
function self:TrackerUpdate() |
for i=1, #self.tracker.achievements do |
self:SetTrackerAchievement(i, self.tracker.achievements[i]:GetID()) |
end |
end |
|
function self:IsTracking(id) |
for i=1, #self.tracker.achievements do |
if id == self.tracker.achievements[i]:GetID() then return true end |
end |
return false |
end |
|
function self:ScaleTracker() |
self.tracker:SetScale(UASVPC.tracker.scale or 1) |
end |
|
function self:LoadTracker() |
for i=1, #self.tracker.achievements do |
if UASVPC.tracker.list[i] then |
self:SetTrackerAchievement(i, UASVPC.tracker.list[i]) |
end |
end |
end |
|
function self:TrackerOnUpdate() |
for id,_ in next, self.timers do |
if self:IsTracking(id) then |
self:AddTracker(id) |
end |
if GetTime() - self.timers[id].start >= self.timers[id].duration then |
--Timer has expired, wipe it. |
self.timers[id] = nil |
self:SubTracker(id) |
end |
end |
end |