--[[ ############################################################################## _____/\\\\\\\\\\\____/\\\________/\\\__/\\\________/\\\__/\\\\\\\\\\\_ # ___/\\\/////////\\\_\/\\\_______\/\\\_\/\\\_______\/\\\_\/////\\\///__ # __\//\\\______\///__\//\\\______/\\\__\/\\\_______\/\\\_____\/\\\_____ # ___\////\\\__________\//\\\____/\\\___\/\\\_______\/\\\_____\/\\\_____ # ______\////\\\________\//\\\__/\\\____\/\\\_______\/\\\_____\/\\\_____ # _________\////\\\______\//\\\/\\\_____\/\\\_______\/\\\_____\/\\\_____ # __/\\\______\//\\\______\//\\\\\______\//\\\______/\\\______\/\\\_____ # _\///\\\\\\\\\\\/________\//\\\________\///\\\\\\\\\/____/\\\\\\\\\\\_# ___\///////////___________\///___________\/////////_____\///////////_# ############################################################################## S U P E R - V I L L A I N - U I By: Munglunch # ############################################################################## ########################################################## LOCALIZED LUA FUNCTIONS ########################################################## ]]-- --[[ GLOBALS ]]-- local _G = _G; local unpack = _G.unpack; local pairs = _G.pairs; local tinsert = _G.tinsert; local table = _G.table; --[[ TABLE METHODS ]]-- local tsort = table.sort; --[[ ########################################################## GET ADDON DATA ########################################################## ]]-- local SuperVillain, L = unpack(SVUI); local MOD = SuperVillain.Registry:Expose('SVUnit'); local _, ns = ... local subOrder = 11; for w=10,40,15 do subOrder = subOrder + 1 SuperVillain.Options.args.SVUnit.args['raid' .. w] ={ name = L['Raid-' .. w .. ' Frames'], type = 'group', order = subOrder, childGroups = "tab", get = function(l) return SuperVillain.db.SVUnit['raid' .. w][l[#l]] end, set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame('raid' .. w)end, args ={ enable = { type = 'toggle', order = 1, name = L['Enable'], }, configureToggle ={ order = 2, type = 'execute', name = L['Display Frames'], func = function()MOD:UpdateGroupConfig(_G['SVUI_Raid' .. w], _G['SVUI_Raid' .. w].forceShow ~= true or nil)end, }, resetSettings ={ type = 'execute', order = 3, name = L['Restore Defaults'], func = function(l, m)MOD:ResetUnitOptions('raid' .. w)SuperVillain:ResetMovables('Raid 1-' .. w .. ' Frames')end, }, tabGroups={ order=3, type='group', name=L['Unit Options'], childGroups="tree", args={ commonGroup={ order=1, type='group', name=L['General Settings'], args={ hideonnpc = { type = 'toggle', order = 2, name = L['Text Toggle On NPC'], desc = L['Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point.'], get = function(l)return SuperVillain.db.SVUnit['raid' .. w]['power'].hideonnpc end, set = function(l, m)SuperVillain.db.SVUnit['raid' .. w]['power'].hideonnpc = m;MOD:SetGroupFrame('raid' .. w)end, }, rangeCheck ={ order = 3, name = L["Range Check"], desc = L["Check if you are in range to cast spells on this specific unit."], type = "toggle", }, predict ={ order = 4, name = L['Heal Prediction'], desc = L['Show a incomming heal prediction bar on the unitframe. Also display a slightly different colored bar for incoming overheals.'], type = 'toggle', }, threatEnabled ={ type = 'toggle', order = 5, name = L['Show Threat'], }, colorOverride ={ order = 6, name = L['Class Color Override'], desc = L['Override the default class color setting.'], type = 'select', values = { ['USE_DEFAULT'] = L['Use Default'], ['FORCE_ON'] = L['Force On'], ['FORCE_OFF'] = L['Force Off'], }, }, positionsGroup ={ order = 100, name = L['Size and Positions'], type = 'group', guiInline = true, set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame('raid' .. w, nil, nil, true)end, args = { gridMode = { order = 1, name = L["Enable Grid mode"], type = 'toggle', set = function(l, m) MOD:ChangeDBVar(m, l[#l], "raid" .. w); MOD:SetGroupFrame('raid' .. w) MOD:ChangeDBVar(m, l[#l], "raidpet"); MOD:SetGroupFrame('raidpet') MOD:ChangeDBVar(m, l[#l], "tank"); MOD:SetGroupFrame('tank') MOD:ChangeDBVar(m, l[#l], "assist"); MOD:SetGroupFrame('assist') end, }, width = { order = 2, name = L['Width'], type = 'range', min = 10, max = 500, step = 1, set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame('raid' .. w)end, }, height = { order = 3, name = L['Height'], type = 'range', min = 10, max = 500, step = 1, set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame('raid' .. w)end, }, spacer = { order = 4, name = '', type = 'description', width = 'full', }, showBy = { order = 5, name = L['Growth Direction'], desc = L['Growth direction from the first unitframe.'], type = 'select', values = { DOWN_RIGHT = format(L['%s and then %s'], L['Down'], L['Right']), DOWN_LEFT = format(L['%s and then %s'], L['Down'], L['Left']), UP_RIGHT = format(L['%s and then %s'], L['Up'], L['Right']), UP_LEFT = format(L['%s and then %s'], L['Up'], L['Left']), RIGHT_DOWN = format(L['%s and then %s'], L['Right'], L['Down']), RIGHT_UP = format(L['%s and then %s'], L['Right'], L['Up']), LEFT_DOWN = format(L['%s and then %s'], L['Left'], L['Down']), LEFT_UP = format(L['%s and then %s'], L['Left'], L['Up']), }, }, gCount = { order = 7, type = 'range', name = L['Number of Groups'], min = 1, max = 8, step = 1, set = function(l, m) MOD:ChangeDBVar(m, l[#l], "raid" .. w); MOD:SetGroupFrame('raid' .. w) if _G['SVUI_Raid' .. w].isForced then MOD:UpdateGroupConfig(_G['SVUI_Raid' .. w]) MOD:UpdateGroupConfig(_G['SVUI_Raid' .. w], true) end end, }, gRowCol = { order = 8, type = 'range', name = L['Groups Per Row/Column'], min = 1, max = 8, step = 1, set = function(l, m) MOD:ChangeDBVar(m, l[#l], "raid" .. w); MOD:SetGroupFrame('raid' .. w) if _G['SVUI_Raid' .. w].isForced then MOD:UpdateGroupConfig(_G['SVUI_Raid' .. w]) MOD:UpdateGroupConfig(_G['SVUI_Raid' .. w], true) end end, }, wrapXOffset = { order = 9, type = 'range', name = L['Horizontal Spacing'], min = 0, max = 50, step = 1, }, wrapYOffset = { order = 10, type = 'range', name = L['Vertical Spacing'], min = 0, max = 50, step = 1, }, }, }, visibilityGroup ={ order = 200, name = L['Visibility'], type = 'group', guiInline = true, set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame('raid' .. w, nil, nil, true)end, args = { showPlayer = { order = 1, type = 'toggle', name = L['Display Player'], desc = L['When true, the header includes the player when not in a raid.'], }, visibility = { order = 2, type = 'input', name = L['Visibility'], desc = L['The following macro must be true in order for the group to be shown, in addition to any filter that may already be set.'], width = 'full', desc = L['TEXT_FORMAT_DESC'], }, }, }, sortingGroup ={ order = 300, type = 'group', guiInline = true, name = L['Sorting'], set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w);MOD:SetGroupFrame('raid' .. w, nil, nil, true)end, args = { sortMethod = { order = 1, name = L['Group By'], desc = L['Set the order that the group will sort.'], type = 'select', values = { ['CLASS'] = CLASS, ['ROLE'] = ROLE.."(Tanks, Healers, DPS)", ['ROLE_TDH'] = ROLE.."(Tanks, DPS, Healers)", ['ROLE_HDT'] = ROLE.."(Healers, DPS, Tanks)", ['ROLE_HTD'] = ROLE.."(Healers, Tanks, DPS)", ['NAME'] = NAME, ['MTMA'] = L['Main Tanks / Main Assist'], ['GROUP'] = GROUP, }, }, sortDir = { order = 2, name = L['Sort Direction'], desc = L['Defines the sort order of the selected sort method.'], type = 'select', values = { ['ASC'] = L['Ascending'], ['DESC'] = L['Descending'], }, }, spacer = { order = 3, type = 'description', width = 'full', name = ' ', }, rSort = { order = 4, name = L['Raid-Wide Sorting'], desc = L['Enabling this allows raid-wide sorting however you will not be able to distinguish between groups.'], type = 'toggle', }, invertGroupingOrder = { order = 5, name = L['Invert Grouping Order'], desc = L['Enabling this inverts the grouping order when the raid is not full, this will reverse the direction it starts from.'], disabled = function()return not SuperVillain.db.SVUnit['raid' .. w].rSort end, type = 'toggle', }, startFromCenter = { order = 6, name = L['Start Near Center'], desc = L['The initial group will start near the center and grow out.'], disabled = function()return not SuperVillain.db.SVUnit['raid' .. w].rSort end, type = 'toggle', }, }, } } }, misc = ns:SetMiscConfigGroup(true, MOD.SetGroupFrame, 'raid' .. w), health = ns:SetHealthConfigGroup(true, MOD.SetGroupFrame, 'raid' .. w), power = ns:SetPowerConfigGroup(false, MOD.SetGroupFrame, 'raid' .. w), name = ns:SetNameConfigGroup(MOD.SetGroupFrame, 'raid' .. w), buffs = ns:SetAuraConfigGroup(true, 'buffs', true, MOD.SetGroupFrame, 'raid' .. w), debuffs = ns:SetAuraConfigGroup(true, 'debuffs', true, MOD.SetGroupFrame, 'raid' .. w), buffIndicator ={ order = 600, type = 'group', name = L['Buff Indicator'], get = function(l)return SuperVillain.db.SVUnit['raid' .. w]['buffIndicator'][l[#l]]end, set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w, "buffIndicator");MOD:SetGroupFrame('raid' .. w)end, args ={ enable ={ type = 'toggle', name = L['Enable'], order = 1, }, size ={ type = 'range', name = L['Size'], desc = L['Size of the indicator icon.'], order = 2, min = 4, max = 15, step = 1, }, configureButton ={ type = 'execute', name = L['Configure Auras'], func = function()SuperVillain:SetToFilterConfig('Buff Indicator')end, order = 3, }, }, }, rdebuffs ={ order = 800, type = 'group', name = L['RaidDebuff Indicator'], get = function(l)return SuperVillain.db.SVUnit['raid' .. w]['rdebuffs'][l[#l]]end, set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raid" .. w, "rdebuffs");MOD:SetGroupFrame('raid' .. w)end, args ={ enable ={ type = 'toggle', name = L['Enable'], order = 1, }, size ={ type = 'range', name = L['Size'], order = 2, min = 8, max = 35, step = 1, }, fontSize ={ type = 'range', name = L['Font Size'], order = 3, min = 7, max = 22, step = 1, }, xOffset ={ order = 4, type = 'range', name = L['xOffset'], min = - 300, max = 300, step = 1, }, yOffset ={ order = 5, type = 'range', name = L['yOffset'], min = - 300, max = 300, step = 1, }, configureButton ={ type = 'execute', name = L['Configure Auras'], func = function()SuperVillain:SetToFilterConfig('Raid')end, order = 7, }, }, }, icons = ns:SetIconConfigGroup(MOD.SetGroupFrame, 'raid' .. w), }, }, }, } end subOrder = subOrder + 1 SuperVillain.Options.args.SVUnit.args.raidpet ={ order = subOrder, type = 'group', name = L['Raid Pet Frames'], childGroups = "tab", get = function(l)return SuperVillain.db.SVUnit['raidpet'][l[#l]]end, set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raidpet");MOD:SetGroupFrame('raidpet')end, args ={ enable ={ type = 'toggle', order = 1, name = L['Enable'], }, configureToggle ={ order = 2, type = 'execute', name = L['Display Frames'], func = function()MOD:UpdateGroupConfig(SVUI_Raidpet, SVUI_Raidpet.forceShow ~= true or nil)end, }, resetSettings ={ type = 'execute', order = 3, name = L['Restore Defaults'], func = function(l, m)MOD:ResetUnitOptions('raidpet')SuperVillain:ResetMovables('Raid Pet Frames')MOD:SetGroupFrame('raidpet', nil, nil, true)end, }, tabGroups={ order=3, type='group', name=L['Unit Options'], childGroups="tree", args={ commonGroup={ order=1, type='group', name=L['General Settings'], args={ rangeCheck ={ order = 3, name = L["Range Check"], desc = L["Check if you are in range to cast spells on this specific unit."], type = "toggle", }, predict ={ order = 4, name = L['Heal Prediction'], desc = L['Show a incomming heal prediction bar on the unitframe. Also display a slightly different colored bar for incoming overheals.'], type = 'toggle', }, threatEnabled ={ type = 'toggle', order = 5, name = L['Show Threat'], }, colorOverride ={ order = 6, name = L['Class Color Override'], desc = L['Override the default class color setting.'], type = 'select', values ={ ['USE_DEFAULT'] = L['Use Default'], ['FORCE_ON'] = L['Force On'], ['FORCE_OFF'] = L['Force Off'], }, }, positionsGroup ={ order = 100, name = L['Size and Positions'], type = 'group', guiInline = true, set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raidpet");MOD:SetGroupFrame('raidpet', nil, nil, true)end, args ={ width ={ order = 1, name = L['Width'], type = 'range', min = 10, max = 500, step = 1, set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raidpet");MOD:SetGroupFrame('raidpet')end, }, height ={ order = 2, name = L['Height'], type = 'range', min = 10, max = 500, step = 1, set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raidpet");MOD:SetGroupFrame('raidpet')end, }, spacer ={ order = 3, name = '', type = 'description', width = 'full', }, showBy ={ order = 4, name = L['Growth Direction'], desc = L['Growth direction from the first unitframe.'], type = 'select', values ={ DOWN_RIGHT = format(L['%s and then %s'], L['Down'], L['Right']), DOWN_LEFT = format(L['%s and then %s'], L['Down'], L['Left']), UP_RIGHT = format(L['%s and then %s'], L['Up'], L['Right']), UP_LEFT = format(L['%s and then %s'], L['Up'], L['Left']), RIGHT_DOWN = format(L['%s and then %s'], L['Right'], L['Down']), RIGHT_UP = format(L['%s and then %s'], L['Right'], L['Up']), LEFT_DOWN = format(L['%s and then %s'], L['Left'], L['Down']), LEFT_UP = format(L['%s and then %s'], L['Left'], L['Up']), }, }, gCount ={ order = 7, type = 'range', name = L['Number of Groups'], min = 1, max = 8, step = 1, set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raidpet");MOD:SetGroupFrame('raidpet')if SVUI_Raidpet.isForced then MOD:UpdateGroupConfig(SVUI_Raidpet)MOD:UpdateGroupConfig(SVUI_Raidpet, true)end end, }, gRowCol ={ order = 8, type = 'range', name = L['Groups Per Row/Column'], min = 1, max = 8, step = 1, set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raidpet");MOD:SetGroupFrame('raidpet')if SVUI_Raidpet.isForced then MOD:UpdateGroupConfig(SVUI_Raidpet)MOD:UpdateGroupConfig(SVUI_Raidpet, true)end end, }, wrapXOffset ={ order = 9, type = 'range', name = L['Horizontal Spacing'], min = 0, max = 50, step = 1, }, wrapYOffset ={ order = 10, type = 'range', name = L['Vertical Spacing'], min = 0, max = 50, step = 1, }, }, }, visibilityGroup ={ order = 200, name = L['Visibility'], type = 'group', guiInline = true, set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raidpet");MOD:SetGroupFrame('raidpet', nil, nil, true)end, args ={ visibility ={ order = 2, type = 'input', name = L['Visibility'], desc = L['The following macro must be true in order for the group to be shown, in addition to any filter that may already be set.'], width = 'full', desc = L['TEXT_FORMAT_DESC'], }, }, }, sortingGroup ={ order = 300, type = 'group', guiInline = true, name = L['Grouping & Sorting'], set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raidpet");MOD:SetGroupFrame('raidpet', nil, nil, true)end, args ={ sortMethod ={ order = 1, name = L['Group By'], desc = L['Set the order that the group will sort.'], type = 'select', values ={ ['NAME'] = L['Owners Name'], ['PETNAME'] = L['Pet Name'], ['GROUP'] = GROUP, }, }, sortDir ={ order = 2, name = L['Sort Direction'], desc = L['Defines the sort order of the selected sort method.'], type = 'select', values ={ ['ASC'] = L['Ascending'], ['DESC'] = L['Descending'], }, }, spacer ={ order = 3, type = 'description', width = 'full', name = ' ', }, rSort ={ order = 4, name = L['Raid-Wide Sorting'], desc = L['Enabling this allows raid-wide sorting however you will not be able to distinguish between groups.'], type = 'toggle', }, invertGroupingOrder ={ order = 5, name = L['Invert Grouping Order'], desc = L['Enabling this inverts the grouping order when the raid is not full, this will reverse the direction it starts from.'], disabled = function()return not SuperVillain.db.SVUnit['raidpet'].rSort end, type = 'toggle', }, startFromCenter ={ order = 6, name = L['Start Near Center'], desc = L['The initial group will start near the center and grow out.'], disabled = function()return not SuperVillain.db.SVUnit['raidpet'].rSort end, type = 'toggle', }, }, } } }, misc = ns:SetMiscConfigGroup(true, MOD.SetGroupFrame, 'raidpet'), health = ns:SetHealthConfigGroup(true, MOD.SetGroupFrame, 'raidpet'), name = ns:SetNameConfigGroup(MOD.SetGroupFrame, 'raidpet'), buffs = ns:SetAuraConfigGroup(true, 'buffs', true, MOD.SetGroupFrame, 'raidpet'), debuffs = ns:SetAuraConfigGroup(true, 'debuffs', true, MOD.SetGroupFrame, 'raidpet'), buffIndicator ={ order = 600, type = 'group', name = L['Buff Indicator'], get = function(l)return SuperVillain.db.SVUnit['raidpet']['buffIndicator'][l[#l]]end, set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raidpet", "buffIndicator");MOD:SetGroupFrame('raidpet')end, args ={ enable ={ type = 'toggle', name = L['Enable'], order = 1, }, size ={ type = 'range', name = L['Size'], desc = L['Size of the indicator icon.'], order = 2, min = 4, max = 15, step = 1, }, configureButton ={ type = 'execute', name = L['Configure Auras'], func = function()SuperVillain:SetToFilterConfig('Buff Indicator')end, order = 3, }, }, }, rdebuffs ={ order = 700, type = 'group', name = L['RaidDebuff Indicator'], get = function(l)return SuperVillain.db.SVUnit['raidpet']['rdebuffs'][l[#l]]end, set = function(l, m)MOD:ChangeDBVar(m, l[#l], "raidpet", "rdebuffs");MOD:SetGroupFrame('raidpet')end, args ={ enable ={ type = 'toggle', name = L['Enable'], order = 1, }, size ={ type = 'range', name = L['Size'], order = 2, min = 8, max = 35, step = 1, }, xOffset ={ order = 3, type = 'range', name = L['xOffset'], min = - 300, max = 300, step = 1, }, yOffset ={ order = 4, type = 'range', name = L['yOffset'], min = - 300, max = 300, step = 1, }, configureButton ={ type = 'execute', name = L['Configure Auras'], func = function()SuperVillain:SetToFilterConfig('Raid')end, order = 5, }, }, }, icons = ns:SetIconConfigGroup(MOD.SetGroupFrame, 'raidpet'), }, }, }, }