b13d011 - Re-add basic indicators
[wowui.git] / OmaRF / CFrame.lua
index 5049497..4aa70e6 100644 (file)
@@ -13,6 +13,7 @@ local IsInGroup, IsInRaid = IsInGroup, IsInRaid;
 local UnitIsCharmed = UnitIsCharmed;
 local CreateFrame, RegisterStateDriver, RegisterUnitWatch = CreateFrame, RegisterStateDriver, RegisterUnitWatch;
 local SPELL_POWER_MANA = SPELL_POWER_MANA;
+local checkIndicators = OmaCheckIndicators;
 
 local CFrame = CreateFrame("Frame", "OmaCFrame", UIParent);
 local party = {};
@@ -21,16 +22,17 @@ local positions = {"TOPRIGHT", "BOTTOMLEFT"};
 
 -- configurable settings
 local width, height = 80, 40;
-local anchorX, anchorY = 0, -200;
+local anchorX, anchorY = 0, -330;
 local indSize = 14;
 local bgColor = {0.7, 0.7, 0.7};
-local bgColorDispel = {1, 0.5, 0};
 local healthColor = {0.3, 0.3, 0.3};
-local healthColorDispel = {0.8, 0.4, 0};
 local shieldColor = {0, 0.7, 1};
 local shieldhlColor = {0.5, 0.8, 1};
 local healpredColor = {0.5, 0.6, 0.5};
 local healabsorbColor = {0.1, 0.1, 0.1};
+local overlayColorDispel = {1, 0.5, 0, 0.5};
+local overlayColorCharm = {0.8, 0, 1, 0.5};
+local overlayColorAlert = {1, 0, 0, 0.5};
 local powerColors = {
     [SPELL_POWER_MANA] = {0, 0.5, 1},
     [SPELL_POWER_RAGE] = {1, 0.2, 0},
@@ -128,21 +130,24 @@ local function updateHealAbsorb(frame, unit)
 end
 
 local function updateAuras(frame, unit)
+    checkIndicators(frame, unit);
     if UnitDebuff(unit, 1, "RAID") ~= nil then
         -- something dispellable
-        if frame.health.color ~= healthColorDispel then
-            -- TODO change to a texture layered on top tinting whole bar
-            frame.health:SetStatusBarColor(unpack(healthColorDispel));
-            frame.background:SetColorTexture(unpack(bgColorDispel));
-            frame.health.color = healthColorDispel;
+        if frame.overlay.color ~= overlayColorDispel then
+            frame.overlay:SetColorTexture(unpack(overlayColorDispel));
+            frame.overlay:Show();
+            frame.overlay.color = overlayColorDispel;
         end
     elseif UnitIsCharmed(unit) then
-        -- TODO purple
+        if frame.overlay.color ~= overlayColorCharm then
+            frame.overlay:SetColorTexture(unpack(overlayColorCharm));
+            frame.overlay:Show();
+            frame.overlay.color = overlayColorCharm;
+        end
     else
-        if frame.health.color ~= healthColor then
-            frame.health:SetStatusBarColor(unpack(healthColor));
-            frame.background:SetColorTexture(unpack(bgColor));
-            frame.health.color = healthColor;
+        if frame.overlay.color ~= nil then
+            frame.overlay:Hide();
+            frame.overlay.color = nil;
         end
     end
 end
@@ -175,6 +180,7 @@ local function unitEvent(self, event, ...)
         updateAuras(self, arg1);
         updateShield(self, arg1);
         updateHealPred(self, arg1);
+        updateHealAbsorb(self, arg1);
         updateMaxHealth(self, arg1);
         updateMaxPower(self, arg1);
         updatePowerColor(self, arg1);
@@ -272,6 +278,21 @@ local function setupIndicators(frame)
         frame.inds[pos]:SetWidth(indSize);
         frame.inds[pos]:SetHeight(indSize);
         frame.inds[pos]:SetTexture("Interface\\AddOns\\OmaRF\\images\\rhomb");
+        frame.inds[pos]:Hide();
+    end
+    frame.major = CreateFrame("Frame", nil, frame);
+    frame.major:SetPoint("TOPLEFT", frame, "TOPLEFT", 4, -indSize + 4);
+    frame.major:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT");
+    for i = 1,3 do
+        frame.major[i] = frame.major:CreateTexture(nil, "OVERLAY");
+        if i == 1 then
+            frame.major[i]:SetPoint("TOPLEFT", frame.major, "TOPLEFT");
+        else
+            frame.major[i]:SetPoint("TOPLEFT", frame.major[i-1], "TOPLEFT");
+        end
+        frame.major[i]:SetWidth(indSize*2);
+        frame.major[i]:SetHeight(indSize*2);
+        frame.major[i]:Hide();
     end
 end
 
@@ -293,7 +314,6 @@ local function setupFrame(frame, secure, unit)
     frame.health.bar:SetTexture("Interface\\RaidFrame\\Raid-Bar-Hp-Fill");
     frame.health:SetStatusBarTexture(frame.health.bar);
     frame.health:SetStatusBarColor(unpack(healthColor));
-    frame.health.color = healthColor;
     frame.shield = frame.health:CreateTexture(nil, "ARTWORK");
     frame.shield:SetPoint("TOPLEFT", frame.health.bar, "TOPRIGHT");
     frame.shield:SetPoint("BOTTOMLEFT", frame.health.bar, "BOTTOMRIGHT");
@@ -320,6 +340,9 @@ local function setupFrame(frame, secure, unit)
     frame.mana.bar = frame.mana:CreateTexture(nil, "ARTWORK");
     frame.mana.bar:SetColorTexture(1, 1, 1);
     frame.mana:SetStatusBarTexture(frame.mana.bar);
+    frame.overlay = frame.health:CreateTexture(nil, "ARTWORK", nil, 2);
+    frame.overlay:SetAllPoints();
+    frame.overlay:Hide();
     frame.name = frame.health:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
     frame.name:SetPoint("TOPLEFT", frame.background, "TOPLEFT");
     local name = UnitName(unit);