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.

103 lines
3.4 KiB

-------------------------------------------------------------------------------
---------------------------------- NAMESPACE ----------------------------------
-------------------------------------------------------------------------------
local ADDON_NAME, ns = ...
local L = ns.locale
local Class = ns.Class
-------------------------------------------------------------------------------
------------------------------------ GROUP ------------------------------------
-------------------------------------------------------------------------------
local Group = Class('Group')
function Group:Initialize(name, icon, attrs)
if not name then error('Groups must be initialized with a name!') end
if not icon then error('Groups must be initialized with an icon!') end
self.name = name
self.icon = icon
self.label = L['options_icons_' .. name]
self.desc = L['options_icons_' .. name .. '_desc']
-- Prepare any links in this group label/description
ns.PrepareLinks(self.label)
ns.PrepareLinks(self.desc)
if attrs then for k, v in pairs(attrs) do self[k] = v end end
self.alphaArg = 'icon_alpha_' .. self.name
self.scaleArg = 'icon_scale_' .. self.name
self.displayArg = 'icon_display_' .. self.name
if not self.defaults then self.defaults = {} end
self.defaults.alpha = self.defaults.alpha or 1
self.defaults.scale = self.defaults.scale or 1
self.defaults.display = self.defaults.display ~= false
end
function Group:HasEnabledNodes(map)
for coord, node in pairs(map.nodes) do
if node.group == self and map:CanDisplay(node, coord) then
return true
end
end
return false
end
-- Override to hide this group in the UI under certain circumstances
function Group:IsEnabled()
if self.class and self.class ~= ns.class then return false end
if self.faction and self.faction ~= ns.faction then return false end
return true
end
function Group:_GetOpt(option, default, mapID)
local value
if ns:GetOpt('per_map_settings') then
value = ns:GetOpt(option .. '_' .. mapID)
else
value = ns:GetOpt(option)
end
return (value == nil) and default or value
end
function Group:_SetOpt(option, value, mapID)
if ns:GetOpt('per_map_settings') then
return ns:SetOpt(option .. '_' .. mapID, value)
end
return ns:SetOpt(option, value)
end
-- Get group settings
function Group:GetAlpha(mapID)
return self:_GetOpt(self.alphaArg, self.defaults.alpha, mapID)
end
function Group:GetScale(mapID)
return self:_GetOpt(self.scaleArg, self.defaults.scale, mapID)
end
function Group:GetDisplay(mapID)
return self:_GetOpt(self.displayArg, self.defaults.display, mapID)
end
-- Set group settings
function Group:SetAlpha(v, mapID) self:_SetOpt(self.alphaArg, v, mapID) end
function Group:SetScale(v, mapID) self:_SetOpt(self.scaleArg, v, mapID) end
function Group:SetDisplay(v, mapID) self:_SetOpt(self.displayArg, v, mapID) end
-------------------------------------------------------------------------------
ns.Group = Group
ns.GROUP_HIDDEN = {display = false}
ns.GROUP_HIDDEN75 = {alpha = 0.75, display = false}
ns.GROUP_ALPHA75 = {alpha = 0.75}
ns.groups = {
PETBATTLE = Group('pet_battles', 'paw_y'),
QUEST = Group('quests', 'quest_ay'),
RARE = Group('rares', 'skull_w', {defaults = ns.GROUP_ALPHA75}),
TREASURE = Group('treasures', 'chest_gy', {defaults = ns.GROUP_ALPHA75}),
MISC = Group('misc', 454046)
}