2120a9c - Add Ny'alotha auras to frames
[wowui.git] / kehys / updater.lua
index fac538c..bb8fba1 100644 (file)
@@ -15,12 +15,13 @@ local UnitGetTotalHealAbsorbs = UnitGetTotalHealAbsorbs;
 local dispelcolor = addon.Colors.OverlayColorDispel;
 local charmcolor = addon.Colors.OverlayColorCharm;
 local majorcolor = addon.Colors.OverlayColorAlert;
 local dispelcolor = addon.Colors.OverlayColorDispel;
 local charmcolor = addon.Colors.OverlayColorCharm;
 local majorcolor = addon.Colors.OverlayColorAlert;
+local healcolor = addon.Colors.OverlayColorHeal;
 
 
-local function updateAuras()
-    -- TODO
-    return false;
-end
+local ignoredAuras = {
+    [315176] = true, -- Grasping Tendrils
+};
 
 
+local rounds = 0;
 function addon.FrameUpdate(frame)
     assert(type(frame) == "table", "FrameUpdate received invalid frame parameter!");
 
 function addon.FrameUpdate(frame)
     assert(type(frame) == "table", "FrameUpdate received invalid frame parameter!");
 
@@ -39,17 +40,21 @@ function addon.FrameUpdate(frame)
         if not frame.text:IsShown() then frame.text:Show() end
         if frame.health:IsShown() then frame.health:Hide() end
         if frame.shield:IsShown() then frame.shield:Hide() end
         if not frame.text:IsShown() then frame.text:Show() end
         if frame.health:IsShown() then frame.health:Hide() end
         if frame.shield:IsShown() then frame.shield:Hide() end
+        if frame.shieldhl:IsShown() then frame.shieldhl:Hide() end
         if frame.healpred:IsShown() then frame.healpred:Hide() end
         if frame.healabsorb:IsShown() then frame.healabsorb:Hide() end
         if frame.healpred:IsShown() then frame.healpred:Hide() end
         if frame.healabsorb:IsShown() then frame.healabsorb:Hide() end
-        --if frame.auras:IsShown() then frame.auras:Hide() end
+        frame.prev.health = nil;
+        frame.prev.hmax = nil;
     elseif not UnitIsConnected(unit) then
         frame.text:SetText("DC");
         if not frame.text:IsShown() then frame.text:Show() end
         if frame.health:IsShown() then frame.health:Hide() end
         if frame.shield:IsShown() then frame.shield:Hide() end
     elseif not UnitIsConnected(unit) then
         frame.text:SetText("DC");
         if not frame.text:IsShown() then frame.text:Show() end
         if frame.health:IsShown() then frame.health:Hide() end
         if frame.shield:IsShown() then frame.shield:Hide() end
+        if frame.shieldhl:IsShown() then frame.shieldhl:Hide() end
         if frame.healpred:IsShown() then frame.healpred:Hide() end
         if frame.healabsorb:IsShown() then frame.healabsorb:Hide() end
         if frame.healpred:IsShown() then frame.healpred:Hide() end
         if frame.healabsorb:IsShown() then frame.healabsorb:Hide() end
-        --if frame.auras:IsShown() then frame.auras:Hide() end
+        frame.prev.health = nil;
+        frame.prev.hmax = nil;
     else
         if UnitIsAFK(unit) then
             frame.text:SetText("afk");
     else
         if UnitIsAFK(unit) then
             frame.text:SetText("afk");
@@ -119,32 +124,72 @@ function addon.FrameUpdate(frame)
         elseif frame.healpred:IsShown() then
             frame.healpred:Hide();
         end
         elseif frame.healpred:IsShown() then
             frame.healpred:Hide();
         end
-        -- auras
-        if updateAuras(frame, unit) then
+        rounds = rounds + 1;
+        if (rounds > 8) then
+            frame.tankcd = {};
+            frame.alert = {};
+            frame.stacks = {};
+            frame.heal = {};
+            frame.buff1 = {};
+            addon.SetAuras(frame.unit, frame.guid);
+            rounds = 0;
+        end
+        -- tank CD marker
+        if next(frame.tankcd) then
+            if not frame.defensive:IsShown() then frame.defensive:Show() end
+        elseif frame.defensive:IsShown() then
+            frame.defensive:Hide();
+        end
+        -- aura stacks
+        if next(frame.stacks) then
+            local _, amount = next(frame.stacks);
+            frame.stack:SetText(amount);
+            if not frame.stack:IsShown() then frame.stack:Show() end
+        elseif frame.stack:IsShown() then
+            frame.stack:Hide();
+        end
+        -- custom buff indicator 1
+        if next(frame.buff1) then
+            if not frame.buffind1:IsShown() then frame.buffind1:Show() end
+        elseif frame.buffind1:IsShown() then
+            frame.buffind1:Hide();
+        end
+        -- overlays
+        if next(frame.alert) then
             -- major
             if frame.overlay.color ~= majorcolor then
                 frame.overlay:SetVertexColor(unpack(majorcolor));
                 frame.overlay.color = majorcolor;
                 if not frame.overlay:IsShown() then frame.overlay:Show() end
             end
             -- major
             if frame.overlay.color ~= majorcolor then
                 frame.overlay:SetVertexColor(unpack(majorcolor));
                 frame.overlay.color = majorcolor;
                 if not frame.overlay:IsShown() then frame.overlay:Show() end
             end
-        elseif UnitIsCharmed(unit) and frame.unit == frame.displayed then
-            -- charmed
-            if frame.overlay.color ~= charmcolor then
-                frame.overlay:SetVertexColor(unpack(charmcolor));
-                frame.overlay.color = charmcolor;
-                if not frame.overlay:IsShown() then frame.overlay:Show() end
-            end
-        elseif UnitDebuff(unit, 1, "RAID") ~= nil then
-            -- dispellable
-            if frame.overlay.color ~= dispelcolor then
-                frame.overlay:SetVertexColor(unpack(dispelcolor));
-                frame.overlay.color = dispelcolor;
-                if not frame.overlay:IsShown() then frame.overlay:Show() end
-            end
         else
         else
-            if frame.overlay.color ~= nil then
-                frame.overlay.color = nil;
-                if frame.overlay:IsShown() then frame.overlay:Hide() end
+            local _, _, _, _, _, _, _, _, _, spellid = UnitDebuff(unit, 1, "RAID");
+            if UnitIsCharmed(unit) and frame.unit == frame.displayed then
+                -- charmed
+                if frame.overlay.color ~= charmcolor then
+                    frame.overlay:SetVertexColor(unpack(charmcolor));
+                    frame.overlay.color = charmcolor;
+                    if not frame.overlay:IsShown() then frame.overlay:Show() end
+                end
+            elseif spellid ~= nil and not ignoredAuras[spellid] then
+                -- dispellable
+                if frame.overlay.color ~= dispelcolor then
+                    frame.overlay:SetVertexColor(unpack(dispelcolor));
+                    frame.overlay.color = dispelcolor;
+                    if not frame.overlay:IsShown() then frame.overlay:Show() end
+                end
+            elseif next(frame.heal) then
+                -- major heals needed
+                if frame.overlay.color ~= healcolor then
+                    frame.overlay:SetVertexColor(unpack(healcolor));
+                    frame.overlay.color = healcolor;
+                    if not frame.overlay:IsShown() then frame.overlay:Show() end
+                end
+            else
+                if frame.overlay.color ~= nil then
+                    frame.overlay.color = nil;
+                    if frame.overlay:IsShown() then frame.overlay:Hide() end
+                end
             end
         end
     end
             end
         end
     end