local addonname, addontbl = ... local addon = Kungaloosh local L = addontbl.L local options = {} local UpdateIconLists local function getprofile(info) return addon.db.profile[info[2]] end local function setprofile(info, val) addon.db.profile[info[2]] = val end options.general = { type = "group", name = addonname, args = { general = { name = L["General"], type = "group", order = 1, inline = true, args = { desc = { name = function(info) for k,v in pairs(addon.db.profile.enabled_in) do if v == true then return L["Kungaloosh will be automatically enabled when getting assigned as tank but can also be manually enabled with the slash command |cff00ff00/kl|r."] end end return L["Kungaloosh must be manually enabled with the slash command |cff00ff00/kl|r."] end, type = "description", order = 1 }, sep = { order = 2, type = "header", name = "" }, enabled_in = { name = L["Enable when assigned as tank in a ..."], desc = L["Enables the addon automatically if you\"re assigned as tank in a dungeon or raid"], type = "multiselect", order = 3, width = "half", values = { dungeon = L["Dungeon"], raid = L["Raid"] }, get = function(info, key) return addon.db.profile.enabled_in[key] end, set = function(info, key, val) addon.db.profile.enabled_in[key] = val end }, }, }, threat = { name = L["Threat"], type = "group", order = 2, inline = true, args = { desc = { name = function(info) return L["Kungaloosh will place a raid target icon on the target when you have done |cffff0000%d|r or more threat to it."]:format(addon:GetMinThreat()) end, type = "description", order = 1 }, sep = { order = 2, type = "header", name = "" }, dynamic_minthreat = { name = L["Dynamic threat value"], desc = L["Tries to guess a good threat value based on your level"], type = "toggle", order = 3, set = setprofile, get = getprofile }, minthreat = { name = L["Manual threat value"], desc = L["Threat value to have before placing a raid target icon"], type = "input", order = 4, set = function(info, val) setprofile(info, tonumber(val)) end, get = function(info) return tostring(getprofile(info)) end, disabled = function(info) return addon.db.profile.dynamic_minthreat end, validate = function(info, value) if tonumber(value) then return true else return L["Invalid number"] end end } } }, icons = { name = L["Icons"], type = "group", order = 3, inline = true, args = { desc = { name = L["Here you can customize what icons to use and in what order they will be placed. Click on the icon to either add or remove it."], type = "description", order = 1 }, sep = { order = 2, type = "header", name = "" }, enabled = { name = L["Enabled"], type = "group", order = 3, args = {} }, disabled = { name = L["Available"], type = "group", order = 4, args = {} }, icon_recycle = { name = L["Recycle icons in combat"], desc = L["When this is disabled a icon is not recycled until combat has finished."], type = "toggle", order = 5, set = setprofile, get = getprofile }, icon_recycle_time = { name = function(info) return L["Recycle icon from dead mob after %d seconds."]:format(getprofile(info)) end, desc = L["When a mob dies the icon it had will not be recycled until this time has passed."], type = "range", order = 6, width = "double", min = 1, max = 1000, softMin = 1, softMax = 200, step = 1, set = setprofile, get = getprofile, disabled = function(info) return not addon.db.profile.icon_recycle end, }, }, }, } } local GetRaidTargetCoords, CreateIconOptions, IconExecuteFunc, UpdateIconLists local iconopts = {} function GetRaidTargetCoords(i) local index = i - 1 local inc = RAID_TARGET_ICON_DIMENSION / RAID_TARGET_TEXTURE_DIMENSION local left = mod(index, RAID_TARGET_TEXTURE_COLUMNS) * inc local right = left + inc local top = floor(index / RAID_TARGET_TEXTURE_ROWS) * inc local bottom = top + inc return left, right, top, bottom end function IconExecuteFunc(info) local state, icon = info[2], tonumber(info[3]) if state == "enabled" then for i,v in ipairs(addon.db.profile.raid_icons) do if v == icon then table.remove(addon.db.profile.raid_icons, i) end end else table.insert(addon.db.profile.raid_icons, icon) end UpdateIconLists() end function CreateIconOptions(icon) return { type = "execute", name = _G["RAID_TARGET_"..icon], image = [[Interface\TargetingFrame\UI-RaidTargetingIcons]], imageCoords = { GetRaidTargetCoords(icon) }, imageWidth = 16, imageHeight = 16, width = "half", func = IconExecuteFunc } end function UpdateIconLists() local function IsEnabled(icon) for i,v in ipairs(addon.db.profile.raid_icons) do if v == icon then return true end end end table.wipe(options.general.args.icons.args.enabled.args) table.wipe(options.general.args.icons.args.disabled.args) for i, icon in ipairs(addon.db.profile.raid_icons) do local icontbl = iconopts[icon] icontbl.order = i options.general.args.icons.args.enabled.args[tostring(icon)] = icontbl end for i = 1,8 do if not IsEnabled(i) then local icontbl = iconopts[i] icontbl.order = i options.general.args.icons.args.disabled.args[tostring(i)] = icontbl end end LibStub("AceConfigRegistry-3.0"):NotifyChange(addonname) end function addon:CreateConfig() options.profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(self.db) LibStub("AceConfig-3.0"):RegisterOptionsTable("Kungaloosh-General", options.general) LibStub("AceConfig-3.0"):RegisterOptionsTable("Kungaloosh-Profiles", options.profiles) LibStub("AceConfigDialog-3.0"):AddToBlizOptions("Kungaloosh-General", addonname) LibStub("AceConfigDialog-3.0"):AddToBlizOptions("Kungaloosh-Profiles", "Profiles", addonname) LibStub("tekKonfig-AboutPanel").new(addonname, addonname) for i = 1,8 do iconopts[i] = CreateIconOptions(i) end self.db.RegisterCallback(self, "OnNewProfile", UpdateIconLists) self.db.RegisterCallback(self, "OnProfileChanged", UpdateIconLists) self.db.RegisterCallback(self, "OnProfileCopied", UpdateIconLists) self.db.RegisterCallback(self, "OnProfileDeleted", UpdateIconLists) self.db.RegisterCallback(self, "OnProfileReset", UpdateIconLists) UpdateIconLists() end