From 5ca68a38ef263d701e1c03b5109edc2c473f8cfe Mon Sep 17 00:00:00 2001 From: elexis Date: Mon, 20 Jan 2020 09:29:43 +0000 Subject: [PATCH] Rewrite Gamesetup AIConfig page to use class syntax, decouple settings and move it to the Gamesetup subfolder context, refs #5322, #5387. This establishes a code architecture where only one class and only one page is responsible per AI setting, removes the hardcodings from the XML and JS file, allowing future patches and mods to insert, remove and edit independent AI settings without having to overwrite the existing code. Differential Revision: https://code.wildfiregames.com/D2577 See also 0550315161/D2581 and comments linked there. This was SVN commit r23419. --- .../data/mods/public/gui/aiconfig/aiconfig.js | 82 --------- .../mods/public/gui/aiconfig/aiconfig.xml | 56 ------ .../Pages/AIConfigPage/AIConfigPage.js | 69 +++++++ .../Pages/AIConfigPage/AIConfigPage.xml | 31 ++++ .../Pages/AIConfigPage/AIDescription.js | 37 ++++ .../AIConfigPage/AIGameSettingControl.js | 50 ++++++ .../Pages/AIConfigPage/Controls/AIBehavior.js | 93 ++++++++++ .../AIConfigPage/Controls/AIDifficulty.js | 87 +++++++++ .../AIConfigPage/Controls/AISelection.js | 91 ++++++++++ .../GameSettings/GameSettingControl.js | 30 ++-- .../GameSettings/GameSettingControlManager.js | 12 +- .../GameSettings/PerPlayer/AIConfigButton.js | 168 +----------------- .../GameSettings/PerPlayer/PlayersPanel.xml | 2 +- .../PlayerSettingControlManager.js | 6 +- .../Pages/GameSetupPage/GameSetupPage.js | 29 ++- .../Panels/Buttons/CancelButton.js | 5 +- .../Panels/Buttons/ReadyButton.js | 8 +- .../Panels/Buttons/ResetCivsButton.js | 4 +- .../Panels/Buttons/ResetTeamsButton.js | 4 +- .../Panels/Buttons/StartGameButton.js | 11 +- .../Panels/Chat/ChatMessages/ClientChat.js | 5 +- .../Chat/ChatMessages/ClientConnection.js | 6 +- .../Panels/Chat/ChatMessages/ClientKicked.js | 4 +- .../Panels/Chat/ChatMessages/ClientReady.js | 4 +- .../Chat/ChatMessages/GameSettingsChanged.js | 6 +- .../GameSetupPage/Panels/Chat/ChatPanel.js | 13 +- .../GameSetupPage/Panels/GameDescription.js | 6 +- .../Panels/GameSettingWarning.js | 4 +- .../GameSetupPage/Panels/GameSettingsPanel.js | 4 +- .../Pages/GameSetupPage/Panels/MapPreview.js | 10 +- .../GameSetupPage/Panels/SoundNotification.js | 6 +- .../Pages/LoadingPage/LoadingPage.js | 6 +- .../mods/public/gui/gamesetup/SetupWindow.js | 20 ++- .../mods/public/gui/gamesetup/gamesetup.xml | 3 + .../data/mods/public/gui/page_aiconfig.xml | 8 - binaries/data/mods/public/l10n/messages.json | 2 - 36 files changed, 569 insertions(+), 413 deletions(-) delete mode 100644 binaries/data/mods/public/gui/aiconfig/aiconfig.js delete mode 100644 binaries/data/mods/public/gui/aiconfig/aiconfig.xml create mode 100644 binaries/data/mods/public/gui/gamesetup/Pages/AIConfigPage/AIConfigPage.js create mode 100644 binaries/data/mods/public/gui/gamesetup/Pages/AIConfigPage/AIConfigPage.xml create mode 100644 binaries/data/mods/public/gui/gamesetup/Pages/AIConfigPage/AIDescription.js create mode 100644 binaries/data/mods/public/gui/gamesetup/Pages/AIConfigPage/AIGameSettingControl.js create mode 100644 binaries/data/mods/public/gui/gamesetup/Pages/AIConfigPage/Controls/AIBehavior.js create mode 100644 binaries/data/mods/public/gui/gamesetup/Pages/AIConfigPage/Controls/AIDifficulty.js create mode 100644 binaries/data/mods/public/gui/gamesetup/Pages/AIConfigPage/Controls/AISelection.js delete mode 100644 binaries/data/mods/public/gui/page_aiconfig.xml diff --git a/binaries/data/mods/public/gui/aiconfig/aiconfig.js b/binaries/data/mods/public/gui/aiconfig/aiconfig.js deleted file mode 100644 index 1b025cfd68..0000000000 --- a/binaries/data/mods/public/gui/aiconfig/aiconfig.js +++ /dev/null @@ -1,82 +0,0 @@ -/** - * Is this user in control of game settings (i.e. is a network server, or offline player). - */ -const g_IsController = !Engine.HasNetClient() || Engine.HasNetServer(); - -var g_PlayerSlot; - -var g_AIDescriptions = [{ - "id": "", - "data": { - "name": translateWithContext("ai", "None"), - "description": translate("AI will be disabled for this player.") - } -}].concat(g_Settings.AIDescriptions); - -var g_AIControls = { - "aiSelection": { - "labels": g_AIDescriptions.map(ai => ai.data.name), - "selected": settings => g_AIDescriptions.findIndex(ai => ai.id == settings.id) - }, - "aiDifficulty": { - "labels": prepareForDropdown(g_Settings.AIDifficulties).Title, - "selected": settings => settings.difficulty - }, - "aiBehavior": { - "labels": prepareForDropdown(g_Settings.AIBehaviors).Title, - "selected": settings => g_Settings.AIBehaviors.findIndex(b => b.Name == settings.behavior) - } -}; - -function init(settings) -{ - // Remember the player ID that we change the AI settings for - g_PlayerSlot = settings.playerSlot; - - let enabled = g_IsController && !settings.fixed; - - for (let name in g_AIControls) - { - let control = Engine.GetGUIObjectByName(name); - control.list = g_AIControls[name].labels; - control.selected = g_AIControls[name].selected(settings); - control.hidden = !enabled; - - let label = Engine.GetGUIObjectByName(name + "Text"); - label.caption = control.list[control.selected]; - label.hidden = enabled; - } - - checkBehavior(); -} - -function selectAI(idx) -{ - Engine.GetGUIObjectByName("aiDescription").caption = g_AIDescriptions[idx].data.description; -} - -/** Behavior choice does not apply for Sandbox level */ -function checkBehavior() -{ - if (g_Settings.AIDifficulties[Engine.GetGUIObjectByName("aiDifficulty").selected].Name != "sandbox") - { - Engine.GetGUIObjectByName("aiBehavior").enabled = true; - return; - } - let aiBehavior = Engine.GetGUIObjectByName("aiBehavior"); - aiBehavior.enabled = false; - aiBehavior.selected = g_Settings.AIBehaviors.findIndex(b => b.Name == "balanced"); -} - -function returnAI(save = true) -{ - let idx = Engine.GetGUIObjectByName("aiSelection").selected; - Engine.PopGuiPage({ - "save": save, - "id": g_AIDescriptions[idx].id, - "name": g_AIDescriptions[idx].data.name, - "difficulty": Engine.GetGUIObjectByName("aiDifficulty").selected, - "behavior": g_Settings.AIBehaviors[Engine.GetGUIObjectByName("aiBehavior").selected].Name, - "playerSlot": g_PlayerSlot - }); -} diff --git a/binaries/data/mods/public/gui/aiconfig/aiconfig.xml b/binaries/data/mods/public/gui/aiconfig/aiconfig.xml deleted file mode 100644 index 32f5f4752e..0000000000 --- a/binaries/data/mods/public/gui/aiconfig/aiconfig.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - -