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.

989 lines
25 KiB

local _;
VUHDO_COMBO_MAX_ENTRIES = 10000;
local floor = floor;
local mod = mod;
local tonumber = tonumber;
local strsub = strsub;
local pairs = pairs;
local format = format;
local GetLocale = GetLocale;
local InCombatLockdown = InCombatLockdown;
local UnitExists = UnitExists;
local sIsNotInChina = GetLocale() ~= "zhCN" and GetLocale() ~= "zhTW" and GetLocale() ~= "koKR";
local sIsManaBar;
local sIsSideBarLeft;
local sIsSideBarRight;
local sShowPanels;
local sIsHideEmptyAndClickThrough;
local sEmpty = { };
local tEmptyColor = { };
local VUHDO_LibSharedMedia;
local VUHDO_getActionPanelOrStub;
local VUHDO_getPanelButtons;
local VUHDO_getHealthBarText;
local VUHDO_getUnitButtonsSafe;
-----------------------------------------------------------------------
--local VUHDO_getNumbersFromString;
local VUHDO_CONFIG = { };
local VUHDO_PANEL_SETUP = { };
local VUHDO_USER_CLASS_COLORS = { };
function VUHDO_guiToolboxInitLocalOverrides()
--VUHDO_getNumbersFromString = _G["VUHDO_getNumbersFromString"];
VUHDO_CONFIG = _G["VUHDO_CONFIG"];
VUHDO_PANEL_SETUP = _G["VUHDO_PANEL_SETUP"];
VUHDO_USER_CLASS_COLORS = _G["VUHDO_USER_CLASS_COLORS"];
VUHDO_LibSharedMedia = _G["VUHDO_LibSharedMedia"];
VUHDO_getActionPanelOrStub = _G["VUHDO_getActionPanelOrStub"];
VUHDO_getPanelButtons = _G["VUHDO_getPanelButtons"];
VUHDO_getHealthBarText = _G["VUHDO_getHealthBarText"];
VUHDO_getUnitButtonsSafe = _G["VUHDO_getUnitButtonsSafe"];
sIsManaBar = VUHDO_INDICATOR_CONFIG["BOUQUETS"]["MANA_BAR"] ~= "";
sIsSideBarLeft = VUHDO_INDICATOR_CONFIG["BOUQUETS"]["SIDE_LEFT"] ~= "";
sIsSideBarRight = VUHDO_INDICATOR_CONFIG["BOUQUETS"]["SIDE_RIGHT"] ~= "";
sShowPanels = VUHDO_CONFIG["SHOW_PANELS"];
sIsHideEmptyAndClickThrough = VUHDO_CONFIG["HIDE_EMPTY_BUTTONS"]
and VUHDO_CONFIG["HIDE_EMPTY_PANELS"]
and VUHDO_CONFIG["LOCK_CLICKS_THROUGH"];
end
------------------------------------------------------------------------
--
function VUHDO_isConfigPanelShowing()
return VUHDO_IS_PANEL_CONFIG and not VUHDO_CONFIG_SHOW_RAID;
end
local VUHDO_isConfigPanelShowing = VUHDO_isConfigPanelShowing;
--
local tUnit;
local function VUHDO_hasPanelVisibleButtons(aPanelNum)
if not sShowPanels or not VUHDO_IS_SHOWN_BY_GROUP then
return false;
elseif not sIsHideEmptyAndClickThrough or VUHDO_isConfigPanelShowing() or VUHDO_isConfigDemoUsers() then
return true;
else
for _, tButton in pairs(VUHDO_getPanelButtons(aPanelNum)) do
tUnit = tButton:GetAttribute("unit");
if not tUnit then
return false;
elseif UnitExists(tUnit) then
return true;
end
end
return false;
end
end
--
function VUHDO_updatePanelVisibility()
for tCnt = 1, 10 do -- VUHDO_MAX_PANELS
if #(VUHDO_PANEL_MODELS[tCnt] or sEmpty) > 0 then
VUHDO_getActionPanelOrStub(tCnt):SetAlpha(VUHDO_hasPanelVisibleButtons(tCnt) and 1 or 0);
end
end
end
--
function VUHDO_mayMoveHealPanels()
return (VUHDO_IS_PANEL_CONFIG or not VUHDO_CONFIG["LOCK_PANELS"])
and (not InCombatLockdown() or not VUHDO_CONFIG["LOCK_IN_FIGHT"]);
end
--
function VUHDO_getComponentPanelNum(aComponent)
return VUHDO_getNumbersFromString(aComponent:GetName(), 1)[1];
end
--
local tAnchorCoords = {
TOPLEFT = function(aPanel) return aPanel:GetLeft(), aPanel:GetTop(); end,
TOP = function(aPanel) return (aPanel:GetRight() + aPanel:GetLeft()) * 0.5, aPanel:GetTop(); end,
BOTTOM = function(aPanel) return (aPanel:GetRight() + aPanel:GetLeft()) * 0.5, aPanel:GetBottom(); end,
LEFT = function(aPanel) return aPanel:GetLeft(), (aPanel:GetBottom() + aPanel:GetTop()) * 0.5; end,
RIGHT = function(aPanel) return aPanel:GetRight(), (aPanel:GetBottom() + aPanel:GetTop()) * 0.5; end,
TOPRIGHT = function(aPanel) return aPanel:GetRight(), aPanel:GetTop(); end,
BOTTOMLEFT = function(aPanel) return aPanel:GetLeft(), aPanel:GetBottom(); end,
BOTTOMRIGHT = function(aPanel) return aPanel:GetRight(), aPanel:GetBottom(); end,
};
function VUHDO_getAnchorCoords(aPanel, anOrientation, aScaleDiff)
local tX, tY = tAnchorCoords[anOrientation](aPanel);
return (tX or 0) / aScaleDiff, (tY or 0) / aScaleDiff;
end
--
function VUHDO_isLooseOrderingShowing(aPanelNum)
return VUHDO_PANEL_SETUP[aPanelNum]["MODEL"]["ordering"] ~= 0 -- VUHDO_ORDERING_STRICT
and (not VUHDO_IS_PANEL_CONFIG or VUHDO_CONFIG_SHOW_RAID);
end
local VUHDO_isLooseOrderingShowing = VUHDO_isLooseOrderingShowing;
--
function VUHDO_isTableHeadersShowing(aPanelNum)
return not VUHDO_isLooseOrderingShowing(aPanelNum)
and VUHDO_PANEL_SETUP[aPanelNum]["SCALING"]["showHeaders"]
and not VUHDO_PANEL_SETUP[aPanelNum]["SCALING"]["alignBottom"];
end
--
function VUHDO_isTableFootersShowing(aPanelNum)
return not VUHDO_isLooseOrderingShowing(aPanelNum)
and VUHDO_PANEL_SETUP[aPanelNum]["SCALING"]["showHeaders"]
and VUHDO_PANEL_SETUP[aPanelNum]["SCALING"]["alignBottom"];
end
--
function VUHDO_isTableHeaderOrFooter(aPanelNum)
return not VUHDO_isLooseOrderingShowing(aPanelNum)
and VUHDO_PANEL_SETUP[aPanelNum]["SCALING"]["showHeaders"];
end
--
function VUHDO_getColoredString(aString, aColor)
if aColor["useText"] then
return format("|cff%02x%02x%02x%s|r", aColor["TR"] * 255, aColor["TG"] * 255, aColor["TB"] * 255, aString);
else
return aString;
end
end
--
function VUHDO_toggleMenu(aPanel)
aPanel:SetShown(not aPanel:IsShown());
end
--
function VUHDO_getPanelNum(aPanel)
return tonumber(strsub(aPanel:GetName(), -2)) or tonumber(strsub(aPanel:GetName(), -1)) or 1;
end
--
function VUHDO_getClassColor(anInfo)
return VUHDO_USER_CLASS_COLORS[anInfo["classId"]];
end
--
function VUHDO_getClassColorByModelId(aModelId)
return VUHDO_USER_CLASS_COLORS[aModelId];
end
--
function VUHDO_getManaBarHeight(aPanelNum)
return sIsManaBar and VUHDO_PANEL_SETUP[aPanelNum]["SCALING"]["manaBarHeight"] or 0;
end
local VUHDO_getManaBarHeight = VUHDO_getManaBarHeight;
--
function VUHDO_getHealthBarHeight(aPanelNum)
return VUHDO_PANEL_SETUP[aPanelNum]["SCALING"]["barHeight"] - VUHDO_getManaBarHeight(aPanelNum);
end
--
function VUHDO_getSideBarWidthLeft(aPanelNum)
return sIsSideBarLeft and VUHDO_PANEL_SETUP[aPanelNum]["SCALING"]["sideLeftWidth"] or 0;
end
--
function VUHDO_getSideBarWidthRight(aPanelNum)
return sIsSideBarRight and VUHDO_PANEL_SETUP[aPanelNum]["SCALING"]["sideRightWidth"] or 0;
end
--
function VUHDO_getHealthBarWidth(aPanelNum)
return VUHDO_PANEL_SETUP[aPanelNum]["SCALING"]["barWidth"]
- VUHDO_getSideBarWidthLeft(aPanelNum) - VUHDO_getSideBarWidthRight(aPanelNum);
end
--
function VUHDO_getDiffColor(aBaseColor, aModColor)
if aModColor["useText"] then
aBaseColor["useText"] = true;
aBaseColor["TR"], aBaseColor["TG"], aBaseColor["TB"], aBaseColor["TO"]
= aModColor["TR"], aModColor["TG"], aModColor["TB"], aModColor["TO"];
end
if aModColor["useBackground"] then
aBaseColor["useBackground"] = true;
aBaseColor["R"], aBaseColor["G"], aBaseColor["B"] = aModColor["R"], aModColor["G"], aModColor["B"];
end
if aModColor["useOpacity"] then
aBaseColor["useOpacity"] = true;
aBaseColor["O"], aBaseColor["TO"] = aModColor["O"], aModColor["TO"];
end
if aModColor["useClassColor"] then
aBaseColor["useClassColor"] = true;
end
return aBaseColor;
end
--
function VUHDO_brightenTextColor(aColor, aSummand)
aColor["TR"], aColor["TG"], aColor["TB"]
= aColor["TR"] + aSummand, aColor["TG"] + aSummand, aColor["TB"] + aSummand;
return aColor;
end
-- Bitmap ist 256*256 pixel mit 16 (4*4) Icons (je 64*64 pixel)
local tLeft, tTop;
function VUHDO_getRaidTargetIconTexture(anIndex)
anIndex = anIndex - 1;
tLeft = anIndex % 4 * 0.25;
tTop = floor(anIndex * 0.25) * 0.25;
return tLeft, tLeft + 0.25, tTop, tTop + 0.25;
end
--
function VUHDO_setRaidTargetIconTexture(aTexture, anIndex)
aTexture:SetTexCoord(VUHDO_getRaidTargetIconTexture(anIndex));
end
-- Liefert sicheren Fontnamen. Falls in LSM nicht (mehr) vorhanden oder
function VUHDO_getFont(aFont)
if (aFont or "") ~= "" then
for _, tFontInfo in pairs(VUHDO_FONTS) do
if aFont == tFontInfo[1] then return aFont; end
end
end
return GameFontNormal:GetFont();
end
--
local VUHDO_BLIZZ_EVENTS = {
"CVAR_UPDATE",
"DISPLAY_SIZE_CHANGED",
"GROUP_ROSTER_UPDATE",
"IGNORELIST_UPDATE",
"INCOMING_RESURRECT_CHANGED",
"INSTANCE_ENCOUNTER_ENGAGE_UNIT",
"MUTELIST_UPDATE",
"PARTY_LEADER_CHANGED",
"PARTY_LFG_RESTRICTED",
"PARTY_LOOT_METHOD_CHANGED",
"PARTY_MEMBER_DISABLE",
"PARTY_MEMBER_ENABLE",
"PLAYER_ENTER_COMBAT",
"PLAYER_LEAVE_COMBAT",
"PLAYER_ENTERING_WORLD",
"PLAYER_FLAGS_CHANGED",
"PLAYER_FOCUS_CHANGED",
"PLAYER_LOGIN",
"PLAYER_ROLES_ASSIGNED",
"PLAYER_SPECIALIZATION_CHANGED",
"PLAYER_TARGET_CHANGED",
"PLAYER_UPDATE_RESTING",
"PLAYTIME_CHANGED",
"RAID_TARGET_UPDATE",
"READY_CHECK",
"READY_CHECK_CONFIRM",
"READY_CHECK_FINISHED",
"RUNE_POWER_UPDATE",
"UI_SCALE_CHANGED",
"UNIT_AURA",
"UNIT_CLASSIFICATION_CHANGED",
"UNIT_CONNECTION",
"UNIT_COMBAT",
"UNIT_COMBO_POINTS",
"UNIT_DISPLAYPOWER",
"UNIT_ENTERED_VEHICLE",
"UNIT_ENTERING_VEHICLE",
"UNIT_EXITED_VEHICLE",
"UNIT_EXITING_VEHICLE",
"UNIT_FACTION",
"UNIT_FLAGS",
"UNIT_HEAL_PREDICTION",
"UNIT_HEALTH",
"UNIT_LEVEL",
"UNIT_MAXHEALTH",
"UNIT_MAXPOWER",
"UNIT_NAME_UPDATE",
"UNIT_OTHER_PARTY_CHANGED",
"UNIT_PET",
"UNIT_PHASE",
"UNIT_PORTRAIT_UPDATE",
"UNIT_POWER_UPDATE",
"UNIT_POWER_BAR_HIDE",
"UNIT_POWER_BAR_SHOW",
"UNIT_POWER_FREQUENT",
"UNIT_TARGETABLE_CHANGED",
"UNIT_THREAT_SITUATION_UPDATE",
"UPDATE_ACTIVE_BATTLEFIELD",
"UPDATE_INSTANCE_INFO",
"UPDATE_SHAPESHIFT_FORM",
"UPDATE_STEALTH",
"VARIABLES_LOADED",
"VOICE_START",
"VOICE_STATUS_UPDATE",
"VOICE_STOP",
};
--
local VUHDO_FIX_EVENTS = {
"UNIT_AURA",
"UNIT_COMBAT",
"UNIT_HEAL_PREDICTION",
"UNIT_HEALTH",
"UNIT_MAXHEALTH",
"UNIT_MAXPOWER",
"UNIT_PET",
"UNIT_POWER_UPDATE",
"UNIT_POWER_FREQUENT",
"UNIT_THREAT_SITUATION_UPDATE",
};
--
local sEventsPerFrame = {};
local sFrameHideParents = {};
local sFrameOrigParents = {};
--
local function VUHDO_hideFrame(aFrame)
if not sFrameHideParents[aFrame] then
local tFrameParent = CreateFrame("Frame");
tFrameParent:Hide();
sFrameHideParents[aFrame] = tFrameParent;
end
if not sFrameOrigParents[aFrame] then
sFrameOrigParents[aFrame] = aFrame:GetParent();
aFrame:SetParent(sFrameHideParents[aFrame]);
end
end
--
local function VUHDO_showFrame(aFrame)
if sFrameOrigParents[aFrame] then
aFrame:SetParent(sFrameOrigParents[aFrame]);
aFrame:Show();
sFrameOrigParents[aFrame] = nil;
else
aFrame:Show();
end
end
--
local function VUHDO_unregisterAndSaveEvents(anIsHide, ...)
local tFrame;
for tCnt = 1, select('#', ...) do
tFrame = select(tCnt, ...);
if tFrame then
if not sEventsPerFrame[tFrame] then
sEventsPerFrame[tFrame] = { };
for tIndex, tEvent in pairs(VUHDO_BLIZZ_EVENTS) do
if (tFrame:IsEventRegistered(tEvent)) then
tinsert(sEventsPerFrame[tFrame], tIndex);
end
end
end
tFrame:UnregisterAllEvents();
if anIsHide then
VUHDO_hideFrame(tFrame);
end
end
end
end
--
local function VUHDO_registerOriginalEvents(anIsShow, ...)
local tFrame;
for tCnt = 1, select('#', ...) do
tFrame = select(tCnt, ...);
if tFrame then
if sEventsPerFrame[tFrame] then
for _, tIndex in pairs(sEventsPerFrame[tFrame]) do
tFrame:RegisterEvent(VUHDO_BLIZZ_EVENTS[tIndex]);
end
for _, tEvent in pairs(VUHDO_FIX_EVENTS) do
tFrame:RegisterEvent(tEvent);
end
else -- must not happen
tFrame:RegisterAllEvents();
end
if anIsShow then
VUHDO_showFrame(tFrame);
end
end
end
end
--
local function VUHDO_hideBlizzRaid()
VUHDO_unregisterAndSaveEvents(true, CompactRaidFrameManager.container);
end
--
local function VUHDO_showBlizzRaid()
VUHDO_registerOriginalEvents(VUHDO_GROUP_TYPE_SOLO ~= VUHDO_getCurrentGroupType(), CompactRaidFrameManager.container);
end
--
local function VUHDO_hideBlizzRaidMgr()
VUHDO_unregisterAndSaveEvents(true, CompactRaidFrameManager);
end
--
local function VUHDO_showBlizzRaidMgr()
VUHDO_registerOriginalEvents(VUHDO_GROUP_TYPE_SOLO ~= VUHDO_getCurrentGroupType(), CompactRaidFrameManager);
end
--
function VUHDO_hideBlizzCompactPartyFrame()
if VUHDO_CONFIG["BLIZZ_UI_HIDE_PARTY"] == 3 and not InCombatLockdown() and CompactPartyFrame and CompactPartyFrame:IsVisible() then
VUHDO_unregisterAndSaveEvents(true, CompactPartyFrame);
end
end
--
local function VUHDO_hideBlizzParty()
if not EditModeManagerFrame:UseRaidStylePartyFrames() then
local tPartyFrame = _G["PartyFrame"];
hooksecurefunc(tPartyFrame, "UpdatePartyFrames",
function()
if not InCombatLockdown() then
_G["PartyFrame"]:HidePartyFrames();
end
end
);
for tPartyMemberFrame in tPartyFrame.PartyMemberFramePool:EnumerateActive() do
VUHDO_unregisterAndSaveEvents(false, tPartyMemberFrame, tPartyMemberFrame.HealthBar, tPartyMemberFrame.ManaBar);
if tPartyMemberFrame.layoutIndex > 0 and UnitExists("party" .. tPartyMemberFrame.layoutIndex) then
VUHDO_hideFrame(tPartyMemberFrame);
end
end
else
if (CompactPartyFrame ~= nil and CompactPartyFrame:IsVisible()) then
VUHDO_unregisterAndSaveEvents(true, CompactPartyFrame);
end
end
end
--
local function VUHDO_showBlizzParty()
if VUHDO_GROUP_TYPE_PARTY ~= VUHDO_getCurrentGroupType() then
return;
end
if not EditModeManagerFrame:UseRaidStylePartyFrames() then
local tPartyFrame = _G["PartyFrame"];
hooksecurefunc(tPartyFrame, "UpdatePartyFrames",
function()
if not InCombatLockdown() then
for tPartyMemberFrame in _G["PartyFrame"].PartyMemberFramePool:EnumerateActive() do
tPartyMemberFrame:Show();
tPartyMemberFrame:UpdateMember();
end
_G["PartyFrame"]:UpdatePartyMemberBackground();
_G["PartyFrame"]:Layout();
end
end
);
for tPartyMemberFrame in tPartyFrame.PartyMemberFramePool:EnumerateActive() do
VUHDO_registerOriginalEvents(false, tPartyMemberFrame, tPartyMemberFrame.HealthBar, tPartyMemberFrame.ManaBar);
if tPartyMemberFrame.layoutIndex > 0 and UnitExists("party" .. tPartyMemberFrame.layoutIndex) then
VUHDO_showFrame(tPartyMemberFrame);
end
end
else
VUHDO_registerOriginalEvents(true, CompactPartyFrame);
end
end
--
local function VUHDO_hideBlizzPlayer()
VUHDO_unregisterAndSaveEvents(true, PlayerFrame, RuneFrame);
VUHDO_unregisterAndSaveEvents(false, PlayerFrameHealthBar, PlayerFrameManaBar);
end
--
local function VUHDO_showBlizzPlayer()
VUHDO_registerOriginalEvents(false, PlayerFrame, PlayerFrameHealthBar, PlayerFrameManaBar);
VUHDO_showFrame(PlayerFrame);
if "DEATHKNIGHT" == VUHDO_PLAYER_CLASS then
VUHDO_registerOriginalEvents(true, RuneFrame);
end
end
--
local function VUHDO_hideBlizzTarget()
VUHDO_unregisterAndSaveEvents(true, TargetFrame, TargetFrameToT, FocusFrameToT);
VUHDO_unregisterAndSaveEvents(false, TargetFrame.TargetFrameContent.TargetFrameContentMain.HealthBar, TargetFrame.TargetFrameContent.TargetFrameContentMain.ManaBar);
ComboFrame:ClearAllPoints();
end
--
local function VUHDO_showBlizzTarget()
VUHDO_registerOriginalEvents(true, TargetFrame, TargetFrameToT, FocusFrameToT);
VUHDO_registerOriginalEvents(false, TargetFrame.TargetFrameContent.TargetFrameContentMain.HealthBar, TargetFrame.TargetFrameContent.TargetFrameContentMain.ManaBar);
ComboFrame:SetPoint("TOPRIGHT", "TargetFrame", "TOPRIGHT", -44, -9);
end
--
local function VUHDO_hideBlizzPet()
VUHDO_unregisterAndSaveEvents(true, PetFrame);
end
--
local function VUHDO_showBlizzPet()
VUHDO_registerOriginalEvents(true, PetFrame);
end
--
local function VUHDO_hideBlizzFocus()
VUHDO_unregisterAndSaveEvents(true, FocusFrame);
VUHDO_unregisterAndSaveEvents(false, FocusFrame.TargetFrameContent.TargetFrameContentMain.HealthBar, FocusFrame.TargetFrameContent.TargetFrameContentMain.ManaBar);
end
--
local function VUHDO_showBlizzFocus()
VUHDO_registerOriginalEvents(true, FocusFrame);
VUHDO_registerOriginalEvents(false, FocusFrame.TargetFrameContent.TargetFrameContentMain.HealthBar, FocusFrame.TargetFrameContent.TargetFrameContentMain.ManaBar);
end
--
function VUHDO_initHideBlizzRaid()
if VUHDO_CONFIG["BLIZZ_UI_HIDE_RAID"] == 3 then VUHDO_hideBlizzRaid(); end
if VUHDO_CONFIG["BLIZZ_UI_HIDE_RAID_MGR"] == 3 then VUHDO_hideBlizzRaidMgr(); end
if VUHDO_CONFIG["BLIZZ_UI_HIDE_PARTY"] == 3 then VUHDO_hideBlizzParty(); end
end
--
function VUHDO_initBlizzFrames()
if (InCombatLockdown()) then
return;
end
if VUHDO_CONFIG["BLIZZ_UI_HIDE_PLAYER"] == 3 then VUHDO_hideBlizzPlayer();
elseif VUHDO_CONFIG["BLIZZ_UI_HIDE_PLAYER"] == 1 then VUHDO_showBlizzPlayer(); end
if VUHDO_CONFIG["BLIZZ_UI_HIDE_TARGET"] == 3 then VUHDO_hideBlizzTarget();
elseif VUHDO_CONFIG["BLIZZ_UI_HIDE_TARGET"] == 1 then VUHDO_showBlizzTarget(); end
if VUHDO_CONFIG["BLIZZ_UI_HIDE_PET"] == 3 then VUHDO_hideBlizzPet();
elseif VUHDO_CONFIG["BLIZZ_UI_HIDE_PET"] == 1 then VUHDO_showBlizzPet(); end
if VUHDO_CONFIG["BLIZZ_UI_HIDE_FOCUS"] == 3 then VUHDO_hideBlizzFocus();
elseif VUHDO_CONFIG["BLIZZ_UI_HIDE_FOCUS"] == 1 then VUHDO_showBlizzFocus(); end
if VUHDO_CONFIG["BLIZZ_UI_HIDE_RAID"] == 3 then VUHDO_hideBlizzRaid();
elseif VUHDO_CONFIG["BLIZZ_UI_HIDE_RAID"] == 1 then VUHDO_showBlizzRaid(); end
if VUHDO_CONFIG["BLIZZ_UI_HIDE_RAID_MGR"] == 3 then VUHDO_hideBlizzRaidMgr();
elseif VUHDO_CONFIG["BLIZZ_UI_HIDE_RAID_MGR"] == 1 then VUHDO_showBlizzRaidMgr(); end
if VUHDO_CONFIG["BLIZZ_UI_HIDE_PARTY"] == 3 then VUHDO_hideBlizzParty();
elseif VUHDO_CONFIG["BLIZZ_UI_HIDE_PARTY"] == 1 then VUHDO_showBlizzParty(); end
end
function VUHDO_initHideBlizzFrames()
if InCombatLockdown() then return; end
if VUHDO_CONFIG["BLIZZ_UI_HIDE_PLAYER"] == 3 then VUHDO_hideBlizzPlayer(); end
if VUHDO_CONFIG["BLIZZ_UI_HIDE_TARGET"] == 3 then VUHDO_hideBlizzTarget(); end
if VUHDO_CONFIG["BLIZZ_UI_HIDE_PET"] == 3 then VUHDO_hideBlizzPet(); end
if VUHDO_CONFIG["BLIZZ_UI_HIDE_FOCUS"] == 3 then VUHDO_hideBlizzFocus(); end
VUHDO_initHideBlizzRaid();
end
--
local tOldX, tOldY;
function VUHDO_isDifferentButtonPoint(aRegion, aPointX, aPointY)
_, _, _, tOldX, tOldY = aRegion:GetPoint();
if tOldX then
tOldX = floor(tOldX + 0.5);
tOldY = floor(tOldY + 0.5);
end
return aPointX ~= tOldX or aPointY ~= tOldY;
end
--
function VUHDO_lnfPatchFont(aComponent, aLabelName)
if not sIsNotInChina then _G[aComponent:GetName() .. aLabelName]:SetFont(VUHDO_OPTIONS_FONT_NAME, 12, ""); end
end
--
function VUHDO_isConfigDemoUsers()
return VUHDO_IS_PANEL_CONFIG and VUHDO_CONFIG_SHOW_RAID and VUHDO_CONFIG_TEST_USERS > 0;
end
--
local tFile;
function VUHDO_setLlcStatusBarTexture(aStatusBar, aTextureName)
tFile = VUHDO_LibSharedMedia:Fetch('statusbar', aTextureName);
if tFile then aStatusBar:SetStatusBarTexture(tFile); end
end
--
local tOurLevel;
function VUHDO_fixFrameLevels(anIsForceUpdateChildren, aFrame, aBaseLevel, ...)
local tCnt = 1;
local tChild = select(tCnt, ...);
aFrame:SetFrameLevel(aBaseLevel);
while tChild do -- Layer components seem to have no name, important for HoT icons.
if tChild:GetName() then
tOurLevel = aBaseLevel + 1 + (tChild["addLevel"] or 0);
if not tChild["vfl"] then
if not VUHDO_isConfigPanelShowing() then
tChild:SetFrameStrata(aFrame:GetFrameStrata());
end
tChild:SetFrameLevel(tOurLevel);
tChild["vfl"] = true;
VUHDO_fixFrameLevels(anIsForceUpdateChildren, tChild, tOurLevel, tChild:GetChildren());
elseif(anIsForceUpdateChildren) then
VUHDO_fixFrameLevels(true, tChild, tOurLevel, tChild:GetChildren());
end
end
tCnt = tCnt + 1;
tChild = select(tCnt, ...);
end
end
--
local tOutline, tShadowAlpha, tColor, tFactor;
function VUHDO_customizeIconText(aParent, aHeight, aLabel, aSetup)
tFactor = aHeight * 0.01;
aLabel:ClearAllPoints();
aLabel:SetPoint(aSetup["ANCHOR"], aParent:GetName(), aSetup["ANCHOR"], tFactor * aSetup["X_ADJUST"], -tFactor * aSetup["Y_ADJUST"]);
tOutline = aSetup["USE_OUTLINE"] and "OUTLINE|" or "";
tOutline = tOutline .. (aSetup["USE_MONO"] and "OUTLINEMONOCHROME" or ""); -- Bugs out in MoP beta
tColor = aSetup["COLOR"];
if tColor then
tShadowAlpha = aSetup["USE_SHADOW"] and tColor["O"] or 0;
aLabel:SetTextColor(VUHDO_textColor(tColor));
aLabel:SetShadowColor(tColor["R"], tColor["G"], tColor["B"], tShadowAlpha);
else
tShadowAlpha = aSetup["USE_SHADOW"] and 1 or 0;
aLabel:SetTextColor(1, 1, 1, 1);
aLabel:SetShadowColor(0, 0, 0, tShadowAlpha);
end
aLabel:SetFont(aSetup["FONT"], tFactor * aSetup["SCALE"], tOutline or "");
aLabel:SetShadowOffset(1, -1);
aLabel:SetText("");
end
--
function VUHDO_setupAllButtonsUnitWatch(anIsRegister)
if InCombatLockdown() then return; end
local tFunc = anIsRegister and RegisterUnitWatch or UnregisterUnitWatch;
for tButton, _ in pairs(VUHDO_BUTTON_CACHE) do
if tButton:IsShown() then
tFunc(tButton);
else
UnregisterUnitWatch(tButton)
end
end
end
--
local function VUHDO_clamp(aValue, aMin, aMax)
return math.min(math.max(aValue, aMin), aMax);
end
--
function VUHDO_clampColor(aR, aG, aB, aO)
return aR and VUHDO_clamp(aR, 0, 1), aG and VUHDO_clamp(aG, 0, 1), aB and VUHDO_clamp(aB, 0, 1), aO and VUHDO_clamp(aO, 0, 1);
end
--
local tOpacity;
function VUHDO_backColorWithFallback(aColor)
if aColor and aColor["useOpacity"] and aColor["O"] then
tOpacity = aColor["O"];
else
tOpacity = 1;
end
if aColor and aColor["useBackground"] and aColor["R"] and aColor["G"] and aColor["B"] then
return aColor["R"], aColor["G"], aColor["B"], tOpacity;
else
return 1, 1, 1, tOpacity;
end
end
--
function VUHDO_backColor(aColor)
return aColor["R"], aColor["G"], aColor["B"], aColor["O"];
end
--
function VUHDO_textColor(aColor)
return aColor["TR"], aColor["TG"], aColor["TB"], aColor["TO"];
end
--
local tCopy = { };
function VUHDO_copyColor(aColor)
if not aColor then return tEmptyColor; end
tCopy["R"], tCopy["G"], tCopy["B"], tCopy["O"] = aColor["R"], aColor["G"], aColor["B"], aColor["O"];
tCopy["TR"], tCopy["TG"], tCopy["TB"], tCopy["TO"] = aColor["TR"], aColor["TG"], aColor["TB"], aColor["TO"];
tCopy["useBackground"], tCopy["useText"], tCopy["useOpacity"] = aColor["useBackground"], aColor["useText"], aColor["useOpacity"];
return tCopy;
end
--
local tSummand;
function VUHDO_brightenColor(aColor, aFactor)
if not aColor then return; end
tSummand = aFactor - 1;
aColor["R"], aColor["G"], aColor["B"] = (aColor["R"] or 0) + tSummand, (aColor["G"] or 0) + tSummand, (aColor["B"] or 0) + tSummand;
return aColor;
end
----------------------------------------
local sFlashFrames = { };
local sIsFlashFrame = { };
--
function VUHDO_UIFrameFlash(aFrame, aFadeInTime, aFadeOutTime, aFlashDuration, anIsShowWhenDone, aFlashInHoldTime, aFlashOutHoldTime)
if sIsFlashFrame[aFrame] then return; end
aFrame.fadeInTime = aFadeInTime;
aFrame.fadeOutTime = aFadeOutTime;
aFrame.flashDuration = aFlashDuration;
aFrame.showWhenDone = anIsShowWhenDone;
aFrame.flashTimer = 0;
aFrame.flashInHoldTime = aFlashInHoldTime;
aFrame.flashOutHoldTime = aFlashOutHoldTime;
sFlashFrames[#sFlashFrames + 1] = aFrame;
sIsFlashFrame[aFrame] = true;
end
--
local tFrame;
local tIndex;
local tFlashTime;
local tAlpha;
function VUHDO_UIFrameFlash_OnUpdate(aTimeDelta)
tIndex = #sFlashFrames;
while sFlashFrames[tIndex] do
tFrame = sFlashFrames[tIndex];
tFrame.flashTimer = tFrame.flashTimer + aTimeDelta;
if tFrame.flashTimer > tFrame.flashDuration and tFrame.flashDuration ~= -1 then
VUHDO_UIFrameFlashStop(tFrame);
else
tFlashTime = tFrame.flashTimer;
tFlashTime = tFlashTime
% (tFrame.fadeInTime + tFrame.fadeOutTime + (tFrame.flashInHoldTime or 0) + (tFrame.flashOutHoldTime or 0));
if tFlashTime < tFrame.fadeInTime then
tAlpha = tFlashTime / tFrame.fadeInTime;
elseif tFlashTime < tFrame.fadeInTime + (tFrame.flashInHoldTime or 0) then
tAlpha = 1;
elseif tFlashTime < tFrame.fadeInTime + (tFrame.flashInHoldTime or 0) + tFrame.fadeOutTime then
tAlpha = 1 - ((tFlashTime - tFrame.fadeInTime - (tFrame.flashInHoldTime or 0)) / tFrame.fadeOutTime);
else
tAlpha = 0;
end
tFrame:SetAlpha(tAlpha);
end
tIndex = tIndex - 1;
end
end
--
function VUHDO_UIFrameFlashStop(aFrame)
if sIsFlashFrame[aFrame] then
tDeleteItem(sFlashFrames, aFrame);
aFrame:SetAlpha(aFrame.showWhenDone and 1 or 0);
aFrame.flashTimer = nil;
sIsFlashFrame[aFrame] = nil;
end
end
--
function VUHDO_indicatorTextCallback(aBarNum, aUnit, aPanelNum, aProviderName, aText, aValue)
for _, tButton in pairs(VUHDO_getUnitButtonsSafe(aUnit)) do
VUHDO_getHealthBarText(tButton, aBarNum):SetText(aText);
end
end