You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
353 lines
14 KiB
353 lines
14 KiB
local GetSpellBookItemTexture = GetSpellBookItemTexture;
|
|
|
|
local VUHDO_getHealthBar;
|
|
local VUHDO_getBarIcon;
|
|
local VUHDO_getBarIconTimer;
|
|
local VUHDO_getBarIconCounter;
|
|
local VUHDO_getBarIconCharge;
|
|
local VUHDO_getOrCreateCooldown;
|
|
local VUHDO_strempty;
|
|
|
|
local sHotConfig;
|
|
local sHotPos;
|
|
local sBarsPos;
|
|
local sBarColors;
|
|
local sStacksRadio;
|
|
local sIcqqonRadio;
|
|
local sIconRadio;
|
|
local sHotBarConfig;
|
|
local sOrientation;
|
|
|
|
--
|
|
function VUHDO_panelRedrawHotsInitLocalOverrides()
|
|
VUHDO_getHealthBar = _G["VUHDO_getHealthBar"];
|
|
VUHDO_getBarIcon = _G["VUHDO_getBarIcon"];
|
|
VUHDO_getBarIconTimer = _G["VUHDO_getBarIconTimer"];
|
|
VUHDO_getBarIconCounter = _G["VUHDO_getBarIconCounter"];
|
|
VUHDO_getBarIconCharge = _G["VUHDO_getBarIconCharge"];
|
|
VUHDO_getOrCreateCooldown = _G["VUHDO_getOrCreateCooldown"];
|
|
VUHDO_strempty = _G["VUHDO_strempty"];
|
|
|
|
sHotConfig = VUHDO_PANEL_SETUP["HOTS"];
|
|
sBarColors = VUHDO_PANEL_SETUP["BAR_COLORS"];
|
|
sHotPos = sHotConfig["radioValue"];
|
|
sBarsPos = sHotConfig["BARS"]["radioValue"];
|
|
sStacksRadio = sHotConfig["stacksRadioValue"];
|
|
sIconRadio = sHotConfig["iconRadioValue"];
|
|
sHotBarConfig = VUHDO_INDICATOR_CONFIG["CUSTOM"]["HOT_BARS"];
|
|
sOrientation = VUHDO_getStatusbarOrientationString("HOT_BARS");
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local sBarScaling;
|
|
local sHotIconSize, sHotIconOffsets;
|
|
local sHotBarWidth;
|
|
local sHotBarHeight;
|
|
function VUHDO_panelRedrwawHotsInitLocalVars(aPanelNum)
|
|
|
|
sBarScaling = VUHDO_PANEL_SETUP[aPanelNum]["SCALING"];
|
|
|
|
sHotIconSize = sBarScaling["barHeight"] * VUHDO_PANEL_SETUP[aPanelNum]["HOTS"]["size"] * 0.01;
|
|
|
|
if sHotIconSize == 0 then
|
|
sHotIconSize = 0.001;
|
|
end
|
|
|
|
if not sHotIconOffsets then
|
|
sHotIconOffsets = { };
|
|
end
|
|
|
|
local tHotIconSizeTotal = 0;
|
|
|
|
for tCnt = 1, 7 do
|
|
sHotIconOffsets[tCnt] = tHotIconSizeTotal;
|
|
|
|
local tHotIconSize = math.floor((sHotIconSize * (VUHDO_PANEL_SETUP["HOTS"]["SLOTCFG"]["" .. tCnt]["scale"] or 1)) + 0.5);
|
|
|
|
tHotIconSizeTotal = tHotIconSizeTotal + tHotIconSize;
|
|
end
|
|
|
|
if sHotBarConfig["vertical"] then
|
|
sHotBarWidth = sBarScaling["barWidth"] * sHotConfig["BARS"]["width"] * 0.01;
|
|
sHotBarHeight = VUHDO_getHealthBarHeight(aPanelNum);
|
|
else
|
|
sHotBarWidth = VUHDO_getHealthBarWidth(aPanelNum);
|
|
sHotBarHeight = sBarScaling["barHeight"] * sHotConfig["BARS"]["width"] * 0.01;
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local sButton;
|
|
local sHealthBarName;
|
|
function VUHDO_initButtonStaticsHots(aButton, aPanelNum)
|
|
sButton = aButton;
|
|
sHealthBarName = VUHDO_getHealthBar(aButton, 1):GetName();
|
|
end
|
|
|
|
|
|
|
|
--
|
|
function VUHDO_initHotBars()
|
|
local tHotBar;
|
|
|
|
for tCnt = 6, 8 do
|
|
tHotBar = VUHDO_getHealthBar(sButton, tCnt + 3);
|
|
tHotBar:ClearAllPoints();
|
|
|
|
if VUHDO_strempty(sHotConfig["SLOTS"][tCnt]) then
|
|
tHotBar:Hide();
|
|
else
|
|
tHotBar:SetWidth(sHotBarWidth);
|
|
tHotBar:SetHeight(sHotBarHeight);
|
|
tHotBar:SetValue(0);
|
|
tHotBar:SetVuhDoColor(sBarColors["HOT" .. tCnt]);
|
|
tHotBar:SetOrientation(sOrientation);
|
|
tHotBar:SetIsInverted(sHotBarConfig["invertGrowth"]);
|
|
tHotBar:Show();
|
|
end
|
|
end
|
|
|
|
if sHotBarConfig["vertical"] then
|
|
if sBarsPos == 1 then -- edges
|
|
VUHDO_getHealthBar(sButton, 9):SetPoint("LEFT", sHealthBarName, "LEFT", 0, 0);
|
|
VUHDO_getHealthBar(sButton, 10):SetPoint("CENTER", sHealthBarName, "CENTER", 0, 0);
|
|
VUHDO_getHealthBar(sButton, 11):SetPoint("RIGHT", sHealthBarName, "RIGHT", 0, 0);
|
|
elseif sBarsPos == 2 then -- center
|
|
VUHDO_getHealthBar(sButton, 9):SetPoint("CENTER", sHealthBarName, "CENTER", -sHotBarWidth, 0);
|
|
VUHDO_getHealthBar(sButton, 10):SetPoint("CENTER", sHealthBarName, "CENTER", 0, 0);
|
|
VUHDO_getHealthBar(sButton, 11):SetPoint("CENTER", sHealthBarName, "CENTER", sHotBarWidth, 0);
|
|
elseif sBarsPos == 3 then -- top
|
|
VUHDO_getHealthBar(sButton, 9):SetPoint("LEFT", sHealthBarName, "LEFT", 0, 0);
|
|
VUHDO_getHealthBar(sButton, 10):SetPoint("LEFT", sHealthBarName, "LEFT", sHotBarWidth, 0);
|
|
VUHDO_getHealthBar(sButton, 11):SetPoint("LEFT", sHealthBarName, "LEFT", 2 * sHotBarWidth, 0);
|
|
else -- bottom
|
|
VUHDO_getHealthBar(sButton, 9):SetPoint("RIGHT", sHealthBarName, "RIGHT", 0, 0);
|
|
VUHDO_getHealthBar(sButton, 10):SetPoint("RIGHT", sHealthBarName, "RIGHT", -sHotBarWidth, 0);
|
|
VUHDO_getHealthBar(sButton, 11):SetPoint("RIGHT", sHealthBarName, "RIGHT", -2 * sHotBarWidth, 0);
|
|
end
|
|
else
|
|
if sBarsPos == 1 then -- edges
|
|
VUHDO_getHealthBar(sButton, 9):SetPoint("TOP", sHealthBarName, "TOP", 0, 0);
|
|
VUHDO_getHealthBar(sButton, 10):SetPoint("CENTER", sHealthBarName, "CENTER", 0, 0);
|
|
VUHDO_getHealthBar(sButton, 11):SetPoint("BOTTOM", sHealthBarName, "BOTTOM", 0, 0);
|
|
elseif sBarsPos == 2 then -- center
|
|
VUHDO_getHealthBar(sButton, 9):SetPoint("CENTER", sHealthBarName, "CENTER", 0, sHotBarHeight);
|
|
VUHDO_getHealthBar(sButton, 10):SetPoint("CENTER", sHealthBarName, "CENTER", 0, 0);
|
|
VUHDO_getHealthBar(sButton, 11):SetPoint("CENTER", sHealthBarName, "CENTER", 0, -sHotBarHeight);
|
|
elseif sBarsPos == 3 then -- top
|
|
VUHDO_getHealthBar(sButton, 9):SetPoint("TOP", sHealthBarName, "TOP", 0, 0);
|
|
VUHDO_getHealthBar(sButton, 10):SetPoint("TOP", sHealthBarName, "TOP", 0, -sHotBarHeight);
|
|
VUHDO_getHealthBar(sButton, 11):SetPoint("TOP", sHealthBarName, "TOP", 0, -2 * sHotBarHeight);
|
|
else -- bottom
|
|
VUHDO_getHealthBar(sButton, 9):SetPoint("BOTTOM", sHealthBarName, "BOTTOM", 0, 0);
|
|
VUHDO_getHealthBar(sButton, 10):SetPoint("BOTTOM", sHealthBarName, "BOTTOM", 0, sHotBarHeight);
|
|
VUHDO_getHealthBar(sButton, 11):SetPoint("BOTTOM", sHealthBarName, "BOTTOM", 0, 2 * sHotBarHeight);
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local function VUHDO_initHotIcon(anIndex)
|
|
local tHotIcon = VUHDO_getBarIcon(sButton, anIndex);
|
|
local tTimer = VUHDO_getBarIconTimer(sButton, anIndex);
|
|
local tCounter = VUHDO_getBarIconCounter(sButton, anIndex);
|
|
local tChargeIcon = VUHDO_getBarIconCharge(sButton, anIndex);
|
|
local tHotColor = sBarColors["HOT" .. anIndex];
|
|
|
|
tHotIcon:SetAlpha(0);
|
|
|
|
if sIconRadio ~= 1 then
|
|
tHotIcon:SetVertexColor(tHotColor["R"], tHotColor["G"], tHotColor["B"]);
|
|
else
|
|
tHotIcon:SetVertexColor(1, 1, 1);
|
|
end
|
|
|
|
tHotIcon:Show();
|
|
tTimer:SetText("");
|
|
tCounter:SetText("");
|
|
tChargeIcon:Hide();
|
|
|
|
if "CLUSTER" == sHotConfig["SLOTS"][anIndex] then
|
|
VUHDO_customizeIconText(tHotIcon, tHotIcon:GetHeight(), tTimer, VUHDO_CONFIG["CLUSTER"]["TEXT"]);
|
|
tTimer:Show();
|
|
tCounter:Hide();
|
|
tHotIcon:SetTexture("Interface\\AddOns\\VuhDo\\Images\\cluster2");
|
|
else
|
|
if sIconRadio == 4 then -- Text only
|
|
tHotIcon:Hide();
|
|
elseif sIconRadio == 3 then -- Flat
|
|
tHotIcon:SetTexture("Interface\\AddOns\\VuhDo\\Images\\hot_flat_16_16");
|
|
elseif sIconRadio == 2 then -- Glossy
|
|
tHotIcon:SetTexture("Interface\\AddOns\\VuhDo\\Images\\icon_white_square");
|
|
else
|
|
local tHotName = sHotConfig["SLOTS"][anIndex];
|
|
if VUHDO_CAST_ICON_DIFF[tHotName] then
|
|
tHotIcon:SetTexture(VUHDO_CAST_ICON_DIFF[tHotName]);
|
|
else
|
|
local tTexture = GetSpellBookItemTexture(tHotName);
|
|
if tTexture then
|
|
tHotIcon:SetTexture(tTexture);
|
|
end
|
|
end
|
|
end
|
|
|
|
VUHDO_customizeIconText(tHotIcon, tHotIcon:GetHeight(), tTimer, VUHDO_PANEL_SETUP["HOTS"]["TIMER_TEXT"]);
|
|
VUHDO_customizeIconText(tHotIcon, tHotIcon:GetHeight(), tCounter, VUHDO_PANEL_SETUP["HOTS"]["COUNTER_TEXT"]);
|
|
|
|
if sStacksRadio == 2 then -- Counter text
|
|
tHotIcon:SetVertexColor(1, 1, 1);
|
|
tCounter:SetTextColor(tHotColor["TR"], tHotColor["TG"], tHotColor["TB"]);
|
|
tCounter:Show();
|
|
else
|
|
tTimer:SetTextColor(VUHDO_textColor(tHotColor));
|
|
tCounter:Hide();
|
|
end
|
|
|
|
tTimer:SetShown(tHotColor["countdownMode"] ~= 0);
|
|
|
|
tChargeIcon:SetWidth(tHotIcon:GetWidth() + 4);
|
|
tChargeIcon:SetHeight(tHotIcon:GetHeight() + 4);
|
|
tChargeIcon:SetVertexColor(tHotColor["R"] * 2, tHotColor["G"] * 2, tHotColor["B"] * 2);
|
|
tChargeIcon:ClearAllPoints();
|
|
tChargeIcon:SetPoint("TOPLEFT", tHotIcon:GetName(), "TOPLEFT", -2, 2);
|
|
|
|
if tHotColor["isClock"] then
|
|
local tCd = VUHDO_getOrCreateCooldown(VUHDO_getBarIconFrame(sButton, anIndex), sButton, anIndex);
|
|
tCd:SetAllPoints(tHotIcon);
|
|
tCd:SetReverse(true);
|
|
tCd:SetCooldown(GetTime(), 0);
|
|
tCd:SetHideCountdownNumbers(true);
|
|
tCd:SetAlpha(0);
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local function VUHDO_initHotPosOffset(anIndex)
|
|
local tHotIcon = VUHDO_getBarIcon(sButton, anIndex);
|
|
|
|
local tIndex = anIndex - (anIndex < 9 and 1 or 4);
|
|
local tOffset = sHotIconOffsets[tIndex + 1];
|
|
|
|
tHotIcon:ClearAllPoints();
|
|
if sHotPos == 2 then tHotIcon:SetPoint("LEFT", sHealthBarName, "LEFT", tOffset, 0); -- li
|
|
elseif sHotPos == 3 then tHotIcon:SetPoint("RIGHT", sHealthBarName, "RIGHT", -tOffset, 0); -- ri
|
|
elseif sHotPos == 1 then tHotIcon:SetPoint("RIGHT", sButton:GetName(), "LEFT", -tOffset, 0); -- lo
|
|
elseif sHotPos == 4 then tHotIcon:SetPoint("LEFT", sButton:GetName(), "RIGHT", tOffset, 0); -- ro
|
|
elseif sHotPos == 5 then tHotIcon:SetPoint("TOPLEFT", sHealthBarName, "BOTTOMLEFT", tOffset, sHotIconSize * 0.5); -- lb
|
|
elseif sHotPos == 6 then tHotIcon:SetPoint("TOPRIGHT", sHealthBarName, "BOTTOMRIGHT", -tOffset, sHotIconSize * 0.5); -- rb
|
|
elseif sHotPos == 7 then tHotIcon:SetPoint("TOPLEFT", sButton:GetName(), "BOTTOMLEFT", tOffset, 0); -- lu
|
|
elseif sHotPos == 8 then tHotIcon:SetPoint("TOPRIGHT", sButton:GetName(), "BOTTOMRIGHT", -tOffset, 0); -- ru
|
|
elseif sHotPos == 9 then tHotIcon:SetPoint("TOPLEFT", sHealthBarName, "TOPLEFT", tOffset, sBarScaling["barHeight"] / 3); -- la
|
|
elseif sHotPos == 10 then tHotIcon:SetPoint("TOPLEFT", sHealthBarName, "TOPLEFT", tOffset, 0); -- lu corner
|
|
elseif sHotPos == 12 then tHotIcon:SetPoint("BOTTOMLEFT", sHealthBarName, "BOTTOMLEFT", tOffset, 0); -- lb corner
|
|
elseif sHotPos == 11 then tHotIcon:SetPoint("BOTTOMRIGHT", sHealthBarName, "BOTTOMRIGHT", -tOffset, 0); -- rb corner
|
|
elseif sHotPos == 13 then tHotIcon:SetPoint("BOTTOMLEFT", sButton:GetName(), "BOTTOMLEFT", tOffset, 0); -- lb
|
|
elseif sHotPos == 14 then tHotIcon:SetPoint("BOTTOMRIGHT", sButton:GetName(), "BOTTOMRIGHT", -tOffset, 0); -- rb
|
|
end
|
|
|
|
tHotIcon:SetWidth(sHotIconSize * (VUHDO_PANEL_SETUP["HOTS"]["SLOTCFG"]["" .. anIndex]["scale"] or 1));
|
|
tHotIcon:SetHeight(sHotIconSize * (VUHDO_PANEL_SETUP["HOTS"]["SLOTCFG"]["" .. anIndex]["scale"] or 1));
|
|
VUHDO_getBarIconFrame(sButton, anIndex):SetScale(1);
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local function VUHDO_initHotPosSides(anIndex)
|
|
local tHotIcon = VUHDO_getBarIcon(sButton, anIndex);
|
|
local tIsBothBottom = sHotConfig["SLOTS"][4] ~= nil and sHotConfig["SLOTS"][5] ~= nil;
|
|
local tIsBothTop = sHotConfig["SLOTS"][2] ~= nil and sHotConfig["SLOTS"][9] ~= nil;
|
|
tHotIcon:ClearAllPoints();
|
|
|
|
if anIndex == 1 then
|
|
tHotIcon:SetPoint("LEFT", sHealthBarName, "LEFT", 0, 0);
|
|
elseif anIndex == 2 then
|
|
if tIsBothTop then tHotIcon:SetPoint("TOP", sHealthBarName, "TOP", -sBarScaling["barWidth"] * 0.2, 0);
|
|
else tHotIcon:SetPoint("TOP", sHealthBarName, "TOP", 0, 0); end
|
|
elseif anIndex == 9 then
|
|
if tIsBothTop then tHotIcon:SetPoint("TOP", sHealthBarName, "TOP", sBarScaling["barWidth"] * 0.2, 0);
|
|
else tHotIcon:SetPoint("TOP", sHealthBarName, "TOP", 0, 0); end
|
|
elseif anIndex == 3 then
|
|
tHotIcon:SetPoint("RIGHT", sHealthBarName, "RIGHT", 0, 0);
|
|
elseif anIndex == 4 then
|
|
if tIsBothBottom then tHotIcon:SetPoint("BOTTOM", sHealthBarName, "BOTTOM", sBarScaling["barWidth"] * 0.2, 0);
|
|
else tHotIcon:SetPoint("BOTTOM", sHealthBarName, "BOTTOM", 0, 0); end
|
|
elseif anIndex == 5 then
|
|
if tIsBothBottom then tHotIcon:SetPoint("BOTTOM", sHealthBarName, "BOTTOM", -sBarScaling["barWidth"] * 0.2, 0);
|
|
else tHotIcon:SetPoint("BOTTOM", sHealthBarName, "BOTTOM", 0, 0); end
|
|
elseif anIndex == 10 then
|
|
tHotIcon:SetPoint("CENTER", sHealthBarName, "CENTER", 0, 0);
|
|
end
|
|
|
|
tHotIcon:SetWidth(sHotIconSize * 0.5);
|
|
tHotIcon:SetHeight(sHotIconSize * 0.5);
|
|
VUHDO_getBarIconFrame(sButton, anIndex):SetScale(VUHDO_PANEL_SETUP["HOTS"]["SLOTCFG"]["" .. anIndex]["scale"] or 1);
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local function VUHDO_initHotPosEdges(anIndex)
|
|
local tHotIcon = VUHDO_getBarIcon(sButton, anIndex);
|
|
tHotIcon:ClearAllPoints();
|
|
|
|
if anIndex == 1 then tHotIcon:SetPoint("TOPLEFT", sHealthBarName, "TOPLEFT", 0, 0);
|
|
elseif anIndex == 2 then tHotIcon:SetPoint("TOPRIGHT", sHealthBarName, "TOPRIGHT", 0, 0);
|
|
elseif anIndex == 3 then tHotIcon:SetPoint("BOTTOMLEFT", sHealthBarName, "BOTTOMLEFT", 0, 0);
|
|
elseif anIndex == 4 then tHotIcon:SetPoint("BOTTOMRIGHT", sHealthBarName, "BOTTOMRIGHT", 0, 0);
|
|
elseif anIndex == 5 then tHotIcon:SetPoint("BOTTOM", sHealthBarName, "BOTTOM", 0, 0);
|
|
elseif anIndex == 9 then tHotIcon:SetPoint("TOP", sHealthBarName, "TOP", 0, 0);
|
|
elseif anIndex == 10 then tHotIcon:SetPoint("CENTER", sHealthBarName, "CENTER", 0, 0);
|
|
end
|
|
|
|
tHotIcon:SetWidth(sHotIconSize * 0.5);
|
|
tHotIcon:SetHeight(sHotIconSize * 0.5);
|
|
VUHDO_getBarIconFrame(sButton, anIndex):SetScale(VUHDO_PANEL_SETUP["HOTS"]["SLOTCFG"]["" .. anIndex]["scale"] or 1);
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local tBarIcon;
|
|
local function VUHDO_initAndPosHotIcon(anIndex, aPosFunction)
|
|
if not VUHDO_strempty(sHotConfig["SLOTS"][anIndex]) and sHotIconSize > 1 then
|
|
VUHDO_getOrCreateHotIcon(sButton, anIndex);
|
|
aPosFunction(anIndex);
|
|
VUHDO_initHotIcon(anIndex);
|
|
else
|
|
tBarIcon = VUHDO_getBarIcon(sButton, anIndex);
|
|
if tBarIcon then
|
|
tBarIcon:Hide();
|
|
VUHDO_getBarIconTimer(sButton, anIndex):Hide();
|
|
VUHDO_getBarIconCounter(sButton, anIndex):Hide();
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--
|
|
function VUHDO_initAllHotIcons()
|
|
local tPosFunction;
|
|
|
|
tPosFunction = 20 == sHotPos and VUHDO_initHotPosSides
|
|
or 21 == sHotPos and VUHDO_initHotPosEdges or VUHDO_initHotPosOffset;
|
|
|
|
for tCnt = 1, 5 do
|
|
VUHDO_initAndPosHotIcon(tCnt, tPosFunction);
|
|
end
|
|
for tCnt = 9, 10 do
|
|
VUHDO_initAndPosHotIcon(tCnt, tPosFunction);
|
|
end
|
|
end
|
|
|