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
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)
|
|
}
|
|
|