570b5ba - Add Mekkatorque mythic auras
[wowui.git] / OmaTMW / TellMeWhen.lua
index 601c4ce..e428ded 100644 (file)
@@ -7,7 +7,88 @@ local UnitAura = UnitAura;
 local GetTotemInfo = GetTotemInfo;
 
 -- character specific frames
+-- TODO try with auraFilter, remove characters, change to classes
+--[[local classes = {
+    ["PALADIN"] = {
+        ["PLAYER HELPFUL"] = {
+            {
+                unit = "player",
+                auras = {["Divine Shield"]=1, ""},
+                frames = {
+                    [1] = {
+                        x = 0,
+                        y = 0,
+                        width = 1,
+                        height = 1,
+                    },
+                },
+            },
+        },
+    },
+};
+local specs = {
+    [retSpecid] = {
+        ["PLAYER HELPFUL"] = {
+            {
+                unit = "player",
+                auras = {["Judgment"]=1},
+                frames = {
+                    [1] = {
+                    },
+                },
+            },
+        },
+        ["PLAYER HARMFUL"] = {
+            {
+            },
+        },
+    },
+};
+--]]
 local chars = {
+    ["Sylvanas"] = {
+        ["Vildana"] = {
+            {
+                unit = "target",
+                spec = 3, -- Retribution
+                auras = {"Judgment"},
+                auraFilter = "PLAYER HARMFUL",
+                x = 570, -- placed over Innervate frame
+                y = 440,
+                width = 80,
+                height = 80,
+            },
+            {
+                unit = "player",
+                spec = 3, -- Retribution
+                auras = {"Divine Purpose"},
+                auraFilter = "PLAYER HELPFUL",
+                x = 570,
+                y = 530,
+                width = 80,
+                height = 80,
+            },
+            {
+                unit = "player",
+                spec = 2, -- Protection
+                auras = {"Shield of the Righteous"},
+                auraFilter = "PLAYER HELPFUL",
+                x = 570,
+                y = 440,
+                width = 80,
+                height = 80,
+            },
+            {
+                unit = "player",
+                auras = {"Divine Shield"},
+                auraFilter = "PLAYER HELPFUL",
+                x = 660,
+                y = 440,
+                width = 80,
+                height = 80,
+            },
+        },
+    },
     ["Stormreaver"] = {
         ["Vildan"] = {
             {
@@ -50,15 +131,74 @@ local chars = {
                 height = 80,
             },
         },
+        ["Gilden"] = {
+            {
+                unit = "target",
+                auras = {"Shadow Word: Pain"},
+                auraFilter = "PLAYER HARMFUL",
+                x = 660,
+                y = 440,
+                width = 60,
+                height = 60,
+            },
+            {
+                unit = "player",
+                auras = {"Power Word: Fortitude"},
+                auraFilter = "HELPFUL",
+                invert = true,
+                x = 720,
+                y = 440,
+                width = 60,
+                height = 60,
+            },
+            {
+                unit = "player",
+                auras = {"Overcharge Mana"},
+                auraFilter = "PLAYER HELPFUL",
+                x = 720,
+                y = 440,
+                width = 60,
+                height = 60,
+            },
+        },
         ["Gedren"] = {
             {
                 totems = {1}, -- Efflorescence
-                x = 570,
+                x = 660,
                 y = 440,
                 width = 80,
                 height = 80,
             },
         },
+        ["Gazden"] = {
+            {
+                unit = "player",
+                auras = {"Tidal Waves"},
+                auraFilter = "PLAYER HELPFUL",
+                x = 660,
+                y = 440,
+                width = 40,
+                height = 40,
+            },
+            {
+                unit = "player",
+                auras = {"Healing Rain"},
+                auraFilter = "PLAYER HELPFUL",
+                x = 700,
+                y = 440,
+                width = 40,
+                height = 40,
+            },
+            {
+                unit = "player",
+                auras = {"Unleash Life"},
+                auraFilter = "PLAYER HELPFUL",
+                x = 740,
+                y = 440,
+                width = 40,
+                height = 40,
+            },
+        },
     },
 };
 
@@ -66,7 +206,6 @@ local chars = {
 -- unit = unitID where to check auras, not required for totem checkers
 -- spec = player spec index to show frame, if nil show always
 -- auras = list of auras to track, in priority order
--- iterateAuras = iterate over UnitAura() instead of auras list
 -- auraFilter = filter for UnitAura
 -- totems = list of totem slots to track, in priority order, only checked if auras is nil
 -- x = x position relative to UIParent bottom left
@@ -90,9 +229,11 @@ local settings = {
         auras = {
             "Delusions", "Entropic Blast", "Necrotic Embrace", "Flametouched", "Shadowtouched",
             "Blazing Eruption", "Shattering Scream", "Consuming Hunger", "Unstable Soul",
-            "Time Bomb", "Broken Shard", "Demolished",
+            "Time Bomb", "Broken Shard", "Demolished", "Fetid Rot", "Roiling Deceit",
+            "Putrid Blood", "Endemic Virus", "Lingering Infection", "Gigavolt Charge",
+            "Crackling Lightning", "Storm's Wail", "Death's Door", "Deathly Withering",
+            "Chilling Touch", "Volatile Charge", "Liquid Gold", "Drained Soul"
         },
-        iterateAuras = true, -- typically fewer debuffs on player than this list
         auraFilter = "HARMFUL",
         x = 660,
         y = 530,
@@ -117,52 +258,37 @@ local function updateAuraFrame(frame)
     if UnitExists(unit) and (not frame.spec or frame.spec == currentSpec) then
         local name, icon, count, duration, expires;
         local auraFilter = frame.auraFilter;
-        if frame.iterateAuras then
-            local i = 1;
-            while true do
-                name, _, icon, count, _, duration, expires = UnitAura(unit, i, auraFilter);
-                if not name then break end
-                -- possible improvement to add spellID as an option
-                if frame.auras[name] then
-                    if count > 0 then
-                        frame.stack:SetText(count);
-                        frame.stack:Show();
-                    else
-                        frame.stack:Hide();
-                    end
-                    if expires > 0 then
-                        frame.cd:SetCooldown(expires - duration, duration);
-                        frame.cd:Show();
-                    else
-                        frame.cd:Hide();
-                    end
-                    frame.icon:SetTexture(icon);
-                    frame:Show();
-                    return;
+        local i = 1;
+        while true do
+            name, icon, count, _, duration, expires = UnitAura(unit, i, auraFilter);
+            if not name then break end
+            -- possible improvement to add spellID as an option
+            if frame.auras[name] and not frame.invert then
+                if count > 1 then
+                    frame.stack:SetText(count);
+                    frame.stack:Show();
+                else
+                    frame.stack:Hide();
                 end
-                i = i + 1;
-            end
-        else
-            for _, aura in pairs(frame.auras) do
-                name, _, icon, count, _, duration, expires = UnitAura(unit, aura, nil, auraFilter);
-                if name then
-                    if count > 0 then
-                        frame.stack:SetText(count);
-                        frame.stack:Show();
-                    else
-                        frame.stack:Hide();
-                    end
-                    if expires > 0 then
-                        frame.cd:SetCooldown(expires - duration, duration);
-                        frame.cd:Show();
-                    else
-                        frame.cd:Hide();
-                    end
-                    frame.icon:SetTexture(icon);
-                    frame:Show();
-                    return;
+                if expires > 0 then
+                    frame.cd:SetCooldown(expires - duration, duration);
+                    frame.cd:Show();
+                else
+                    frame.cd:Hide();
                 end
+                frame.icon:SetTexture(icon);
+                frame:Show();
+                return;
+            elseif frame.auras[name] and frame.invert then
+                frame.icon:SetTexture(icon);
+                frame:Hide();
+                return;
             end
+            i = i + 1;
+        end
+        if frame.invert then
+            frame:Show(); -- not functional without first hiding once to get SetTexture
+            return;
         end
     end
     frame:Hide();
@@ -202,17 +328,15 @@ local function createTMW(name, config, parent)
     frame:SetPoint("BOTTOMRIGHT", parent, "BOTTOMLEFT", config.x+config.width, config.y);
     frame.unit = config.unit;
     frame.spec = config.spec;
-    frame.iterateAuras = config.iterateAuras;
-    if frame.iterateAuras then
+    if config.auras then
         frame.auras = {};
         for _, v in pairs(config.auras) do
             frame.auras[v] = true;
         end
-    else
-        frame.auras = config.auras;
     end
     frame.auraFilter = config.auraFilter;
     frame.totems = config.totems;
+    frame.invert = config.invert;
     frame:Hide();
     frame.base = frame:CreateTexture(nil, "BACKGROUND");
     frame.base:SetAllPoints();