diff --git a/source/ps/scripting/JSInterface_VisualReplay.cpp b/source/ps/scripting/JSInterface_VisualReplay.cpp new file mode 100644 index 0000000000..0eac7c2ded --- /dev/null +++ b/source/ps/scripting/JSInterface_VisualReplay.cpp @@ -0,0 +1,75 @@ +/* Copyright (C) 2015 Wildfire Games. + * This file is part of 0 A.D. + * + * 0 A.D. is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * 0 A.D. is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with 0 A.D. If not, see . + */ + +#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())); + } +} + +bool JSI_VisualReplay::DeleteReplay(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), CStrW replayFile) +{ + return VisualReplay::DeleteReplay(replayFile); +} + +JS::Value JSI_VisualReplay::GetReplays(ScriptInterface::CxPrivate* pCxPrivate) +{ + return VisualReplay::GetReplays(*(pCxPrivate->pScriptInterface)); +} + +JS::Value JSI_VisualReplay::GetReplayAttributes(ScriptInterface::CxPrivate* pCxPrivate, CStrW directoryName) +{ + return VisualReplay::GetReplayAttributes(pCxPrivate, directoryName); +} + +JS::Value JSI_VisualReplay::GetReplayMetadata(ScriptInterface::CxPrivate* pCxPrivate, CStrW directoryName) +{ + return VisualReplay::GetReplayMetadata(pCxPrivate, directoryName); +} + +void JSI_VisualReplay::SaveReplayMetadata(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), CStrW data) +{ + VisualReplay::SaveReplayMetadata(data); +} + +void JSI_VisualReplay::RegisterScriptFunctions(ScriptInterface& scriptInterface) +{ + scriptInterface.RegisterFunction("GetReplays"); + scriptInterface.RegisterFunction("DeleteReplay"); + scriptInterface.RegisterFunction("StartVisualReplay"); + scriptInterface.RegisterFunction("GetReplayAttributes"); + scriptInterface.RegisterFunction("GetReplayMetadata"); + scriptInterface.RegisterFunction("SaveReplayMetadata"); +} diff --git a/source/ps/scripting/JSInterface_VisualReplay.h b/source/ps/scripting/JSInterface_VisualReplay.h new file mode 100644 index 0000000000..a0756e1127 --- /dev/null +++ b/source/ps/scripting/JSInterface_VisualReplay.h @@ -0,0 +1,35 @@ +/* Copyright (C) 2015 Wildfire Games. + * This file is part of 0 A.D. + * + * 0 A.D. is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * 0 A.D. is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with 0 A.D. If not, see . + */ + +#ifndef INCLUDED_JSI_VISUALREPLAY +#define INCLUDED_JSI_VISUALREPLAY + +#include "ps/VisualReplay.h" +#include "scriptinterface/ScriptInterface.h" + +namespace JSI_VisualReplay +{ + void StartVisualReplay(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), CStrW directory); + bool DeleteReplay(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), CStrW replayFile); + JS::Value GetReplays(ScriptInterface::CxPrivate* pCxPrivate); + JS::Value GetReplayAttributes(ScriptInterface::CxPrivate* pCxPrivate, CStrW directoryName); + JS::Value GetReplayMetadata(ScriptInterface::CxPrivate* pCxPrivate, CStrW directoryName); + void SaveReplayMetadata(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), CStrW data); + void RegisterScriptFunctions(ScriptInterface& scriptInterface); +} + +#endif