Ticket #4020: 4020_altf4_v2.patch
File 4020_altf4_v2.patch, 7.5 KB (added by , 8 years ago) |
---|
-
binaries/data/mods/public/gui/common/functions_global_object.js
165 165 166 166 setTimeout(displayGamestateNotifications, 1000); 167 167 } 168 169 /* 170 * Used from C++ code for saving the replay metadata 171 */ 172 function getReplayMetadata() 173 { 174 let extendedSimState = Engine.GuiInterfaceCall("GetExtendedSimulationState"); 175 return { 176 "timeElapsed" : extendedSimState.timeElapsed, 177 "playerStates": extendedSimState.players, 178 "mapSettings": Engine.GetInitAttributes().settings 179 }; 180 } -
binaries/data/mods/public/gui/session/session.js
518 518 function leaveGame(willRejoin) 519 519 { 520 520 let extendedSimState = Engine.GuiInterfaceCall("GetExtendedSimulationState"); 521 let simData = {522 "timeElapsed" : extendedSimState.timeElapsed,523 "playerStates": extendedSimState.players,524 "mapSettings": g_GameAttributes.settings525 };526 521 527 if (!g_IsReplay)528 Engine.SaveReplayMetadata(JSON.stringify(simData));529 530 522 if (!willRejoin && 531 simData.playerStates[Engine.GetPlayerID()] &&532 simData.playerStates[Engine.GetPlayerID()].state == "active")523 extendedSimState.players[Engine.GetPlayerID()] && 524 extendedSimState.players[Engine.GetPlayerID()].state == "active") 533 525 resignGame(true); 534 526 535 527 // Before ending the game … … 541 533 Engine.SendUnregisterGame(); 542 534 543 535 Engine.SwitchGuiPage("page_summary.xml", { 544 "sim": simData, 536 "sim": { 537 "timeElapsed" : extendedSimState.timeElapsed, 538 "playerStates": extendedSimState.players, 539 "mapSettings": g_GameAttributes.settings 540 }, 545 541 "gui": { 546 542 "assignedPlayer": Engine.GetPlayerID(), 547 543 "disconnected": g_Disconnected, -
binaries/data/mods/public/gui/structree/structree.xml
1 1 <?xml version="1.0" encoding="utf-8"?> 2 2 3 3 <objects> 4 <script file="gui/common/functions_global_object.js"/> 4 5 <script file="gui/common/functions_civinfo.js"/> 5 6 <script file="gui/common/functions_utility.js"/> 6 7 <script file="gui/common/tooltips.js"/> -
source/ps/GameSetup/GameSetup.cpp
78 78 #include "ps/UserReport.h" 79 79 #include "ps/Util.h" 80 80 #include "ps/VideoMode.h" 81 #include "ps/VisualReplay.h" 81 82 #include "ps/World.h" 82 83 83 84 #include "renderer/Renderer.h" … … 701 702 702 703 void EndGame() 703 704 { 705 if (g_Game != NULL && !g_Game->IsVisualReplay()) 706 VisualReplay::SaveReplayMetadata(g_GUI->GetActiveGUI()->GetScriptInterface().get(), g_GUI->GetActiveGUI()->GetGlobalObject()); 707 704 708 SAFE_DELETE(g_NetClient); 705 709 SAFE_DELETE(g_NetServer); 706 710 SAFE_DELETE(g_Game); -
source/ps/scripting/JSInterface_VisualReplay.cpp
53 53 return VisualReplay::GetReplayMetadata(pCxPrivate, directoryName); 54 54 } 55 55 56 void JSI_VisualReplay::SaveReplayMetadata(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), const CStrW& data)57 {58 VisualReplay::SaveReplayMetadata(data);59 }60 61 56 void JSI_VisualReplay::RegisterScriptFunctions(ScriptInterface& scriptInterface) 62 57 { 63 58 scriptInterface.RegisterFunction<JS::Value, &GetReplays>("GetReplays"); … … 66 61 scriptInterface.RegisterFunction<JS::Value, CStrW, &GetReplayAttributes>("GetReplayAttributes"); 67 62 scriptInterface.RegisterFunction<JS::Value, CStrW, &GetReplayMetadata>("GetReplayMetadata"); 68 63 scriptInterface.RegisterFunction<bool, CStrW, &HasReplayMetadata>("HasReplayMetadata"); 69 scriptInterface.RegisterFunction<void, CStrW, &SaveReplayMetadata>("SaveReplayMetadata");70 64 } -
source/ps/scripting/JSInterface_VisualReplay.h
1 /* Copyright (C) 201 5Wildfire Games.1 /* Copyright (C) 2016 Wildfire Games. 2 2 * This file is part of 0 A.D. 3 3 * 4 4 * 0 A.D. is free software: you can redistribute it and/or modify … … 29 29 JS::Value GetReplayAttributes(ScriptInterface::CxPrivate* pCxPrivate, const CStrW& directoryName); 30 30 bool HasReplayMetadata(ScriptInterface::CxPrivate* pCxPrivate, const CStrW& directoryName); 31 31 JS::Value GetReplayMetadata(ScriptInterface::CxPrivate* pCxPrivate, const CStrW& directoryName); 32 void SaveReplayMetadata(ScriptInterface::CxPrivate* pCxPrivate, const CStrW& data);33 32 void RegisterScriptFunctions(ScriptInterface& scriptInterface); 34 33 } 35 34 -
source/ps/VisualReplay.cpp
134 134 * 135 135 * @return seconds or -1 on error 136 136 */ 137 inline int getReplayDuration(std::istream *replayStream, const CStr& fileName, const u64& fileSize)137 inline int getReplayDuration(std::istream* replayStream, const CStr& fileName, const u64& fileSize) 138 138 { 139 139 CStr type; 140 140 … … 292 292 return attribs; 293 293 } 294 294 295 // TODO: enhancement: how to save the data if the process is killed? (case SDL_QUIT in main.cpp) 296 void VisualReplay::SaveReplayMetadata(const CStrW& data) 295 void VisualReplay::SaveReplayMetadata(ScriptInterface* scriptInterface, jsval globalObject) 297 296 { 298 // TODO: enhancement: use JS::HandleValue similar to SaveGame299 297 if (!g_Game) 300 298 return; 301 299 300 JSContext* cx = scriptInterface->GetContext(); 301 JSAutoRequest rq(cx); 302 303 JS::RootedValue data(cx); 304 JS::RootedValue global(cx, globalObject); 305 bool ok = scriptInterface->CallFunction(global, "getReplayMetadata", &data); 306 if (!ok) 307 { 308 LOGERROR("Could not save replay metadata"); 309 return; 310 } 311 302 312 // Get the directory of the currently active replay 303 313 const OsPath fileName = g_Game->GetReplayLogger().GetDirectory() / L"metadata.json"; 304 314 CreateDirectories(fileName.Parent(), 0700); 305 315 306 316 std::ofstream stream (fileName.string8().c_str(), std::ofstream::out | std::ofstream::trunc); 307 stream << utf8_from_wstring(data);317 stream << scriptInterface->StringifyJSON(&data, false); 308 318 stream.close(); 319 debug_printf("Saved replay metadata to %s\n", fileName.string8()); 309 320 } 310 321 311 322 bool VisualReplay::HasReplayMetadata(const CStrW& directoryName) -
source/ps/VisualReplay.h
1 /* Copyright (C) 201 5Wildfire Games.1 /* Copyright (C) 2016 Wildfire Games. 2 2 * This file is part of 0 A.D. 3 3 * 4 4 * 0 A.D. is free software: you can redistribute it and/or modify … … 81 81 /** 82 82 * Saves the metadata from the session to metadata.json 83 83 */ 84 void SaveReplayMetadata( const CStrW& data);84 void SaveReplayMetadata(ScriptInterface* scriptInterface, jsval globalObject); 85 85 86 86 } 87 87