X-Git-Url: https://www.aleksib.fi/git/wowui.git/blobdiff_plain/c809e5da99427a93b5ad5eb010a1cb1cba507ec2..c2e174c52f3aa1eed78946009486d04c72447d11:/OmaRF/Events.lua?ds=sidebyside diff --git a/OmaRF/Events.lua b/OmaRF/Events.lua index 957e82d..2ffe946 100644 --- a/OmaRF/Events.lua +++ b/OmaRF/Events.lua @@ -20,7 +20,8 @@ local READY_CHECK_READY_TEXTURE = READY_CHECK_READY_TEXTURE; 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; @@ -64,6 +65,7 @@ local registerUnitEvents = M.RegisterUnitEvents; local function updateText(frame, unit) if UnitIsDeadOrGhost(unit) then + frame.dead = true; frame.text:SetText("Dead"); frame.text:Show(); elseif not UnitIsConnected(unit) then @@ -92,14 +94,16 @@ local function updateHealth(frame, unit) -- 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 @@ -129,10 +133,9 @@ M.UpdateName = updateName; 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(); @@ -143,7 +146,7 @@ M.UpdateHealPred = updateHealPred; 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(); @@ -167,9 +170,8 @@ M.UpdateShield = updateShield; 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(); @@ -178,12 +180,17 @@ end M.UpdateHealAbsorb = updateHealAbsorb; local function updateAuras(frame, unit) - local alert = checkIndicators(frame, unit); - if alert then - if frame.overlay.color ~= overlayColorAlert then + updateIndicatorAuras(frame, unit); -- this is throttled + local barColor = updateMajorAuras(frame, unit); + if barColor then + if barColor == true and frame.overlay.color ~= overlayColorAlert then frame.overlay:SetVertexColor(unpack(overlayColorAlert)); frame.overlay.color = overlayColorAlert; frame.overlay:Show(); + elseif barColor ~= true and frame.overlay.color ~= barColor then + frame.overlay:SetVertexColor(unpack(barColor)); + frame.overlay.color = barColor; + frame.overlay:Show(); end elseif UnitDebuff(unit, 1, "RAID") ~= nil then -- something dispellable @@ -283,10 +290,6 @@ local eventFuncs = { 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); @@ -352,5 +355,5 @@ eventFuncs["PLAYER_ENTERING_WORLD"] = eventFuncs["UPDATE_ALL_BARS"]; eventFuncs["PLAYER_FOCUS_CHANGED"] = eventFuncs["UPDATE_ALL_BARS"]; function M.UnitEvent(self, event) - eventFuncs[event](self); + return eventFuncs[event](self); end