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.
307 lines
8.0 KiB
307 lines
8.0 KiB
-- ----------------------------------------------------------------------------
|
|
-- Localized Lua globals.
|
|
-- ----------------------------------------------------------------------------
|
|
-- Libraries
|
|
local table = _G.table
|
|
|
|
-- Functions
|
|
local pairs = _G.pairs
|
|
|
|
-- ----------------------------------------------------------------------------
|
|
-- AddOn namespace.
|
|
-- ----------------------------------------------------------------------------
|
|
local AddOnFolderName, private = ...
|
|
|
|
local LibStub = _G.LibStub
|
|
local NPCScan = LibStub("AceAddon-3.0"):GetAddon(AddOnFolderName)
|
|
local L = LibStub("AceLocale-3.0"):GetLocale(AddOnFolderName)
|
|
|
|
local AceConfigRegistry = LibStub("AceConfigRegistry-3.0")
|
|
local LibSharedMedia = LibStub("LibSharedMedia-3.0")
|
|
|
|
-- ----------------------------------------------------------------------------
|
|
-- Constants.
|
|
-- ----------------------------------------------------------------------------
|
|
local SOUND_CHANNELS = {
|
|
"Ambience",
|
|
"Master",
|
|
"Music",
|
|
"SFX",
|
|
}
|
|
|
|
local LOCALIZED_SOUND_CHANNELS = {
|
|
_G.AMBIENCE_VOLUME,
|
|
_G.MASTER,
|
|
_G.MUSIC_VOLUME,
|
|
_G.SOUND_VOLUME,
|
|
}
|
|
|
|
local SOUND_CHANNEL_INDICES = {}
|
|
|
|
for index = 1, #SOUND_CHANNELS do
|
|
SOUND_CHANNEL_INDICES[SOUND_CHANNELS[index]] = index
|
|
end
|
|
|
|
-- ----------------------------------------------------------------------------
|
|
-- Variables.
|
|
-- ----------------------------------------------------------------------------
|
|
local profile
|
|
local AlertNamesOptions = {}
|
|
|
|
-- ----------------------------------------------------------------------------
|
|
-- Helpers.
|
|
-- ----------------------------------------------------------------------------
|
|
local function UpdateAlertNamesOptions()
|
|
local sharedMediaNames = profile.alert.sound.sharedMediaNames
|
|
local sortedSoundNames = {}
|
|
|
|
for soundName in pairs(sharedMediaNames) do
|
|
if sharedMediaNames[soundName] ~= false then
|
|
sortedSoundNames[#sortedSoundNames + 1] = soundName
|
|
end
|
|
end
|
|
|
|
table.sort(sortedSoundNames)
|
|
table.wipe(AlertNamesOptions)
|
|
|
|
for index = 1, #sortedSoundNames do
|
|
local soundName = sortedSoundNames[index]
|
|
|
|
AlertNamesOptions[soundName .. index] = {
|
|
order = index,
|
|
name = soundName,
|
|
descStyle = "inline",
|
|
type = "toggle",
|
|
width = "full",
|
|
get = function()
|
|
return true
|
|
end,
|
|
set = function()
|
|
if private.DefaultPreferences.profile.alert.sound.sharedMediaNames[soundName] then
|
|
sharedMediaNames[soundName] = false
|
|
else
|
|
sharedMediaNames[soundName] = nil
|
|
end
|
|
|
|
UpdateAlertNamesOptions()
|
|
end,
|
|
}
|
|
end
|
|
|
|
AceConfigRegistry:NotifyChange(AddOnFolderName)
|
|
end
|
|
|
|
-- ----------------------------------------------------------------------------
|
|
-- Initialization.
|
|
-- ----------------------------------------------------------------------------
|
|
local AlertOptions
|
|
local firstRun = true
|
|
|
|
local function GetAlertOptions()
|
|
profile = private.db.profile
|
|
|
|
local function IsSoundDisabled()
|
|
return not profile.alert.sound.isEnabled
|
|
end
|
|
|
|
if not AlertOptions then
|
|
LibSharedMedia:Register("sound", "NPCScan Killed", 567394)
|
|
LibSharedMedia:Register("sound", "NPCScan Chimes", 1489461)
|
|
LibSharedMedia:Register("sound", "NPCScan Gruntling Horn", 598196)
|
|
LibSharedMedia:Register("sound", "NPCScan Ogre War Drums", 567275)
|
|
LibSharedMedia:Register("sound", "NPCScan Scourge Horn", 567386)
|
|
end
|
|
|
|
AlertOptions = AlertOptions or {
|
|
order = 4,
|
|
name = L["Alerts"],
|
|
descStyle = "inline",
|
|
type = "group",
|
|
childGroups = "tree",
|
|
args = {
|
|
screenFlash = {
|
|
order = 2,
|
|
name = L["Screen Flash"],
|
|
type = "group",
|
|
args = {
|
|
isEnabled = {
|
|
order = 1,
|
|
name = _G.ENABLE,
|
|
descStyle = "inline",
|
|
type = "toggle",
|
|
width = "full",
|
|
get = function()
|
|
return profile.alert.screenFlash.isEnabled
|
|
end,
|
|
set = function(_, value)
|
|
profile.alert.screenFlash.isEnabled = value
|
|
end,
|
|
},
|
|
texture = {
|
|
order = 2,
|
|
name = _G.TEXTURES_SUBHEADER,
|
|
descStyle = "inline",
|
|
type = "select",
|
|
dialogControl = 'LSM30_Background',
|
|
values = _G.AceGUIWidgetLSMlists.background,
|
|
disabled = function()
|
|
return not profile.alert.screenFlash.isEnabled
|
|
end,
|
|
get = function()
|
|
return profile.alert.screenFlash.texture
|
|
end,
|
|
set = function(_, value)
|
|
profile.alert.screenFlash.texture = value
|
|
end,
|
|
},
|
|
color = {
|
|
order = 3,
|
|
name = _G.COLOR,
|
|
descStyle = "inline",
|
|
hasAlpha = true,
|
|
type = "color",
|
|
disabled = function()
|
|
return not profile.alert.screenFlash.isEnabled
|
|
end,
|
|
get = function()
|
|
local color = profile.alert.screenFlash.color
|
|
|
|
if color then
|
|
return color.r, color.g, color.b, color.a else return 0, 0, 0, 1
|
|
end
|
|
end,
|
|
set = function(_, r, g, b, a)
|
|
local color = profile.alert.screenFlash.color
|
|
|
|
if not color then
|
|
profile.alert.screenFlash.color = {
|
|
r = r,
|
|
g = g,
|
|
b = b,
|
|
a = a
|
|
}
|
|
else
|
|
color.r = r
|
|
color.g = g
|
|
color.b = b
|
|
color.a = a
|
|
end
|
|
end,
|
|
},
|
|
preview = {
|
|
order = 4,
|
|
name = _G.PREVIEW,
|
|
descStyle = "inline",
|
|
type = "execute",
|
|
width = "normal",
|
|
disabled = function()
|
|
return not profile.alert.screenFlash.isEnabled
|
|
end,
|
|
func = function()
|
|
local alert = profile.alert
|
|
NPCScan:PlayFlashAnimation(alert.screenFlash.texture, alert.screenFlash.color)
|
|
end,
|
|
},
|
|
},
|
|
},
|
|
sound = {
|
|
order = 3,
|
|
name = _G.SOUND,
|
|
descStyle = "inline",
|
|
type = "group",
|
|
args = {
|
|
isEnabled = {
|
|
order = 10,
|
|
name = _G.ENABLE,
|
|
descStyle = "inline",
|
|
type = "toggle",
|
|
get = function()
|
|
return profile.alert.sound.isEnabled
|
|
end,
|
|
set = function(_, value)
|
|
profile.alert.sound.isEnabled = value
|
|
end,
|
|
},
|
|
ignoreMute = {
|
|
order = 20,
|
|
name = L["Ignore Mute"],
|
|
desc = L["Play alert sounds when sound is muted."],
|
|
type = "toggle",
|
|
width = "double",
|
|
disabled = IsSoundDisabled,
|
|
get = function()
|
|
return profile.alert.sound.ignoreMute
|
|
end,
|
|
set = function(_, value)
|
|
profile.alert.sound.ignoreMute = value
|
|
end,
|
|
},
|
|
channel = {
|
|
order = 30,
|
|
name = _G.SOUND_CHANNELS,
|
|
descStyle = "inline",
|
|
type = "select",
|
|
values = LOCALIZED_SOUND_CHANNELS,
|
|
disabled = IsSoundDisabled,
|
|
get = function()
|
|
return SOUND_CHANNEL_INDICES[profile.alert.sound.channel]
|
|
end,
|
|
set = function(_, value)
|
|
profile.alert.sound.channel = SOUND_CHANNELS[value]
|
|
end,
|
|
},
|
|
addAlertSound = {
|
|
order = 40,
|
|
name = _G.ADD,
|
|
descStyle = "inline",
|
|
type = "select",
|
|
dialogControl = "LSM30_Sound",
|
|
values = _G.AceGUIWidgetLSMlists.sound,
|
|
disabled = IsSoundDisabled,
|
|
get = function()
|
|
-- Intentionally empty, since there can be multiple sounds.
|
|
end,
|
|
set = function(_, value)
|
|
profile.alert.sound.sharedMediaNames[value] = true
|
|
UpdateAlertNamesOptions()
|
|
end,
|
|
},
|
|
sharedMediaNames = {
|
|
order = 50,
|
|
name = _G.ASSIGNED_COLON,
|
|
type = "group",
|
|
inline = true,
|
|
disabled = IsSoundDisabled,
|
|
args = AlertNamesOptions,
|
|
},
|
|
preview = {
|
|
order = 60,
|
|
name = _G.PREVIEW,
|
|
descStyle = "inline",
|
|
type = "execute",
|
|
width = "normal",
|
|
disabled = IsSoundDisabled,
|
|
func = function()
|
|
private.PlayAlertSounds(true)
|
|
end,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
UpdateAlertNamesOptions()
|
|
|
|
if firstRun then
|
|
firstRun = nil
|
|
|
|
local output = NPCScan:GetSinkAce3OptionsDataTable()
|
|
output.order = 1
|
|
|
|
AlertOptions.args.output = output
|
|
end
|
|
|
|
return AlertOptions
|
|
end
|
|
|
|
private.GetAlertOptions = GetAlertOptions
|
|
|