Changeset View
Changeset View
Standalone View
Standalone View
source/simulation2/system/TurnManager.cpp
Show First 20 Lines • Show All 234 Lines • ▼ Show 20 Lines | void CTurnManager::AddCommand(int client, int player, JS::HandleValue data, u32 turn) | ||||
if (!(m_CurrentTurn < turn && turn <= m_CurrentTurn + COMMAND_DELAY + 1)) | if (!(m_CurrentTurn < turn && turn <= m_CurrentTurn + COMMAND_DELAY + 1)) | ||||
{ | { | ||||
debug_warn(L"Received command for invalid turn"); | debug_warn(L"Received command for invalid turn"); | ||||
return; | return; | ||||
} | } | ||||
m_Simulation2.GetScriptInterface().FreezeObject(data, true); | m_Simulation2.GetScriptInterface().FreezeObject(data, true); | ||||
ScriptInterface::Request rq(m_Simulation2.GetScriptInterface()); | ScriptRequest rq(m_Simulation2.GetScriptInterface()); | ||||
m_QueuedCommands[turn - (m_CurrentTurn+1)][client].emplace_back(player, rq.cx, data); | m_QueuedCommands[turn - (m_CurrentTurn+1)][client].emplace_back(player, rq.cx, data); | ||||
} | } | ||||
void CTurnManager::FinishedAllCommands(u32 turn, u32 turnLength) | void CTurnManager::FinishedAllCommands(u32 turn, u32 turnLength) | ||||
{ | { | ||||
NETTURN_LOG("FinishedAllCommands(%d, %d)\n", turn, turnLength); | NETTURN_LOG("FinishedAllCommands(%d, %d)\n", turn, turnLength); | ||||
ENSURE(turn == m_ReadyTurn + 1); | ENSURE(turn == m_ReadyTurn + 1); | ||||
▲ Show 20 Lines • Show All 47 Lines • ▼ Show 20 Lines | void CTurnManager::QuickSave(JS::HandleValue GUIMetadata) | ||||
if (!m_Simulation2.SerializeState(stream)) | if (!m_Simulation2.SerializeState(stream)) | ||||
{ | { | ||||
LOGERROR("Failed to quicksave game"); | LOGERROR("Failed to quicksave game"); | ||||
return; | return; | ||||
} | } | ||||
m_QuickSaveState = stream.str(); | m_QuickSaveState = stream.str(); | ||||
ScriptInterface::Request rq(m_Simulation2.GetScriptInterface()); | ScriptRequest rq(m_Simulation2.GetScriptInterface()); | ||||
if (JS_StructuredClone(rq.cx, GUIMetadata, &m_QuickSaveMetadata, nullptr, nullptr)) | if (JS_StructuredClone(rq.cx, GUIMetadata, &m_QuickSaveMetadata, nullptr, nullptr)) | ||||
{ | { | ||||
// Freeze state to ensure that consectuvie loads don't modify the state | // Freeze state to ensure that consectuvie loads don't modify the state | ||||
m_Simulation2.GetScriptInterface().FreezeObject(m_QuickSaveMetadata, true); | m_Simulation2.GetScriptInterface().FreezeObject(m_QuickSaveMetadata, true); | ||||
} | } | ||||
else | else | ||||
{ | { | ||||
Show All 22 Lines | void CTurnManager::QuickLoad() | ||||
} | } | ||||
// See RewindTimeWarp | // See RewindTimeWarp | ||||
ResetState(0, 1); | ResetState(0, 1); | ||||
if (!g_GUI) | if (!g_GUI) | ||||
return; | return; | ||||
ScriptInterface::Request rq(m_Simulation2.GetScriptInterface()); | ScriptRequest rq(m_Simulation2.GetScriptInterface()); | ||||
// Provide a copy, so that GUI components don't have to clone to get mutable objects | // Provide a copy, so that GUI components don't have to clone to get mutable objects | ||||
JS::RootedValue quickSaveMetadataClone(rq.cx); | JS::RootedValue quickSaveMetadataClone(rq.cx); | ||||
if (!JS_StructuredClone(rq.cx, m_QuickSaveMetadata, &quickSaveMetadataClone, nullptr, nullptr)) | if (!JS_StructuredClone(rq.cx, m_QuickSaveMetadata, &quickSaveMetadataClone, nullptr, nullptr)) | ||||
{ | { | ||||
LOGERROR("Failed to clone quicksave state!"); | LOGERROR("Failed to clone quicksave state!"); | ||||
return; | return; | ||||
} | } | ||||
JS::AutoValueArray<1> paramData(rq.cx); | JS::AutoValueArray<1> paramData(rq.cx); | ||||
paramData[0].set(quickSaveMetadataClone); | paramData[0].set(quickSaveMetadataClone); | ||||
g_GUI->SendEventToAll(EventNameSavegameLoaded, paramData); | g_GUI->SendEventToAll(EventNameSavegameLoaded, paramData); | ||||
LOGMESSAGERENDER("Quickloaded game"); | LOGMESSAGERENDER("Quickloaded game"); | ||||
} | } |
Wildfire Games · Phabricator