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.
150 lines
4.1 KiB
150 lines
4.1 KiB
|
2 years ago
|
--local _ = _;
|
||
|
|
local pairs = pairs;
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
local VUHDO_RAID;
|
||
|
|
|
||
|
|
function VUHDO_textProviderHandlersInitLocalOverrides()
|
||
|
|
VUHDO_RAID = _G["VUHDO_RAID"];
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
VUHDO_TEXT_PROVIDER_COMBO_MODEL = { };
|
||
|
|
local VUHDO_REGISTERED_PROVIDERS = { };
|
||
|
|
setmetatable(VUHDO_REGISTERED_PROVIDERS, VUHDO_META_NEW_ARRAY);
|
||
|
|
local VUHDO_TEXT_INDICATOR_PANEL_NUMS = { };
|
||
|
|
local VUHDO_INTERESTED_PROVIDERS = { };
|
||
|
|
setmetatable(VUHDO_INTERESTED_PROVIDERS, VUHDO_META_NEW_ARRAY);
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local function VUHDO_isTextProviderInterestedInEvent(aProviderName, anEventType)
|
||
|
|
|
||
|
|
if not VUHDO_INTERESTED_PROVIDERS[aProviderName][anEventType] then
|
||
|
|
VUHDO_INTERESTED_PROVIDERS[aProviderName][anEventType] =
|
||
|
|
VUHDO_tableGetKeyFromValue(VUHDO_TEXT_PROVIDERS[aProviderName]["interests"], anEventType) ~= nil
|
||
|
|
and 1 or 0;
|
||
|
|
end
|
||
|
|
|
||
|
|
return 1 == VUHDO_INTERESTED_PROVIDERS[aProviderName][anEventType] or 1 == anEventType ; -- VUHDO_UPDATE_ALL
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local tInfo;
|
||
|
|
local tText, tValue, tMaxValue;
|
||
|
|
local tEmpty = { };
|
||
|
|
function VUHDO_updateAllTextIndicatorsForEvent(aUnit, anEventType)
|
||
|
|
tInfo = (VUHDO_RAID or tEmpty)[aUnit];
|
||
|
|
if tInfo then
|
||
|
|
|
||
|
|
for tProviderName, tAllIndicators in pairs(VUHDO_REGISTERED_PROVIDERS) do
|
||
|
|
if VUHDO_isTextProviderInterestedInEvent(tProviderName, anEventType) then
|
||
|
|
tValue, tMaxValue = VUHDO_TEXT_PROVIDERS[tProviderName]["calculator"](tInfo);
|
||
|
|
tText = VUHDO_TEXT_PROVIDERS[tProviderName]["validator"](tInfo, tValue, tMaxValue);
|
||
|
|
|
||
|
|
for tIndicatorName, tFunction in pairs(tAllIndicators) do
|
||
|
|
tFunction(aUnit, VUHDO_TEXT_INDICATOR_PANEL_NUMS[tIndicatorName], tProviderName, tText, tValue);
|
||
|
|
end
|
||
|
|
|
||
|
|
end
|
||
|
|
end
|
||
|
|
elseif aUnit then
|
||
|
|
|
||
|
|
for tProviderName, tAllIndicators in pairs(VUHDO_REGISTERED_PROVIDERS) do
|
||
|
|
if VUHDO_isTextProviderInterestedInEvent(tProviderName, anEventType) then
|
||
|
|
for tIndicatorName, tFunction in pairs(tAllIndicators) do
|
||
|
|
tFunction(aUnit, VUHDO_TEXT_INDICATOR_PANEL_NUMS[tIndicatorName], tProviderName, "", 0);
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
end
|
||
|
|
end
|
||
|
|
local VUHDO_updateAllTextIndicatorsForEvent = VUHDO_updateAllTextIndicatorsForEvent;
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_isAnyTextIndicatorInterestedIn(anEventType)
|
||
|
|
for tProviderNameName, _ in pairs(VUHDO_REGISTERED_PROVIDERS) do
|
||
|
|
if VUHDO_isTextProviderInterestedInEvent(tProviderNameName, anEventType) then
|
||
|
|
return true;
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
return false;
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local function VUHDO_registerIndicatorForProvider(aProviderName, anIndicatorId, aPanelNum, aFunction)
|
||
|
|
|
||
|
|
if VUHDO_strempty(aProviderName)
|
||
|
|
or (aPanelNum > 0 and not VUHDO_isPanelPopulated(aPanelNum)) then
|
||
|
|
return;
|
||
|
|
end
|
||
|
|
|
||
|
|
VUHDO_REGISTERED_PROVIDERS[aProviderName][anIndicatorId] = aFunction;
|
||
|
|
VUHDO_TEXT_INDICATOR_PANEL_NUMS[anIndicatorId] = aPanelNum;
|
||
|
|
|
||
|
|
for tUnit, _ in pairs(VUHDO_RAID) do
|
||
|
|
VUHDO_updateAllTextIndicatorsForEvent(tUnit, 1); -- VUHDO_UPDATE_ALL
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local function VUHDO_initTextProviderComboModel()
|
||
|
|
table.wipe(VUHDO_TEXT_PROVIDER_COMBO_MODEL);
|
||
|
|
|
||
|
|
for tName, tInfo in pairs(VUHDO_TEXT_PROVIDERS) do
|
||
|
|
tinsert(VUHDO_TEXT_PROVIDER_COMBO_MODEL, { tName, tInfo["displayName"] });
|
||
|
|
end
|
||
|
|
|
||
|
|
table.sort(VUHDO_TEXT_PROVIDER_COMBO_MODEL,
|
||
|
|
function(anEntry, anotherEntry)
|
||
|
|
return anEntry[2] < anotherEntry[2];
|
||
|
|
end
|
||
|
|
);
|
||
|
|
|
||
|
|
tinsert(VUHDO_TEXT_PROVIDER_COMBO_MODEL, 1, { "", "- empty / nothing -" });
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local VUHDO_TEXT_INDICATOR_CALLBACKS = {
|
||
|
|
["OVERHEAL_TEXT"] = "VUHDO_overhealTextCallback",
|
||
|
|
["MANA_BAR"] = "VUHDO_manaBarTextCallback",
|
||
|
|
["SIDE_LEFT"] = "VUHDO_sideLeftTextCallback",
|
||
|
|
["SIDE_RIGHT"] = "VUHDO_sideRightTextCallback",
|
||
|
|
["THREAT_BAR"] = "VUHDO_threatBarTextCallback",
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_registerAllTextIndicators()
|
||
|
|
table.wipe(VUHDO_REGISTERED_PROVIDERS);
|
||
|
|
table.wipe(VUHDO_TEXT_INDICATOR_PANEL_NUMS);
|
||
|
|
table.wipe(VUHDO_INTERESTED_PROVIDERS);
|
||
|
|
|
||
|
|
for tIndicatorName, tIndicatorConfig in pairs(VUHDO_INDICATOR_CONFIG["TEXT_INDICATORS"]) do
|
||
|
|
for tIndex, tProviderName in pairs(tIndicatorConfig["TEXT_PROVIDER"]) do
|
||
|
|
VUHDO_registerIndicatorForProvider(tProviderName, tIndicatorName .. tIndex, tIndex,
|
||
|
|
_G[VUHDO_TEXT_INDICATOR_CALLBACKS[tIndicatorName]]);
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
VUHDO_initTextProviderComboModel();
|
||
|
|
end
|