diff --git a/binaries/data/mods/public/gui/summary/summary.js b/binaries/data/mods/public/gui/summary/summary.js index 45200a6960..a2358a70fb 100644 --- a/binaries/data/mods/public/gui/summary/summary.js +++ b/binaries/data/mods/public/gui/summary/summary.js @@ -135,23 +135,30 @@ var g_SelectedChart = { "type": [0, 0] }; -async function init(data) +function init(data) { initSummaryData(data); initGUISummary(); - while (true) + return new Promise(closePageCallback => { - const branchless = await new Promise(resolve => + const onClick = branchless => { - Engine.GetGUIObjectByName("continueButton").onPress = resolve.bind(null, true); - Engine.GetGUIObjectByName("summaryHotkey").onPress = resolve.bind(null, true); - Engine.GetGUIObjectByName("cancelHotkey").onPress = resolve.bind(null, false); - }); - - if (branchless || data.gui.isInGame) - return continueButton(data); - } + if (branchless === undefined) + { + const pageRequest = startReplay(); + if (pageRequest !== undefined) + closePageCallback(pageRequest); + return; + } + if (branchless || data.gui.isInGame) + closePageCallback(continueButton(data)); + }; + Engine.GetGUIObjectByName("continueButton").onPress = onClick.bind(null, true); + Engine.GetGUIObjectByName("summaryHotkey").onPress = onClick.bind(null, true); + Engine.GetGUIObjectByName("cancelHotkey").onPress = onClick.bind(null, false); + Engine.GetGUIObjectByName("replayButton").onPress = onClick; + }); } function initSummaryData(data) @@ -472,19 +479,23 @@ function continueButton(gameData) }; if (gameData.gui.dialog) return undefined; - else if (Engine.HasXmppClient()) - Engine.SwitchGuiPage("page_lobby.xml", { "dialog": false }); - else if (gameData.gui.isReplay) - Engine.SwitchGuiPage("page_replaymenu.xml", { - "replaySelectionData": gameData.gui.replaySelectionData, - "summarySelection": summarySelection - }); - else if (gameData.campaignData) - Engine.SwitchGuiPage(gameData.nextPage, gameData.campaignData); - else - Engine.SwitchGuiPage("page_pregame.xml"); + if (Engine.HasXmppClient()) + return { [Engine.openRequest]: { "page": "page_lobby.xml", "argument": { "dialog": false } } }; + if (gameData.gui.isReplay) + return { [Engine.openRequest]: { + "page": "page_replaymenu.xml", + "argument": { + "replaySelectionData": gameData.gui.replaySelectionData, + "summarySelection": summarySelection + } + } }; + if (gameData.campaignData) + return { [Engine.openRequest]: { + "page": gameData.nextPage, + "argument": gameData.campaignData + } }; - return undefined; + return { [Engine.openRequest]: { "page": "page_pregame.xml" } }; } function startReplay() @@ -492,21 +503,24 @@ function startReplay() if (!Engine.StartVisualReplay(g_GameData.gui.replayDirectory)) { warn("Replay file not found!"); - return; + return undefined; } - Engine.SwitchGuiPage("page_loading.xml", { - "attribs": Engine.GetReplayAttributes(g_GameData.gui.replayDirectory), - "playerAssignments": { - "local": { - "name": singleplayerName(), - "player": -1 - } - }, - "savedGUIData": "", - "isReplay": true, - "replaySelectionData": g_GameData.gui.replaySelectionData - }); + return { [Engine.openRequest]: { + "page": "page_loading.xml", + "argument": { + "attribs": Engine.GetReplayAttributes(g_GameData.gui.replayDirectory), + "playerAssignments": { + "local": { + "name": singleplayerName(), + "player": -1 + } + }, + "savedGUIData": "", + "isReplay": true, + "replaySelectionData": g_GameData.gui.replaySelectionData + } + } }; } function initGUILabels() diff --git a/binaries/data/mods/public/gui/summary/summary.xml b/binaries/data/mods/public/gui/summary/summary.xml index 3c6fd71ddb..f3bbf1a5c2 100644 --- a/binaries/data/mods/public/gui/summary/summary.xml +++ b/binaries/data/mods/public/gui/summary/summary.xml @@ -178,7 +178,6 @@ Watch Replay - startReplay();