Modules/Auras: More fixes to aura filtering and nameplate auras
This commit is contained in:
@@ -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("AceConfig", "AceConfig-3.0-ElvUI")
|
||||
E:AddLib("AceConfigDialog", "AceConfigDialog-3.0-ElvUI")
|
||||
|
||||
@@ -35,6 +35,17 @@ local positionValues = {
|
||||
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 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
|
||||
@@ -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.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.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.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.growthDirection = ACH:Select(L["Growth Direction"], nil, 14, growthDirectionValues)
|
||||
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"] })
|
||||
|
||||
@@ -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.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.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.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.growthDirection = ACH:Select(L["Growth Direction"], nil, 14, growthDirectionValues)
|
||||
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"] })
|
||||
|
||||
@@ -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.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.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.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.bossMods.args.settings.args.growthDirection = ACH:Select(L["Growth Direction"], nil, 14, growthDirectionValues)
|
||||
|
||||
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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user