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.
358 lines
10 KiB
358 lines
10 KiB
local VUHDO_IN_RAID_TARGETS = { };
|
|
VUHDO_IN_RAID_TARGET_BUTTONS = { };
|
|
local VUHDO_IN_RAID_TARGET_BUTTONS = VUHDO_IN_RAID_TARGET_BUTTONS;
|
|
local VUHDO_TOT_GUIDS = { };
|
|
|
|
|
|
-------------------------------------------------
|
|
local UnitClass = UnitClass;
|
|
local UnitPowerType = UnitPowerType;
|
|
-- Disable local alias so function can be overloaded by Velhari Health Fix addon
|
|
--local UnitHealthMax = UnitHealthMax;
|
|
local UnitHealth = UnitHealth;
|
|
local UnitName = UnitName;
|
|
local UnitPower = UnitPower;
|
|
local UnitPowerMax = UnitPowerMax;
|
|
local UnitIsDeadOrGhost = UnitIsDeadOrGhost;
|
|
local UnitIsConnected = UnitIsConnected;
|
|
local UnitIsUnit = UnitIsUnit;
|
|
local UnitExists = UnitExists;
|
|
local UnitCreatureType = UnitCreatureType;
|
|
local strfind = strfind;
|
|
local gsub = gsub;
|
|
local GetRaidTargetIndex = GetRaidTargetIndex;
|
|
local tonumber = tonumber;
|
|
local pairs = pairs;
|
|
local tostring = tostring;
|
|
local twipe = table.wipe;
|
|
local _;
|
|
|
|
|
|
local VUHDO_CUSTOM_INFO;
|
|
local VUHDO_CLASS_IDS;
|
|
|
|
local VUHDO_getHealthBar;
|
|
local VUHDO_customizeText;
|
|
local VUHDO_setRaidTargetIconTexture
|
|
local VUHDO_RAID;
|
|
local VUHDO_getUnitButtons;
|
|
local VUHDO_getTargetButton;
|
|
local VUHDO_getTotButton;
|
|
local VUHDO_PANEL_SETUP;
|
|
local VUHDO_getTargetBarRoleIcon;
|
|
local VUHDO_POWER_TYPE_COLORS;
|
|
local VUHDO_BUTTON_CACHE;
|
|
local VUHDO_getUnitZoneName;
|
|
local VUHDO_getDisplayUnit;
|
|
local VUHDO_textColor;
|
|
local VUHDO_isTargetInRange;
|
|
|
|
local sOOROpacity;
|
|
|
|
function VUHDO_customTargetInitLocalOverrides()
|
|
VUHDO_CUSTOM_INFO = _G["VUHDO_CUSTOM_INFO"];
|
|
VUHDO_CLASS_IDS = _G["VUHDO_CLASS_IDS"];
|
|
|
|
VUHDO_getHealthBar = _G["VUHDO_getHealthBar"];
|
|
VUHDO_customizeText = _G["VUHDO_customizeText"];
|
|
VUHDO_setRaidTargetIconTexture = _G["VUHDO_setRaidTargetIconTexture"];
|
|
VUHDO_RAID = _G["VUHDO_RAID"];
|
|
VUHDO_getUnitButtons = _G["VUHDO_getUnitButtons"];
|
|
VUHDO_getTargetButton = _G["VUHDO_getTargetButton"];
|
|
VUHDO_getTotButton = _G["VUHDO_getTotButton"];
|
|
VUHDO_BUTTON_CACHE = _G["VUHDO_BUTTON_CACHE"];
|
|
VUHDO_PANEL_SETUP = _G["VUHDO_PANEL_SETUP"];
|
|
VUHDO_getTargetBarRoleIcon = _G["VUHDO_getTargetBarRoleIcon"];
|
|
VUHDO_POWER_TYPE_COLORS = _G["VUHDO_POWER_TYPE_COLORS"];
|
|
VUHDO_getUnitZoneName = _G["VUHDO_getUnitZoneName"];
|
|
VUHDO_getDisplayUnit = _G["VUHDO_getDisplayUnit"];
|
|
VUHDO_textColor = _G["VUHDO_textColor"];
|
|
VUHDO_isTargetInRange = _G["VUHDO_isTargetInRange"];
|
|
|
|
if VUHDO_PANEL_SETUP["BAR_COLORS"]["OUTRANGED"]["useOpacity"] then
|
|
sOOROpacity = VUHDO_PANEL_SETUP["BAR_COLORS"]["OUTRANGED"]["O"];
|
|
else
|
|
sOOROpacity = 1;
|
|
end
|
|
end
|
|
------------------------------------------------------------------
|
|
|
|
|
|
--
|
|
local tManaBar;
|
|
local tInfo;
|
|
local function VUHDO_customizeManaBar(aButton)
|
|
|
|
_, tInfo = VUHDO_getDisplayUnit(aButton);
|
|
|
|
if tInfo["connected"] then
|
|
tManaBar = VUHDO_getHealthBar(aButton, 2);
|
|
tManaBar:SetValue(tInfo["powermax"] < 2 and 0 or tInfo["power"] / tInfo["powermax"]); -- Some addons return 1 mana-max instead of zero
|
|
tManaBar:SetVuhDoColor(VUHDO_POWER_TYPE_COLORS[tInfo["powertype"]]);
|
|
else
|
|
VUHDO_getHealthBar(aButton, 2):SetValue(0);
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local tInfo;
|
|
local tLocalClass, tClassName;
|
|
local tPowerType;
|
|
local tName;
|
|
local function VUHDO_fillCustomInfo(aUnit)
|
|
tLocalClass, tClassName = UnitClass(aUnit);
|
|
tPowerType = UnitPowerType(aUnit);
|
|
tName = UnitName(aUnit);
|
|
|
|
tInfo = VUHDO_CUSTOM_INFO;
|
|
tInfo["healthmax"] = UnitHealthMax(aUnit);
|
|
tInfo["health"] = UnitHealth(aUnit);
|
|
tInfo["name"] = tName;
|
|
tInfo["unit"] = aUnit;
|
|
tInfo["class"] = tClassName;
|
|
tInfo["powertype"] = tonumber(tPowerType);
|
|
tInfo["power"] = UnitPower(aUnit);
|
|
tInfo["powermax"] = UnitPowerMax(aUnit);
|
|
tInfo["dead"] = UnitIsDeadOrGhost(aUnit);
|
|
tInfo["connected"] = UnitIsConnected(aUnit);
|
|
if tLocalClass == tName then
|
|
tInfo["className"] = UnitCreatureType(aUnit) or "";
|
|
else
|
|
tInfo["className"] = tLocalClass or "";
|
|
end
|
|
tInfo["classId"] = VUHDO_CLASS_IDS[tClassName];
|
|
tInfo["fullName"] = tName;
|
|
tInfo["zone"], tInfo["map"] = (VUHDO_RAID["player"] or { })["zone"], (VUHDO_RAID["player"] or { })["map"];
|
|
tInfo["fixResolveId"] = nil;
|
|
|
|
tInfo["raidIcon"] = GetRaidTargetIndex(aUnit);
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local tBar;
|
|
local tQuota;
|
|
local function VUHDO_targetHealthBouquetCallback(aButton, aUnit, anIsActive, anIcon, aCurrValue, aCounter, aMaxValue, aColor, aBuffName, aBouquetName)
|
|
|
|
tQuota = anIsActive and (aMaxValue or 0) > 0
|
|
and aCurrValue / aMaxValue or 0;
|
|
|
|
if tQuota > 0 then
|
|
tBar = VUHDO_getHealthBar(aButton, 1);
|
|
tBar:SetValue(tQuota);
|
|
tBar:SetVuhDoColor(aColor);
|
|
VUHDO_getBarText(tBar):SetTextColor(VUHDO_textColor(aColor));
|
|
VUHDO_getLifeText(tBar):SetTextColor(VUHDO_textColor(aColor));
|
|
aButton:SetAlpha(1);
|
|
else
|
|
aButton:SetAlpha(0);
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local tTexture;
|
|
local tIconIdx;
|
|
function VUHDO_customizeTargetBar(aButton, aUnit, anIsInRange)
|
|
VUHDO_CUSTOM_INFO["range"] = anIsInRange;
|
|
VUHDO_invokeCustomBouquet(aButton, aUnit, VUHDO_RAID[aUnit] or VUHDO_CUSTOM_INFO, VUHDO_I18N_DEF_BOUQUET_TARGET_HEALTH, VUHDO_targetHealthBouquetCallback);
|
|
VUHDO_customizeText(aButton, 1, true); -- VUHDO_UPDATE_ALL
|
|
VUHDO_customizeManaBar(aButton, true);
|
|
|
|
tIconIdx = GetRaidTargetIndex(aUnit);
|
|
if not VUHDO_PANEL_SETUP[VUHDO_BUTTON_CACHE[aButton]]["RAID_ICON"]["show"]
|
|
or not VUHDO_PANEL_SETUP["RAID_ICON_FILTER"][tIconIdx] then
|
|
tIconIdx = nil;
|
|
end
|
|
|
|
if tIconIdx then
|
|
tTexture = VUHDO_getTargetBarRoleIcon(aButton, 50);
|
|
VUHDO_setRaidTargetIconTexture(tTexture, tIconIdx);
|
|
tTexture:Show();
|
|
else
|
|
VUHDO_getTargetBarRoleIcon(aButton, 50):Hide();
|
|
end
|
|
end
|
|
local VUHDO_customizeTargetBar = VUHDO_customizeTargetBar;
|
|
|
|
|
|
|
|
-- Wir merken uns die Target-Buttons, wenn das Ziel im Raid ist,
|
|
-- um Gesundheitsupdates mit dem regul�ren Mechanismus durchzuf�hren
|
|
-- die Target-Buttons sind also durch den Target-Namen indiziert.
|
|
local tName;
|
|
local function VUHDO_rememberTargetButton(aTargetUnit, aButton)
|
|
for tUnit, tInfo in pairs(VUHDO_RAID) do
|
|
if UnitIsUnit(tUnit, aTargetUnit) then
|
|
tName = tInfo["name"];
|
|
if not VUHDO_IN_RAID_TARGET_BUTTONS[tName] then
|
|
VUHDO_IN_RAID_TARGET_BUTTONS[tName] = { };
|
|
end
|
|
|
|
VUHDO_IN_RAID_TARGET_BUTTONS[tName][aButton] = aButton;
|
|
VUHDO_IN_RAID_TARGETS[aTargetUnit] = tName;
|
|
break;
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
-- L�sche alle Target-Buttons der Person, deren Ziel sich ge�ndert hat
|
|
-- Wobei die Buttons mit dem Namen des TARGETS indiziert sind, welchen
|
|
-- wir uns VUHDO_IN_RAID_TARGETS aber gemerkt haben
|
|
local tName;
|
|
local function VUHDO_forgetTargetButton(aTargetUnit, aButton)
|
|
tName = VUHDO_IN_RAID_TARGETS[aTargetUnit];
|
|
if tName then
|
|
if not VUHDO_IN_RAID_TARGET_BUTTONS[tName] then
|
|
VUHDO_IN_RAID_TARGET_BUTTONS[tName] = { };
|
|
end
|
|
VUHDO_IN_RAID_TARGET_BUTTONS[tName][aButton] = nil;
|
|
end
|
|
end
|
|
|
|
|
|
--
|
|
local sTargetSourceUnits = {};
|
|
local sUnitTargetsUnits = {};
|
|
local sUnitTotUnits = {};
|
|
|
|
--
|
|
local tTargetButton, tTotButton;
|
|
local tAllButtons;
|
|
local tTarget;
|
|
local tTargetOfTarget;
|
|
function VUHDO_updateTargetBars(aUnit)
|
|
if strfind(aUnit, "target", 1, true) and aUnit ~= "target" then
|
|
if not sTargetSourceUnits[aUnit] then
|
|
sTargetSourceUnits[aUnit] = gsub(aUnit, "target", "");
|
|
end
|
|
aUnit = sTargetSourceUnits[aUnit];
|
|
end
|
|
|
|
tAllButtons = VUHDO_getUnitButtons(aUnit);
|
|
if not tAllButtons then return; end
|
|
|
|
if not sUnitTargetsUnits[aUnit] then
|
|
sUnitTargetsUnits[aUnit] = aUnit .. "target";
|
|
end
|
|
tTarget = sUnitTargetsUnits[aUnit];
|
|
|
|
if not sUnitTotUnits[tTarget] then
|
|
sUnitTotUnits[tTarget] = tTarget .. "target";
|
|
end
|
|
tTargetOfTarget = sUnitTotUnits[tTarget];
|
|
|
|
for _, tButton in pairs(tAllButtons) do
|
|
VUHDO_forgetTargetButton(tTarget, VUHDO_getTargetButton(tButton));
|
|
VUHDO_forgetTargetButton(tTargetOfTarget, VUHDO_getTotButton(tButton));
|
|
end
|
|
|
|
VUHDO_IN_RAID_TARGETS[tTarget] = nil;
|
|
VUHDO_IN_RAID_TARGETS[tTargetOfTarget] = nil;
|
|
|
|
if not UnitExists(tTarget) then
|
|
for _, tButton in pairs(tAllButtons) do
|
|
VUHDO_getTargetButton(tButton):SetAlpha(0);
|
|
VUHDO_getTotButton(tButton):SetAlpha(0);
|
|
end
|
|
|
|
return;
|
|
end
|
|
|
|
-- Target
|
|
VUHDO_fillCustomInfo(tTarget);
|
|
|
|
for _, tButton in pairs(tAllButtons) do
|
|
if VUHDO_PANEL_SETUP[VUHDO_BUTTON_CACHE[tButton]]["SCALING"]["showTarget"] then
|
|
tTargetButton = VUHDO_getTargetButton(tButton);
|
|
VUHDO_customizeTargetBar(tTargetButton, tTarget, VUHDO_isTargetInRange(tTarget));
|
|
tTargetButton:SetAlpha(1);
|
|
VUHDO_rememberTargetButton(tTarget, tTargetButton);
|
|
end
|
|
end
|
|
|
|
-- Target-of-target
|
|
if not UnitExists(tTargetOfTarget) then
|
|
for _, tButton in pairs(tAllButtons) do
|
|
VUHDO_getTotButton(tButton):SetAlpha(0);
|
|
end
|
|
return;
|
|
end
|
|
|
|
VUHDO_fillCustomInfo(tTargetOfTarget);
|
|
|
|
for _, tButton in pairs(tAllButtons) do
|
|
if VUHDO_PANEL_SETUP[VUHDO_BUTTON_CACHE[tButton]]["SCALING"]["showTot"] then
|
|
tTotButton = VUHDO_getTotButton(tButton);
|
|
VUHDO_customizeTargetBar(tTotButton, tTargetOfTarget, VUHDO_isTargetInRange(tTargetOfTarget));
|
|
tTotButton:SetAlpha(1);
|
|
VUHDO_rememberTargetButton(tTargetOfTarget, tTotButton);
|
|
end
|
|
end
|
|
end
|
|
local VUHDO_updateTargetBars = VUHDO_updateTargetBars;
|
|
|
|
|
|
|
|
--
|
|
function VUHDO_rebuildTargets()
|
|
if not VUHDO_INTERNAL_TOGGLES[22] then return; end-- VUHDO_UPDATE_UNIT_TARGET
|
|
|
|
twipe(VUHDO_IN_RAID_TARGETS);
|
|
twipe(VUHDO_IN_RAID_TARGET_BUTTONS);
|
|
twipe(VUHDO_TOT_GUIDS);
|
|
|
|
for tUnit, _ in pairs(VUHDO_RAID) do
|
|
VUHDO_updateTargetBars(tUnit);
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local tTotUnit, tGuid;
|
|
local tAllButtons;
|
|
local function VUHDO_updateTargetHealth(aUnit, aTargetUnit)
|
|
tAllButtons = VUHDO_getUnitButtons(aUnit);
|
|
if not tAllButtons then return; end
|
|
|
|
if not VUHDO_IN_RAID_TARGETS[aTargetUnit] then
|
|
VUHDO_fillCustomInfo(aTargetUnit);
|
|
for _, tButton in pairs(tAllButtons) do
|
|
VUHDO_customizeTargetBar(VUHDO_getTargetButton(tButton), aTargetUnit, VUHDO_isTargetInRange(aTargetUnit));
|
|
end
|
|
end
|
|
|
|
if not sUnitTotUnits[aTargetUnit] then
|
|
sUnitTotUnits[aTargetUnit] = aTargetUnit .. "target";
|
|
end
|
|
tTotUnit = sUnitTotUnits[tTarget];
|
|
|
|
tGuid = UnitGUID(tTotUnit);
|
|
if VUHDO_TOT_GUIDS[aUnit] ~= tGuid then
|
|
VUHDO_updateTargetBars(aUnit);
|
|
VUHDO_TOT_GUIDS[aUnit] = tGuid;
|
|
elseif VUHDO_IN_RAID_TARGETS[tTotUnit] == nil and UnitExists(tTotUnit) then
|
|
VUHDO_fillCustomInfo(tTotUnit);
|
|
for _, tButton in pairs(tAllButtons) do
|
|
VUHDO_customizeTargetBar(VUHDO_getTotButton(tButton), tTotUnit, VUHDO_isTargetInRange(tTotUnit));
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--
|
|
function VUHDO_updateAllOutRaidTargetButtons()
|
|
for tUnit, tInfo in pairs(VUHDO_RAID) do
|
|
if UnitExists(tInfo["targetUnit"]) then
|
|
VUHDO_updateTargetHealth(tUnit, tInfo["targetUnit"]);
|
|
end
|
|
end
|
|
end
|
|
|