New UI for gamesetup settings
Nuke the more options window Create 3 tabs containing all options from more options and map options, giving more space for new options Rename options => settings in gamesetup Reviewed By: elexis Comments By: ffffffff and gentz Differential Revision: https://code.wildfiregames.com/D1027 This was SVN commit r20945.
This commit is contained in:
parent
7c338b5755
commit
ac7b5ce861
@ -354,6 +354,7 @@ enabletips = true ; Enable/Disable tips during gamesetup (for ne
|
||||
assignplayers = everyone ; Whether to assign joining clients to free playerslots. Possible values: everyone, buddies, disabled.
|
||||
aidifficulty = 3 ; Difficulty level, from 0 (easiest) to 5 (hardest)
|
||||
aibehavior = "random" ; Default behavior of the AI (random, balanced, aggressive or defensive)
|
||||
settingsslide = true ; Enable/Disable settings panel slide
|
||||
|
||||
[gui.session]
|
||||
camerajump.threshold = 40 ; How close do we have to be to the actual location in order to jump back to the previous one?
|
||||
|
@ -483,6 +483,26 @@
|
||||
- Misc. -
|
||||
==========================================
|
||||
-->
|
||||
<sprite name = "ModernWindowCornerBottomRight">
|
||||
<!-- background -->
|
||||
<image backcolor = "12 12 12"/>
|
||||
<image texture = "global/modern/background.png"
|
||||
texture_size = "0 0 1024 1024"
|
||||
size = "0 0 100%-12 100%-12"
|
||||
/>
|
||||
|
||||
<!-- shading -->
|
||||
<image texture = "global/modern/shadow-high.png"
|
||||
texture_size = "0 0 1024 256"
|
||||
size = "0 100%-268 100%-12 100%-12"
|
||||
/>
|
||||
|
||||
<!-- bottom edge -->
|
||||
<image texture = "global/modern/border.png"
|
||||
real_texture_placement = "0 0 2048 8"
|
||||
size = "0 100%-16 100%-10 100%-8"
|
||||
/>
|
||||
</sprite>
|
||||
<sprite name = "ModernDropDownArrow">
|
||||
<image texture = "global/modern/dropdown-arrow.png"
|
||||
real_texture_placement = "0 0 16 16"
|
||||
|
@ -57,7 +57,11 @@ function placeTabButtons(categoriesData, buttonHeight, spacing, onPress, onSelec
|
||||
*/
|
||||
function selectNextTab(direction)
|
||||
{
|
||||
selectPanel((g_TabCategorySelected + direction + g_TabCategoryCount) % g_TabCategoryCount);
|
||||
selectPanel(g_TabCategorySelected === undefined ?
|
||||
direction > 0 ?
|
||||
0 :
|
||||
g_TabCategoryCount - 1 :
|
||||
(g_TabCategorySelected + direction + g_TabCategoryCount) % g_TabCategoryCount);
|
||||
}
|
||||
|
||||
function selectPanel(category)
|
||||
|
@ -299,6 +299,11 @@ var g_Autocomplete = [];
|
||||
*/
|
||||
var g_ChatMessages = [];
|
||||
|
||||
/**
|
||||
* Minimum amount of pixels required for the chat panel to be visible.
|
||||
*/
|
||||
var g_MinChatWidth = 74;
|
||||
|
||||
/**
|
||||
* Filename and translated title of all maps, given the currently selected
|
||||
* maptype and filter. Sorted by title, shown in the dropdown.
|
||||
@ -343,42 +348,91 @@ var g_LastViewedAIPlayer = -1;
|
||||
var g_PopulationCapacityRecommendation = 1200;
|
||||
|
||||
/**
|
||||
* Order in which the GUI elements will be shown.
|
||||
* All valid options are required to appear here.
|
||||
* The ones under "map" are shown in the map selection panel,
|
||||
* the others in the "more options" dialog.
|
||||
* Horizontal space between tab buttons and lobby button.
|
||||
*/
|
||||
var g_OptionOrderGUI = {
|
||||
"map": [
|
||||
"mapType",
|
||||
"mapFilter",
|
||||
"mapSelection",
|
||||
"numPlayers",
|
||||
"mapSize"
|
||||
],
|
||||
"more": [
|
||||
"triggerDifficulty",
|
||||
"biome",
|
||||
"gameSpeed",
|
||||
"victoryCondition",
|
||||
"relicCount",
|
||||
"relicDuration",
|
||||
"wonderDuration",
|
||||
"populationCap",
|
||||
"startingResources",
|
||||
"ceasefire",
|
||||
"nomad",
|
||||
"regicideGarrison",
|
||||
"exploreMap",
|
||||
"revealMap",
|
||||
"disableTreasures",
|
||||
"disableSpies",
|
||||
"lockTeams",
|
||||
"lastManStanding",
|
||||
"enableCheats",
|
||||
"enableRating"
|
||||
]
|
||||
};
|
||||
var g_LobbyButtonSpacing = 8;
|
||||
|
||||
/**
|
||||
* Vertical size of a tab button.
|
||||
*/
|
||||
var g_TabButtonHeight = 30;
|
||||
|
||||
/**
|
||||
* Vertical space between two tab buttons.
|
||||
*/
|
||||
var g_TabButtonDist = 4;
|
||||
|
||||
/**
|
||||
* Vertical size of a setting object.
|
||||
*/
|
||||
var g_SettingHeight = 32;
|
||||
|
||||
/**
|
||||
* Vertical space between two setting objects.
|
||||
*/
|
||||
var g_SettingDist = 2;
|
||||
|
||||
/**
|
||||
* Width of a column in the settings panel.
|
||||
*/
|
||||
var g_ColumnWidth = 320;
|
||||
|
||||
/**
|
||||
* Pixels per millisecond the settings panel slides when opening/closing.
|
||||
*/
|
||||
var g_SlideSpeed = 1.2;
|
||||
|
||||
/**
|
||||
* Store last tick time.
|
||||
*/
|
||||
var g_LastTickTime = Date.now();
|
||||
|
||||
/**
|
||||
* Order in which the GUI elements will be shown.
|
||||
* All valid settings are required to appear here.
|
||||
*/
|
||||
var g_SettingsTabsGUI = [
|
||||
{
|
||||
"label": translateWithContext("Match settings tab name", "Map"),
|
||||
"settings": [
|
||||
"mapType",
|
||||
"mapFilter",
|
||||
"mapSelection",
|
||||
"mapSize",
|
||||
"biome",
|
||||
"nomad",
|
||||
"triggerDifficulty",
|
||||
"disableTreasures",
|
||||
"exploreMap",
|
||||
"revealMap"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": translateWithContext("Match settings tab name", "Player"),
|
||||
"settings": [
|
||||
"numPlayers",
|
||||
"populationCap",
|
||||
"startingResources",
|
||||
"disableSpies",
|
||||
"enableCheats"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": translateWithContext("Match settings tab name", "Game Type"),
|
||||
"settings": [
|
||||
"victoryCondition",
|
||||
"relicCount",
|
||||
"relicDuration",
|
||||
"wonderDuration",
|
||||
"regicideGarrison",
|
||||
"gameSpeed",
|
||||
"ceasefire",
|
||||
"lockTeams",
|
||||
"lastManStanding",
|
||||
"enableRating"
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
/**
|
||||
* Contains the logic of all multiple-choice gamesettings.
|
||||
@ -400,7 +454,7 @@ var g_OptionOrderGUI = {
|
||||
* autocomplete - Marks whether to autocomplete translated values of the string. (default: undefined)
|
||||
* If not undefined, must be a number that denotes the priority (higher numbers come first).
|
||||
* If undefined, still autocompletes the translated title of the setting.
|
||||
* initOrder - Options with lower values will be initialized first.
|
||||
* initOrder - Settings with lower values will be initialized first.
|
||||
*/
|
||||
var g_Dropdowns = {
|
||||
"mapType": {
|
||||
@ -783,10 +837,10 @@ var g_Checkboxes = {
|
||||
},
|
||||
"revealMap": {
|
||||
"title": () =>
|
||||
// Translation: Make sure to differentiate between the revealed map and explored map options!
|
||||
// Translation: Make sure to differentiate between the revealed map and explored map settings!
|
||||
translate("Revealed Map"),
|
||||
"tooltip":
|
||||
// Translation: Make sure to differentiate between the revealed map and explored map options!
|
||||
// Translation: Make sure to differentiate between the revealed map and explored map settings!
|
||||
() => translate("Toggle revealed map (see everything)."),
|
||||
"default": () => false,
|
||||
"defined": () => g_GameAttributes.settings.RevealMap !== undefined,
|
||||
@ -802,10 +856,10 @@ var g_Checkboxes = {
|
||||
},
|
||||
"exploreMap": {
|
||||
"title":
|
||||
// Translation: Make sure to differentiate between the revealed map and explored map options!
|
||||
// Translation: Make sure to differentiate between the revealed map and explored map settings!
|
||||
() => translate("Explored Map"),
|
||||
"tooltip":
|
||||
// Translation: Make sure to differentiate between the revealed map and explored map options!
|
||||
// Translation: Make sure to differentiate between the revealed map and explored map settings!
|
||||
() => translate("Toggle explored map (see initial map)."),
|
||||
"default": () => false,
|
||||
"defined": () => g_GameAttributes.settings.ExploreMap !== undefined,
|
||||
@ -908,7 +962,13 @@ var g_Checkboxes = {
|
||||
*/
|
||||
var g_MiscControls = {
|
||||
"chatPanel": {
|
||||
"hidden": () => !g_IsNetworked,
|
||||
"hidden": () => {
|
||||
if (!g_IsNetworked)
|
||||
return true;
|
||||
|
||||
let size = Engine.GetGUIObjectByName("chatPanel").getComputedSize();
|
||||
return size.right - size.left < g_MinChatWidth;
|
||||
},
|
||||
},
|
||||
"chatInput": {
|
||||
"tooltip": () => colorizeAutocompleteHotkey(translate("Press %(hotkey)s to autocomplete playernames or settings.")),
|
||||
@ -953,13 +1013,15 @@ var g_MiscControls = {
|
||||
},
|
||||
"hidden": () => !Engine.HasXmppClient()
|
||||
},
|
||||
// Display these after having hidden every GUI object in the "More Options" dialog
|
||||
"moreOptionsLabel": {
|
||||
"hidden": () => false,
|
||||
},
|
||||
"hideMoreOptions": {
|
||||
"hidden": () => false,
|
||||
},
|
||||
"spTips": {
|
||||
"hidden": () => {
|
||||
let settingsPanel = Engine.GetGUIObjectByName("settingsPanel");
|
||||
let spTips = Engine.GetGUIObjectByName("spTips");
|
||||
return g_IsNetworked ||
|
||||
Engine.ConfigDB_GetValue("user", "gui.gamesetup.enabletips") !== "true" ||
|
||||
spTips.size.right > settingsPanel.getComputedSize().left
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
@ -1090,6 +1152,12 @@ function supplementDefaults()
|
||||
*/
|
||||
function initGUIObjects()
|
||||
{
|
||||
for (let tab in g_SettingsTabsGUI)
|
||||
g_SettingsTabsGUI[tab].tooltip =
|
||||
sprintf(translate("Toggle the %(name)s settings tab."), { "name": g_SettingsTabsGUI[tab].label }) +
|
||||
colorizeHotkey("\n" + translate("Use %(hotkey)s to move a settings tab down."), "tab.next") +
|
||||
colorizeHotkey("\n" + translate("Use %(hotkey)s to move a settings tab up."), "tab.prev");
|
||||
|
||||
// Copy all initOrder values into one object
|
||||
let initOrder = {};
|
||||
for (let dropdown in g_Dropdowns)
|
||||
@ -1097,19 +1165,45 @@ function initGUIObjects()
|
||||
for (let checkbox in g_Checkboxes)
|
||||
initOrder[checkbox] = g_Checkboxes[checkbox].initOrder;
|
||||
|
||||
// Sort the object on initOrder so we can init the options in an arbitrary order
|
||||
for (let option of Object.keys(initOrder).sort((a, b) => initOrder[a] - initOrder[b]))
|
||||
if (g_Dropdowns[option])
|
||||
initDropdown(option);
|
||||
else if (g_Checkboxes[option])
|
||||
initCheckbox(option);
|
||||
// Sort the object on initOrder so we can init the settings in an arbitrary order
|
||||
for (let setting of Object.keys(initOrder).sort((a, b) => initOrder[a] - initOrder[b]))
|
||||
if (g_Dropdowns[setting])
|
||||
initDropdown(setting);
|
||||
else if (g_Checkboxes[setting])
|
||||
initCheckbox(setting);
|
||||
else
|
||||
warn('The option "' + option + '" is not defined.');
|
||||
warn('The setting "' + setting + '" is not defined.');
|
||||
|
||||
for (let dropdown in g_PlayerDropdowns)
|
||||
initPlayerDropdowns(dropdown);
|
||||
|
||||
resizeMoreOptionsWindow();
|
||||
let settingTabButtons = Engine.GetGUIObjectByName("settingTabButtons");
|
||||
let settingTabButtonsSize = settingTabButtons.size;
|
||||
settingTabButtonsSize.bottom = settingTabButtonsSize.top + g_SettingsTabsGUI.length * (g_TabButtonHeight + g_TabButtonDist);
|
||||
settingTabButtonsSize.right = g_MiscControls.lobbyButton.hidden() ?
|
||||
settingTabButtonsSize.right :
|
||||
Engine.GetGUIObjectByName("lobbyButton").size.left - g_LobbyButtonSpacing;
|
||||
settingTabButtons.size = settingTabButtonsSize;
|
||||
|
||||
let settingTabButtonsBackground = Engine.GetGUIObjectByName("settingTabButtonsBackground");
|
||||
settingTabButtonsBackground.size = settingTabButtonsSize;
|
||||
|
||||
let gameDescription = Engine.GetGUIObjectByName("mapInfoDescriptionFrame");
|
||||
let gameDescriptionSize = gameDescription.size;
|
||||
gameDescriptionSize.top = settingTabButtonsSize.bottom + 3;
|
||||
gameDescription.size = gameDescriptionSize;
|
||||
|
||||
placeTabButtons(
|
||||
g_SettingsTabsGUI,
|
||||
g_TabButtonHeight,
|
||||
g_TabButtonDist,
|
||||
category => {
|
||||
selectPanel(category == g_TabCategorySelected ? undefined : category);
|
||||
},
|
||||
() => {
|
||||
updateGUIObjects();
|
||||
Engine.GetGUIObjectByName("settingsPanel").hidden = false;
|
||||
});
|
||||
|
||||
initSPTips();
|
||||
|
||||
@ -1128,6 +1222,53 @@ function initGUIObjects()
|
||||
hideLoadingWindow();
|
||||
}
|
||||
|
||||
/**
|
||||
* Slide settings panel.
|
||||
* @param {number} dt - Time in milliseconds since last call.
|
||||
*/
|
||||
function updateSettingsPanelPosition(dt)
|
||||
{
|
||||
let slideSpeed = Engine.ConfigDB_GetValue("user", "gui.gamesetup.settingsslide") == "true" ? g_SlideSpeed : Infinity;
|
||||
|
||||
let settingsPanel = Engine.GetGUIObjectByName("settingsPanel");
|
||||
let rightBorder = Engine.GetGUIObjectByName("settingTabButtons").size.left;
|
||||
let offset = 0;
|
||||
if (g_TabCategorySelected === undefined)
|
||||
{
|
||||
let maxOffset = rightBorder - settingsPanel.size.left;
|
||||
if (maxOffset > 0)
|
||||
offset = Math.min(slideSpeed * dt, maxOffset);
|
||||
}
|
||||
else if (rightBorder > settingsPanel.size.right)
|
||||
offset = Math.min(slideSpeed * dt, rightBorder - settingsPanel.size.right);
|
||||
else
|
||||
{
|
||||
let maxOffset = settingsPanel.size.right - rightBorder;
|
||||
if (maxOffset > 0)
|
||||
offset = -Math.min(slideSpeed * dt, maxOffset);
|
||||
}
|
||||
|
||||
let size = settingsPanel.size;
|
||||
size.left += offset;
|
||||
size.right += offset;
|
||||
settingsPanel.size = size;
|
||||
|
||||
let settingsBackground = Engine.GetGUIObjectByName("settingsBackground");
|
||||
let backgroundSize = settingsBackground.size;
|
||||
backgroundSize.left = size.left;
|
||||
settingsBackground.size = backgroundSize;
|
||||
|
||||
let chatPanel = Engine.GetGUIObjectByName("chatPanel");
|
||||
let chatSize = chatPanel.size;
|
||||
|
||||
chatSize.right += offset;
|
||||
chatPanel.size = chatSize;
|
||||
chatPanel.hidden = g_MiscControls.chatPanel.hidden();
|
||||
|
||||
let spTips = Engine.GetGUIObjectByName("spTips");
|
||||
spTips.hidden = g_MiscControls.spTips.hidden();
|
||||
}
|
||||
|
||||
function hideLoadingWindow()
|
||||
{
|
||||
let loadingWindow = Engine.GetGUIObjectByName("loadingWindow");
|
||||
@ -1140,24 +1281,26 @@ function hideLoadingWindow()
|
||||
}
|
||||
|
||||
/**
|
||||
* Options in the "More Options" or "Map" panel use a generic name.
|
||||
* Settings under the settings tabs use a generic name.
|
||||
* Player settings use custom names.
|
||||
*/
|
||||
function getGUIObjectNameFromSetting(name)
|
||||
function getGUIObjectNameFromSetting(setting)
|
||||
{
|
||||
for (let panel in g_OptionOrderGUI)
|
||||
let idxOffset = 0;
|
||||
for (let category of g_SettingsTabsGUI)
|
||||
{
|
||||
let idx = g_OptionOrderGUI[panel].indexOf(name);
|
||||
let idx = category.settings.indexOf(setting);
|
||||
if (idx != -1)
|
||||
return [
|
||||
panel + "Option",
|
||||
g_Dropdowns[name] ? "Dropdown" : "Checkbox",
|
||||
"[" + idx + "]"
|
||||
"setting",
|
||||
g_Dropdowns[setting] ? "Dropdown" : "Checkbox",
|
||||
"[" + (idx + idxOffset) + "]"
|
||||
];
|
||||
idxOffset += category.settings.length;
|
||||
}
|
||||
|
||||
// Assume there is a GUI object with exactly that setting name
|
||||
return [name, "", ""];
|
||||
return [setting, "", ""];
|
||||
}
|
||||
|
||||
function initDropdown(name, playerIdx)
|
||||
@ -1239,45 +1382,48 @@ function saveSPTipsSetting()
|
||||
Engine.ConfigDB_WriteValueToFile("user", "gui.gamesetup.enabletips", enabled, "config/user.cfg");
|
||||
}
|
||||
|
||||
function verticallyDistributeGUIObjects(parent, objectHeight, ignore)
|
||||
/**
|
||||
* Distribute the currently visible settings over the settings panel.
|
||||
* First calculate the number of columns required, then place the objects.
|
||||
*/
|
||||
function distributeSettings()
|
||||
{
|
||||
let yPos;
|
||||
let settingsPanel = Engine.GetGUIObjectByName("settingsPanel");
|
||||
let actualSettingsPanelSize = settingsPanel.getComputedSize();
|
||||
|
||||
let parentObject = Engine.GetGUIObjectByName(parent);
|
||||
for (let child of parentObject.children)
|
||||
let maxPerColumn = Math.floor((actualSettingsPanelSize.bottom - actualSettingsPanelSize.top) / g_SettingHeight);
|
||||
let childCount = settingsPanel.children.filter(child => !child.hidden).length;
|
||||
let perColumn = childCount / Math.ceil(childCount / maxPerColumn);
|
||||
|
||||
let yPos = g_SettingDist;
|
||||
let column = 0;
|
||||
let thisColumn = 0;
|
||||
let settingsPanelSize = settingsPanel.size;
|
||||
for (let child of settingsPanel.children)
|
||||
{
|
||||
if (ignore.indexOf(child.name) != -1)
|
||||
continue;
|
||||
|
||||
let childSize = child.size;
|
||||
yPos = yPos || childSize.top;
|
||||
|
||||
if (child.hidden)
|
||||
continue;
|
||||
|
||||
childSize.top = yPos;
|
||||
childSize.bottom = yPos + objectHeight - 2;
|
||||
child.size = childSize;
|
||||
if (thisColumn >= perColumn)
|
||||
{
|
||||
yPos = g_SettingDist;
|
||||
++column;
|
||||
thisColumn = 0;
|
||||
}
|
||||
|
||||
yPos += objectHeight;
|
||||
let childSize = child.size;
|
||||
child.size = new GUISize(
|
||||
column * g_ColumnWidth,
|
||||
yPos,
|
||||
column * g_ColumnWidth + g_ColumnWidth - 10,
|
||||
yPos + g_SettingHeight - g_SettingDist);
|
||||
|
||||
yPos += g_SettingHeight;
|
||||
++thisColumn;
|
||||
}
|
||||
return yPos;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove empty space in case of hidden options (like cheats, rating or victory duration)
|
||||
*/
|
||||
function resizeMoreOptionsWindow()
|
||||
{
|
||||
verticallyDistributeGUIObjects("mapOptions", 32, []);
|
||||
|
||||
let yPos = verticallyDistributeGUIObjects("moreOptions", 32, ["moreOptionsLabel"]);
|
||||
|
||||
// Resize the vertically centered window containing the options
|
||||
let moreOptions = Engine.GetGUIObjectByName("moreOptions");
|
||||
let mSize = moreOptions.size;
|
||||
mSize.bottom = mSize.top + yPos + 20;
|
||||
moreOptions.size = mSize;
|
||||
settingsPanelSize.right = settingsPanelSize.left + (column + 1) * g_ColumnWidth;
|
||||
settingsPanel.size = settingsPanelSize;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1572,6 +1718,7 @@ function reloadBiomeList()
|
||||
}))));
|
||||
|
||||
initDropdown("biome");
|
||||
updateGUIDropdown("biome");
|
||||
}
|
||||
|
||||
function reloadTriggerDifficulties()
|
||||
@ -1601,6 +1748,7 @@ function reloadTriggerDifficulties()
|
||||
})));
|
||||
|
||||
initDropdown("triggerDifficulty");
|
||||
updateGUIDropdown("triggerDifficulty");
|
||||
}
|
||||
|
||||
function reloadGameSpeedChoices()
|
||||
@ -1763,6 +1911,12 @@ function onTick()
|
||||
handleNetMessages();
|
||||
|
||||
updateTimers();
|
||||
|
||||
let now = Date.now();
|
||||
let tickLength = now - g_LastTickTime;
|
||||
g_LastTickTime = now;
|
||||
|
||||
updateSettingsPanelPosition(tickLength);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1872,10 +2026,11 @@ function updateGUIDropdown(name, playerIdx = undefined)
|
||||
let indexHidden = isControlArrayElementHidden(playerIdx);
|
||||
let obj = (playerIdx === undefined ? g_Dropdowns : g_PlayerDropdowns)[name];
|
||||
|
||||
let selected = indexHidden ? -1 : dropdown.list_data.indexOf(String(obj.get(playerIdx)));
|
||||
let enabled = !indexHidden && (!obj.enabled || obj.enabled(playerIdx));
|
||||
let hidden = indexHidden || obj.hidden && obj.hidden(playerIdx);
|
||||
let selected = hidden ? -1 : dropdown.list_data.indexOf(String(obj.get(playerIdx)));
|
||||
let enabled = !indexHidden && (!obj.enabled || obj.enabled(playerIdx));
|
||||
|
||||
dropdown.enabled = g_IsController && enabled;
|
||||
dropdown.hidden = !g_IsController || !enabled || hidden;
|
||||
dropdown.selected = selected;
|
||||
dropdown.tooltip = !indexHidden && obj.tooltip ? obj.tooltip(-1, playerIdx) : "";
|
||||
@ -1884,12 +2039,12 @@ function updateGUIDropdown(name, playerIdx = undefined)
|
||||
frame.hidden = hidden;
|
||||
|
||||
if (title && obj.title && !indexHidden)
|
||||
title.caption = sprintf(translate("%(option)s:"), { "option": obj.title(playerIdx) });
|
||||
title.caption = sprintf(translateWithContext("Title for specific setting", "%(setting)s:"), { "setting": obj.title(playerIdx) });
|
||||
|
||||
if (label && !indexHidden)
|
||||
{
|
||||
label.hidden = g_IsController && enabled || hidden;
|
||||
label.caption = selected == -1 ? translateWithContext("option value", "Unknown") : dropdown.list[selected];
|
||||
label.caption = selected == -1 ? translateWithContext("settings value", "Unknown") : dropdown.list[selected];
|
||||
}
|
||||
}
|
||||
|
||||
@ -1915,7 +2070,7 @@ function updateGUICheckbox(name)
|
||||
Engine.GetGUIObjectByName(guiName + "Dropdown" + guiIdx).hidden = true;
|
||||
|
||||
checkbox.checked = checked;
|
||||
checkbox.enabled = enabled;
|
||||
checkbox.enabled = g_IsController && enabled;
|
||||
checkbox.hidden = hidden || !g_IsController;
|
||||
checkbox.tooltip = obj.tooltip ? obj.tooltip() : "";
|
||||
|
||||
@ -1926,7 +2081,7 @@ function updateGUICheckbox(name)
|
||||
frame.hidden = hidden;
|
||||
|
||||
if (title && obj.title)
|
||||
title.caption = sprintf(translate("%(option)s:"), { "option": obj.title() });
|
||||
title.caption = sprintf(translate("%(setting)s:"), { "setting": obj.title() });
|
||||
}
|
||||
|
||||
function updateGUIMiscControl(name, playerIdx)
|
||||
@ -2081,16 +2236,20 @@ function updateGUIObjects()
|
||||
reloadPlayerAssignmentChoices();
|
||||
|
||||
// Hide exceeding dropdowns and checkboxes
|
||||
for (let panel in g_OptionOrderGUI)
|
||||
for (let child of Engine.GetGUIObjectByName(panel + "Options").children)
|
||||
child.hidden = true;
|
||||
for (let setting of Engine.GetGUIObjectByName("settingsPanel").children)
|
||||
setting.hidden = true;
|
||||
|
||||
// Show the relevant ones
|
||||
for (let name in g_Dropdowns)
|
||||
updateGUIDropdown(name);
|
||||
if (g_TabCategorySelected !== undefined)
|
||||
{
|
||||
for (let name in g_Dropdowns)
|
||||
if (g_SettingsTabsGUI[g_TabCategorySelected].settings.indexOf(name) != -1)
|
||||
updateGUIDropdown(name);
|
||||
|
||||
for (let name in g_Checkboxes)
|
||||
updateGUICheckbox(name);
|
||||
for (let name in g_Checkboxes)
|
||||
if (g_SettingsTabsGUI[g_TabCategorySelected].settings.indexOf(name) != -1)
|
||||
updateGUICheckbox(name);
|
||||
}
|
||||
|
||||
for (let i = 0; i < g_MaxPlayers; ++i)
|
||||
{
|
||||
@ -2105,7 +2264,7 @@ function updateGUIObjects()
|
||||
updateGUIMiscControl(name);
|
||||
|
||||
updateGameDescription();
|
||||
resizeMoreOptionsWindow();
|
||||
distributeSettings();
|
||||
rightAlignCancelButton();
|
||||
updateAutocompleteEntries();
|
||||
|
||||
@ -2358,12 +2517,6 @@ function addChatMessage(msg)
|
||||
Engine.GetGUIObjectByName("chatText").caption = g_ChatMessages.join("\n");
|
||||
}
|
||||
|
||||
function showMoreOptions(show)
|
||||
{
|
||||
Engine.GetGUIObjectByName("moreOptionsFade").hidden = !show;
|
||||
Engine.GetGUIObjectByName("moreOptions").hidden = !show;
|
||||
}
|
||||
|
||||
function resetCivilizations()
|
||||
{
|
||||
for (let i in g_GameAttributes.settings.PlayerData)
|
||||
|
@ -29,6 +29,10 @@
|
||||
<action on="Tick">
|
||||
onTick();
|
||||
</action>
|
||||
<!-- Keep the settings panel size fitting to the settings when resizing -->
|
||||
<action on="WindowResized">
|
||||
distributeSettings();
|
||||
</action>
|
||||
|
||||
<!-- Player assignments -->
|
||||
<object size="24 49 100%-440 345" type="image" sprite="ModernDarkBoxGold" name="playerAssignmentsPanel">
|
||||
@ -125,7 +129,7 @@
|
||||
</object>
|
||||
|
||||
<!-- Singleplayer / AI tips -->
|
||||
<object name="spTips" size="24 370 560 520" type="image" hidden="true">
|
||||
<object name="spTips" size="24 370 360 570" type="image" hidden="true">
|
||||
<object size="4 10 28 34" type="image" sprite="ModernGear"/>
|
||||
<object name="aiTips" size="32 0 100%-20 100%-32" type="text" style="ModernLeftLabelText"/>
|
||||
<object size="30 100%-30 100% 100%-8" type="text" style="ModernLeftLabelText">
|
||||
@ -136,58 +140,80 @@
|
||||
</object>
|
||||
</object>
|
||||
|
||||
<!-- Map Options -->
|
||||
<object name="mapOptions" size="100%-425 355 100%-25 470">
|
||||
<!-- Map Preview -->
|
||||
<object type="image" sprite="ModernDarkBoxGold" name="gamePreviewBox" size="100%-426 49 100%-24 345">
|
||||
<object type="image" sprite="snMapPreview" size="1 1 401 294" name="mapPreview"/>
|
||||
<object name="mapInfoName" type="text" style="ModernLeftLabelText" size="5 100%-20 100% 100%-1"/>
|
||||
</object>
|
||||
|
||||
<repeat count="30" var="n">
|
||||
<object name="mapOptionFrame[n]" size="0 0 100% 30">
|
||||
<!-- Settings -->
|
||||
<object name="settingsBackground" type="image" sprite="ModernDarkBoxGold" size="100%-635 355 100%-315 100%-60"/>
|
||||
<object name="settingsPanel" type="image" sprite="ModernDarkBoxGold" size="100%-635 360 100%-315 100%-65" hidden="true" z="1">
|
||||
<repeat count="60" var="n">
|
||||
<object name="settingFrame[n]" size="0 2 320 60">
|
||||
<object
|
||||
name="mapOptionTitle[n]"
|
||||
name="settingTitle[n]"
|
||||
type="text"
|
||||
size="0 0 140 28"
|
||||
size="0 0 50%-27 28"
|
||||
style="ModernRightLabelText"
|
||||
z="1"
|
||||
/>
|
||||
<object
|
||||
name="mapOptionText[n]"
|
||||
name="settingText[n]"
|
||||
type="text"
|
||||
size="150 0 100% 28"
|
||||
size="50%-27 0 100% 28"
|
||||
style="ModernLeftLabelText"
|
||||
z="1"
|
||||
/>
|
||||
<object
|
||||
name="mapOptionDropdown[n]"
|
||||
name="settingDropdown[n]"
|
||||
type="dropdown"
|
||||
size="150 0 100% 28"
|
||||
size="50%-22 0 100% 28"
|
||||
style="ModernDropDown"
|
||||
tooltip_style="onscreenToolTip"
|
||||
z="1"
|
||||
/>
|
||||
<object
|
||||
name="mapOptionCheckbox[n]"
|
||||
name="settingCheckbox[n]"
|
||||
type="checkbox"
|
||||
size="150 0 180 28"
|
||||
size="50%-22 5 50% 28"
|
||||
style="ModernTickBox"
|
||||
tooltip_style="onscreenToolTip"
|
||||
z="1"
|
||||
/>
|
||||
</object>
|
||||
</repeat>
|
||||
</object>
|
||||
<!-- End Map Options -->
|
||||
|
||||
<!-- Re-add background to hide settings panel -->
|
||||
<object type="image" sprite="ModernWindowCornerBottomRight" size="100%-315 355 100% 100%" z="20"/>
|
||||
|
||||
<!-- Map Preview -->
|
||||
<object type="image" sprite="ModernDarkBoxGold" name="gamePreviewBox" size="100%-426 49 100%-24 345">
|
||||
<object type="image" size="1 1 401 294" name="mapPreview"/>
|
||||
<!-- Category Tabs -->
|
||||
<object name="settingTabButtonsBackground" type="image" sprite="ModernDarkBoxGold" size="100%-315 355 100%-25 556" z="21"/>
|
||||
<object name="settingTabButtons" size="100%-315 355 100%-25 556" z="21">
|
||||
<include file="gui/common/tab_buttons.xml"/>
|
||||
</object>
|
||||
|
||||
<!-- View Lobby Button -->
|
||||
<object name="lobbyButton"
|
||||
type="button"
|
||||
style="IconButton"
|
||||
sprite="iconBubbleGold"
|
||||
sprite_over="iconBubbleWhite"
|
||||
size="100%-41 355 100%-25 371"
|
||||
hotkey="lobby"
|
||||
z="100"
|
||||
>
|
||||
<translatableAttribute id="tooltip">Show the multiplayer lobby in a dialog window.</translatableAttribute>
|
||||
</object>
|
||||
|
||||
<!-- Map Description -->
|
||||
<object size="100%-425 529 100%-25 100%-60">
|
||||
<object name="mapInfoName" type="text" style="ModernLeftLabelText" size="0 0 100%-120 30"/>
|
||||
<object type="image" sprite="ModernDarkBoxGold" size="0 30 100% 100%">
|
||||
<object name="mapInfoDescription" type="text" style="ModernText" size="0 0 100% 100%"/>
|
||||
</object>
|
||||
<object name="mapInfoDescriptionFrame" type="image" sprite="ModernDarkBoxGold" size="100%-315 559 100%-25 100%-60" z="21">
|
||||
<object name="mapInfoDescription" type="text" style="ModernText" size="0 0 100% 100%"/>
|
||||
</object>
|
||||
|
||||
<!-- Chat window -->
|
||||
<object name="chatPanel" size="24 355 100%-440 100%-58" type="image" sprite="ModernDarkBoxGold">
|
||||
<object name="chatPanel" size="24 355 100%-640 100%-58" type="image" sprite="ModernDarkBoxGold">
|
||||
<object name="chatText" size="2 2 100%-2 100%-26" type="text" style="ChatPanel"/>
|
||||
|
||||
<object name="chatInput" size="4 100%-24 100%-76 100%-4" type="input" style="ModernInput">
|
||||
@ -224,6 +250,7 @@
|
||||
style="StoneButton"
|
||||
size="100%-164 100%-52 100%-24 100%-24"
|
||||
tooltip_style="onscreenToolTip"
|
||||
z="21"
|
||||
>
|
||||
<action on="Press">
|
||||
if (g_IsController)
|
||||
@ -240,95 +267,11 @@
|
||||
style="StoneButton"
|
||||
size="100%-308 100%-52 100%-168 100%-24"
|
||||
tooltip_style="onscreenToolTip"
|
||||
z="21"
|
||||
>
|
||||
<translatableAttribute id="caption">Back</translatableAttribute>
|
||||
<action on="Press">cancelSetup();</action>
|
||||
</object>
|
||||
|
||||
<!-- Options -->
|
||||
<object name="gameOptionsBox" size="100%-425 529 100%-25 525">
|
||||
<!-- View Lobby Button -->
|
||||
<object name="lobbyButton"
|
||||
type="button"
|
||||
style="IconButton"
|
||||
sprite="iconBubbleGold"
|
||||
sprite_over="iconBubbleWhite"
|
||||
size="100%-143 0 100%-127 16"
|
||||
hotkey="lobby"
|
||||
>
|
||||
<translatableAttribute id="tooltip">Show the multiplayer lobby in a dialog window.</translatableAttribute>
|
||||
</object>
|
||||
<!-- More Options Button -->
|
||||
<object
|
||||
name="showMoreOptions"
|
||||
type="button"
|
||||
style="StoneButton"
|
||||
size="100%-120 0 100% 28"
|
||||
tooltip_style="onscreenToolTip"
|
||||
>
|
||||
<translatableAttribute id="caption">More Options</translatableAttribute>
|
||||
<translatableAttribute id="tooltip">See more game options</translatableAttribute>
|
||||
<action on="Press">showMoreOptions(true);</action>
|
||||
</object>
|
||||
</object>
|
||||
<!-- End Options -->
|
||||
|
||||
<!-- More Options -->
|
||||
<object hidden="true" name="moreOptionsFade" type="image" z="60" sprite="ModernFade"/>
|
||||
<object name="moreOptions" type="image" sprite="ModernDialog" size="50%-200 50%-195 50%+200 50%+220" z="70" hidden="true">
|
||||
|
||||
<object name="moreOptionsLabel" style="ModernLabelText" type="text" size="50%-128 -18 50%+128 14">
|
||||
<translatableAttribute id="caption">More Options</translatableAttribute>
|
||||
</object>
|
||||
|
||||
<repeat count="30" var="n">
|
||||
<object name="moreOptionFrame[n]" size="14 30 94% 60">
|
||||
<object
|
||||
name="moreOptionTitle[n]"
|
||||
type="text"
|
||||
size="0 0 40% 28"
|
||||
style="ModernRightLabelText"
|
||||
/>
|
||||
<object
|
||||
name="moreOptionText[n]"
|
||||
type="text"
|
||||
size="40% 0 100% 28"
|
||||
style="ModernLeftLabelText"
|
||||
/>
|
||||
<object
|
||||
name="moreOptionDropdown[n]"
|
||||
type="dropdown"
|
||||
size="40%+10 0 100% 28"
|
||||
style="ModernDropDown"
|
||||
tooltip_style="onscreenToolTip"
|
||||
dropdown_size="350"
|
||||
/>
|
||||
<object
|
||||
name="moreOptionCheckbox[n]"
|
||||
type="checkbox"
|
||||
size="40%+10 5 40%+28 28"
|
||||
style="ModernTickBox"
|
||||
tooltip_style="onscreenToolTip"
|
||||
/>
|
||||
</object>
|
||||
</repeat>
|
||||
|
||||
<!-- Hide More Options Button -->
|
||||
<object
|
||||
name="hideMoreOptions"
|
||||
type="button"
|
||||
style="StoneButton"
|
||||
size="50%-70 428 50%+70 456"
|
||||
tooltip_style="onscreenToolTip"
|
||||
hotkey="cancel"
|
||||
>
|
||||
<translatableAttribute id="caption">OK</translatableAttribute>
|
||||
<translatableAttribute id="tooltip">Close more game options window</translatableAttribute>
|
||||
<action on="Press">showMoreOptions(false);</action>
|
||||
</object>
|
||||
</object>
|
||||
<!-- End More Options -->
|
||||
|
||||
</object>
|
||||
</object>
|
||||
</objects>
|
||||
|
@ -361,6 +361,12 @@
|
||||
"tooltip": "Show tips when setting up a game.",
|
||||
"config": "gui.gamesetup.enabletips"
|
||||
},
|
||||
{
|
||||
"type": "boolean",
|
||||
"label": "Enable Settings Panel Slide",
|
||||
"tooltip": "Slide the settings panel when opening, closing or resizing",
|
||||
"config": "gui.gamesetup.settingsslide"
|
||||
},
|
||||
{
|
||||
"type": "boolean",
|
||||
"label": "Persist Match Settings",
|
||||
|
Loading…
Reference in New Issue
Block a user