local READY_CHECK_NOT_READY_TEXTURE = READY_CHECK_NOT_READY_TEXTURE;
local READY_CHECK_WAITING_TEXTURE = READY_CHECK_WAITING_TEXTURE;
-local checkIndicators = OmaRFIndicators.CheckIndicators;
+local updateIndicatorAuras = OmaRFIndicators.UpdateAuras;
+local updateMajorAuras = OmaRFIndicators.UpdateMajorAuras;
local Settings = OmaRFSettings;
local baseColor = Settings.BaseColor;
M.UpdateHealAbsorb = updateHealAbsorb;
local function updateAuras(frame, unit)
- updateAuras(frame, unit); -- this is throttled
+ updateIndicatorAuras(frame, unit); -- this is throttled
if updateMajorAuras(frame, unit) then
if frame.overlay.color ~= overlayColorAlert then
frame.overlay:SetVertexColor(unpack(overlayColorAlert));
local pairs, ipairs = pairs, ipairs;
local floor = math.floor;
local GetTime = GetTime;
+local UnitExists = UnitExists;
local UnitAura = UnitAura;
local CreateFrame = CreateFrame;
local UnitIsDeadOrGhost, UnitIsConnected = UnitIsDeadOrGhost, UnitIsConnected;
frame.throttle = function()
frame.throttled = nil;
- updateAuras(frame, frame.displayed);
+ if UnitExists(frame.displayed) then
+ return updateAuras(frame, frame.displayed);
+ end
end;
end
function M.UpdateAuras(frame, unit)
local current = GetTime();
if frame.throttled then
- print("updateAuras throttled for ", unit); -- TODO debug print
return;
- elseif frame.prevUpdate - current < 0.1 then
+ elseif frame.prevUpdate and current - frame.prevUpdate < 0.2 then
frame.throttled = true;
- return CTimerAfter(0.1, frame.throttle);
+ return CTimerAfter(0.2, frame.throttle);
end
+ frame.prevUpdate = current;
for _, ind in pairs(frame.inds) do
hideInd(ind);
end
local CreateFrame = CreateFrame;
local UnitAura = UnitAura;
local GameTooltip = GameTooltip;
+local GetTime = GetTime;
+local CTimerAfter = C_Timer.After;
local auraFilters = {"HELPFUL", "HARMFUL"};
+local updateAuras;
local M = {};
OmaUFAuras = M;
i = i + 1;
end
end
+
+ parent.throttle = function()
+ parent.throttled = nil;
+ if UnitExists(unit) then
+ return updateAuras(parent, unit);
+ end
+ end;
end
function M.UpdateAuras(frame, unit)
+ local current = GetTime();
+ if frame.throttled then
+ return;
+ elseif frame.prevUpdate and current - frame.prevUpdate < 0.2 then
+ frame.throttled = true;
+ return CTimerAfter(0.1, frame.throttle); -- faster timer here to reduce the delay, gets called twice
+ end
+
+ frame.prevUpdate = current;
local auras = frame.auras;
local icon, count, duration, expires, caster, id;
local pos = 1;
while true do
_, _, icon, count, _, duration, expires, caster, _, _, id = UnitAura(unit, i, filter);
if not id or not auras[pos] then break end
- -- aura filter self-applied, player-applied, list of important auras TODO
local aura = auras[pos];
aura.icon:SetTexture(icon);
aura.index = i;
pos = pos + 1;
end
end
+updateAuras = M.UpdateAuras;
local GetRaidTargetIndex, SetRaidTargetIconTexture = GetRaidTargetIndex, SetRaidTargetIconTexture;
local RAID_CLASS_COLORS = RAID_CLASS_COLORS;
-local updateAuraFrames = OmaUFAuras.UpdateAuras;
+local updateAuras = OmaUFAuras.UpdateAuras;
local Settings = OmaUFSettings;
local baseColor = Settings.BaseColor;
end
M.UpdateShield = updateShield;
-local function updateAuras(frame, unit)
- updateAuraFrames(frame, unit);
-end
-M.UpdateAuras = updateAuras;
-
local function updateAggro(frame, unit)
local status = UnitThreatSituation(unit);
if status and status > 0 then