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;
local function updateText(frame, unit)
if UnitIsDeadOrGhost(unit) then
+ frame.dead = true;
frame.text:SetText("Dead");
frame.text:Show();
elseif not UnitIsConnected(unit) then
-- somehow current health has gone over the maximum (missed maxhealth event possibly)
-- just put health bar full and update max health for next event
frame.health:SetWidth(width);
+ frame.health.width = width;
updateMaxHealth(frame, unit);
frame.health:Show();
elseif current <= 0 or UnitIsDeadOrGhost(unit) then
- frame.dead = true;
frame.health:Hide();
- updateText(frame, unit); -- update death
+ return updateText(frame, unit); -- update death
else
- frame.health:SetWidth(current/max*width);
+ local w = current/max*width;
+ frame.health:SetWidth(w);
+ frame.health.width = w;
frame.health:Show();
end
local function updateHealPred(frame, unit)
local incoming = UnitGetIncomingHeals(unit) or 0;
if incoming > 0 then
- -- always at least 1 pixel space for heal prediction
- local space = width - frame.health:GetWidth() + 1;
incoming = (incoming / frame.health.max) * width;
- frame.healpred:SetWidth(min(space, incoming));
+ -- always at least 1 pixel space for heal prediction
+ frame.healpred:SetWidth(min(width - frame.health.width + 1, incoming));
frame.healpred:Show();
else
frame.healpred:Hide();
local function updateShield(frame, unit)
local shield = UnitGetTotalAbsorbs(unit) or 0;
if shield > 0 then
- local space = width - frame.health:GetWidth();
+ local space = width - frame.health.width;
shield = (shield / frame.health.max) * width;
if space == 0 then
frame.shield:Hide();
local function updateHealAbsorb(frame, unit)
local absorb = UnitGetTotalHealAbsorbs(unit) or 0;
if absorb > 0 then
- local space = frame.health:GetWidth();
absorb = (absorb / frame.health.max) * width;
- frame.healabsorb:SetWidth(min(space, absorb));
+ frame.healabsorb:SetWidth(min(frame.health.width, absorb));
frame.healabsorb:Show();
else
frame.healabsorb:Hide();
M.UpdateHealAbsorb = updateHealAbsorb;
local function updateAuras(frame, unit)
- local alert = checkIndicators(frame, unit);
- if alert then
+ updateIndicatorAuras(frame, unit); -- this is throttled
+ if updateMajorAuras(frame, unit) then
if frame.overlay.color ~= overlayColorAlert then
frame.overlay:SetVertexColor(unpack(overlayColorAlert));
frame.overlay.color = overlayColorAlert;
updateShield(frame, frame.displayed);
updateHealAbsorb(frame, frame.displayed);
-- no heal prediction update, that doesn't overflow too much
- -- raid marker update here, if needed
- -- because marker is removed when unit dies
- -- without a RAID_TARGET_UPDATE event
- --updateRaidMarker(frame, frame.unit);
end,
["UNIT_AURA"] = function(frame)
updateAuras(frame, frame.displayed);
eventFuncs["PLAYER_FOCUS_CHANGED"] = eventFuncs["UPDATE_ALL_BARS"];
function M.UnitEvent(self, event)
- eventFuncs[event](self);
+ return eventFuncs[event](self);
end