Visual replay code cleanup. Refs #3440.
Moves StartVisualReplay() from JSInterface_VisualReplay.cpp to VisualReplay.cpp, so that the former doesn't define any logic. Uses replayFile.string8() instead of utf8_from_wstring(replayFile.string()). SAFE_DELETE instead of delete. Fixes a compiler warning in getReplayDuration(). This was SVN commit r17314.
This commit is contained in:
parent
8cf2333568
commit
7de746cc58
@ -1485,8 +1485,7 @@ bool AutostartVisualReplay(const std::string& replayFile)
|
||||
// TODO: Non progressive load can fail - need a decent way to handle this
|
||||
LDR_NonprogressiveLoad();
|
||||
|
||||
PSRETURN ret = g_Game->ReallyStartGame();
|
||||
ENSURE(ret == PSRETURN_OK);
|
||||
ENSURE(g_Game->ReallyStartGame() == PSRETURN_OK);
|
||||
|
||||
ScriptInterface& scriptInterface = g_Game->GetSimulation2()->GetScriptInterface();
|
||||
|
||||
|
@ -22,6 +22,8 @@
|
||||
#include "gui/GUIManager.h"
|
||||
#include "lib/allocators/shared_ptr.h"
|
||||
#include "lib/utf8.h"
|
||||
#include "network/NetClient.h"
|
||||
#include "network/NetServer.h"
|
||||
#include "ps/CLogger.h"
|
||||
#include "ps/Filesystem.h"
|
||||
#include "ps/Game.h"
|
||||
@ -44,6 +46,21 @@ OsPath VisualReplay::GetDirectoryName()
|
||||
return OsPath(psLogDir() / L"sim_log");
|
||||
}
|
||||
|
||||
void VisualReplay::StartVisualReplay(CStrW directory)
|
||||
{
|
||||
ENSURE(!g_NetServer);
|
||||
ENSURE(!g_NetClient);
|
||||
ENSURE(!g_Game);
|
||||
|
||||
const OsPath replayFile = VisualReplay::GetDirectoryName() / directory / L"commands.txt";
|
||||
|
||||
if (!FileExists(replayFile))
|
||||
return;
|
||||
|
||||
g_Game = new CGame(false, false);
|
||||
g_Game->StartVisualReplay(replayFile.string8());
|
||||
}
|
||||
|
||||
JS::Value VisualReplay::GetReplays(ScriptInterface& scriptInterface)
|
||||
{
|
||||
TIMER(L"GetReplays");
|
||||
@ -129,7 +146,7 @@ inline int getReplayDuration(std::istream *replayStream, const CStr& fileName, c
|
||||
|
||||
if (!replayStream->good())
|
||||
{
|
||||
LOGERROR("Read error when determining replay duration at %i of %lu in %s", currentPosition - 2, fileSize, fileName.c_str());
|
||||
LOGERROR("Read error when determining replay duration at %i of %llu in %s", currentPosition - 2, fileSize, fileName.c_str());
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -155,7 +172,7 @@ JS::Value VisualReplay::LoadReplayData(ScriptInterface& scriptInterface, OsPath&
|
||||
const OsPath replayFile = GetDirectoryName() / directory / L"commands.txt";
|
||||
|
||||
if (debugParser)
|
||||
debug_printf("Opening %s\n", utf8_from_wstring(replayFile.string()).c_str());
|
||||
debug_printf("Opening %s\n", replayFile.string8().c_str());
|
||||
|
||||
if (!FileExists(replayFile))
|
||||
return JSVAL_NULL;
|
||||
@ -170,8 +187,7 @@ JS::Value VisualReplay::LoadReplayData(ScriptInterface& scriptInterface, OsPath&
|
||||
return JSVAL_NULL;
|
||||
|
||||
// Open file
|
||||
// TODO: enhancement: support unicode when OsString() is properly implemented for windows
|
||||
const CStr fileName = utf8_from_wstring(replayFile.string());
|
||||
const CStr fileName = replayFile.string8();
|
||||
std::ifstream* replayStream = new std::ifstream(fileName.c_str());
|
||||
|
||||
// File must begin with "start"
|
||||
@ -255,7 +271,7 @@ JS::Value VisualReplay::GetReplayAttributes(ScriptInterface::CxPrivate* pCxPriva
|
||||
return attribs;
|
||||
|
||||
// Open file
|
||||
std::istream* replayStream = new std::ifstream(utf8_from_wstring(replayFile.string()).c_str());
|
||||
std::istream* replayStream = new std::ifstream(replayFile.string8().c_str());
|
||||
CStr type, line;
|
||||
ENSURE((*replayStream >> type).good() && type == "start");
|
||||
|
||||
@ -298,7 +314,7 @@ JS::Value VisualReplay::GetReplayMetadata(ScriptInterface::CxPrivate* pCxPrivate
|
||||
CStr line;
|
||||
std::getline(*stream, line);
|
||||
stream->close();
|
||||
delete stream;
|
||||
SAFE_DELETE(stream);
|
||||
pCxPrivate->pScriptInterface->ParseJSON(line, &metadata);
|
||||
|
||||
return metadata;
|
||||
|
@ -36,6 +36,11 @@ namespace VisualReplay
|
||||
*/
|
||||
OsPath GetDirectoryName();
|
||||
|
||||
/**
|
||||
* Replays the commands.txt file in the given subdirectory visually.
|
||||
*/
|
||||
void StartVisualReplay(CStrW directory);
|
||||
|
||||
/**
|
||||
* Get a list of replays to display in the GUI.
|
||||
*
|
||||
|
@ -17,26 +17,12 @@
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
#include "network/NetClient.h"
|
||||
#include "network/NetServer.h"
|
||||
#include "ps/Filesystem.h"
|
||||
#include "ps/Game.h"
|
||||
#include "ps/VisualReplay.h"
|
||||
#include "ps/scripting/JSInterface_VisualReplay.h"
|
||||
|
||||
void JSI_VisualReplay::StartVisualReplay(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), CStrW directory)
|
||||
{
|
||||
ENSURE(!g_NetServer);
|
||||
ENSURE(!g_NetClient);
|
||||
ENSURE(!g_Game);
|
||||
|
||||
const OsPath replayFile = VisualReplay::GetDirectoryName() / directory / L"commands.txt";
|
||||
if (FileExists(replayFile))
|
||||
{
|
||||
g_Game = new CGame(false, false);
|
||||
// TODO: support unicode when OsString() is implemented for windows
|
||||
g_Game->StartVisualReplay(utf8_from_wstring(replayFile.string()));
|
||||
}
|
||||
VisualReplay::StartVisualReplay(directory);
|
||||
}
|
||||
|
||||
bool JSI_VisualReplay::DeleteReplay(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), CStrW replayFile)
|
||||
|
Loading…
Reference in New Issue
Block a user