Add a button to the summary screen to replay the game that was just played (or replayed). Patch by Imarok, fixes #3437.
This was SVN commit r18031.
This commit is contained in:
parent
f4bfe7c3ad
commit
a57bfc829e
@ -79,6 +79,7 @@ function showReplaySummary()
|
||||
// Open summary screen
|
||||
summary.isReplay = true;
|
||||
summary.gameResult = translate("Scores at the end of the game.");
|
||||
summary.replayDirectory = g_ReplaysFiltered[selected].directory;
|
||||
Engine.SwitchGuiPage("page_summary.xml", summary);
|
||||
}
|
||||
|
||||
|
@ -472,6 +472,8 @@ function leaveGame(willRejoin)
|
||||
if (!g_IsReplay)
|
||||
Engine.SaveReplayMetadata(JSON.stringify(summary));
|
||||
|
||||
summary.replayDirectory = Engine.GetCurrentReplayDirectory();
|
||||
|
||||
Engine.EndGame();
|
||||
|
||||
if (g_IsController && Engine.HasXmppClient())
|
||||
|
@ -129,6 +129,26 @@ function updatePanelData(panelInfo)
|
||||
teamCounterFn(panelInfo.counters);
|
||||
}
|
||||
|
||||
function startReplay()
|
||||
{
|
||||
if (Engine.HasXmppClient())
|
||||
Engine.StopXmppClient();
|
||||
|
||||
Engine.StartVisualReplay(g_GameData.replayDirectory);
|
||||
Engine.SwitchGuiPage("page_loading.xml", {
|
||||
"attribs": Engine.GetReplayAttributes(g_GameData.replayDirectory),
|
||||
"isNetworked" : false,
|
||||
"playerAssignments": {
|
||||
"local" : {
|
||||
"name": translate("You"),
|
||||
"player": -1
|
||||
}
|
||||
},
|
||||
"savedGUIData": "",
|
||||
"isReplay" : true
|
||||
});
|
||||
}
|
||||
|
||||
function init(data)
|
||||
{
|
||||
updateObjectPlayerPosition();
|
||||
@ -139,6 +159,7 @@ function init(data)
|
||||
Engine.GetGUIObjectByName("timeElapsed").caption = sprintf(translate("Game time elapsed: %(time)s"), { "time": timeToString(data.timeElapsed) });
|
||||
Engine.GetGUIObjectByName("summaryText").caption = data.gameResult;
|
||||
Engine.GetGUIObjectByName("mapName").caption = sprintf(translate("%(mapName)s - %(mapType)s"), { "mapName": translate(data.mapSettings.Name), "mapType": mapSize ? mapSize.LongName : (mapType ? mapType.Title : "") });
|
||||
Engine.GetGUIObjectByName("replayButton").hidden = g_GameData.isInGame || !g_GameData.replayDirectory;
|
||||
|
||||
// Panels
|
||||
g_PlayerCount = data.playerStates.length - 1;
|
||||
|
@ -157,6 +157,27 @@
|
||||
</object>
|
||||
</object>
|
||||
|
||||
<object type="button" name="replayButton" style="ModernButtonRed" size="100%-310 100%-48 100%-170 100%-20">
|
||||
<translatableAttribute id="caption">Replay</translatableAttribute>
|
||||
<action on="Press"><![CDATA[
|
||||
if (g_GameData.isInGame)
|
||||
return;
|
||||
|
||||
if (Engine.HasXmppClient())
|
||||
messageBox(
|
||||
400, 200,
|
||||
translate("Are you sure you want to quit the lobby?"),
|
||||
translate("Confirmation"),
|
||||
0,
|
||||
[translate("No"), translate("Yes")],
|
||||
[null, startReplay]
|
||||
);
|
||||
else
|
||||
startReplay();
|
||||
]]>
|
||||
</action>
|
||||
</object>
|
||||
|
||||
<object type="button" style="ModernButtonRed" size="100%-160 100%-48 100%-20 100%-20">
|
||||
<translatableAttribute id="caption">Continue</translatableAttribute>
|
||||
<action on="Press"><![CDATA[
|
||||
|
@ -50,6 +50,7 @@
|
||||
#include "ps/Hotkey.h"
|
||||
#include "ps/ProfileViewer.h"
|
||||
#include "ps/Pyrogenesis.h"
|
||||
#include "ps/Replay.h"
|
||||
#include "ps/SavedGame.h"
|
||||
#include "ps/UserReport.h"
|
||||
#include "ps/World.h"
|
||||
@ -207,6 +208,16 @@ bool IsVisualReplay(ScriptInterface::CxPrivate* UNUSED(pCxPrivate))
|
||||
return g_Game ? g_Game->IsVisualReplay() : false;
|
||||
}
|
||||
|
||||
std::wstring GetCurrentReplayDirectory(ScriptInterface::CxPrivate* UNUSED(pCxPrivate))
|
||||
{
|
||||
if (!g_Game)
|
||||
return std::wstring();
|
||||
|
||||
return g_Game->IsVisualReplay() ?
|
||||
OsPath(g_Game->GetReplayPath()).Parent().Filename().string() :
|
||||
g_Game->GetReplayLogger().GetDirectory().Filename().string();
|
||||
}
|
||||
|
||||
int GetPlayerID(ScriptInterface::CxPrivate* UNUSED(pCxPrivate))
|
||||
{
|
||||
if (g_Game)
|
||||
@ -1049,6 +1060,7 @@ void GuiScriptingInit(ScriptInterface& scriptInterface)
|
||||
// Misc functions
|
||||
scriptInterface.RegisterFunction<std::wstring, std::wstring, &SetCursor>("SetCursor");
|
||||
scriptInterface.RegisterFunction<bool, &IsVisualReplay>("IsVisualReplay");
|
||||
scriptInterface.RegisterFunction<std::wstring, &GetCurrentReplayDirectory>("GetCurrentReplayDirectory");
|
||||
scriptInterface.RegisterFunction<int, &GetPlayerID>("GetPlayerID");
|
||||
scriptInterface.RegisterFunction<void, int, &SetPlayerID>("SetPlayerID");
|
||||
scriptInterface.RegisterFunction<void, int, &SetViewedPlayer>("SetViewedPlayer");
|
||||
|
@ -161,6 +161,9 @@ public:
|
||||
inline float GetSimRate() const
|
||||
{ return m_SimRate; }
|
||||
|
||||
inline std::string GetReplayPath() const
|
||||
{ return m_ReplayPath; }
|
||||
|
||||
/**
|
||||
* Replace the current turn manager.
|
||||
* This class will take ownership of the pointer.
|
||||
|
Loading…
Reference in New Issue
Block a user