mirror of
https://github.com/Relintai/Relintais-Enemy-Kooldown-Tracker-TBC.git
synced 2025-02-04 16:16:09 +01:00
Relintai
d2c6709ba3
The DR Frames now properly reposition themself after the frames are locked, without the need for a relog or /reload. (I have no idea how I didn't catch this earlier). Also, when the frames are unlocked, the DR frames properly hide their contents. -Fixed a bug: On the server I tested this I noticed that SPELL_AURA_REFRESH event is sent even on the first CC apply, this made the DR frasem break, but was hard to catch in action.
448 lines
9.6 KiB
Lua
448 lines
9.6 KiB
Lua
|
|
--"Globals"
|
|
local aceDB = LibStub("AceDB-3.0");
|
|
local aceCDialog = LibStub("AceConfigDialog-3.0");
|
|
local aceConfig = LibStub("AceConfig-3.0");
|
|
local libSharedMedia = LibStub("LibSharedMedia-3.0");
|
|
local libDRData = LibStub('DRData-1.0');
|
|
|
|
--Utility Functions for the options
|
|
|
|
function Rekt:RektDisable()
|
|
self:Reset();
|
|
self:ApplySettings();
|
|
--hide the frames
|
|
Rekt:HideFrames();
|
|
--self:Disable();
|
|
end
|
|
|
|
function Rekt:RektEnable()
|
|
--self:Enable();
|
|
self:Reset();
|
|
self:ApplySettings();
|
|
end
|
|
|
|
|
|
--enable
|
|
function Rekt:isEnabled()
|
|
local db = Rekt.db.profile;
|
|
return db["enabled"];
|
|
end
|
|
|
|
function Rekt:setEnabledOrDisabled(enable)
|
|
local db = Rekt.db.profile;
|
|
db["enabled"] = enable;
|
|
if enable then
|
|
Rekt:RektEnable()
|
|
else
|
|
Rekt:RektDisable()
|
|
end
|
|
end
|
|
|
|
function Rekt:isPartEnabled(which)
|
|
local db = Rekt.db.profile;
|
|
return db[which]["enabled"];
|
|
end
|
|
|
|
function Rekt:SetPartEnabledOrDisabled(which, enable)
|
|
local db = Rekt.db.profile;
|
|
db[which]["enabled"] = enable;
|
|
--hide all those frames
|
|
if not enable then
|
|
for i = 1, 23 do
|
|
local frame = Rekt.frames[which][i]["frame"];
|
|
frame:Hide();
|
|
local colorframe = Rekt.fremes[which][i]["colorframe"];
|
|
colorframe:Hide();
|
|
end
|
|
else
|
|
self:ReassignCds(which);
|
|
end
|
|
end
|
|
|
|
function Rekt:SetDRPartEnabledOrDisabled(which, enable)
|
|
local db = Rekt.db.profile;
|
|
db[which]["enabled"] = enable;
|
|
--hide all those frames
|
|
if not enable then
|
|
for i = 1, 18 do
|
|
local frame = Rekt.frames[which][i]["frame"];
|
|
frame:Hide();
|
|
end
|
|
else
|
|
self:ReassignDRs(which);
|
|
end
|
|
end
|
|
|
|
function Rekt:isSpecDetectionEnabled()
|
|
local db = Rekt.db.profile;
|
|
return db["specdetection"];
|
|
end
|
|
|
|
function Rekt:setSpecDetectionEnabledorDisabled(enable)
|
|
local db = Rekt.db.profile;
|
|
db["specdetection"] = enable;
|
|
--call the remapcooldowns, and then update
|
|
--self:ReassignCds(which);
|
|
end
|
|
|
|
function Rekt:getColorFrameEnabled(which)
|
|
local db = Rekt.db.profile;
|
|
return db[which]["colorframeenabled"];
|
|
end
|
|
|
|
function Rekt:setColorFrameEnabled(which, enable)
|
|
local db = Rekt.db.profile;
|
|
db[which]["colorframeenabled"] = enable;
|
|
--hide all those frames
|
|
if not enable then
|
|
for i = 1, 23 do
|
|
local colorframe = Rekt.frames[which][i]["colorframe"];
|
|
colorframe:Hide();
|
|
end
|
|
else
|
|
self:ReassignCds(which);
|
|
end
|
|
end
|
|
|
|
function Rekt:getCDTypeSortingEnable()
|
|
local db = Rekt.db.profile;
|
|
return db["cdtypesortorder"]["enabled"];
|
|
end
|
|
|
|
function Rekt:setCDTypeSortingEnable(v)
|
|
local db = Rekt.db.profile;
|
|
db["cdtypesortorder"]["enabled"] = v;
|
|
|
|
self:ReassignCds("target");
|
|
self:ReassignCds("focus");
|
|
end
|
|
|
|
function Rekt:getPetCDGuessing()
|
|
local db = Rekt.db.profile;
|
|
return db["petcdguessing"];
|
|
end
|
|
|
|
function Rekt:setPetCDGuessing(v)
|
|
local db = Rekt.db.profile;
|
|
db["petcdguessing"] = v;
|
|
end
|
|
|
|
--lock
|
|
function Rekt:isLocked()
|
|
return Rekt.db.profile["locked"];
|
|
end
|
|
|
|
function Rekt:LockFrames()
|
|
self:MoveTimersStop("target");
|
|
self:MoveTimersStop("focus");
|
|
|
|
self:MoveDRTimersStop("targetdr");
|
|
self:MoveDRTimersStop("focusdr");
|
|
self:MoveDRTimersStop("selfdr");
|
|
|
|
self:HideMovableFrames()
|
|
self:ReassignCds("target");
|
|
self:ReassignCds("focus");
|
|
|
|
self:ReassignDRs("targetdr");
|
|
self:ReassignDRs("focusdr");
|
|
self:ReassignDRs("selfdr");
|
|
end
|
|
|
|
function Rekt:UnlockFrames()
|
|
--this will hide the frames
|
|
self:ReassignCds("target");
|
|
self:ReassignCds("focus");
|
|
|
|
self:ReassignDRs("targetdr");
|
|
self:ReassignDRs("focusdr");
|
|
self:ReassignDRs("selfdr");
|
|
|
|
Rekt:ShowMovableFrames();
|
|
end
|
|
|
|
function Rekt:HideMovableFrames()
|
|
if not Rekt.MovableFrames then return end;
|
|
--Hide them
|
|
for k, v in pairs(Rekt.MovableFrames) do
|
|
v["frame"]:EnableMouse(false);
|
|
v["frame"]:SetMovable(false);
|
|
v["frame"]:Hide();
|
|
end
|
|
end
|
|
|
|
function Rekt:ShowMovableFrames()
|
|
local db = Rekt.db.profile;
|
|
--Create them if they doesn't exists
|
|
if not Rekt.MovableFrames then
|
|
Rekt.MovableFrames = {}
|
|
for i = 1, 6 do
|
|
local frame = CreateFrame("Frame", nil, UIParent, nil);
|
|
frame:SetFrameStrata("BACKGROUND");
|
|
frame:SetScript("OnDragStart", function() self:MovableFrameDragStart() end)
|
|
frame:SetScript("OnDragStop", function() self:MovableFrameDragStop() end)
|
|
local text = frame:CreateTexture();
|
|
text:SetTexture("Interface\\Icons\\Spell_Arcane_Blink")
|
|
text:SetAllPoints(frame);
|
|
frame.texture = text;
|
|
local t = frame:CreateFontString(nil, "OVERLAY");
|
|
t:SetNonSpaceWrap(false);
|
|
t:SetPoint("CENTER", frame, "CENTER", 2, 0);
|
|
t:SetFont("Fonts\\FRIZQT__.TTF", 11, "OUTLINE, MONOCHROME")
|
|
|
|
local ttext = "";
|
|
if i == 1 then
|
|
ttext = "T";
|
|
elseif i == 2 then
|
|
ttext = "F";
|
|
elseif i == 3 then
|
|
ttext = "TDR";
|
|
elseif i == 4 then
|
|
ttext = "FDR";
|
|
elseif i == 5 then
|
|
ttext = "SDR";
|
|
elseif i == 6 then
|
|
ttext = "IB";
|
|
end
|
|
|
|
t:SetText(ttext);
|
|
|
|
local which = "";
|
|
if i == 1 then
|
|
which = "target";
|
|
elseif i == 2 then
|
|
which = "focus";
|
|
elseif i == 3 then
|
|
which = "targetdr";
|
|
elseif i == 4 then
|
|
which = "focusdr";
|
|
elseif i == 5 then
|
|
which = "selfdr";
|
|
elseif i == 6 then
|
|
which = "interruptbar";
|
|
end
|
|
|
|
frame.DragID = which;
|
|
|
|
Rekt.MovableFrames[i] = {}
|
|
Rekt.MovableFrames[i]["frame"] = frame;
|
|
Rekt.MovableFrames[i]["texture"] = text;
|
|
Rekt.MovableFrames[i]["text"] = t;
|
|
end
|
|
end
|
|
|
|
--Show, resize them
|
|
for k, v in pairs(Rekt.MovableFrames) do
|
|
v["frame"]:EnableMouse(true)
|
|
v["frame"]:SetMovable(true)
|
|
v["frame"]:RegisterForDrag("LeftButton")
|
|
v["frame"]:SetPoint("BOTTOMLEFT", db[v["frame"].DragID]["xPos"], db[v["frame"].DragID]["yPos"]);
|
|
v["frame"]:SetWidth(db[v["frame"].DragID]["size"]);
|
|
v["frame"]:SetHeight(db[v["frame"].DragID]["size"]);
|
|
v["frame"]:Show();
|
|
end
|
|
end
|
|
|
|
function Rekt:MovableFrameDragStart()
|
|
this:StartMoving();
|
|
end
|
|
|
|
function Rekt:MovableFrameDragStop()
|
|
local db = Rekt.db.profile;
|
|
db[this.DragID]["xPos"] = this:GetLeft();
|
|
db[this.DragID]["yPos"] = this:GetBottom();
|
|
--Rekt:Print(this:GetLeft() .. " " .. this:GetBottom());
|
|
this:StopMovingOrSizing();
|
|
end
|
|
|
|
--size Functions
|
|
|
|
function Rekt:getFrameSize(which)
|
|
local db = Rekt.db.profile;
|
|
return db[which]["size"];
|
|
end
|
|
|
|
function Rekt:setFrameSize(which, size)
|
|
local db = Rekt.db.profile;
|
|
db[which]["size"] = size;
|
|
|
|
Rekt:MoveTimersStop(which)
|
|
|
|
if not db["locked"] then
|
|
Rekt:ShowMovableFrames();
|
|
end
|
|
end
|
|
|
|
function Rekt:getDRNumSize(which)
|
|
local db = Rekt.db.profile;
|
|
return db[which]["drnumsize"];
|
|
end
|
|
|
|
function Rekt:setDRNumSize(which, size)
|
|
local db = Rekt.db.profile;
|
|
db[which]["size"] = size;
|
|
Rekt:MoveDRTimersStop(which)
|
|
end
|
|
|
|
function Rekt:getColorFrameSize(which)
|
|
local db = Rekt.db.profile;
|
|
return db[which]["colorframesize"];
|
|
end
|
|
|
|
function Rekt:setColorFrameSize(which, size)
|
|
local db = Rekt.db.profile;
|
|
db[which]["colorframesize"] = size;
|
|
|
|
Rekt:MoveTimersStop(which);
|
|
Rekt:ReassignCds(which);
|
|
|
|
if not db["locked"] then
|
|
Rekt:ShowMovableFrames();
|
|
end
|
|
end
|
|
|
|
--Grow Order
|
|
function Rekt:getGrowOrder(which)
|
|
local db = Rekt.db.profile;
|
|
return db[which]["growOrder"];
|
|
end
|
|
|
|
function Rekt:setGrowOrder(which, v)
|
|
local db = Rekt.db.profile;
|
|
db[which]["growOrder"] = v;
|
|
Rekt:MoveTimersStop(which)
|
|
end
|
|
|
|
function Rekt:setDRGrowOrder(which, v)
|
|
local db = Rekt.db.profile;
|
|
db[which]["growOrder"] = v;
|
|
Rekt:MoveDRTimersStop(which)
|
|
end
|
|
|
|
--Sort Order
|
|
function Rekt:getSortOrder(which)
|
|
local db = Rekt.db.profile;
|
|
return db[which]["sortOrder"];
|
|
end
|
|
|
|
function Rekt:setSortOrder(which, v)
|
|
local db = Rekt.db.profile;
|
|
db[which]["sortOrder"] = v;
|
|
Rekt:ReassignCds(which);
|
|
end
|
|
|
|
function Rekt:getTypeSortOrder(which)
|
|
local db = Rekt.db.profile;
|
|
return db["cdtypesortorder"][which];
|
|
end
|
|
|
|
function Rekt:setTypeSortOrder(which, v)
|
|
local db = Rekt.db.profile;
|
|
db["cdtypesortorder"][which] = v;
|
|
Rekt:ReassignCds("target");
|
|
Rekt:ReassignCds("focus");
|
|
end
|
|
|
|
--Num Position functions
|
|
function Rekt:getDRNumPosition(which)
|
|
local db = Rekt.db.profile;
|
|
return db[which]["drnumposition"];
|
|
end
|
|
|
|
function Rekt:setDRNumPosition(which, v)
|
|
local db = Rekt.db.profile;
|
|
db[which]["drnumposition"] = v;
|
|
Rekt:MoveDRTimersStop(which);
|
|
end
|
|
|
|
--Color options
|
|
function Rekt:getColor(part)
|
|
local db = Rekt.db.profile;
|
|
|
|
if not db["color"] then db["color"] = {} end
|
|
|
|
if not db["color"][part] then
|
|
db["color"][part] = {};
|
|
db["color"][part]["r"] = 1;
|
|
db["color"][part]["g"] = 0;
|
|
db["color"][part]["b"] = 0;
|
|
db["color"][part]["a"] = 1;
|
|
end
|
|
|
|
return db["color"][part]["r"], db["color"][part]["g"], db["color"][part]["b"], db["color"][part]["a"];
|
|
end
|
|
|
|
function Rekt:setColor(part, r, g, b, a)
|
|
local db = Rekt.db.profile;
|
|
|
|
if not db["color"][part] then db["color"][part] = {} end
|
|
|
|
db["color"][part]["r"] = r;
|
|
db["color"][part]["g"] = g;
|
|
db["color"][part]["b"] = b;
|
|
db["color"][part]["a"] = a;
|
|
end
|
|
|
|
--Debug settings
|
|
function Rekt:getDebugLevel()
|
|
local db = Rekt.db.profile;
|
|
return db["debugLevel"];
|
|
end
|
|
|
|
function Rekt:setDebugLevel(v)
|
|
local db = Rekt.db.profile;
|
|
db["debugLevel"] = v;
|
|
end
|
|
|
|
function Rekt:getSpellCastDebug()
|
|
local db = Rekt.db.profile;
|
|
return db["spellCastDebug"];
|
|
end
|
|
|
|
function Rekt:setSpellCastDebug(v)
|
|
local db = Rekt.db.profile;
|
|
db["spellCastDebug"] = v;
|
|
end
|
|
|
|
function Rekt:getSpellAuraDebug()
|
|
local db = Rekt.db.profile;
|
|
return db["spellAuraDebug"];
|
|
end
|
|
|
|
function Rekt:setSpellAuraDebug(v)
|
|
local db = Rekt.db.profile;
|
|
db["spellAuraDebug"] = v;
|
|
end
|
|
|
|
function Rekt:getAllCDebug()
|
|
local db = Rekt.db.profile;
|
|
return db["allCDebug"];
|
|
end
|
|
|
|
function Rekt:setAllCDebug(v)
|
|
local db = Rekt.db.profile;
|
|
db["allCDebug"] = v;
|
|
end
|
|
|
|
function Rekt:getSelfCDRegister()
|
|
local db = Rekt.db.profile;
|
|
return db["selfCDRegister"];
|
|
end
|
|
|
|
function Rekt:setSelfCDRegister(v)
|
|
local db = Rekt.db.profile;
|
|
db["selfCDRegister"] = v;
|
|
Rekt:ReassignCds("target");
|
|
Rekt:ReassignCds("focus");
|
|
end
|
|
|
|
function Rekt:getIBSelfCDRegister()
|
|
local db = Rekt.db.profile;
|
|
return db["selfIBCDRegister"];
|
|
end
|
|
|
|
function Rekt:setIBSelfCDRegister(v)
|
|
local db = Rekt.db.profile;
|
|
db["selfIBCDRegister"] = v;
|
|
end |