From 7470e88624820400e15883155aa7bbbb216a9c1c Mon Sep 17 00:00:00 2001 From: elexis Date: Wed, 17 Aug 2016 15:17:43 +0000 Subject: [PATCH] Always save the replay metadata (summary screen info) when ending the application. Patch by Imarok, fixes #4020. This was SVN commit r18613. --- .../gui/common/functions_global_object.js | 13 ++++++++++++ .../data/mods/public/gui/session/session.js | 15 ++------------ .../mods/public/gui/structree/structree.xml | 1 + source/ps/GameSetup/GameSetup.cpp | 5 +++++ source/ps/VisualReplay.cpp | 20 +++++++++++++------ source/ps/VisualReplay.h | 4 ++-- .../ps/scripting/JSInterface_VisualReplay.cpp | 6 ------ .../ps/scripting/JSInterface_VisualReplay.h | 3 +-- 8 files changed, 38 insertions(+), 29 deletions(-) diff --git a/binaries/data/mods/public/gui/common/functions_global_object.js b/binaries/data/mods/public/gui/common/functions_global_object.js index 88b7e08267..a28a8d1ada 100644 --- a/binaries/data/mods/public/gui/common/functions_global_object.js +++ b/binaries/data/mods/public/gui/common/functions_global_object.js @@ -165,3 +165,16 @@ function displayGamestateNotifications() setTimeout(displayGamestateNotifications, 1000); } + +/** + * Also called from the C++ side when ending the game. + */ +function getReplayMetadata() +{ + let extendedSimState = Engine.GuiInterfaceCall("GetExtendedSimulationState"); + return { + "timeElapsed" : extendedSimState.timeElapsed, + "playerStates": extendedSimState.players, + "mapSettings": Engine.GetInitAttributes().settings + }; +} diff --git a/binaries/data/mods/public/gui/session/session.js b/binaries/data/mods/public/gui/session/session.js index 35af7a752e..c34dfa41c1 100644 --- a/binaries/data/mods/public/gui/session/session.js +++ b/binaries/data/mods/public/gui/session/session.js @@ -517,23 +517,12 @@ function resignGame(leaveGameAfterResign) */ function leaveGame(willRejoin) { - let extendedSimState = Engine.GuiInterfaceCall("GetExtendedSimulationState"); - let simData = { - "timeElapsed" : extendedSimState.timeElapsed, - "playerStates": extendedSimState.players, - "mapSettings": g_GameAttributes.settings - }; - - if (!g_IsReplay) - Engine.SaveReplayMetadata(JSON.stringify(simData)); - - if (!willRejoin && - simData.playerStates[Engine.GetPlayerID()] && - simData.playerStates[Engine.GetPlayerID()].state == "active") + if (!willRejoin && !g_IsObserver) resignGame(true); // Before ending the game let replayDirectory = Engine.GetCurrentReplayDirectory(); + let simData = getReplayMetadata(); Engine.EndGame(); diff --git a/binaries/data/mods/public/gui/structree/structree.xml b/binaries/data/mods/public/gui/structree/structree.xml index 4165e1ca52..3305df4ca2 100644 --- a/binaries/data/mods/public/gui/structree/structree.xml +++ b/binaries/data/mods/public/gui/structree/structree.xml @@ -2,6 +2,7 @@