7cd9b15 - Add pet frame, remove mana bars from non-healers
authorAleksi Blinnikka <aleksi.blinnikka@gmail.com>
Wed, 31 Jan 2018 03:11:13 +0000
committerAleksi Blinnikka <aleksi.blinnikka@gmail.com>
Wed, 31 Jan 2018 03:11:13 +0000
Starting to be messy, cleanup required

OmaRF/Events.lua
OmaRF/Indicators.lua
OmaRF/RaidFrame.lua
OmaRF/Settings.lua
OmaUF/Events.lua
OmaUF/UnitFrames.lua

index 0932ec1..aeafc6a 100644 (file)
@@ -34,17 +34,45 @@ local width = Settings.Width;
 local M = {};
 OmaRFEvents = M;
 function M.RegisterEvents(frame)
+    frame:RegisterEvent("PLAYER_ENTERING_WORLD");
+    frame:RegisterEvent("PLAYER_ROLES_ASSIGNED");
+    frame:RegisterEvent("READY_CHECK");
+    frame:RegisterEvent("READY_CHECK_FINISHED");
+    frame:RegisterEvent("PARTY_MEMBER_ENABLE");
+    frame:RegisterEvent("PARTY_MEMBER_DISABLE");
+    frame:RegisterEvent("GROUP_ROSTER_UPDATE");
+    if frame.unit == "focus" then frame:RegisterEvent("PLAYER_FOCUS_CHANGED") end
+end
+
+local function unregisterPower(frame)
+    frame.health:SetPoint("BOTTOMLEFT", frame.background, "BOTTOMLEFT");
+    frame.overlay:SetPoint("BOTTOMRIGHT", frame.background, "BOTTOMRIGHT");
+    frame.mana:Hide();
+    frame:UnregisterEvent("UNIT_POWER");
+    frame:UnregisterEvent("UNIT_MAXPOWER");
+    frame:UnregisterEvent("UNIT_DISPLAYPOWER");
+    frame:UnregisterEvent("UNIT_POWER_BAR_SHOW");
+    frame:UnregisterEvent("UNIT_POWER_BAR_HIDE");
+end
+
+local function registerPower(frame)
+    frame.health:SetPoint("BOTTOMLEFT", frame.background, "BOTTOMLEFT", 0, 2);
+    frame.overlay:SetPoint("BOTTOMRIGHT", frame.background, "BOTTOMRIGHT", 0, 2);
+    frame.mana:Show();
+    frame:RegisterUnitEvent("UNIT_POWER", frame.unit);
+    frame:RegisterUnitEvent("UNIT_MAXPOWER", frame.unit);
+    frame:RegisterUnitEvent("UNIT_DISPLAYPOWER", frame.unit);
+    frame:RegisterUnitEvent("UNIT_POWER_BAR_SHOW", frame.unit);
+    frame:RegisterUnitEvent("UNIT_POWER_BAR_HIDE", frame.unit);
+end
+
+function M.RegisterUnitEvents(frame)
     -- events are taken from FrameXML/CompactUnitFrame.lua
     -- TODO raid marker support
     local displayed = frame.unit ~= frame.displayed and frame.displayed or nil;
     frame:RegisterUnitEvent("UNIT_HEALTH", frame.unit, displayed);
     frame:RegisterUnitEvent("UNIT_HEALTH_FREQUENT", frame.unit, displayed);
     frame:RegisterUnitEvent("UNIT_MAXHEALTH", frame.unit, displayed);
-    frame:RegisterUnitEvent("UNIT_POWER", frame.unit, displayed);
-    frame:RegisterUnitEvent("UNIT_MAXPOWER", frame.unit, displayed);
-    frame:RegisterUnitEvent("UNIT_DISPLAYPOWER", frame.unit, displayed);
-    frame:RegisterUnitEvent("UNIT_POWER_BAR_SHOW", frame.unit, displayed);
-    frame:RegisterUnitEvent("UNIT_POWER_BAR_HIDE", frame.unit, displayed);
     frame:RegisterUnitEvent("UNIT_NAME_UPDATE", frame.unit, displayed);
     frame:RegisterUnitEvent("UNIT_AURA", frame.unit, displayed);
     frame:RegisterUnitEvent("UNIT_HEAL_PREDICTION", frame.unit, displayed);
@@ -54,8 +82,13 @@ function M.RegisterEvents(frame)
     frame:RegisterUnitEvent("UNIT_CONNECTION", frame.unit, displayed);
     frame:RegisterUnitEvent("INCOMING_RESURRECT_CHANGED", frame.unit, displayed);
     frame:RegisterUnitEvent("PLAYER_FLAGS_CHANGED", frame.unit, displayed);
+    frame:RegisterUnitEvent("READY_CHECK_CONFIRM", frame.unit, displayed);
+    frame:RegisterUnitEvent("UNIT_ENTERED_VEHICLE", frame.unit, displayed);
+    frame:RegisterUnitEvent("UNIT_EXITED_VEHICLE", frame.unit, displayed);
+    frame:RegisterUnitEvent("UNIT_PET", frame.unit, displayed);
+    frame:RegisterUnitEvent("RAID_TARGET_UPDATE", frame.unit, displayed);
 end
-local registerEvents = M.RegisterEvents;
+local registerUnitEvents = M.RegisterUnitEvents;
 
 local function updateHealth(frame, unit)
     local current, max = UnitHealth(unit), frame.health.max;
@@ -208,8 +241,14 @@ local function updateHealAbsorb(frame, unit)
 end
 
 local function updateAuras(frame, unit)
-    checkIndicators(frame, unit);
-    if UnitDebuff(unit, 1, "RAID") ~= nil then
+    local alert = checkIndicators(frame, unit);
+    if alert then
+        if frame.overlay.color ~= overlayColorAlert then
+            frame.overlay:SetVertexColor(unpack(overlayColorAlert));
+            frame.overlay:Show();
+            frame.overlay.color = overlayColorAlert;
+        end
+    elseif UnitDebuff(unit, 1, "RAID") ~= nil then
         -- something dispellable
         if frame.overlay.color ~= overlayColorDispel then
             frame.overlay:SetVertexColor(unpack(overlayColorDispel));
@@ -246,12 +285,12 @@ local function updateVehicle(frame)
         if not frame.inVehicle then
             frame.inVehicle = true;
             frame.displayed = frame.vehicle;
-            registerEvents(frame);
+            registerUnitEvents(frame);
         end
     elseif frame.inVehicle then
         frame.inVehicle = false;
         frame.displayed = frame.unit;
-        registerEvents(frame);
+        registerUnitEvents(frame);
     end
 end
 
@@ -260,11 +299,23 @@ local function updateRole(frame, unit)
     if role == "HEALER" then
         frame.role:SetTexCoord(0.75, 1, 0, 1);
         frame.role:Show();
+        if not frame.role.healer then
+            registerPower(frame);
+            frame.role.healer = true;
+        end
     elseif role == "TANK" then
         frame.role:SetTexCoord(0.5, 0.75, 0, 1);
         frame.role:Show();
+        if frame.role.healer then
+            unregisterPower(frame);
+            frame.role.healer = false;
+        end
     else
         frame.role:Hide();
+        if frame.role.healer then
+            unregisterPower(frame);
+            frame.role.healer = false;
+        end
     end
 end
 
@@ -284,6 +335,10 @@ local function updateReadyCheck(frame, unit)
     end
 end
 
+local function updateRaidMarker(frame, unit)
+    --print(unit, "marker");
+end
+
 local eventFuncs = {
     ["UNIT_HEALTH"] = function(frame)
         updateHealth(frame, frame.displayed);
@@ -291,6 +346,9 @@ local eventFuncs = {
         updateShield(frame, frame.displayed);
         updateHealAbsorb(frame, frame.displayed);
         -- no heal prediction update, that doesn't overflow too much
+        -- raid marker update here, because marker is removed when unit dies
+        -- without a RAID_TARGET_UPDATE event
+        updateRaidMarker(frame, frame.unit);
     end,
     ["UNIT_POWER"] = function(frame)
         updatePower(frame, frame.displayed);
@@ -346,7 +404,11 @@ local eventFuncs = {
     ["READY_CHECK"] = function(frame)
         updateReadyCheck(frame, frame.unit);
     end,
+    ["RAID_TARGET_UPDATE"] = function(frame)
+        updateRaidMarker(frame, frame.unit);
+    end,
     ["UPDATE_ALL_BARS"] = function(frame)
+        updateRole(frame, frame.unit);
         updateVehicle(frame);
         updateMaxHealth(frame, frame.displayed);
         updateMaxPower(frame, frame.displayed);
@@ -358,11 +420,11 @@ local eventFuncs = {
         updateHealPred(frame, frame.displayed);
         updateHealAbsorb(frame, frame.displayed);
         updatePowerColor(frame, frame.displayed);
-        updateIncomingRes(frame, frame.unit);
-        updateReadyCheck(frame, frame.unit);
         updateAggro(frame, frame.displayed);
         updateName(frame, frame.displayed);
-        updateRole(frame, frame.unit);
+        updateIncomingRes(frame, frame.unit);
+        updateReadyCheck(frame, frame.unit);
+        updateRaidMarker(frame, frame.unit);
     end,
 };
 eventFuncs["UNIT_HEALTH_FREQUENT"] = eventFuncs["UNIT_HEALTH"];
index b3c7d07..3ecdcf6 100644 (file)
@@ -8,8 +8,9 @@ local CTimerAfter = C_Timer.After;
 
 local Settings = OmaRFSettings;
 local majorAuras = Settings.MajorAuras;
-local positions = {};
-local watchedAuras = {};
+local indSize = Settings.IndSize;
+local positions = nil;
+local watchedAuras = nil;
 
 local updaters = {};
 local updating = {};
@@ -18,6 +19,49 @@ local auraFilters = {"HELPFUL", "HARMFUL"};
 local M = {};
 OmaRFIndicators = M;
 
+function M.SetupIndicators(frame)
+    if not watchedAuras then
+        watchedAuras = Settings.Character["WatchedAuras"];
+        positions = Settings.Character.Positions;
+    end
+
+    frame.inds = CreateFrame("Frame", nil, frame);
+    frame.inds:SetAllPoints();
+    frame.inds:Hide();
+    for _, pos in pairs(positions) do
+        frame.inds[pos] = frame.inds:CreateTexture(nil, "OVERLAY");
+        frame.inds[pos]:SetPoint(pos, frame.inds, pos);
+        frame.inds[pos]:SetWidth(indSize);
+        frame.inds[pos]:SetHeight(indSize);
+        frame.inds[pos]:SetTexture("Interface\\AddOns\\OmaRF\\images\\rhomb");
+        frame.inds[pos]:SetVertexColor(1, 0, 0);
+        frame.inds[pos]:Hide();
+        frame.inds[pos].text = frame.inds:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
+        frame.inds[pos].text:SetPoint("BOTTOMRIGHT", frame.inds[pos], "BOTTOMRIGHT");
+        frame.inds[pos].text: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], "TOPRIGHT");
+        end
+        frame.major[i]:SetWidth(indSize*2);
+        frame.major[i]:SetHeight(indSize*2);
+        frame.major[i]:Hide();
+        frame.major[i].text = frame.major:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
+        frame.major[i].text:SetPoint("BOTTOMRIGHT", frame.major[i], "BOTTOMRIGHT");
+        frame.major[i].text:Hide();
+        frame.major[i].stack = frame.major:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
+        frame.major[i].stack:SetPoint("TOPLEFT", frame.major[i], "TOPLEFT");
+        frame.major[i].stack:Hide();
+    end
+end
+
 local function remaining(text, expires, current)
     if expires == 0 then
         text:SetText("");
@@ -74,6 +118,7 @@ function M.CheckIndicators(frame, unit)
     local name, icon, count, expires, caster, id;
     local showInds, showMajors, needUpdate = false, false, false;
     local majorPos = 1;
+    local alert = false; -- color the whole bar
     local current = GetTime();
     for _, filter in ipairs(auraFilters) do
         local i = 1;
@@ -88,7 +133,8 @@ function M.CheckIndicators(frame, unit)
                 frame.inds[pos].text:Show();
                 showInds = true;
             end
-            if (majorAuras[id] or majorAuras[name]) and majorPos <= 3 then
+            local major = majorAuras[id] or majorAuras[name];
+            if major and majorPos <= 3 then
                 needUpdate = remaining(frame.major[majorPos].text, expires, current);
                 frame.major[majorPos].expires = expires;
                 frame.major[majorPos]:SetTexture(icon);
@@ -98,6 +144,9 @@ function M.CheckIndicators(frame, unit)
                     frame.major[majorPos].stack:SetText(count);
                     frame.major[majorPos].stack:Show();
                 end
+                if major.bar then
+                    alert = true;
+                end
                 showMajors = true;
                 majorPos = majorPos + 1;
             end
@@ -121,9 +170,6 @@ function M.CheckIndicators(frame, unit)
         frame.inds:Hide();
         frame.major:Hide();
     end
-end
 
-function M.LoadChar()
-    watchedAuras = Settings.Character["WatchedAuras"];
-    positions = Settings.Character.Positions;
+    return alert;
 end
index 783cdeb..ad802cb 100644 (file)
@@ -11,10 +11,11 @@ local GameTooltip = nil;
 local GameTooltip_SetDefaultAnchor = nil;
 
 local registerEvents = OmaRFEvents.RegisterEvents;
+local registerUnitEvents = OmaRFEvents.RegisterUnitEvents;
 local unitEvent = OmaRFEvents.UnitEvent;
+local setupIndicators = OmaRFIndicators.SetupIndicators;
 
 local Settings = OmaRFSettings;
-local indSize = Settings.IndSize;
 local baseColor = Settings.BaseColor;
 local bgColor = Settings.BgColor;
 local healthColor = Settings.HealthColor;
@@ -24,7 +25,6 @@ local healpredColor = Settings.HealpredColor;
 local healabsorbColor = Settings.HealabsorbColor;
 local width, height = Settings.Width, Settings.Height;
 -- placeholders with visible values when error happens
-local positions = {};
 local anchorX, anchorY = 10, 10;
 local attributes = {};
 
@@ -36,44 +36,6 @@ local raid = {};
 local M = {};
 OmaRaidFrame = M;
 
-local function setupIndicators(frame)
-    frame.inds = CreateFrame("Frame", nil, frame);
-    frame.inds:SetAllPoints();
-    frame.inds:Hide();
-    for _, pos in pairs(positions) do
-        frame.inds[pos] = frame.inds:CreateTexture(nil, "OVERLAY");
-        frame.inds[pos]:SetPoint(pos, frame.inds, pos);
-        frame.inds[pos]:SetWidth(indSize);
-        frame.inds[pos]:SetHeight(indSize);
-        frame.inds[pos]:SetTexture("Interface\\AddOns\\OmaRF\\images\\rhomb");
-        frame.inds[pos]:SetVertexColor(1, 0, 0);
-        frame.inds[pos]:Hide();
-        frame.inds[pos].text = frame.inds:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
-        frame.inds[pos].text:SetPoint("BOTTOMRIGHT", frame.inds[pos], "BOTTOMRIGHT");
-        frame.inds[pos].text: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], "TOPRIGHT");
-        end
-        frame.major[i]:SetWidth(indSize*2);
-        frame.major[i]:SetHeight(indSize*2);
-        frame.major[i]:Hide();
-        frame.major[i].text = frame.major:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
-        frame.major[i].text:SetPoint("BOTTOMRIGHT", frame.major[i], "BOTTOMRIGHT");
-        frame.major[i].text:Hide();
-        frame.major[i].stack = frame.major:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
-        frame.major[i].stack:SetPoint("TOPLEFT", frame.major[i], "TOPLEFT");
-        frame.major[i].stack:Hide();
-    end
-end
-
 local function unitUpdate(self, elapsed)
     -- there's no in/out of range event, have to check each frame
     -- from FrameXML/CompactUnitFrame.lua
@@ -86,21 +48,10 @@ local function unitUpdate(self, elapsed)
 end
 
 local function frameShow(frame)
-    frame:RegisterEvent("PARTY_MEMBER_ENABLE");
-    frame:RegisterEvent("PARTY_MEMBER_DISABLE");
-    frame:RegisterEvent("UNIT_ENTERED_VEHICLE");
-    frame:RegisterEvent("UNIT_EXITED_VEHICLE");
-    frame:RegisterEvent("UNIT_PET");
-    frame:RegisterEvent("PLAYER_ROLES_ASSIGNED");
-    frame:RegisterEvent("GROUP_ROSTER_UPDATE");
-    frame:RegisterEvent("PLAYER_ENTERING_WORLD");
-    frame:RegisterEvent("READY_CHECK");
-    frame:RegisterEvent("READY_CHECK_CONFIRM");
-    frame:RegisterEvent("READY_CHECK_FINISHED");
-    if frame.unit == "focus" then frame:RegisterEvent("PLAYER_FOCUS_CHANGED") end
     registerEvents(frame);
+    registerUnitEvents(frame);
     frame:SetScript("OnUpdate", unitUpdate);
-    unitEvent(frame, "UPDATE_ALL_BARS", frame.displayed);
+    unitEvent(frame, "UPDATE_ALL_BARS");
 end
 
 local function frameHide(frame)
@@ -108,12 +59,12 @@ local function frameHide(frame)
     frame:SetScript("OnUpdate", nil);
 end
 
-local function showTooltip(frame)
-    GameTooltip_SetDefaultAnchor(GameTooltip, frame);
-    GameTooltip:SetUnit(frame:GetAttribute("unit"));
+local function showTooltip(secure)
+    GameTooltip_SetDefaultAnchor(GameTooltip, secure);
+    GameTooltip:SetUnit(secure:GetAttribute("unit"));
 end
 
-local function hideTooltip(frame)
+local function hideTooltip(secure)
     GameTooltip:FadeOut();
 end
 
@@ -124,11 +75,8 @@ local function setupFrame(frame, secure, unit)
     frame.displayed = unit;
     -- hide frame to get initial frameShow call
     frame:Hide();
-    if unit == "player" then
-        frame.vehicle = "vehicle";
-    else
-        frame.vehicle = unit.."pet";
-    end
+    if unit == "player" then frame.vehicle = "vehicle"
+    else frame.vehicle = unit.."pet" end
     -- create visuals
     secure:SetWidth(width+2);
     secure:SetHeight(height+2);
@@ -145,16 +93,13 @@ local function setupFrame(frame, secure, unit)
     frame.health = frame:CreateTexture(nil, "BORDER");
     frame.health:SetTexture("Interface\\RaidFrame\\Raid-Bar-Hp-Fill");
     frame.health:SetPoint("TOPLEFT", frame.background, "TOPLEFT");
-    frame.health:SetPoint("BOTTOMLEFT", frame.background, "BOTTOMLEFT", 0, 2);
+    frame.health:SetPoint("BOTTOMLEFT", frame.background, "BOTTOMLEFT");
     frame.health:SetVertexColor(unpack(healthColor));
-    frame.health:SetWidth(width);
-    frame.health.max = UnitHealthMax(unit);
     frame.mana = frame:CreateTexture(nil, "BORDER");
     frame.mana:SetPoint("TOPLEFT", frame.background, "BOTTOMLEFT", 0, 2);
     frame.mana:SetPoint("BOTTOMLEFT", frame.background, "BOTTOMLEFT");
     frame.mana:SetColorTexture(1, 1, 1);
-    frame.mana:SetWidth(width);
-    frame.mana.max = UnitPowerMax(unit);
+    frame.mana:Hide();
     frame.shield = frame:CreateTexture(nil, "BORDER");
     frame.shield:SetPoint("TOPLEFT", frame.health, "TOPRIGHT");
     frame.shield:SetPoint("BOTTOMLEFT", frame.health, "BOTTOMRIGHT");
@@ -178,12 +123,11 @@ local function setupFrame(frame, secure, unit)
     frame.role = frame:CreateTexture(nil, "ARTWORK");
     frame.role:SetPoint("BOTTOMRIGHT", frame.background, "BOTTOMRIGHT", -2, 2);
     frame.role:SetPoint("TOPLEFT", frame.background, "BOTTOMRIGHT", -14, 14);
-    frame.role:SetTexCoord(0.75, 1, 0, 1);
     frame.role:SetTexture("Interface\\LFGFRAME\\LFGROLE");
     frame.role:Hide();
     frame.overlay = frame:CreateTexture(nil, "ARTWORK", nil, 1);
     frame.overlay:SetPoint("TOPLEFT", frame.background, "TOPLEFT");
-    frame.overlay:SetPoint("BOTTOMRIGHT", frame.background, "BOTTOMRIGHT", 0, 2);
+    frame.overlay:SetPoint("BOTTOMRIGHT", frame.background, "BOTTOMRIGHT");
     frame.overlay:SetColorTexture(1, 1, 1);
     frame.overlay:Hide();
     frame.name = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
@@ -198,8 +142,8 @@ local function setupFrame(frame, secure, unit)
     frame.rez:SetTexture("Interface\\RaidFrame\\Raid-Icon-Rez");
     frame.rez:Hide();
     frame.ready = frame:CreateTexture(nil, "OVERLAY");
-    frame.ready:SetPoint("TOPLEFT", frame.background, "BOTTOMLEFT", 0, 12);
-    frame.ready:SetPoint("BOTTOMRIGHT", frame.background, "BOTTOMLEFT", 12, 0);
+    frame.ready:SetPoint("TOPLEFT", frame.background, "BOTTOMLEFT", 0, 14);
+    frame.ready:SetPoint("BOTTOMRIGHT", frame.background, "BOTTOMLEFT", 14, 0);
     frame.ready:Hide();
     -- set up indicators
     setupIndicators(frame);
@@ -207,9 +151,6 @@ local function setupFrame(frame, secure, unit)
     frame:SetScript("OnShow", frameShow);
     frame:SetScript("OnHide", frameHide);
     frame:SetScript("OnEvent", unitEvent);
-    -- let other addons hook these to anchor tooltip elsewhere
-    GameTooltip = _G["GameTooltip"];
-    GameTooltip_SetDefaultAnchor = _G["GameTooltip_SetDefaultAnchor"];
     secure:SetScript("OnEnter", showTooltip);
     secure:SetScript("OnLeave", hideTooltip);
     -- set attributes
@@ -325,14 +266,16 @@ end
 local function loadCharSettings()
     anchorX, anchorY = Settings.Character.AnchorX, Settings.Character.AnchorY;
     attributes = Settings.Character.Clickheal;
-    positions = Settings.Character.Positions;
 end
 
 local function initialize()
+    -- let other addons hook these to anchor tooltip elsewhere
+    GameTooltip = _G["GameTooltip"];
+    GameTooltip_SetDefaultAnchor = _G["GameTooltip_SetDefaultAnchor"];
     loadCharSettings();
     CFrame:SetPoint("CENTER", nil, "CENTER", anchorX, anchorY);
     CFrame:SetHeight((height+2)*8);
-    CFrame:SetWidth((width+2)*5+1);
+    CFrame:SetWidth((width+2)*5);
     initializeParty(CFrame);
     initializeRaid(CFrame);
     initializeFocus(CFrame);
@@ -389,7 +332,6 @@ CFrame:RegisterEvent("PLAYER_REGEN_ENABLED");
 CFrame:SetScript("OnEvent", function(self, event, addon)
     if event == "PLAYER_LOGIN" then
         OmaRFLoadChar();
-        OmaRFIndicators.LoadChar();
         hideBlizzardRaid();
         initialize();
     elseif event == "PLAYER_REGEN_ENABLED" then
index 2015a1a..ef6d46b 100644 (file)
@@ -98,23 +98,26 @@ local settings = {
     },
     MajorAuras = {
         -- Antorus
-        ["Psychic Assault"] = true,
-        ["Everburning Flames"] = true,
-        ["Corrupt"] = true,
-        ["Sleep Canister"] = true,
-        ["Misery"] = true,
-        ["Necrotic Embrace"] = true,
-        ["Fulminating Pulse"] = true,
-        ["Chilled Blood"] = true,
-        ["Soulblight"] = true,
-        ["Soulburst"] = true,
-        ["Soulbomb"] = true,
+        ["Psychic Assault"] = {bar=false},
+        ["Everburning Flames"] = {bar=false},
+        ["Corrupt"] = {bar=false},
+        ["Sleep Canister"] = {bar=false},
+        ["Misery"] = {bar=true},
+        ["Necrotic Embrace"] = {bar=false},
+        ["Fulminating Pulse"] = {bar=false},
+        ["Chilled Blood"] = {bar=false},
+        ["Soulblight"] = {bar=false},
+        ["Soulburst"] = {bar=false},
+        ["Soulbomb"] = {bar=false},
+        ["Shock Grenade"] = {bar=false},
+        -- Trial of Valor
+        ["Unholy Reckoning"] = {bar=false},
         -- Proving Grounds for testing
-        ["Aqua Bomb"] = true,
+        ["Aqua Bomb"] = {bar=false},
         -- Mythic+
-        [209858] = true, -- Necrotic Rot
-        [240559] = true, -- Grievous Wound
-        [240443] = true, -- Burst
+        [209858] = {bar=false}, -- Necrotic Rot
+        [240559] = {bar=false}, -- Grievous Wound
+        [240443] = {bar=false}, -- Burst
     },
 };
 OmaRFSettings = settings;
index 7b39aeb..cbc8b0a 100644 (file)
@@ -24,7 +24,6 @@ local Settings = OmaUFSettings;
 local baseColor = Settings.BaseColor;
 local healthColor = Settings.HealthColor;
 local powerColors = Settings.PowerColors;
-local width = Settings.Width;
 
 local M = {};
 OmaUFEvents = M;
@@ -62,13 +61,13 @@ local function updateHealth(frame, unit)
         max = frame.health.max;
         if current > max then
             -- error state, still over maximum
-            frame.health:SetWidth(width);
+            frame.health:SetWidth(frame.width);
             return;
         end
     elseif max > 0 then
-        frame.health:SetWidth(current/frame.health.max*width);
+        frame.health:SetWidth(current/frame.health.max*frame.width);
     else
-        frame.health:SetWidth(width);
+        frame.health:SetWidth(frame.width);
         return;
     end
 
@@ -85,8 +84,16 @@ local function updateHealthText(frame, unit)
     elseif not UnitIsConnected(unit) then
         frame.healthText:SetText("DC");
         frame.healthText:Show();
-    elseif max > 0 and current < max then
-        frame.healthText:SetText(ceil(current/max*100));
+    elseif max > 0 then
+        if current > 1200000000 then -- 1.2B
+            frame.healthText:SetFormattedText("%.1fB", current / 1000000000);
+        elseif current > 1200000 then -- 1.2M
+            frame.healthText:SetFormattedText("%.1fM", current / 1000000);
+        elseif current > 1000 then -- 1K
+            frame.healthText:SetFormattedText("%.1fK", current / 1000);
+        else
+            frame.healthText:SetFormattedText("%d", current)
+        end
         frame.healthText:Show();
     else
         frame.healthText:Hide();
@@ -109,15 +116,15 @@ local function updatePower(frame, unit)
         max = frame.mana.max;
         if current > max then
             -- error
-            frame.mana:SetWidth(width);
+            frame.mana:SetWidth(frame.width);
             return;
         end
     end
     if max > 0 then
-        frame.mana:SetWidth(UnitPower(unit)/max*width);
+        frame.mana:SetWidth(UnitPower(unit)/max*frame.width);
         frame.mana:Show();
     else
-        frame.mana:SetWidth(width);
+        frame.mana:SetWidth(frame.width);
         frame.mana:Show();
     end
 end
@@ -143,6 +150,7 @@ local function updatePowerColor(frame, unit)
 end
 
 local function updateName(frame, unit)
+    if not frame.name then return end
     local name = UnitName(unit);
     if not name then return end
     frame.name:SetText(ssub(name, 1, 10));
@@ -152,8 +160,8 @@ local function updateHealPred(frame, unit)
     local incoming = UnitGetIncomingHeals(unit) or 0;
     if incoming > 0 then
         local max = frame.health.max;
-        local space = width - frame.health:GetWidth() + 1;
-        local pred = (incoming / max) * width;
+        local space = frame.width - frame.health:GetWidth() + 1;
+        local pred = (incoming / max) * frame.width;
         frame.healpred:SetWidth(min(space, pred));
         frame.healpred:Show();
     else
@@ -165,8 +173,8 @@ local function updateShield(frame, unit)
     local shield = UnitGetTotalAbsorbs(unit) or 0;
     if shield > 0 then
         local max = frame.health.max;
-        local space = width - frame.health:GetWidth();
-        shield = (shield / max) * width;
+        local space = frame.width - frame.health:GetWidth();
+        shield = (shield / max) * frame.width;
         if space == 0 then
             frame.shield:Hide();
             frame.shieldhl:Show();
@@ -190,7 +198,7 @@ local function updateHealAbsorb(frame, unit)
     if absorb > 0 then
         local max = frame.health.max;
         local space = frame.health:GetWidth();
-        absorb = (absorb / max) * width;
+        absorb = (absorb / max) * frame.width;
         frame.healabsorb:SetWidth(min(space, absorb));
         frame.healabsorb:Show();
     else
@@ -237,6 +245,7 @@ local function updateRole(frame, unit)
 end
 
 local function updateLevelText(frame, unit, levelup)
+    if not frame.level then return end
     if levelup then
         -- PLAYER_LEVEL_UP
         frame.level:SetText(levelup);
@@ -388,7 +397,7 @@ local eventFuncs = {
     end,
     ["UNIT_NAME_UPDATE"] = function(frame)
         updateName(frame, frame.displayed);
-        updateHealthColor(frame, frame.unit);
+        updateHealthColor(frame, frame.displayed);
     end,
     ["UNIT_CONNECTION"] = function(frame)
         updateHealthText(frame, frame.displayed);
@@ -416,7 +425,7 @@ local eventFuncs = {
     end,
     ["UNIT_FACTION"] = function(frame)
         updatePVP(frame, frame.unit);
-        updateHealthColor(frame, frame.unit);
+        updateHealthColor(frame, frame.displayed);
     end,
     ["PARTY_LEADER_CHANGED"] = function(frame)
         updateLeaderIcon(frame, frame.unit);
@@ -441,7 +450,7 @@ local eventFuncs = {
         updateStatus(frame, frame.unit);
         updatePVP(frame, frame.unit);
         updateLeaderIcon(frame, frame.unit);
-        updateHealthColor(frame, frame.unit);
+        updateHealthColor(frame, frame.displayed);
     end,
 };
 eventFuncs["UNIT_HEALTH_FREQUENT"] = eventFuncs["UNIT_HEALTH"];
index f4b7521..2c338f0 100644 (file)
@@ -51,6 +51,15 @@ local events = {
         "PLAYER_ENTERING_WORLD",
         "PLAYER_TARGET_CHANGED",
     },
+    ["pet"] = {
+        "UNIT_ENTERED_VEHICLE",
+        "UNIT_EXITED_VEHICLE",
+        "UNIT_PET",
+        "PLAYER_ENTERING_WORLD",
+        "PLAYER_LEVEL_UP",
+        "PLAYER_REGEN_DISABLED",
+        "PLAYER_REGEN_ENABLED",
+    },
 };
 
 local M = {};
@@ -68,16 +77,16 @@ local function frameHide(frame)
     frame:UnregisterAllEvents();
 end
 
-local function showTooltip(frame)
-    GameTooltip_SetDefaultAnchor(GameTooltip, frame);
-    GameTooltip:SetUnit(frame:GetAttribute("unit"));
+local function showTooltip(secure)
+    GameTooltip_SetDefaultAnchor(GameTooltip, secure);
+    GameTooltip:SetUnit(secure:GetAttribute("unit"));
 end
 
-local function hideTooltip(frame)
+local function hideTooltip(secure)
     GameTooltip:FadeOut();
 end
 
-local function setupFrame(frame, secure, unit)
+local function setupFrame(frame, secure, unit, width, height)
     secure:SetAttribute("unit", unit);
     frame:SetAttribute("unit", unit);
     frame.unit = unit;
@@ -90,6 +99,11 @@ local function setupFrame(frame, secure, unit)
         frame.vehicle = unit.."pet";
     end
     -- create visuals
+    secure:SetWidth(width+2);
+    secure:SetHeight(height+2);
+    frame:SetWidth(width+2);
+    frame:SetHeight(height+2);
+    frame.width = width;
     frame.base = frame:CreateTexture(nil, "BACKGROUND");
     frame.base:SetAllPoints();
     frame.base:SetColorTexture(1, 1, 1);
@@ -163,10 +177,12 @@ local function setupFrame(frame, secure, unit)
     frame.leader:SetPoint("TOPLEFT", frame.healthback, "TOPLEFT", -6, 6);
     frame.leader:SetPoint("BOTTOMRIGHT", frame.healthback, "TOPLEFT", 6, -6);
     frame.leader:Hide();
-    frame.name = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlightLarge");
-    frame.name:SetPoint("LEFT", frame.healthback, "LEFT", 2, 1);
-    frame.level = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
-    frame.level:SetPoint("LEFT", frame.manaback, "LEFT", 2, 1);
+    if unit ~= "pet" then
+        frame.name = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlightLarge");
+        frame.name:SetPoint("LEFT", frame.healthback, "LEFT", 2, 1);
+        frame.level = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
+        frame.level:SetPoint("LEFT", frame.manaback, "LEFT", 2, 1);
+    end
     -- set scripts
     frame:SetScript("OnShow", frameShow);
     frame:SetScript("OnHide", frameHide);
@@ -198,16 +214,23 @@ local function initializePlayer(parent)
     local frame = CreateFrame("Frame", "OmaPlayer", parent);
     local unit = "player";
     secure:SetPoint("CENTER", parent, "CENTER", -300, -175);
-    secure:SetWidth(width+2);
-    secure:SetHeight(height+2);
     frame:SetPoint("CENTER", parent, "CENTER", -300, -175);
-    frame:SetWidth(width+2);
-    frame:SetHeight(height+2);
-    setupFrame(frame, secure, unit);
+    setupFrame(frame, secure, unit, width, height);
+    RegisterUnitWatch(frame);
+    RegisterUnitWatch(secure);
+    --RegisterStateDriver(secure, "vehicleui", "[vehicleui] vehicle; no");
+    --secure:SetAttribute("_onstate-vehicleui", vehicletoggle);
+end
+
+local function initializePet(parent)
+    local secure = CreateFrame("Button", "OmaPetSecure", parent, inheritedFrames);
+    local frame = CreateFrame("Frame", "OmaPet", parent);
+    local unit = "pet";
+    secure:SetPoint("TOPRIGHT", parent, "TOPLEFT", -10, 0);
+    frame:SetPoint("TOPRIGHT", parent, "TOPLEFT", -10, 0);
+    setupFrame(frame, secure, unit, width/2, height/2);
     RegisterUnitWatch(frame);
     RegisterUnitWatch(secure);
-    RegisterStateDriver(secure, "vehicleui", "[vehicleui] vehicle; no");
-    secure:SetAttribute("_onstate-vehicleui", vehicletoggle);
 end
 
 local function initializeTarget(parent)
@@ -215,17 +238,11 @@ local function initializeTarget(parent)
     local frame = CreateFrame("Frame", "OmaTarget", parent);
     local unit = "target";
     secure:SetPoint("CENTER", parent, "CENTER", 300, -175);
-    secure:SetWidth(width+2);
-    secure:SetHeight(height+2);
     frame:SetPoint("CENTER", parent, "CENTER", 300, -175);
-    frame:SetWidth(width+2);
-    frame:SetHeight(height+2);
-    setupFrame(frame, secure, unit);
+    setupFrame(frame, secure, unit, width, height);
     createAuraFrame(frame, unit);
     RegisterUnitWatch(frame);
     RegisterUnitWatch(secure);
-    RegisterStateDriver(secure, "vehicleui", "[vehicleui] vehicle; no");
-    secure:SetAttribute("_onstate-vehicleui", vehicletoggle);
 end
 
 local function loadCharSettings()
@@ -239,6 +256,7 @@ local function initialize()
     GameTooltip = _G["GameTooltip"];
     GameTooltip_SetDefaultAnchor = _G["GameTooltip_SetDefaultAnchor"];
     initializePlayer(UIParent);
+    initializePet(_G["OmaPlayer"]);
     initializeTarget(UIParent);
     -- TODO boss frames, pet frame, (arena frames)
 end
@@ -248,7 +266,7 @@ local function hideBlizzardFrames()
     if hidden then return end
     hidden = true;
 
-    for _, frame in pairs({PlayerFrame, TargetFrame, TargetFrameToT}) do
+    for _, frame in pairs({PlayerFrame, TargetFrame, TargetFrameToT, PetFrame}) do
         frame:UnregisterAllEvents();
         frame.healthbar:UnregisterAllEvents();
         frame.manabar:UnregisterAllEvents();