From 3edda6456618ec902fb8dc2aceaa9e26cd6c7815 Mon Sep 17 00:00:00 2001 From: phosit Date: Wed, 23 Apr 2025 20:19:36 +0200 Subject: [PATCH] Remove Engine.SwitchGuiPage from gamesetup --- .../Controllers/GameSettingsController.js | 15 ++++++--- .../Pages/GameSetupPage/GameSetupPage.js | 4 +-- .../Panels/Buttons/CancelButton.js | 6 ++-- .../mods/public/gui/gamesetup/SetupWindow.js | 33 ++++++++++++++----- .../mods/public/gui/gamesetup/gamesetup.js | 7 ++-- 5 files changed, 42 insertions(+), 23 deletions(-) diff --git a/binaries/data/mods/public/gui/gamesetup/Controllers/GameSettingsController.js b/binaries/data/mods/public/gui/gamesetup/Controllers/GameSettingsController.js index 8d8b02ef3c..b506608ad4 100644 --- a/binaries/data/mods/public/gui/gamesetup/Controllers/GameSettingsController.js +++ b/binaries/data/mods/public/gui/gamesetup/Controllers/GameSettingsController.js @@ -3,10 +3,12 @@ */ class GameSettingsController { - constructor(setupWindow, netMessages, playerAssignmentsController, mapCache, isSavedGame) + constructor(setupWindow, netMessages, playerAssignmentsController, mapCache, closePageCallback, + isSavedGame) { this.setupWindow = setupWindow; this.mapCache = mapCache; + this.closePageCallback = closePageCallback; this.isSavedGame = isSavedGame; this.persistentMatchSettings = new PersistentMatchSettings(g_IsNetworked); @@ -306,10 +308,13 @@ class GameSettingsController switchToLoadingPage(attributes) { - Engine.SwitchGuiPage("page_loading.xml", { - "attribs": attributes?.initAttributes || g_GameSettings.finalizedAttributes, - "playerAssignments": g_PlayerAssignments - }); + this.closePageCallback({ [Engine.openRequest]: { + "page": "page_loading.xml", + "argument": { + "attribs": attributes?.initAttributes || g_GameSettings.finalizedAttributes, + "playerAssignments": g_PlayerAssignments + } + } }); } onClose() diff --git a/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSetupPage.js b/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSetupPage.js index a76c5b5cee..714960c537 100644 --- a/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSetupPage.js +++ b/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/GameSetupPage.js @@ -3,7 +3,7 @@ */ SetupWindowPages.GameSetupPage = class { - constructor(setupWindow, isSavedGame) + constructor(setupWindow, isSavedGame, cancelCallback) { Engine.ProfileStart("GameSetupPage"); @@ -18,7 +18,7 @@ SetupWindowPages.GameSetupPage = class "civInfoButton": new CivInfoButton(), "lobbyButton": new LobbyButton(), "savedGameLabel": new SavedGameLabel(isSavedGame), - "cancelButton": new CancelButton(setupWindow, startGameButton, readyButton), + "cancelButton": new CancelButton(startGameButton, readyButton, cancelCallback), "readyButton": readyButton, "startGameButton": startGameButton }; diff --git a/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/Panels/Buttons/CancelButton.js b/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/Panels/Buttons/CancelButton.js index 6189e8e038..1d526e20ea 100644 --- a/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/Panels/Buttons/CancelButton.js +++ b/binaries/data/mods/public/gui/gamesetup/Pages/GameSetupPage/Panels/Buttons/CancelButton.js @@ -1,15 +1,13 @@ class CancelButton { - constructor(setupWindow, startGameButton, readyButton) + constructor(startGameButton, readyButton, cancelCallback) { - this.setupWindow = setupWindow; - this.buttonPositions = Engine.GetGUIObjectByName("bottomRightPanel").children; this.cancelButton = Engine.GetGUIObjectByName("cancelButton"); this.cancelButton.caption = this.Caption; this.cancelButton.tooltip = Engine.HasXmppClient() ? this.TooltipLobby : this.TooltipMenu; - this.cancelButton.onPress = setupWindow.closePage.bind(setupWindow); + this.cancelButton.onPress = cancelCallback; } } diff --git a/binaries/data/mods/public/gui/gamesetup/SetupWindow.js b/binaries/data/mods/public/gui/gamesetup/SetupWindow.js index d29eb01767..7085f46103 100644 --- a/binaries/data/mods/public/gui/gamesetup/SetupWindow.js +++ b/binaries/data/mods/public/gui/gamesetup/SetupWindow.js @@ -11,7 +11,7 @@ class SetupWindowPages */ class SetupWindow { - constructor(initData, hotloadData) + constructor(initData, hotloadData, closePageCallback) { if (!g_Settings) return; @@ -38,7 +38,7 @@ class SetupWindow const playerAssignmentsController = new PlayerAssignmentsController(this, netMessages, isSavedGame); const gameSettingsController = new GameSettingsController(this, netMessages, - playerAssignmentsController, mapCache, isSavedGame); + playerAssignmentsController, mapCache, closePageCallback, isSavedGame); const readyController = new ReadyController(netMessages, gameSettingsController, playerAssignmentsController); const lobbyGameRegistrationController = g_IsController && Engine.HasXmppClient() && new LobbyGameRegistrationController(initData, this, netMessages, mapCache, playerAssignmentsController); @@ -57,7 +57,10 @@ class SetupWindow // These are the pages within the setup window that may use the controls defined above this.pages = {}; for (const name in SetupWindowPages) - this.pages[name] = new SetupWindowPages[name](this, isSavedGame); + { + this.pages[name] = new SetupWindowPages[name](this, isSavedGame, + this.closePage.bind(this, closePageCallback)); + } netMessages.registerNetMessageHandler("netwarn", addNetworkWarning); setTimeout(displayGamestateNotifications, 1000); @@ -113,7 +116,7 @@ class SetupWindow updateTimers(); } - closePage() + closePage(closePageCallback) { for (const handler of this.closePageHandlers) handler(); @@ -121,10 +124,22 @@ class SetupWindow Engine.DisconnectNetworkGame(); if (this.backPage) - Engine.SwitchGuiPage(this.backPage.page, this.backPage?.data); - else if (Engine.HasXmppClient()) - Engine.SwitchGuiPage("page_lobby.xml", { "dialog": false }); - else - Engine.SwitchGuiPage("page_pregame.xml"); + { + closePageCallback({ [Engine.openRequest]: { + "page": this.backPage.page, + "argument": this.backPage?.data + } }); + } + if (Engine.HasXmppClient()) + { + closePageCallback({ [Engine.openRequest]: { + "page": "page_lobby.xml", + "argument": { "dialog": false } + } }); + } + closePageCallback({ [Engine.openRequest]: { + "page": "page_pregame.xml" + } }); + } } diff --git a/binaries/data/mods/public/gui/gamesetup/gamesetup.js b/binaries/data/mods/public/gui/gamesetup/gamesetup.js index 2d7e18fcb0..af6feb3634 100644 --- a/binaries/data/mods/public/gui/gamesetup/gamesetup.js +++ b/binaries/data/mods/public/gui/gamesetup/gamesetup.js @@ -43,9 +43,10 @@ var g_SetupWindow; function init(initData, hotloadData) { - g_SetupWindow = new SetupWindow(initData, hotloadData); - return g_IsNetworked ? g_SetupWindow.controls.netMessages.pollPendingMessages() : - new Promise(() => {}); + return Promise.race([new Promise(closePageCallback => + { + g_SetupWindow = new SetupWindow(initData, hotloadData, closePageCallback); + }), ...(g_IsNetworked ? [g_SetupWindow.controls.netMessages.pollPendingMessages()] : [])]); } function getHotloadData()