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.
209 lines
5.1 KiB
209 lines
5.1 KiB
|
2 years ago
|
VUHDO_PANEL_MODELS = {};
|
||
|
|
VUHDO_PANEL_DYN_MODELS = {};
|
||
|
|
|
||
|
|
|
||
|
|
local tinsert = tinsert;
|
||
|
|
local tremove = tremove;
|
||
|
|
local twipe = table.wipe;
|
||
|
|
local ceil = ceil;
|
||
|
|
local pairs = pairs;
|
||
|
|
local _;
|
||
|
|
local sEmpty = {};
|
||
|
|
|
||
|
|
local sConfiguredModels = {};
|
||
|
|
local sRemoveUnitFromRaidGroupsCache = {};
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local VUHDO_PANEL_SETUP;
|
||
|
|
local VUHDO_GROUPS;
|
||
|
|
local VUHDO_RAID;
|
||
|
|
local VUHDO_ID_MEMBER_TYPES;
|
||
|
|
|
||
|
|
local VUHDO_getGroupMembers;
|
||
|
|
function VUHDO_modelToolsInitLocalOverrides()
|
||
|
|
VUHDO_PANEL_SETUP = _G["VUHDO_PANEL_SETUP"];
|
||
|
|
VUHDO_GROUPS = _G["VUHDO_GROUPS"];
|
||
|
|
VUHDO_RAID = _G["VUHDO_RAID"];
|
||
|
|
VUHDO_ID_MEMBER_TYPES = _G["VUHDO_ID_MEMBER_TYPES"];
|
||
|
|
VUHDO_getGroupMembers = _G["VUHDO_getGroupMembers"];
|
||
|
|
|
||
|
|
twipe(sRemoveUnitFromRaidGroupsCache);
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_clearUndefinedModelEntries()
|
||
|
|
for tIndex, tModelArray in pairs(VUHDO_PANEL_MODELS) do
|
||
|
|
local tNewArray = { };
|
||
|
|
|
||
|
|
for _, tModel in ipairs(tModelArray) do
|
||
|
|
if tModel ~= VUHDO_ID_UNDEFINED then tinsert(tNewArray, tModel); end
|
||
|
|
end
|
||
|
|
VUHDO_PANEL_MODELS[tIndex] = tNewArray;
|
||
|
|
end
|
||
|
|
|
||
|
|
for tKey, tModelArray in pairs(VUHDO_PANEL_MODELS) do
|
||
|
|
if #(tModelArray or sEmpty) == 0 then VUHDO_PANEL_MODELS[tKey] = nil; end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_initPanelModels()
|
||
|
|
twipe(sConfiguredModels);
|
||
|
|
|
||
|
|
for tCnt = 1, 10 do -- VUHDO_MAX_PANELS
|
||
|
|
VUHDO_PANEL_MODELS[tCnt] = VUHDO_PANEL_SETUP[tCnt]["MODEL"]["groups"];
|
||
|
|
|
||
|
|
for _, tModel in pairs(VUHDO_PANEL_MODELS[tCnt] or sEmpty) do
|
||
|
|
sConfiguredModels[tModel] = true;
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local tIsShowModel;
|
||
|
|
local tIsOmitEmpty;
|
||
|
|
local tMaxRows, tNumModels, tRepeatModels;
|
||
|
|
function VUHDO_initDynamicPanelModels()
|
||
|
|
if VUHDO_isConfigPanelShowing() then
|
||
|
|
VUHDO_PANEL_DYN_MODELS = VUHDO_deepCopyTable(VUHDO_PANEL_MODELS);
|
||
|
|
return;
|
||
|
|
end
|
||
|
|
|
||
|
|
twipe(VUHDO_PANEL_DYN_MODELS);
|
||
|
|
|
||
|
|
for tPanelNum, tModelArray in pairs(VUHDO_PANEL_MODELS) do
|
||
|
|
tIsOmitEmpty = VUHDO_PANEL_SETUP[tPanelNum]["SCALING"]["ommitEmptyWhenStructured"];
|
||
|
|
VUHDO_PANEL_DYN_MODELS[tPanelNum] = {};
|
||
|
|
|
||
|
|
tMaxRows = VUHDO_PANEL_SETUP[tPanelNum]["SCALING"]["arrangeHorizontal"]
|
||
|
|
and VUHDO_PANEL_SETUP[tPanelNum]["SCALING"]["maxColumnsWhenStructured"]
|
||
|
|
or VUHDO_PANEL_SETUP[tPanelNum]["SCALING"]["maxRowsWhenLoose"];
|
||
|
|
|
||
|
|
for _, tModelId in pairs(tModelArray) do
|
||
|
|
tNumModels = #VUHDO_getGroupMembers(tModelId);
|
||
|
|
if not tIsOmitEmpty or tNumModels > 0 then
|
||
|
|
|
||
|
|
tRepeatModels = ceil(tNumModels / tMaxRows);
|
||
|
|
if tRepeatModels == 0 then tRepeatModels = 1; end
|
||
|
|
|
||
|
|
for tCnt = 1, tRepeatModels do
|
||
|
|
tinsert(VUHDO_PANEL_DYN_MODELS[tPanelNum], tModelId);
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
-- Returns the type of a given model id
|
||
|
|
function VUHDO_getModelType(aModelId)
|
||
|
|
return VUHDO_ID_MEMBER_TYPES[aModelId] or 3; -- VUHDO_ID_TYPE_SPECIAL
|
||
|
|
end
|
||
|
|
local VUHDO_getModelType = VUHDO_getModelType;
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_isModelConfigured(aModelId)
|
||
|
|
return sConfiguredModels[aModelId];
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local tGroup;
|
||
|
|
function VUHDO_isUnitInModelIterative(aUnit, aModelId)
|
||
|
|
tGroup = VUHDO_GROUPS[aModelId] or sEmpty;
|
||
|
|
for _, tUnit in pairs(tGroup) do
|
||
|
|
if aUnit == tUnit then return true; end
|
||
|
|
end
|
||
|
|
|
||
|
|
return false;
|
||
|
|
end
|
||
|
|
local VUHDO_isUnitInModelIterative = VUHDO_isUnitInModelIterative;
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local tModelType;
|
||
|
|
function VUHDO_isUnitInModel(aUnit, aModelId)
|
||
|
|
|
||
|
|
tModelType = VUHDO_getModelType(aModelId);
|
||
|
|
|
||
|
|
if 2 == tModelType then -- VUHDO_ID_TYPE_GROUP
|
||
|
|
return aModelId == VUHDO_RAID[aUnit]["group"];
|
||
|
|
elseif 1 == tModelType then -- VUHDO_ID_TYPE_CLASS
|
||
|
|
return aModelId == VUHDO_RAID[aUnit]["classId"];
|
||
|
|
else -- VUHDO_ID_TYPE_SPECIAL
|
||
|
|
return VUHDO_isUnitInModelIterative(aUnit, aModelId);
|
||
|
|
end
|
||
|
|
end
|
||
|
|
local VUHDO_isUnitInModel = VUHDO_isUnitInModel;
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_isModelInPanel(aPanelNum, aModelId)
|
||
|
|
for _, tModelId in pairs(VUHDO_PANEL_DYN_MODELS[aPanelNum] or sEmpty) do
|
||
|
|
if tModelId == aModelId then return true; end
|
||
|
|
end
|
||
|
|
|
||
|
|
return false;
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_resetRemoveFromRaidGroupsCache()
|
||
|
|
twipe(sRemoveUnitFromRaidGroupsCache);
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local function VUHDO_isRemoveUnitFromRaidGroups(aUnit)
|
||
|
|
if not sRemoveUnitFromRaidGroupsCache[aUnit] then
|
||
|
|
|
||
|
|
if (VUHDO_CONFIG["OMIT_MAIN_TANKS"] and VUHDO_isUnitInModelIterative(aUnit, 41)) -- VUHDO_ID_MAINTANKS
|
||
|
|
or (VUHDO_CONFIG["OMIT_PLAYER_TARGETS"] and VUHDO_isUnitInModelIterative(aUnit, 42)) -- VUHDO_ID_PRIVATE_TANKS
|
||
|
|
or (VUHDO_CONFIG["OMIT_MAIN_ASSIST"] and VUHDO_isUnitInModelIterative(aUnit, 43)) then -- VUHDO_ID_MAIN_ASSISTS
|
||
|
|
sRemoveUnitFromRaidGroupsCache[aUnit] = 1;
|
||
|
|
else
|
||
|
|
sRemoveUnitFromRaidGroupsCache[aUnit] = 0;
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
return sRemoveUnitFromRaidGroupsCache[aUnit] == 1;
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local tModelType;
|
||
|
|
function VUHDO_isUnitInPanel(aPanelNum, aUnit)
|
||
|
|
|
||
|
|
for _, tModelId in pairs(VUHDO_PANEL_MODELS[aPanelNum]) do
|
||
|
|
tModelType = VUHDO_getModelType(tModelId);
|
||
|
|
if 2 == tModelType or 1 == tModelType then -- VUHDO_ID_TYPE_GROUP -- VUHDO_ID_TYPE_CLASS
|
||
|
|
if VUHDO_isUnitInModel(aUnit, tModelId) and not VUHDO_isRemoveUnitFromRaidGroups(aUnit) then
|
||
|
|
return true;
|
||
|
|
end
|
||
|
|
elseif VUHDO_isUnitInModelIterative(aUnit, tModelId) then
|
||
|
|
return true;
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
return false;
|
||
|
|
end
|