862e8cd - Add raid marker and bres tracking to OmaTMW
authorAleksi Blinnikka <aleksi.blinnikka@iki.fi>
Wed, 30 Jun 2021 16:29:07 +0000
committerAleksi Blinnikka <aleksi.blinnikka@iki.fi>
Wed, 30 Jun 2021 16:29:07 +0000
OmaTMW/Bres.lua [new file with mode: 0644]
OmaTMW/OmaTMW.toc
OmaTMW/RaidMarker.lua [new file with mode: 0644]

diff --git a/OmaTMW/Bres.lua b/OmaTMW/Bres.lua
new file mode 100644 (file)
index 0000000..4f0d9cc
--- /dev/null
@@ -0,0 +1,52 @@
+-- Bres.lua
+local _;
+local min, ceil = math.min, math.ceil;
+local GetSpellCharges = GetSpellCharges;
+local GetTime = GetTime;
+local CTimerAfter = C_Timer.After;
+
+local frame = CreateFrame("Frame", "OmaBres", UIParent);
+
+local function tick()
+    local charges, maxCharges, start, duration = GetSpellCharges(20484); -- Rebirth
+    if charges then
+        frame:Show();
+        local remain = duration - (GetTime() - start);
+        if remain < 0 then
+            frame:Hide();
+            CTimerAfter(5, tick);
+            return;
+        end
+        frame.charge:SetText(charges);
+        frame.cd:SetCooldown(start, duration);
+        CTimerAfter(min(ceil(remain), 5), tick);
+    else
+        frame:Hide();
+        CTimerAfter(5, tick);
+    end
+end
+
+local function bres()
+    frame:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", 580, 0);
+    frame:SetWidth(48);
+    frame:SetHeight(48);
+    frame.base = frame:CreateTexture(nil, "BACKGROUND");
+    frame.base:SetAllPoints();
+    frame.base:SetColorTexture(0, 0, 0, 0.5);
+    frame.icon = frame:CreateTexture(nil, "BORDER");
+    frame.icon:SetPoint("TOPLEFT", frame.base, "TOPLEFT", 1, -1);
+    frame.icon:SetPoint("BOTTOMRIGHT", frame.base, "BOTTOMRIGHT", -1, 1);
+    frame.icon:SetTexCoord(0.07, 0.93, 0.07, 0.93);
+    frame.icon:SetTexture(136080); -- Rebirth
+    frame.charge = frame:CreateFontString(nil, "OVERLAY", "NumberFontNormalLarge");
+    frame.charge:SetPoint("BOTTOMRIGHT");
+    frame.cd = CreateFrame("Cooldown", "OmaBresCD", frame, "CooldownFrameTemplate");
+    frame.cd:SetAllPoints();
+    frame:UnregisterAllEvents();
+    tick();
+end
+
+frame:SetScript("OnEvent", function(self, event)
+    return bres();
+end);
+frame:RegisterEvent("PLAYER_LOGIN");
index c766059..08017e5 100644 (file)
@@ -8,3 +8,5 @@ Healthstone.lua
 GiftTracker.lua
 TellMeWhen.lua
 TirnaHelper.lua
+RaidMarker.lua
+Bres.lua
diff --git a/OmaTMW/RaidMarker.lua b/OmaTMW/RaidMarker.lua
new file mode 100644 (file)
index 0000000..f7d1e81
--- /dev/null
@@ -0,0 +1,30 @@
+-- RaidMarker.lua
+local _;
+local frame = CreateFrame("Frame", "OmaRaidMarker", UIParent);
+
+local function frameConf()
+    frame:SetPoint("CENTER", UIParent, "CENTER", 140, 140);
+    frame:SetHeight(100);
+    frame:SetWidth(100);
+    frame.icon = frame:CreateTexture(nil, "OVERLAY");
+    frame.icon:SetAllPoints();
+    frame.icon:SetTexture("Interface\\TARGETINGFRAME\\UI-RaidTargetingIcons");
+    frame:Hide();
+
+    frame:UnregisterAllEvents();
+    local event = function()
+        local index = GetRaidTargetIndex("player");
+        if index then
+            SetRaidTargetIconTexture(frame.icon, index);
+            frame:Show();
+        elseif frame:IsShown() then
+            frame:Hide();
+        end
+    end
+    frame:SetScript("OnEvent", event);
+    frame:RegisterEvent("RAID_TARGET_UPDATE");
+    event();
+end
+
+frame:SetScript("OnEvent", frameConf);
+frame:RegisterEvent("PLAYER_LOGIN");