function RefreshDropDownGameOptions()
g_DropDownOptionsManager:ResetInstances();
local options = {};
[B] g_REDPulldownOptions = {
{
Type = "GameType",
Name = "Game Type",
ToolTip = "Single Player or Hotseat",
Disabled = false,
DefaultValue = TYPE_SINGLE,
SortPriority = 0,
Values = {
{ Name = "Single Player", ToolTip = "Local single player", Value = TYPE_SINGLE,},
{ Name = "HotSeat", ToolTip = "Local Multiplayer", Value = TYPE_HOTSEAT,},
},
},
}
for i, option in ipairs(g_REDPulldownOptions) do
table.insert(options, option)
end
if PreGame.GetGameOption("GameType") == TYPE_HOTSEAT then
for i, CIVILIZATION_TYPE in ipairs(ScenarioCivilizations) do
local option = {}
local civ = GameInfo.Civilizations[CIVILIZATION_TYPE]
option.Type = CIVILIZATION_TYPE
option.Name = "[ICON_BULLET]" .. Locale.ConvertTextKey(civ.ShortDescription)
option.ToolTip = Locale.ConvertTextKey(civ.Description)
option.DefaultValue = RED_COMPUTER
option.SortPriority = 5
option.Values = {
{ Name = "Computer", ToolTip = "Brainless AI", Value = RED_COMPUTER,},
{ Name = "Human", ToolTip = "Girlfriend, little brother, great father or any other worthy adversary like yourself", Value = RED_HUMAN,},
},
table.insert(options, option)
end
end[/B]
local sortedOptions = {};
for k,v in pairs(options) do
table.insert(sortedOptions, v);
end
-- Sort the options
table.sort(sortedOptions, function(a, b)
if(a.SortPriority == b.SortPriority) then
return a.Name < b.Name;
else
return a.SortPriority < b.SortPriority;
end
end);
-- Update the UI!
for _, option in ipairs(sortedOptions) do
local gameOption = g_DropDownOptionsManager:GetInstance();
gameOption.OptionName:SetText(option.Name);
if(option.ToolTip ~= nil) then
gameOption.OptionName:SetToolTipString(option.ToolTip);
else
gameOption.OptionName:SetToolTipString();
end
gameOption.OptionDropDown:SetDisabled(option.Disabled);
local dropDownButton = gameOption.OptionDropDown:GetButton();
gameOption.OptionDropDown:ClearEntries();
for _, possibleValue in ipairs(option.Values) do
controlTable = {};
gameOption.OptionDropDown:BuildEntry( "InstanceOne", controlTable );
controlTable.Button:SetText(possibleValue.Name);
if(possibleValue.ToolTip ~= nil) then
controlTable.Button:SetToolTipString(possibleValue.ToolTip);
else
controlTable.Button:SetToolTipString();
end
controlTable.Button:RegisterCallback(Mouse.eLClick, function()
dropDownButton:SetText(possibleValue.Name);
if(possibleValue.ToolTip) then
dropDownButton:SetToolTipString(possibleValue.ToolTip);
else
dropDownButton:SetToolTipString();
end
PreGame.SetGameOption(option.Type, possibleValue.Value);
modUserData.SetValue (option.Type, possibleValue.Value);
PerformPartialSync()
end);
end
--Assign the currently selected value.
local modSavedValue = modUserData.GetValue (option.Type);
local savedValue = PreGame.GetGameOption(option.Type);
local defaultValue;
if(modSavedValue ~= -1) then
defaultValue = option.Values[modSavedValue];
else
defaultValue = option.Values[option.DefaultValue];
end
if(savedValue ~= -1) then
defaultValue = option.Values[savedValue];
else
defaultValue = option.Values[option.DefaultValue];
end
if(defaultValue ~= nil) then
dropDownButton:SetText(defaultValue.Name);
if(defaultValue.ToolTip ~= nil) then
dropDownButton:SetToolTipString(defaultValue.ToolTip);
else
dropDownButton:SetToolTipString();
end
end
if(option.Disabled) then
dropDownButton:SetDisabled(true);
end
gameOption.OptionDropDown:CalculateInternals();
end
Controls.DropDownOptionsStack:CalculateSize();
Controls.DropDownOptionsStack:ReprocessAnchoring();
Controls.OptionsScrollPanel:CalculateInternalSize();
end