local CTimerAfter = C_Timer.After;
local Settings = OmaRFSettings;
-local positions = Settings.Positions;
-local watchedAuras = Settings.Character["WatchedAuras"];
local majorAuras = Settings.MajorAuras;
+local indSize = Settings.IndSize;
+local positions = nil;
+local watchedAuras = nil;
local updaters = {};
local updating = {};
local M = {};
OmaRFIndicators = M;
+function M.SetupIndicators(frame)
+ if not watchedAuras then
+ watchedAuras = Settings.Character["WatchedAuras"];
+ positions = Settings.Character.Positions;
+ end
+
+ frame.inds = CreateFrame("Frame", nil, frame);
+ frame.inds:SetAllPoints();
+ frame.inds:Hide();
+ for _, pos in pairs(positions) do
+ frame.inds[pos] = frame.inds:CreateTexture(nil, "OVERLAY");
+ frame.inds[pos]:SetPoint(pos, frame.inds, pos);
+ frame.inds[pos]:SetWidth(indSize);
+ frame.inds[pos]:SetHeight(indSize);
+ frame.inds[pos]:SetTexture("Interface\\AddOns\\OmaRF\\images\\rhomb");
+ frame.inds[pos]:SetVertexColor(1, 0, 0);
+ frame.inds[pos]:Hide();
+ frame.inds[pos].text = frame.inds:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
+ frame.inds[pos].text:SetPoint("BOTTOMRIGHT", frame.inds[pos], "BOTTOMRIGHT");
+ frame.inds[pos].text:Hide();
+ end
+ frame.major = CreateFrame("Frame", nil, frame);
+ frame.major:SetPoint("TOPLEFT", frame, "TOPLEFT", 4, -indSize + 4);
+ frame.major:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT");
+ for i = 1,3 do
+ frame.major[i] = frame.major:CreateTexture(nil, "OVERLAY");
+ if i == 1 then
+ frame.major[i]:SetPoint("TOPLEFT", frame.major, "TOPLEFT");
+ else
+ frame.major[i]:SetPoint("TOPLEFT", frame.major[i-1], "TOPRIGHT");
+ end
+ frame.major[i]:SetWidth(indSize*2);
+ frame.major[i]:SetHeight(indSize*2);
+ frame.major[i]:Hide();
+ frame.major[i].text = frame.major:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
+ frame.major[i].text:SetPoint("BOTTOMRIGHT", frame.major[i], "BOTTOMRIGHT");
+ frame.major[i].text:Hide();
+ frame.major[i].stack = frame.major:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
+ frame.major[i].stack:SetPoint("TOPLEFT", frame.major[i], "TOPLEFT");
+ frame.major[i].stack:Hide();
+ end
+end
+
local function remaining(text, expires, current)
if expires == 0 then
text:SetText("");
local name, icon, count, expires, caster, id;
local showInds, showMajors, needUpdate = false, false, false;
local majorPos = 1;
+ local alert = false; -- color the whole bar
local current = GetTime();
for _, filter in ipairs(auraFilters) do
local i = 1;
frame.inds[pos].text:Show();
showInds = true;
end
- if (majorAuras[id] or majorAuras[name]) and majorPos <= 3 then
+ local major = majorAuras[id] or majorAuras[name];
+ if major and majorPos <= 3 then
needUpdate = remaining(frame.major[majorPos].text, expires, current);
frame.major[majorPos].expires = expires;
frame.major[majorPos]:SetTexture(icon);
frame.major[majorPos].stack:SetText(count);
frame.major[majorPos].stack:Show();
end
+ if major.bar then
+ alert = true;
+ end
showMajors = true;
majorPos = majorPos + 1;
end
frame.inds:Hide();
frame.major:Hide();
end
+
+ return alert;
end