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

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