Modules/Auras: More fixes to aura filtering and nameplate auras

This commit is contained in:
andrew6180
2023-05-31 19:40:40 -07:00
parent ad3c7eaf28
commit 50e16a313b
8 changed files with 121 additions and 44 deletions
+12
View File
@@ -782,6 +782,17 @@ E:AddTag('name:last', 'UNIT_NAME_UPDATE INSTANCE_ENCOUNTER_ENGAGE_UNIT', functio
return name return name
end) end)
E:AddTag('name:first', 'UNIT_NAME_UPDATE INSTANCE_ENCOUNTER_ENGAGE_UNIT', function(unit)
local unitName = UnitName(unit)
if unitName then
local name = strsplit(" ", unitName)
return name or unitName
end
return unitName
end)
E:AddTag('health:deficit-percent:nostatus', 'UNIT_HEALTH UNIT_MAXHEALTH', function(unit) E:AddTag('health:deficit-percent:nostatus', 'UNIT_HEALTH UNIT_MAXHEALTH', function(unit)
local min, max = UnitHealth(unit), UnitHealthMax(unit) local min, max = UnitHealth(unit), UnitHealthMax(unit)
local deficit = (min / max) - 1 local deficit = (min / max) - 1
@@ -1372,6 +1383,7 @@ E.TagInfo = {
['name:abbrev:veryshort'] = { category = 'Names', description = "Displays the name of the unit with abbreviation (limited to 5 letters)" }, ['name:abbrev:veryshort'] = { category = 'Names', description = "Displays the name of the unit with abbreviation (limited to 5 letters)" },
['name:abbrev'] = { category = 'Names', description = "Displays the name of the unit with abbreviation (e.g. 'Shadowfury Witch Doctor' becomes 'S. W. Doctor')" }, ['name:abbrev'] = { category = 'Names', description = "Displays the name of the unit with abbreviation (e.g. 'Shadowfury Witch Doctor' becomes 'S. W. Doctor')" },
['name:last'] = { category = 'Names', description = "Displays the last word of the unit's name" }, ['name:last'] = { category = 'Names', description = "Displays the last word of the unit's name" },
['name:first'] = { category = 'Names', description = "Displays the first word of the unit's name" },
['name:long:status'] = { category = 'Names', description = "Replace the name of the unit with 'DEAD' or 'OFFLINE' if applicable (limited to 20 letters)" }, ['name:long:status'] = { category = 'Names', description = "Replace the name of the unit with 'DEAD' or 'OFFLINE' if applicable (limited to 20 letters)" },
['name:long:translit'] = { category = 'Names', description = "Displays the name of the unit with transliteration for cyrillic letters (limited to 20 letters)" }, ['name:long:translit'] = { category = 'Names', description = "Displays the name of the unit with transliteration for cyrillic letters (limited to 20 letters)" },
['name:long'] = { category = 'Names', description = "Displays the name of the unit (limited to 20 letters)" }, ['name:long'] = { category = 'Names', description = "Displays the name of the unit (limited to 20 letters)" },
+14 -12
View File
@@ -7,6 +7,7 @@ local _G = _G
local wipe = wipe local wipe = wipe
local unpack = unpack local unpack = unpack
local CreateFrame = CreateFrame local CreateFrame = CreateFrame
local find = string.find
function NP:Construct_Auras(nameplate) function NP:Construct_Auras(nameplate)
local frameName = nameplate:GetName() local frameName = nameplate:GetName()
@@ -21,8 +22,7 @@ function NP:Construct_Auras(nameplate)
Buffs.isNamePlate = nameplate Buffs.isNamePlate = nameplate
Buffs.initialAnchor = 'BOTTOMLEFT' Buffs.initialAnchor = 'BOTTOMLEFT'
Buffs.growthX = 'RIGHT' Buffs.growthDirection = "RIGHT_UP"
Buffs.growthY = 'UP'
Buffs.type = 'buffs' Buffs.type = 'buffs'
Buffs.forceShow = nameplate == _G.ElvNP_Test Buffs.forceShow = nameplate == _G.ElvNP_Test
Buffs.tickers = {} -- StyleFilters Buffs.tickers = {} -- StyleFilters
@@ -38,8 +38,7 @@ function NP:Construct_Auras(nameplate)
Debuffs.disableMouse = true Debuffs.disableMouse = true
Debuffs.isNamePlate = nameplate Debuffs.isNamePlate = nameplate
Debuffs.initialAnchor = 'BOTTOMLEFT' Debuffs.initialAnchor = 'BOTTOMLEFT'
Debuffs.growthX = 'RIGHT' Debuffs.growthDirection = "LEFT_UP"
Debuffs.growthY = 'UP'
Debuffs.type = 'debuffs' Debuffs.type = 'debuffs'
Debuffs.forceShow = nameplate == _G.ElvNP_Test Debuffs.forceShow = nameplate == _G.ElvNP_Test
Debuffs.tickers = {} -- StyleFilters Debuffs.tickers = {} -- StyleFilters
@@ -48,14 +47,12 @@ function NP:Construct_Auras(nameplate)
Buffs.PreUpdate = UF.PreUpdateAura Buffs.PreUpdate = UF.PreUpdateAura
Buffs.PreSetPosition = UF.SortAuras Buffs.PreSetPosition = UF.SortAuras
Buffs.SetPosition = UF.SetPosition
Buffs.PostCreateIcon = NP.Construct_AuraIcon Buffs.PostCreateIcon = NP.Construct_AuraIcon
Buffs.PostUpdateIcon = UF.PostUpdateAura Buffs.PostUpdateIcon = UF.PostUpdateAura
Buffs.CustomFilter = UF.AuraFilter Buffs.CustomFilter = UF.AuraFilter
Debuffs.PreUpdate = UF.PreUpdateAura Debuffs.PreUpdate = UF.PreUpdateAura
Debuffs.PreSetPosition = UF.SortAuras Debuffs.PreSetPosition = UF.SortAuras
Debuffs.SetPosition = UF.SetPosition
Debuffs.PostCreateIcon = NP.Construct_AuraIcon Debuffs.PostCreateIcon = NP.Construct_AuraIcon
Debuffs.PostUpdateIcon = UF.PostUpdateAura Debuffs.PostUpdateIcon = UF.PostUpdateAura
Debuffs.CustomFilter = UF.AuraFilter Debuffs.CustomFilter = UF.AuraFilter
@@ -66,14 +63,14 @@ end
function NP:Construct_AuraIcon(button) function NP:Construct_AuraIcon(button)
if not button then return end if not button then return end
local offset = UF.thinBorders and E.mult or E.Border
button:SetTemplate(nil, nil, nil, nil, nil, true, true) button:SetTemplate(nil, nil, nil, UF.thinBorders, true)
button.cd:SetReverse(true) button.cd:SetReverse(true)
button.cd:SetInside(button) button.cd:SetInside(button, offset, offset)
button.icon:SetDrawLayer('ARTWORK') button.icon:SetDrawLayer('ARTWORK')
button.icon:SetInside() button.icon:SetInside(button, offset, offset)
button.count:ClearAllPoints() button.count:ClearAllPoints()
button.count:Point('BOTTOMRIGHT', 1, 1) button.count:Point('BOTTOMRIGHT', 1, 1)
@@ -102,8 +99,7 @@ function NP:Configure_Auras(nameplate, auras, db)
auras.numRows = db.numRows auras.numRows = db.numRows
auras.onlyShowPlayer = false auras.onlyShowPlayer = false
auras.spacing = db.spacing auras.spacing = db.spacing
auras.growthY = UF.MatchGrowthY[db.anchorPoint] or db.growthY auras.growthDirection = db.growthDirection or "RIGHT_UP"
auras.growthX = UF.MatchGrowthX[db.anchorPoint] or db.growthX
auras.xOffset = db.xOffset auras.xOffset = db.xOffset
auras.yOffset = db.yOffset auras.yOffset = db.yOffset
auras.anchorPoint = db.anchorPoint auras.anchorPoint = db.anchorPoint
@@ -114,6 +110,8 @@ function NP:Configure_Auras(nameplate, auras, db)
auras.attachTo = UF:GetAuraAnchorFrame(nameplate, db.attachTo) -- keep below SetSmartPosition auras.attachTo = UF:GetAuraAnchorFrame(nameplate, db.attachTo) -- keep below SetSmartPosition
auras.num = db.numAuras * db.numRows auras.num = db.numAuras * db.numRows
auras.db = db -- for auraSort auras.db = db -- for auraSort
auras["growth-y"] = find(auras.growthDirection, "UP") and "UP" or "DOWN"
auras["growth-x"] = find(auras.growthDirection, "RIGHT") and "RIGHT" or "LEFT"
local index = 1 local index = 1
while auras[index] do while auras[index] do
@@ -177,6 +175,10 @@ function NP:UpdateAuraSettings(button)
button.count:FontTemplate(LSM:Fetch('font', db.countFont), db.countFontSize, db.countFontOutline) button.count:FontTemplate(LSM:Fetch('font', db.countFont), db.countFontSize, db.countFontOutline)
end end
if button.icon then
button.icon:SetTexCoord(unpack(E.TexCoords))
end
if button.auraInfo then if button.auraInfo then
wipe(button.auraInfo) wipe(button.auraInfo)
else else
@@ -282,8 +282,7 @@ function NP:Update_BossMods(plate)
element.db = db element.db = db
element.spacing = db.spacing element.spacing = db.spacing
element.initialAnchor = inverse element.initialAnchor = inverse
element.growthY = UF.MatchGrowthY[anchor] or db.growthY element.growthDirection = db.growthDirection or "RIGHT_UP"
element.growthX = UF.MatchGrowthX[anchor] or db.growthX
element.size = db.size + (db.spacing or 0) element.size = db.size + (db.spacing or 0)
element.height = not db.keepSizeRatio and db.height element.height = not db.keepSizeRatio and db.height
element.rows = {} element.rows = {}
@@ -218,8 +218,6 @@ function UF:CheckFilter(name, caster, spellID, isFriend, isPlayer, isUnit, allow
return true, spell.priority -- this is the only difference from auarbars code return true, spell.priority -- this is the only difference from auarbars code
elseif filterType and (filterType == "Blacklist") and (spell and spell.enable) then elseif filterType and (filterType == "Blacklist") and (spell and spell.enable) then
return false return false
elseif allowDuration then
return true
end end
elseif filterName == "Personal" and isPlayer and allowDuration then elseif filterName == "Personal" and isPlayer and allowDuration then
return true return true
@@ -244,6 +242,9 @@ function UF:CheckFilter(name, caster, spellID, isFriend, isPlayer, isUnit, allow
end end
end end
end end
if allowDuration then
return true
end
end end
function UF:AuraBarFilter(unit, name, _, _, _, debuffType, duration, _, unitCaster, isStealable, _, spellID) function UF:AuraBarFilter(unit, name, _, _, _, debuffType, duration, _, unitCaster, isStealable, _, spellID)
@@ -17,9 +17,6 @@ local UnitCanAttack = UnitCanAttack
local UnitIsFriend = UnitIsFriend local UnitIsFriend = UnitIsFriend
local UnitIsUnit = UnitIsUnit local UnitIsUnit = UnitIsUnit
UF.MatchGrowthY = { TOP = 'TOP', BOTTOM = 'BOTTOM' }
UF.MatchGrowthX = { LEFT = 'LEFT', RIGHT = 'RIGHT' }
UF.SortAuraFuncs = { UF.SortAuraFuncs = {
TIME_REMAINING = function(a, b, dir) TIME_REMAINING = function(a, b, dir)
local A = a.noTime and huge or a.expiration or -huge local A = a.noTime and huge or a.expiration or -huge
+12 -19
View File
@@ -273,8 +273,7 @@ local NP_Auras = {
attachTo = 'FRAME', attachTo = 'FRAME',
keepSizeRatio = true, keepSizeRatio = true,
anchorPoint = 'TOPLEFT', anchorPoint = 'TOPLEFT',
growthX = 'RIGHT', growthDirection = 'RIGHT_UP',
growthY = 'UP',
onlyShowPlayer = false, onlyShowPlayer = false,
stackAuras = true, stackAuras = true,
sortDirection = 'DESCENDING', sortDirection = 'DESCENDING',
@@ -487,8 +486,7 @@ P.nameplates = {
bossMods = { bossMods = {
enable = true, enable = true,
anchorPoint = 'BOTTOM', anchorPoint = 'BOTTOM',
growthX = 'RIGHT', growthDirection = 'RIGHT_UP',
growthY = 'DOWN',
size = 34, size = 34,
height = 24, height = 24,
spacing = 1, spacing = 1,
@@ -707,8 +705,7 @@ end
P.nameplates.units.PLAYER.buffs.maxDuration = 300 P.nameplates.units.PLAYER.buffs.maxDuration = 300
P.nameplates.units.PLAYER.buffs.priority = 'Blacklist,blockNoDuration,Personal,TurtleBuffs,PlayerBuffs' P.nameplates.units.PLAYER.buffs.priority = 'Blacklist,blockNoDuration,Personal,TurtleBuffs,PlayerBuffs'
P.nameplates.units.PLAYER.debuffs.anchorPoint = 'TOPRIGHT' P.nameplates.units.PLAYER.debuffs.anchorPoint = 'TOPRIGHT'
P.nameplates.units.PLAYER.debuffs.growthX = 'LEFT' P.nameplates.units.PLAYER.debuffs.growthDirection = 'LEFT_UP'
P.nameplates.units.PLAYER.debuffs.growthY = 'UP'
P.nameplates.units.PLAYER.debuffs.yOffset = 35 P.nameplates.units.PLAYER.debuffs.yOffset = 35
P.nameplates.units.PLAYER.debuffs.priority = 'Blacklist,blockNoDuration,Personal,Boss,CCDebuffs,RaidDebuffs,Dispellable' P.nameplates.units.PLAYER.debuffs.priority = 'Blacklist,blockNoDuration,Personal,Boss,CCDebuffs,RaidDebuffs,Dispellable'
P.nameplates.units.PLAYER.name.enable = false P.nameplates.units.PLAYER.name.enable = false
@@ -719,35 +716,31 @@ P.nameplates.units.PLAYER.castbar.yOffset = -20
P.nameplates.units.FRIENDLY_PLAYER.buffs.priority = 'Blacklist,blockNoDuration,Personal,TurtleBuffs' P.nameplates.units.FRIENDLY_PLAYER.buffs.priority = 'Blacklist,blockNoDuration,Personal,TurtleBuffs'
P.nameplates.units.FRIENDLY_PLAYER.debuffs.anchorPoint = 'TOPRIGHT' P.nameplates.units.FRIENDLY_PLAYER.debuffs.anchorPoint = 'TOPRIGHT'
P.nameplates.units.FRIENDLY_PLAYER.debuffs.growthX = 'LEFT' P.nameplates.units.FRIENDLY_PLAYER.debuffs.growthDirection = 'LEFT_UP'
P.nameplates.units.FRIENDLY_PLAYER.debuffs.growthY = 'UP'
P.nameplates.units.FRIENDLY_PLAYER.debuffs.yOffset = 35 P.nameplates.units.FRIENDLY_PLAYER.debuffs.yOffset = 35
P.nameplates.units.FRIENDLY_PLAYER.debuffs.priority = 'Blacklist,Dispellable,blockNoDuration,Personal,CCDebuffs' P.nameplates.units.FRIENDLY_PLAYER.debuffs.priority = 'Blacklist,Personal,RaidDebuffs,CCDebuffs,Whitelist'
P.nameplates.units.ENEMY_PLAYER.buffs.priority = 'Blacklist,Dispellable,PlayerBuffs,TurtleBuffs' P.nameplates.units.ENEMY_PLAYER.buffs.priority = 'Blacklist,Dispellable,PlayerBuffs,TurtleBuffs'
P.nameplates.units.ENEMY_PLAYER.buffs.maxDuration = 300 P.nameplates.units.ENEMY_PLAYER.buffs.maxDuration = 300
P.nameplates.units.ENEMY_PLAYER.debuffs.anchorPoint = 'TOPRIGHT' P.nameplates.units.ENEMY_PLAYER.debuffs.anchorPoint = 'TOPRIGHT'
P.nameplates.units.ENEMY_PLAYER.debuffs.growthX = 'LEFT' P.nameplates.units.ENEMY_PLAYER.debuffs.growthDirection = 'LEFT_UP'
P.nameplates.units.ENEMY_PLAYER.debuffs.growthY = 'UP'
P.nameplates.units.ENEMY_PLAYER.debuffs.yOffset = 35 P.nameplates.units.ENEMY_PLAYER.debuffs.yOffset = 35
P.nameplates.units.ENEMY_PLAYER.debuffs.priority = 'Blacklist,blockNoDuration,Personal,CCDebuffs' P.nameplates.units.ENEMY_PLAYER.debuffs.priority = 'Blacklist,Personal,RaidDebuffs,CCDebuffs,Whitelist'
P.nameplates.units.ENEMY_PLAYER.name.format = '[classcolor][name:abbrev:long]' P.nameplates.units.ENEMY_PLAYER.name.format = '[classcolor][name:abbrev:long]'
P.nameplates.units.FRIENDLY_NPC.buffs.priority = 'Blacklist,blockNoDuration,Personal,TurtleBuffs' P.nameplates.units.FRIENDLY_NPC.buffs.priority = 'Blacklist,blockNoDuration,Personal,TurtleBuffs'
P.nameplates.units.FRIENDLY_NPC.debuffs.anchorPoint = 'TOPRIGHT' P.nameplates.units.FRIENDLY_NPC.debuffs.anchorPoint = 'TOPRIGHT'
P.nameplates.units.FRIENDLY_NPC.debuffs.growthX = 'LEFT' P.nameplates.units.FRIENDLY_NPC.debuffs.growthDirection = 'LEFT_UP'
P.nameplates.units.FRIENDLY_NPC.debuffs.growthY = 'UP'
P.nameplates.units.FRIENDLY_NPC.debuffs.yOffset = 35 P.nameplates.units.FRIENDLY_NPC.debuffs.yOffset = 35
P.nameplates.units.FRIENDLY_NPC.debuffs.priority = 'Blacklist,Dispellable,CCDebuffs,RaidDebuffs' P.nameplates.units.FRIENDLY_NPC.debuffs.priority = 'Blacklist,Personal,RaidDebuffs,CCDebuffs,Whitelist'
P.nameplates.units.FRIENDLY_NPC.level.format = '[difficultycolor][level][shortclassification]' P.nameplates.units.FRIENDLY_NPC.level.format = '[difficultycolor][level][shortclassification]'
P.nameplates.units.FRIENDLY_NPC.title.format = '[npctitle]' P.nameplates.units.FRIENDLY_NPC.title.format = '[npctitle]'
P.nameplates.units.ENEMY_NPC.buffs.priority = 'Blacklist,RaidBuffsElvUI,Dispellable,blockNoDuration,CastByUnit' P.nameplates.units.ENEMY_NPC.buffs.priority = 'Blacklist,blockNoDuration,Personal,TurtleBuffs'
P.nameplates.units.ENEMY_NPC.debuffs.anchorPoint = 'TOPRIGHT' P.nameplates.units.ENEMY_NPC.debuffs.anchorPoint = 'TOPRIGHT'
P.nameplates.units.ENEMY_NPC.debuffs.growthX = 'LEFT' P.nameplates.units.ENEMY_NPC.debuffs.growthDirection = 'LEFT_UP'
P.nameplates.units.ENEMY_NPC.debuffs.growthY = 'UP'
P.nameplates.units.ENEMY_NPC.debuffs.yOffset = 35 P.nameplates.units.ENEMY_NPC.debuffs.yOffset = 35
P.nameplates.units.ENEMY_NPC.debuffs.priority = 'Blacklist,Personal,CCDebuffs' P.nameplates.units.ENEMY_NPC.debuffs.priority = 'Blacklist,Personal,RaidDebuffs,CCDebuffs,Whitelist'
P.nameplates.units.ENEMY_NPC.level.format = '[difficultycolor][level][shortclassification]' P.nameplates.units.ENEMY_NPC.level.format = '[difficultycolor][level][shortclassification]'
P.nameplates.units.ENEMY_NPC.title.format = '[npctitle]' P.nameplates.units.ENEMY_NPC.title.format = '[npctitle]'
P.nameplates.units.ENEMY_NPC.name.format = '[name]' P.nameplates.units.ENEMY_NPC.name.format = '[name]'
+65
View File
@@ -17,6 +17,71 @@ C.Values = {
} }
} }
do
C.StateSwitchGetText = function(_, TEXT)
local friend, enemy = strmatch(TEXT, '^Friendly:([^,]*)'), strmatch(TEXT, '^Enemy:([^,]*)')
local text, blockB, blockS, blockT = friend or enemy or TEXT
local SF, localized = E.global.unitframe.specialFilters[text], L[text]
if SF and localized and text:match('^block') then blockB, blockS, blockT = localized:match('^%[(.-)](%s?)(.+)') end
local filterText = (blockB and format('|cFF999999%s|r%s%s', blockB, blockS, blockT)) or localized or text
return (friend and format('|cFF33FF33%s|r %s', _G.FRIEND, filterText)) or (enemy and format('|cFFFF3333%s|r %s', _G.ENEMY, filterText)) or filterText
end
local function filterMatch(s,v)
local m1, m2, m3, m4 = '^'..v..'$', '^'..v..',', ','..v..'$', ','..v..','
return (strmatch(s, m1) and m1) or (strmatch(s, m2) and m2) or (strmatch(s, m3) and m3) or (strmatch(s, m4) and v..',')
end
C.SetFilterPriority = function(db, groupName, auraType, value, remove, movehere, friendState)
if not auraType or not value then return end
local filter = db[groupName] and db[groupName][auraType] and db[groupName][auraType].priority
if not filter then return end
local found = filterMatch(filter, E:EscapeString(value))
if found and movehere then
local tbl, sv, sm = {strsplit(',',filter)}
for i in ipairs(tbl) do
if tbl[i] == value then sv = i elseif tbl[i] == movehere then sm = i end
if sv and sm then break end
end
tremove(tbl, sm)
tinsert(tbl, sv, movehere)
db[groupName][auraType].priority = tconcat(tbl,',')
elseif found and friendState then
local realValue = strmatch(value, '^Friendly:([^,]*)') or strmatch(value, '^Enemy:([^,]*)') or value
local friend = filterMatch(filter, E:EscapeString('Friendly:'..realValue))
local enemy = filterMatch(filter, E:EscapeString('Enemy:'..realValue))
local default = filterMatch(filter, E:EscapeString(realValue))
local state =
(friend and (not enemy) and format('%s%s','Enemy:',realValue)) --[x] friend [ ] enemy: > enemy
or ((not enemy and not friend) and format('%s%s','Friendly:',realValue)) --[ ] friend [ ] enemy: > friendly
or (enemy and (not friend) and default and format('%s%s','Friendly:',realValue)) --[ ] friend [x] enemy: (default exists) > friendly
or (enemy and (not friend) and strmatch(value, '^Enemy:') and realValue) --[ ] friend [x] enemy: (no default) > realvalue
or (friend and enemy and realValue) --[x] friend [x] enemy: > default
if state then
local stateFound = filterMatch(filter, E:EscapeString(state))
if not stateFound then
local tbl, sv = {strsplit(',',filter)}
for i in ipairs(tbl) do
if tbl[i] == value then
sv = i
break
end
end
tinsert(tbl, sv, state)
tremove(tbl, sv+1)
db[groupName][auraType].priority = tconcat(tbl,',')
end
end
elseif found and remove then
db[groupName][auraType].priority = gsub(filter, found, '')
elseif not found and not remove then
db[groupName][auraType].priority = (filter == '' and value) or (filter..','..value)
end
end
end
E:AddLib("AceGUI", "AceGUI-3.0") E:AddLib("AceGUI", "AceGUI-3.0")
E:AddLib("AceConfig", "AceConfig-3.0-ElvUI") E:AddLib("AceConfig", "AceConfig-3.0-ElvUI")
E:AddLib("AceConfigDialog", "AceConfigDialog-3.0-ElvUI") E:AddLib("AceConfigDialog", "AceConfigDialog-3.0-ElvUI")
+14 -6
View File
@@ -35,6 +35,17 @@ local positionValues = {
BOTTOM = "BOTTOM" BOTTOM = "BOTTOM"
} }
local growthDirectionValues = {
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"])
}
local minHeight, minWidth = 2, 40 local minHeight, minWidth = 2, 40
local function MaxHeight(unit) local heightType = strfind(unit, 'FRIENDLY') and 'friendlyHeight' or strfind(unit, 'ENEMY') and 'enemyHeight' return max(NP.db.plateSize[heightType] or 0, 20) end local function MaxHeight(unit) local heightType = strfind(unit, 'FRIENDLY') and 'friendlyHeight' or strfind(unit, 'ENEMY') and 'enemyHeight' return max(NP.db.plateSize[heightType] or 0, 20) end
local function MaxWidth(unit) local widthType = strfind(unit, 'FRIENDLY') and 'friendlyWidth' or strfind(unit, 'ENEMY') and 'enemyWidth' return max(NP.db.plateSize[widthType] or 0, 250) end local function MaxWidth(unit) local widthType = strfind(unit, 'FRIENDLY') and 'friendlyWidth' or strfind(unit, 'ENEMY') and 'enemyWidth' return max(NP.db.plateSize[widthType] or 0, 250) end
@@ -160,8 +171,7 @@ local function GetUnitSettings(unit, name)
group.args.buffsGroup.args.yOffset = ACH:Range(L["Y-Offset"], nil, 11, { min = -100, max = 100, step = 1 }) group.args.buffsGroup.args.yOffset = ACH:Range(L["Y-Offset"], nil, 11, { min = -100, max = 100, step = 1 })
group.args.buffsGroup.args.anchorPoint = ACH:Select(L["Anchor Point"], L["What point to anchor to the frame you set to attach to."], 12, positionValues) group.args.buffsGroup.args.anchorPoint = ACH:Select(L["Anchor Point"], L["What point to anchor to the frame you set to attach to."], 12, positionValues)
group.args.buffsGroup.args.attachTo = ACH:Select(L["Attach To"], L["What to attach the anchor frame to."], 13, { FRAME = L["Frame"], DEBUFFS = L["Debuffs"], HEALTH = L["Health"], POWER = L["Power"] }, nil, nil, nil, nil, function() local position = E.db.nameplates.units[unit].smartAuraPosition return position == 'BUFFS_ON_DEBUFFS' or position == 'FLUID_BUFFS_ON_DEBUFFS' end) group.args.buffsGroup.args.attachTo = ACH:Select(L["Attach To"], L["What to attach the anchor frame to."], 13, { FRAME = L["Frame"], DEBUFFS = L["Debuffs"], HEALTH = L["Health"], POWER = L["Power"] }, nil, nil, nil, nil, function() local position = E.db.nameplates.units[unit].smartAuraPosition return position == 'BUFFS_ON_DEBUFFS' or position == 'FLUID_BUFFS_ON_DEBUFFS' end)
group.args.buffsGroup.args.growthX = ACH:Select(L["Growth X-Direction"], nil, 14, { LEFT = L["Left"], RIGHT = L["Right"] }, nil, nil, nil, nil, function() local point = E.db.nameplates.units[unit].buffs.anchorPoint return point == 'LEFT' or point == 'RIGHT' end) group.args.buffsGroup.args.growthDirection = ACH:Select(L["Growth Direction"], nil, 14, growthDirectionValues)
group.args.buffsGroup.args.growthY = ACH:Select(L["Growth Y-Direction"], nil, 15, { UP = L["Up"], DOWN = L["Down"] }, nil, nil, nil, nil, function() local point = E.db.nameplates.units[unit].buffs.anchorPoint return point == 'TOP' or point == 'BOTTOM' end)
group.args.buffsGroup.args.sortMethod = ACH:Select(L["Sort By"], L["Method to sort by."], 16, { TIME_REMAINING = L["Time Remaining"], DURATION = L["Duration"], NAME = L["Name"], INDEX = L["Index"], PLAYER = L["Player"] }) group.args.buffsGroup.args.sortMethod = ACH:Select(L["Sort By"], L["Method to sort by."], 16, { TIME_REMAINING = L["Time Remaining"], DURATION = L["Duration"], NAME = L["Name"], INDEX = L["Index"], PLAYER = L["Player"] })
group.args.buffsGroup.args.sortDirection = ACH:Select(L["Sort Direction"], L["Ascending or Descending order."], 17, { ASCENDING = L["Ascending"], DESCENDING = L["Descending"] }) group.args.buffsGroup.args.sortDirection = ACH:Select(L["Sort Direction"], L["Ascending or Descending order."], 17, { ASCENDING = L["Ascending"], DESCENDING = L["Descending"] })
@@ -214,8 +224,7 @@ local function GetUnitSettings(unit, name)
group.args.debuffsGroup.args.yOffset = ACH:Range(L["Y-Offset"], nil, 11, { min = -100, max = 100, step = 1 }) group.args.debuffsGroup.args.yOffset = ACH:Range(L["Y-Offset"], nil, 11, { min = -100, max = 100, step = 1 })
group.args.debuffsGroup.args.anchorPoint = ACH:Select(L["Anchor Point"], L["What point to anchor to the frame you set to attach to."], 12, positionValues) group.args.debuffsGroup.args.anchorPoint = ACH:Select(L["Anchor Point"], L["What point to anchor to the frame you set to attach to."], 12, positionValues)
group.args.debuffsGroup.args.attachTo = ACH:Select(L["Attach To"], L["What to attach the anchor frame to."], 13, { FRAME = L["Frame"], BUFFS = L["Buffs"], HEALTH = L["Health"], POWER = L["Power"] }, nil, nil, nil, nil, function() local position = E.db.nameplates.units[unit].smartAuraPosition return position == 'BUFFS_ON_DEBUFFS' or position == 'FLUID_BUFFS_ON_DEBUFFS' end) group.args.debuffsGroup.args.attachTo = ACH:Select(L["Attach To"], L["What to attach the anchor frame to."], 13, { FRAME = L["Frame"], BUFFS = L["Buffs"], HEALTH = L["Health"], POWER = L["Power"] }, nil, nil, nil, nil, function() local position = E.db.nameplates.units[unit].smartAuraPosition return position == 'BUFFS_ON_DEBUFFS' or position == 'FLUID_BUFFS_ON_DEBUFFS' end)
group.args.debuffsGroup.args.growthX = ACH:Select(L["Growth X-Direction"], nil, 14, { LEFT = L["Left"], RIGHT = L["Right"] }, nil, nil, nil, nil, function() local point = E.db.nameplates.units[unit].debuffs.anchorPoint return point == 'LEFT' or point == 'RIGHT' end) group.args.debuffsGroup.args.growthDirection = ACH:Select(L["Growth Direction"], nil, 14, growthDirectionValues)
group.args.debuffsGroup.args.growthY = ACH:Select(L["Growth Y-Direction"], nil, 15, { UP = L["Up"], DOWN = L["Down"] }, nil, nil, nil, nil, function() local point = E.db.nameplates.units[unit].debuffs.anchorPoint return point == 'TOP' or point == 'BOTTOM' end)
group.args.debuffsGroup.args.sortMethod = ACH:Select(L["Sort By"], L["Method to sort by."], 16, { TIME_REMAINING = L["Time Remaining"], DURATION = L["Duration"], NAME = L["Name"], INDEX = L["Index"], PLAYER = L["Player"] }) group.args.debuffsGroup.args.sortMethod = ACH:Select(L["Sort By"], L["Method to sort by."], 16, { TIME_REMAINING = L["Time Remaining"], DURATION = L["Duration"], NAME = L["Name"], INDEX = L["Index"], PLAYER = L["Player"] })
group.args.debuffsGroup.args.sortDirection = ACH:Select(L["Sort Direction"], L["Ascending or Descending order."], 17, { ASCENDING = L["Ascending"], DESCENDING = L["Descending"] }) group.args.debuffsGroup.args.sortDirection = ACH:Select(L["Sort Direction"], L["Ascending or Descending order."], 17, { ASCENDING = L["Ascending"], DESCENDING = L["Descending"] })
@@ -419,8 +428,7 @@ NamePlates.generalGroup.args.bossMods.args.settings.args.spacing = ACH:Range(L["
NamePlates.generalGroup.args.bossMods.args.settings.args.xOffset = ACH:Range(L["X-Offset"], nil, 5, { min = -100, max = 100, step = 1 }) NamePlates.generalGroup.args.bossMods.args.settings.args.xOffset = ACH:Range(L["X-Offset"], nil, 5, { min = -100, max = 100, step = 1 })
NamePlates.generalGroup.args.bossMods.args.settings.args.yOffset = ACH:Range(L["Y-Offset"], nil, 6, { min = -100, max = 100, step = 1 }) NamePlates.generalGroup.args.bossMods.args.settings.args.yOffset = ACH:Range(L["Y-Offset"], nil, 6, { min = -100, max = 100, step = 1 })
NamePlates.generalGroup.args.bossMods.args.settings.args.anchorPoint = ACH:Select(L["Anchor Point"], L["What point to anchor to the frame you set to attach to."], 7, positionValues) NamePlates.generalGroup.args.bossMods.args.settings.args.anchorPoint = ACH:Select(L["Anchor Point"], L["What point to anchor to the frame you set to attach to."], 7, positionValues)
NamePlates.generalGroup.args.bossMods.args.settings.args.growthX = ACH:Select(L["Growth X-Direction"], nil, 8, { LEFT = L["Left"], RIGHT = L["Right"] }, nil, nil, nil, nil, function() local point = E.db.nameplates.bossMods.anchorPoint return point == 'LEFT' or point == 'RIGHT' end) NamePlates.generalGroup.args.bossMods.args.settings.args.growthDirection = ACH:Select(L["Growth Direction"], nil, 14, growthDirectionValues)
NamePlates.generalGroup.args.bossMods.args.settings.args.growthY = ACH:Select(L["Growth Y-Direction"], nil, 9, { UP = L["Up"], DOWN = L["Down"] }, nil, nil, nil, nil, function() local point = E.db.nameplates.bossMods.anchorPoint return point == 'TOP' or point == 'BOTTOM' end)
NamePlates.generalGroup.args.clickableRange = ACH:Group(L["Clickable Size"], nil, 70, nil, function(info) return E.db.nameplates.plateSize[info[#info]] end, function(info, value) E.db.nameplates.plateSize[info[#info]] = value NP:ConfigureAll() end) NamePlates.generalGroup.args.clickableRange = ACH:Group(L["Clickable Size"], nil, 70, nil, function(info) return E.db.nameplates.plateSize[info[#info]] end, function(info, value) E.db.nameplates.plateSize[info[#info]] = value NP:ConfigureAll() end)