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

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