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.

243 lines
5.5 KiB

local _;
VUHDO_GLOBAL_ICONS = { };
local GI_SCAN_MAX = 200001;
VUHDO_GI_SCAN_IDX = GI_SCAN_MAX;
local GetSpellInfo = GetSpellInfo;
local pairs = pairs;
--
function VUHDO_removeFromModel(aPanelNum, anOrderNum)
tremove(VUHDO_PANEL_MODELS[aPanelNum], anOrderNum);
VUHDO_initDynamicPanelModels();
end
--
function VUHDO_insertIntoModel(aPanelNum, anOrderNum, anIsLeft, aModelId)
tinsert(VUHDO_PANEL_MODELS[aPanelNum], anOrderNum + (anIsLeft and 0 or 1), aModelId)
VUHDO_initDynamicPanelModels();
end
--
function VUHDO_rewritePanelModels()
for tCnt = 1, VUHDO_MAX_PANELS do
VUHDO_PANEL_SETUP[tCnt]["MODEL"]["groups"] = VUHDO_PANEL_MODELS[tCnt];
end
end
--
function VUHDO_tableCount(anArray)
local tCount = 0;
for _ in pairs(anArray) do tCount = tCount + 1; end
return tCount;
end
--
function VUHDO_getModelSafeName(anUnsafeName)
return strtrim(gsub(anUnsafeName or "", "[.#]", " "));
end
--
function VUHDO_getOrCreateGroupOrderPanel(aParentPanelNum, aPanelNum)
local tName = "Vd" .. aParentPanelNum .. "GrpOrd" .. aPanelNum;
if not _G[tName] then
local tPanel = CreateFrame("Frame", tName, _G["Vd" .. aParentPanelNum], "VuhDoGrpOrdTemplate");
VUHDO_fixFrameLevels(false, tPanel, 2, tPanel:GetChildren());
end
return _G[tName];
end
--
function VUHDO_getOrCreateGroupSelectPanel(aParentPanelNum, aPanelNum)
local tName = "Vd" .. aParentPanelNum .. "GrpSel" .. aPanelNum;
if not _G[tName] then
local tPanel = CreateFrame("Frame", tName, _G["Vd" .. aParentPanelNum], "VuhDoGrpSelTemplate");
VUHDO_fixFrameLevels(false, tPanel, 2, tPanel:GetChildren());
end
return _G[tName];
end
--
local sGroupOrderBarsRight = { };
function VUHDO_getConfigOrderBarRight(aPanelNum, anOrderNum)
local tIndex = aPanelNum * 100 + anOrderNum;
if not sGroupOrderBarsRight[tIndex] then
local tPanel = VUHDO_getOrCreateGroupOrderPanel(aPanelNum, anOrderNum);
sGroupOrderBarsRight[tIndex] = _G[tPanel:GetName() .. "InsTxuR"];
end
return sGroupOrderBarsRight[tIndex];
end
--
local sGroupOrderBarsLeft = { };
function VUHDO_getConfigOrderBarLeft(aPanelNum, anOrderNum)
local tIndex = aPanelNum * 100 + anOrderNum;
if not sGroupOrderBarsLeft[tIndex] then
local tPanel = VUHDO_getOrCreateGroupOrderPanel(aPanelNum, anOrderNum);
sGroupOrderBarsLeft[tIndex] = _G[tPanel:GetName() .. "InsTxuL"];
end
return sGroupOrderBarsLeft[tIndex];
end
--
local tSpellNameById;
function VUHDO_resolveSpellId(aSpellName)
if tonumber(aSpellName or "x") then
tSpellNameById = GetSpellInfo(tonumber(aSpellName));
if tSpellNameById then
return tSpellNameById;
end
end
return aSpellName;
end
--
local tText, tTextById, tLabel;
function VUHDO_newOptionsSpellEditBoxCheckId(anEditBox)
tLabel = _G[anEditBox:GetName() .. "Hint"];
tText = anEditBox:GetText();
tTextById = VUHDO_resolveSpellId(tText);
if tText ~= tTextById then
tTextById = strsub(tTextById, 1, 20);
tLabel:SetText(tTextById);
else
tLabel:SetText("");
end
end
--
local VUHDO_USED_BUFFS = { };
function VUHDO_updateGlobalIconList()
table.wipe(VUHDO_USED_BUFFS);
-- Add custom debuffs
for _, tName in pairs(VUHDO_CONFIG["CUSTOM_DEBUFF"]["STORED"]) do
VUHDO_USED_BUFFS[tName] = true;
end
-- Add spell traces
for _, tName in pairs(VUHDO_CONFIG["SPELL_TRACE"]["STORED"]) do
VUHDO_USED_BUFFS[tName] = true;
end
-- Add bouquet item buffs
for _, tItems in pairs(VUHDO_BOUQUETS["STORED"]) do
tItems = VUHDO_decompressIfCompressed(tItems);
for _, tItem in pairs(tItems) do
-- tItem["name"] can be nil for some reason (maybe on compressing bouquets?)
if tItem["name"] and not VUHDO_BOUQUET_BUFFS_SPECIAL[tItem["name"]] then
VUHDO_USED_BUFFS[tItem["name"]] = true;
end
end
end
-- Add standard icons
for _, tValues in pairs(VUHDO_CUSTOM_ICONS) do
if tValues[2] then
VUHDO_USED_BUFFS[tValues[1]] = true;
VUHDO_GLOBAL_ICONS[tValues[1]] = tValues[2];
end
end
-- Add standard ignore debuffs
for tName, _ in pairs(VUHDO_DEBUFF_BLACKLIST) do
VUHDO_USED_BUFFS[tName] = true;
end
-- Remove obsolete
for tName, _ in pairs(VUHDO_GLOBAL_ICONS) do
if not VUHDO_USED_BUFFS[tName] then
VUHDO_GLOBAL_ICONS[tName] = nil;
end
end
-- Add new
for tName, _ in pairs(VUHDO_USED_BUFFS) do
if (VUHDO_GLOBAL_ICONS[tName] == nil) then
if tonumber(tName) then
local _, _, tIcon = GetSpellInfo(tonumber(tName));
VUHDO_GLOBAL_ICONS[tName] = tIcon;
else
VUHDO_GLOBAL_ICONS[tName] = "";
end
end
end
end
--
local function VUHDO_tableContains(aTable, aValue)
for _, tValue in pairs(aTable) do
if tValue == aValue then return true; end
end
return false;
end
--
local tStep = 50;
local tRef;
local tName, _, tIcon;
local function VUHDO_scanNextGlobalIcons()
if not VUHDO_tableContains(VUHDO_GLOBAL_ICONS, "") then
return;
end
tRef = VUHDO_GLOBAL_ICONS;
for tCnt = VUHDO_GI_SCAN_IDX + tStep , VUHDO_GI_SCAN_IDX, -1 do
tName, _, tIcon = GetSpellInfo(tCnt);
if tRef[tName] == "" then tRef[tName] = tIcon; end
end
VUHDO_GI_SCAN_IDX = VUHDO_GI_SCAN_IDX - tStep;
if VUHDO_GI_SCAN_IDX < 1 then VUHDO_GI_SCAN_IDX = GI_SCAN_MAX; end
end
--
function VUHDO_optionsOnUpdate(self, aTimeDelta)
VUHDO_scanNextGlobalIcons();
VUHDO_updateRequestsInProgress();
end
--
function VUHDO_getGlobalIcon(aDeBuffName)
if not aDeBuffName then return nil; end
return GetSpellBookItemTexture(aDeBuffName) or VUHDO_GLOBAL_ICONS[aDeBuffName];
end