-- Author : Chrono
-- Create Date : 6/14/2020 6:22:07 PM
local ADDON_NAME, Import = ...;
defaultValue = {
IS_FRAME_VISIBLE = true,
DRESS_BLIZZ_BUBBLE = true,
SMART_COLORING = true,
CREATE_BUTTON_EXTRA_TEXT = true,
SHADOW_LOAD = true,
SELECTED_COLOR_RGB = { r = 1.0, g = 1.0, b = 1.0 },
SELECTED_COLOR = "Say",
CUSTOM_COLOR = { r = 1.0, g = 1.0, b = 1.0 },
GENERATE_TOTAL_RP3_BUBBLES = true,
GENERATE_TOTAL_RP3_BUBBLES_FOR_OTHER_PLAYERS = true,
FONT_SIZE = 13
}
local temporaryValue = {}
CategoryId = -1;
function initSettings()
if settings == nil then
settings = {}
end
settings.get = function(key)
if settings[key] == nil then
settings[key] = defaultValue[key];
end
return settings[key];
end
settings.set = function(key, value)
settings[key] = value;
end
Import.settings = settings;
ConstructSettingsUI();
hooksecurefunc(SettingsPanel, "FinalizeCommit", CommitChanges);
if (settings.get("DRESS_BLIZZ_BUBBLE")) then
local fontPath, _, fontFlags = ChatBubbleFont:GetFont();
ChatBubbleFont:SetFont(fontPath, settings.get("FONT_SIZE"), fontFlags);
end
end
function CommitChanges()
local restartRequired = (temporaryValue.FONT_SIZE ~= nil and settings.FONT_SIZE ~= temporaryValue.FONT_SIZE) or
(temporaryValue.DRESS_BLIZZ_BUBBLE ~= nil and settings.DRESS_BLIZZ_BUBBLE ~= temporaryValue.DRESS_BLIZZ_BUBBLE);
for key, value in pairs(temporaryValue) do
settings[key] = value;
end
if (restartRequired) then
ReloadUI()
end
temporaryValue = {}
end
function ConstructSettingsUI()
local category, layout = Settings.RegisterVerticalLayoutCategory("Speaker Bee");
-- layout:AddInitializer(CreateSettingsListSectionHeaderInitializer("General"));
AddGeneralHeader(layout);
RegisterFontSize(category);
RegisterDressBlizzBubble(category);
RegisterCreateButtonExtraText(category);
RegisterSmartNameColours(category);
RegisterShadowLoad(category);
RegisterTotalRP3Settings(layout, category);
Settings.RegisterAddOnCategory(category)
CategoryId = category:GetID();
end
function AddGeneralHeader(layout)
local name = "TotalRP3";
local data = {name = name};
local topInitializer = Settings.CreateElementInitializer("SpeakerBeeGeneralHeader", data);
topInitializer = layout:AddInitializer(topInitializer);
end
function RegisterFontSize(category)
local variable = "FONT_SIZE";
local name = "Font Size";
local tooltip = "Controls the font size of all chat bubbles.";
local defaultValue = settings.get("FONT_SIZE");
local minValue = 8;
local maxValue = 72;
local step = 1;
local setting = Settings.RegisterAddOnSetting(category, name, variable, type(defaultValue), defaultValue);
setting:SetCommitFlags(Settings.CommitFlag.Apply);
local callback = function(o, s, value)
temporaryValue.FONT_SIZE = value;
ToggleRestartRequired();
end
Settings.SetOnValueChangedCallback(variable, callback);
local options = Settings.CreateSliderOptions(minValue, maxValue, step);
options:SetLabelFormatter(MinimalSliderWithSteppersMixin.Label.Right);
Settings.CreateSlider(category, setting, options, tooltip)
end
function RegisterDressBlizzBubble(category)
local variable = "DRESS_BLIZZ_BUBBLE"
local name = "Dress Chat Bubbles"
local tooltip = "If checked, this puts the speaking character's name on regular chat bubbles"
local defaultValue = settings.get("DRESS_BLIZZ_BUBBLE");
local callback = function(o, s, value)
temporaryValue.DRESS_BLIZZ_BUBBLE = value;
ToggleRestartRequired();
end
local setting = Settings.RegisterAddOnSetting(category, name, variable, type(defaultValue), defaultValue);
setting:SetCommitFlags(Settings.CommitFlag.Apply);
Settings.SetOnValueChangedCallback(variable, callback);
Settings.CreateCheckBox(category, setting, tooltip);
end
function RegisterCreateButtonExtraText(category)
local variable = "CREATE_BUTTON_EXTRA_TEXT"
local name = "Dynamic Create Button"
local tooltip = "If checked, the create button text will change to include (target) or (self) when shift or ctrl is held"
local defaultValue = settings.get("CREATE_BUTTON_EXTRA_TEXT")
local setting = Settings.RegisterAddOnSetting(category, name, variable, type(defaultValue), defaultValue);
Settings.SetOnValueChangedCallback(variable, function(o, s, value) temporaryValue.CREATE_BUTTON_EXTRA_TEXT = value; end);
Settings.CreateCheckBox(category, setting, tooltip);
end
function RegisterSmartNameColours(category)
local variable = "SMART_COLORING"
local name = "Smart Name Colouring"
local tooltip = "If checked, the colour of the name on custom chat bubbles will automatically select npc or player colours when shift or ctrl is held"
local defaultValue = settings.get("SMART_COLORING")
local setting = Settings.RegisterAddOnSetting(category, name, variable, type(defaultValue), defaultValue);
Settings.SetOnValueChangedCallback(variable, function(o, s, value) temporaryValue.SMART_COLORING = value; end);
Settings.CreateCheckBox(category, setting, tooltip);
end
function RegisterShadowLoad(category)
local variable = "SHADOW_LOAD"
local name = "Load Shadow Frame"
local tooltip = "If checked and the addon frame is hidden, the frame will show up as a shadow when the game loads until you mouse over it."
local defaultValue = settings.get("SHADOW_LOAD");
local setting = Settings.RegisterAddOnSetting(category, name, variable, type(defaultValue), defaultValue);
Settings.SetOnValueChangedCallback(variable, function(o, s, value) temporaryValue.SHADOW_LOAD = value; end);
Settings.CreateCheckBox(category, setting, tooltip);
end
function RegisterTotalRP3Settings(layout, category)
local totalRP3Installed = TRP3_API ~= nil;
local function isModifiable()
return totalRP3Installed;
end
AddTotalRP3Header(layout, totalRP3Installed)
RegisterGenerateTotalRP3BubbleSetting(category, layout, isModifiable);
end
function AddTotalRP3Header(layout, totalRP3Installed)
local headerTemplate = totalRP3Installed and "SettingsListSectionHeaderTemplate" or "TotalRP3SectionHeaderDisabled";
local name = "TotalRP3";
local data = {name = name};
layout:AddInitializer(Settings.CreateElementInitializer(headerTemplate, data));
end
function RegisterGenerateTotalRP3BubbleSetting(category, layout, isModifiable)
local variable = "GENERATE_TOTAL_RP3_BUBBLES"
local name = "Enable NPC Speech Bubbles"
local tooltip = "If checked, a chat bubble is created whenever you use the NPC speech feature of TotalRP3"
local defaultValue = settings.get("GENERATE_TOTAL_RP3_BUBBLES");
local setting = Settings.RegisterAddOnSetting(category, name, variable, type(defaultValue), defaultValue);
Settings.SetOnValueChangedCallback(variable, function(o, s, value) temporaryValue.GENERATE_TOTAL_RP3_BUBBLES = value; end);
local initializer = Settings.CreateCheckBox(category, setting, tooltip);
initializer:AddModifyPredicate(isModifiable);
RegisterGenerateTotalRP3BubbleForOthersSetting(category, initializer, isModifiable);
end
function RegisterGenerateTotalRP3BubbleSettingForSelf(category, parent, isModifiable)
end
function RegisterGenerateTotalRP3BubbleForOthersSetting(category, parent, isModifiable)
local variable = "GENERATE_TOTAL_RP3_BUBBLES_FOR_OTHER_PLAYERS"
local name = "From other players"
local tooltip = "If checked, a chat bubble is created whenever you use the NPC speech feature of TotalRP3"
local defaultValue = settings.get("GENERATE_TOTAL_RP3_BUBBLES_FOR_OTHER_PLAYERS");
local setting = Settings.RegisterAddOnSetting(category, name, variable, type(defaultValue), defaultValue);
Settings.SetOnValueChangedCallback(variable, function(o, s, value) temporaryValue.GENERATE_TOTAL_RP3_BUBBLES_FOR_OTHER_PLAYERS = value; end);
local initializer = Settings.CreateCheckBox(category, setting, tooltip);
initializer:SetParentInitializer(parent, isModifiable);
end
function ToggleRestartRequired()
if ((temporaryValue.FONT_SIZE ~= nil and temporaryValue.FONT_SIZE ~= settings.FONT_SIZE) or
(temporaryValue.DRESS_BLIZZ_BUBBLE ~= nil and temporaryValue.DRESS_BLIZZ_BUBBLE ~= settings.DRESS_BLIZZ_BUBBLE)) then
SpeakerBeeRestartRequired:Show();
else
SpeakerBeeRestartRequired:Hide();
end
end
function ShowSettingsPanel()
PlaySound(SOUNDKIT.IG_MAINMENU_OPEN);
SettingsPanel:OpenToCategory(CategoryId);
end
Import.initSettings = initSettings;
Import.ShowSettingsPanel = ShowSettingsPanel;