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.

439 lines
12 KiB

local _;
local VUHDO_IS_SMART_CAST = false;
local SecureButton_GetButtonSuffix = SecureButton_GetButtonSuffix;
local InCombatLockdown = InCombatLockdown;
local strlower = strlower;
local strfind = strfind;
local pairs = pairs;
local GameTooltip = GameTooltip;
local sMouseoverUnit = nil;
local VUHDO_updateBouquetsForEvent;
local VUHDO_highlightClusterFor;
local VUHDO_showTooltip;
local VUHDO_hideTooltip;
local VUHDO_resetClusterUnit;
local VUHDO_removeAllClusterHighlights;
local VUHDO_getHealthBar;
local VUHDO_setupSmartCast;
local VUHDO_updateDirectionFrame;
local VUHDO_getCurrentKeyModifierString;
local VUHDO_SPELL_CONFIG;
local VUHDO_SPELL_ASSIGNMENTS;
local VUHDO_getUnitButtonsSafe;
local VUHDO_CONFIG;
local VUHDO_INTERNAL_TOGGLES;
local VUHDO_RAID;
function VUHDO_actionEventHandlerInitLocalOverrides()
VUHDO_updateBouquetsForEvent = _G["VUHDO_updateBouquetsForEvent"];
VUHDO_highlightClusterFor = _G["VUHDO_highlightClusterFor"];
VUHDO_showTooltip = _G["VUHDO_showTooltip"];
VUHDO_hideTooltip = _G["VUHDO_hideTooltip"];
VUHDO_resetClusterUnit = _G["VUHDO_resetClusterUnit"];
VUHDO_removeAllClusterHighlights = _G["VUHDO_removeAllClusterHighlights"];
VUHDO_getHealthBar = _G["VUHDO_getHealthBar"];
VUHDO_setupSmartCast = _G["VUHDO_setupSmartCast"];
VUHDO_updateDirectionFrame = _G["VUHDO_updateDirectionFrame"];
VUHDO_getUnitButtonsSafe = _G["VUHDO_getUnitButtonsSafe"];
VUHDO_getCurrentKeyModifierString = _G["VUHDO_getCurrentKeyModifierString"];
VUHDO_SPELL_CONFIG = _G["VUHDO_SPELL_CONFIG"];
VUHDO_SPELL_ASSIGNMENTS = _G["VUHDO_SPELL_ASSIGNMENTS"];
VUHDO_CONFIG = _G["VUHDO_CONFIG"];
VUHDO_INTERNAL_TOGGLES = _G["VUHDO_INTERNAL_TOGGLES"];
VUHDO_RAID = _G["VUHDO_RAID"];
end
--
function VUHDO_getCurrentMouseOver()
return sMouseoverUnit;
end
--
local function VUHDO_placePlayerIcon(aButton, anIconNo, anIndex)
VUHDO_getBarIconTimer(aButton, anIconNo):SetText("");
VUHDO_getBarIconCounter(aButton, anIconNo):SetText("");
VUHDO_getBarIconCharge(aButton, anIconNo):Hide();
local tFrame = VUHDO_getBarIconFrame(aButton, anIconNo);
tFrame:SetScale(1);
tFrame:Show();
local anIcon = VUHDO_getBarIcon(aButton, anIconNo);
anIcon:ClearAllPoints();
if 2 == anIndex then
anIcon:SetPoint("CENTER", aButton:GetName(), "TOPRIGHT", -5, -10);
else
if anIndex > 2 then anIndex = anIndex - 1; end
local tCol = floor(anIndex * 0.5);
local tRow = anIndex - tCol * 2;
anIcon:SetPoint("TOPLEFT", aButton:GetName(), "TOPLEFT", tCol * 14, -tRow * 14);
end
anIcon:SetWidth(16);
anIcon:SetHeight(16);
anIcon:SetAlpha(1);
anIcon:SetVertexColor(1, 1, 1);
anIcon:Show();
end
--
local tUnitNo, tRank;
local tIsLeader;
local tIsAssist;
local tIsMasterLooter;
function VUHDO_getUnitGroupPrivileges(aUnit)
tIsLeader, tIsAssist, tIsMasterLooter = false, false, false;
if VUHDO_GROUP_TYPE_RAID == VUHDO_getCurrentGroupType() then
tUnitNo = VUHDO_getUnitNo(aUnit);
if tUnitNo then
_, tRank, _, _, _, _, _, _, _, _, tIsMasterLooter = GetRaidRosterInfo(tUnitNo);
if 2 == tRank then tIsLeader = true;
elseif 1 == tRank then tIsAssist = true; end
end
else
tIsLeader = UnitIsGroupLeader(aUnit);
end
return tIsLeader, tIsAssist, tIsMasterLooter;
end
--
local function VUHDO_showPlayerIcons(aButton, aPanelNum)
local tUnit = aButton:GetAttribute("unit");
local tInfo = VUHDO_RAID[tUnit];
if not tInfo then return; end
local tIsLeader, tIsAssist, tIsMasterLooter = VUHDO_getUnitGroupPrivileges(tUnit);
if tIsLeader or tIsAssist then
VUHDO_getOrCreateHotIcon(aButton, 1):SetTexture(
"Interface\\groupframe\\ui-group-" .. (tIsLeader and "leader" or "assistant") .. "icon");
VUHDO_placePlayerIcon(aButton, 1, 0);
end
if tIsMasterLooter then
VUHDO_getOrCreateHotIcon(aButton, 2):SetTexture("Interface\\groupframe\\ui-group-masterlooter");
VUHDO_placePlayerIcon(aButton, 2, 1);
end
local tIcon;
if UnitIsPVP(tUnit) and VUHDO_PANEL_SETUP[aPanelNum]["SCALING"]["barWidth"] > 54 then
tIcon = VUHDO_getOrCreateHotIcon(aButton, 3);
tIcon:SetTexture("Interface\\groupframe\\ui-group-pvp-"
.. ("Alliance" == (UnitFactionGroup(tUnit)) and "alliance" or "horde"));
VUHDO_placePlayerIcon(aButton, 3, 2);
tIcon:SetWidth(32);
tIcon:SetHeight(32);
end
if tInfo["class"] then
tIcon = VUHDO_getOrCreateHotIcon(aButton, 4);
tIcon:SetTexture("Interface\\TargetingFrame\\UI-Classes-Circles");
tIcon:SetTexCoord(unpack(CLASS_ICON_TCOORDS[tInfo["class"]]));
VUHDO_placePlayerIcon(aButton, 4, 3);
end
if tInfo["role"] then
tIcon = VUHDO_getOrCreateHotIcon(aButton, 5);
tIcon:SetTexture("Interface\\LFGFrame\\UI-LFG-ICON-ROLES");
tIcon:SetTexCoord(GetTexCoordsForRole(
VUHDO_ID_MELEE_TANK == tInfo["role"] and "TANK"
or VUHDO_ID_RANGED_HEAL == tInfo["role"] and "HEALER" or "DAMAGER"));
VUHDO_placePlayerIcon(aButton, 5, 5);
end
end
--
function VUHDO_hideAllPlayerIcons()
for tPanelNum = 1, 10 do -- VUHDO_MAX_PANELS
VUHDO_initLocalVars(tPanelNum);
for _, tButton in pairs(VUHDO_getPanelButtons(tPanelNum)) do
if tButton:IsShown() then
VUHDO_initButtonStatics(tButton, tPanelNum);
VUHDO_initAllHotIcons();
end
end
end
VUHDO_removeAllHots();
VUHDO_suspendHoTs(false);
end
--
local function VUHDO_showAllPlayerIcons(aPanel)
VUHDO_suspendHoTs(true);
VUHDO_removeAllHots();
local tPanelNum = VUHDO_getPanelNum(aPanel);
for _, tButton in pairs(VUHDO_getPanelButtons(tPanelNum)) do
if tButton:IsShown() then VUHDO_showPlayerIcons(tButton, tPanelNum); end
end
end
--
local tAllUnits;
local tInfo;
local tOldMouseover;
function VuhDoActionOnEnter(aButton)
VUHDO_showTooltip(aButton);
tOldMouseover = sMouseoverUnit;
sMouseoverUnit = aButton:GetAttribute("unit");
if VUHDO_INTERNAL_TOGGLES[15] then -- VUHDO_UPDATE_MOUSEOVER
VUHDO_updateBouquetsForEvent(tOldMouseover, 15); -- Seems to be ghosting sometimes, -- VUHDO_UPDATE_MOUSEOVER
VUHDO_updateBouquetsForEvent(sMouseoverUnit, 15); -- VUHDO_UPDATE_MOUSEOVER
end
if VUHDO_isShowDirectionArrow() then VUHDO_updateDirectionFrame(aButton); end
if VUHDO_isShowGcd() then
VuhDoGcdStatusBar:ClearAllPoints();
VuhDoGcdStatusBar:SetAllPoints(aButton);
VuhDoGcdStatusBar:SetValue(0);
VuhDoGcdStatusBar:Show();
end
if VUHDO_INTERNAL_TOGGLES[18] and sMouseoverUnit then -- VUHDO_UPDATE_MOUSEOVER_CLUSTER
VUHDO_highlightClusterFor(sMouseoverUnit);
end
if VUHDO_INTERNAL_TOGGLES[20] then -- VUHDO_UPDATE_MOUSEOVER_GROUP
tInfo = VUHDO_RAID[sMouseoverUnit];
if not tInfo then return; end
tAllUnits = VUHDO_GROUPS[tInfo["group"]];
if tAllUnits then
for _, tUnit in pairs(tAllUnits) do
VUHDO_updateBouquetsForEvent(tUnit, 20); -- VUHDO_UPDATE_MOUSEOVER_GROUP
end
end
end
end
--
local tOldMouseover;
local tAllUnits;
local tInfo;
function VuhDoActionOnLeave(aButton)
VUHDO_hideTooltip();
VuhDoDirectionFrame["shown"] = false;
VuhDoDirectionFrame:Hide();
tOldMouseover = sMouseoverUnit;
sMouseoverUnit = nil;
if VUHDO_INTERNAL_TOGGLES[15] then -- VUHDO_UPDATE_MOUSEOVER
VUHDO_updateBouquetsForEvent(tOldMouseover, 15); -- VUHDO_UPDATE_MOUSEOVER
end
if VUHDO_INTERNAL_TOGGLES[18] then -- VUHDO_UPDATE_MOUSEOVER_CLUSTER
VUHDO_resetClusterUnit();
VUHDO_removeAllClusterHighlights();
end
if VUHDO_INTERNAL_TOGGLES[20] then -- VUHDO_UPDATE_MOUSEOVER_GROUP
tInfo = VUHDO_RAID[aButton:GetAttribute("unit")];
if not tInfo then return; end
tAllUnits = VUHDO_GROUPS[tInfo["group"]];
if tAllUnits then
for _, tUnit in pairs(tAllUnits) do
VUHDO_updateBouquetsForEvent(tUnit, 20); -- VUHDO_UPDATE_MOUSEOVER_GROUP
end
end
end
end
--
local tQuota, tHighlightBar;
function VUHDO_highlighterBouquetCallback(aUnit, anIsActive, anIcon, aCurrValue, aCounter, aMaxValue, aColor, aBuffName, aBouquetName)
tQuota = (anIsActive or (aMaxValue or 0) > 1) and 1 or 0;
for _, tButton in pairs(VUHDO_getUnitButtonsSafe(aUnit)) do
tHighlightBar = VUHDO_getHealthBar(tButton, 8);
if aColor then tHighlightBar:SetVuhDoColor(aColor); end
tHighlightBar:SetValue(tQuota);
end
end
--
local tModi;
local tKey;
function VuhDoActionPreClick(aButton, aMouseButton)
tModi = VUHDO_getCurrentKeyModifierString();
tKey = VUHDO_SPELL_ASSIGNMENTS[tModi .. SecureButton_GetButtonSuffix(aMouseButton)];
-- allow VuhDo menu command to be bound even when using Clique compat mode
if VUHDO_CONFIG["IS_CLIQUE_COMPAT_MODE"] and
(strlower(tKey and tKey[3] or "") ~= "menu" or not VUHDO_CONFIG["IS_CLIQUE_PASSTHROUGH"]) then
return;
end
if tKey and strlower(tKey[3]) == "menu" then
if not InCombatLockdown() then
VUHDO_disableActions(aButton);
VUHDO_IS_SMART_CAST = true;
end
VUHDO_setMenuUnit(aButton);
ToggleDropDownMenu(1, nil, VuhDoPlayerTargetDropDown, aButton:GetName(), 0, -5);
elseif tKey and strlower(tKey[3]) == "tell" then
ChatFrame_SendTell(VUHDO_RAID[aButton:GetAttribute("unit")]["fullName"]);
else
if VUHDO_SPELL_CONFIG["smartCastModi"] == "all"
or strfind(tModi, VUHDO_SPELL_CONFIG["smartCastModi"], 1, true) then
VUHDO_IS_SMART_CAST = VUHDO_setupSmartCast(aButton);
else
VUHDO_IS_SMART_CAST = false;
end
end
end
--
function VuhDoActionPostClick(aButton)
if VUHDO_IS_SMART_CAST then
VUHDO_setupAllHealButtonAttributes(aButton, nil, false, false, false, false);
VUHDO_IS_SMART_CAST = false;
end
end
local sIsStatusShown = false;
---
function VUHDO_startMoving(aPanel)
if VuhDoNewOptionsPanelPanel and VuhDoNewOptionsPanelPanel:IsVisible() then
local tNewNum = VUHDO_getComponentPanelNum(aPanel);
if tNewNum ~= DESIGN_MISC_PANEL_NUM then
VuhDoNewOptionsTabbedFrame:Hide();
DESIGN_MISC_PANEL_NUM = tNewNum;
VuhDoNewOptionsTabbedFrame:Show();
VUHDO_redrawAllPanels(false);
return;
end
end
if (IsMouseButtonDown(1) and VUHDO_mayMoveHealPanels()) then
if (not aPanel["isMoving"]) then
aPanel["isMoving"] = true;
if not InCombatLockdown() then aPanel:SetFrameStrata("TOOLTIP"); end
aPanel:StartMoving();
end
elseif IsMouseButtonDown(2) and not InCombatLockdown()
and (not VuhDoNewOptionsPanelPanel or not VuhDoNewOptionsPanelPanel:IsVisible()) then
VUHDO_showAllPlayerIcons(aPanel);
sIsStatusShown = true;
end
end
--
function VUHDO_stopMoving(aPanel)
aPanel:StopMovingOrSizing();
aPanel["isMoving"] = false;
if not InCombatLockdown() then
aPanel:SetFrameStrata(VUHDO_PANEL_SETUP[VUHDO_getPanelNum(aPanel)]["frameStrata"]);
end
VUHDO_savePanelCoords(aPanel);
VUHDO_saveCurrentProfilePanelPosition(VUHDO_getPanelNum(aPanel));
if sIsStatusShown then
sIsStatusShown = false;
VUHDO_hideAllPlayerIcons();
VUHDO_initAllEventBouquets();
end
end
--
local tPosition;
function VUHDO_savePanelCoords(aPanel)
tPosition = VUHDO_PANEL_SETUP[VUHDO_getPanelNum(aPanel)]["POSITION"];
tPosition["orientation"], _, tPosition["relativePoint"], tPosition["x"], tPosition["y"] = aPanel:GetPoint();
tPosition["width"] = aPanel:GetWidth();
tPosition["height"] = aPanel:GetHeight();
end
--
local tButton;
local sDebuffIcon = nil;
function VUHDO_showDebuffTooltip(aDebuffIcon)
if not VUHDO_CONFIG["DEBUFF_TOOLTIP"] then return; end
tButton = aDebuffIcon:GetParent():GetParent():GetParent():GetParent();
if not GameTooltip:IsForbidden() then
GameTooltip:SetOwner(aDebuffIcon, "ANCHOR_RIGHT", 0, 0);
end
if aDebuffIcon["debuffCnt"] then
if not GameTooltip:IsForbidden() then
if aDebuffIcon["isBuff"] then
GameTooltip:SetUnitBuff(tButton["raidid"], aDebuffIcon["debuffCnt"]);
else
GameTooltip:SetUnitDebuff(tButton["raidid"], aDebuffIcon["debuffCnt"]);
end
end
end
sDebuffIcon = aDebuffIcon;
end
--
function VUHDO_hideDebuffTooltip()
sDebuffIcon = nil;
if not GameTooltip:IsForbidden() then
GameTooltip:Hide();
end
end
--
function VUHDO_updateCustomDebuffTooltip()
if sDebuffIcon then VUHDO_showDebuffTooltip(sDebuffIcon); end
end