Changeset View
Changeset View
Standalone View
Standalone View
source/simulation2/components/CCmpAIManager.cpp
Show First 20 Lines • Show All 663 Lines • ▼ Show 20 Lines | void SerializeState(ISerializer& serializer) | ||||
std::stringstream rngStream; | std::stringstream rngStream; | ||||
rngStream << m_RNG; | rngStream << m_RNG; | ||||
serializer.StringASCII("rng", rngStream.str(), 0, 32); | serializer.StringASCII("rng", rngStream.str(), 0, 32); | ||||
serializer.NumberU32_Unbounded("turn", m_TurnNum); | serializer.NumberU32_Unbounded("turn", m_TurnNum); | ||||
serializer.Bool("useSharedScript", m_HasSharedComponent); | serializer.Bool("useSharedScript", m_HasSharedComponent); | ||||
if (m_HasSharedComponent) | if (m_HasSharedComponent) | ||||
{ | serializer.ScriptVal("sharedData", &m_SharedAIObj); | ||||
JS::RootedValue sharedData(rq.cx); | |||||
if (!m_ScriptInterface->CallFunction(m_SharedAIObj, "Serialize", &sharedData)) | |||||
LOGERROR("AI shared script Serialize call failed"); | |||||
serializer.ScriptVal("sharedData", &sharedData); | |||||
} | |||||
for (size_t i = 0; i < m_Players.size(); ++i) | for (size_t i = 0; i < m_Players.size(); ++i) | ||||
{ | { | ||||
serializer.String("name", m_Players[i]->m_AIName, 1, 256); | serializer.String("name", m_Players[i]->m_AIName, 1, 256); | ||||
serializer.NumberI32_Unbounded("player", m_Players[i]->m_Player); | serializer.NumberI32_Unbounded("player", m_Players[i]->m_Player); | ||||
serializer.NumberU8_Unbounded("difficulty", m_Players[i]->m_Difficulty); | serializer.NumberU8_Unbounded("difficulty", m_Players[i]->m_Difficulty); | ||||
serializer.String("behavior", m_Players[i]->m_Behavior, 1, 256); | serializer.String("behavior", m_Players[i]->m_Behavior, 1, 256); | ||||
serializer.NumberU32_Unbounded("num commands", (u32)m_Players[i]->m_Commands.size()); | serializer.NumberU32_Unbounded("num commands", (u32)m_Players[i]->m_Commands.size()); | ||||
for (size_t j = 0; j < m_Players[i]->m_Commands.size(); ++j) | for (size_t j = 0; j < m_Players[i]->m_Commands.size(); ++j) | ||||
{ | { | ||||
JS::RootedValue val(rq.cx); | JS::RootedValue val(rq.cx); | ||||
m_ScriptInterface->ReadStructuredClone(m_Players[i]->m_Commands[j], &val); | m_ScriptInterface->ReadStructuredClone(m_Players[i]->m_Commands[j], &val); | ||||
serializer.ScriptVal("command", &val); | serializer.ScriptVal("command", &val); | ||||
} | } | ||||
bool hasCustomSerialize = m_ScriptInterface->HasProperty(m_Players[i]->m_Obj, "Serialize"); | |||||
if (hasCustomSerialize) | |||||
{ | |||||
JS::RootedValue scriptData(rq.cx); | |||||
if (!m_ScriptInterface->CallFunction(m_Players[i]->m_Obj, "Serialize", &scriptData)) | |||||
LOGERROR("AI script Serialize call failed"); | |||||
serializer.ScriptVal("data", &scriptData); | |||||
} | |||||
else | |||||
{ | |||||
serializer.ScriptVal("data", &m_Players[i]->m_Obj); | serializer.ScriptVal("data", &m_Players[i]->m_Obj); | ||||
} | } | ||||
} | |||||
// AI pathfinder | // AI pathfinder | ||||
Serializer(serializer, "non pathfinding pass classes", m_NonPathfindingPassClasses); | Serializer(serializer, "non pathfinding pass classes", m_NonPathfindingPassClasses); | ||||
Serializer(serializer, "pathfinding pass classes", m_PathfindingPassClasses); | Serializer(serializer, "pathfinding pass classes", m_PathfindingPassClasses); | ||||
serializer.NumberU16_Unbounded("pathfinder grid w", m_PassabilityMap.m_W); | serializer.NumberU16_Unbounded("pathfinder grid w", m_PassabilityMap.m_W); | ||||
serializer.NumberU16_Unbounded("pathfinder grid h", m_PassabilityMap.m_H); | serializer.NumberU16_Unbounded("pathfinder grid h", m_PassabilityMap.m_H); | ||||
serializer.RawBytes("pathfinder grid data", (const u8*)m_PassabilityMap.m_Data, | serializer.RawBytes("pathfinder grid data", (const u8*)m_PassabilityMap.m_Data, | ||||
m_PassabilityMap.m_W*m_PassabilityMap.m_H*sizeof(NavcellData)); | m_PassabilityMap.m_W*m_PassabilityMap.m_H*sizeof(NavcellData)); | ||||
Show All 20 Lines | void Deserialize(std::istream& stream, u32 numAis) | ||||
rngStream >> m_RNG; | rngStream >> m_RNG; | ||||
deserializer.NumberU32_Unbounded("turn", m_TurnNum); | deserializer.NumberU32_Unbounded("turn", m_TurnNum); | ||||
deserializer.Bool("useSharedScript", m_HasSharedComponent); | deserializer.Bool("useSharedScript", m_HasSharedComponent); | ||||
if (m_HasSharedComponent) | if (m_HasSharedComponent) | ||||
{ | { | ||||
TryLoadSharedComponent(); | TryLoadSharedComponent(); | ||||
JS::RootedValue sharedData(rq.cx); | deserializer.ScriptObjectAssign("sharedData", m_SharedAIObj); | ||||
deserializer.ScriptVal("sharedData", &sharedData); | |||||
if (!m_ScriptInterface->CallFunctionVoid(m_SharedAIObj, "Deserialize", sharedData)) | |||||
LOGERROR("AI shared script Deserialize call failed"); | |||||
} | } | ||||
for (size_t i = 0; i < numAis; ++i) | for (size_t i = 0; i < numAis; ++i) | ||||
{ | { | ||||
std::wstring name; | std::wstring name; | ||||
player_id_t player; | player_id_t player; | ||||
u8 difficulty; | u8 difficulty; | ||||
std::wstring behavior; | std::wstring behavior; | ||||
Show All 9 Lines | for (size_t i = 0; i < numAis; ++i) | ||||
m_Players.back()->m_Commands.reserve(numCommands); | m_Players.back()->m_Commands.reserve(numCommands); | ||||
for (size_t j = 0; j < numCommands; ++j) | for (size_t j = 0; j < numCommands; ++j) | ||||
{ | { | ||||
JS::RootedValue val(rq.cx); | JS::RootedValue val(rq.cx); | ||||
deserializer.ScriptVal("command", &val); | deserializer.ScriptVal("command", &val); | ||||
m_Players.back()->m_Commands.push_back(m_ScriptInterface->WriteStructuredClone(val)); | m_Players.back()->m_Commands.push_back(m_ScriptInterface->WriteStructuredClone(val)); | ||||
} | } | ||||
bool hasCustomDeserialize = m_ScriptInterface->HasProperty(m_Players.back()->m_Obj, "Deserialize"); | deserializer.ScriptObjectAssign("data", m_Players.back()->m_Obj); | ||||
if (hasCustomDeserialize) | |||||
{ | |||||
JS::RootedValue scriptData(rq.cx); | |||||
deserializer.ScriptVal("data", &scriptData); | |||||
if (m_Players[i]->m_UseSharedComponent) | |||||
{ | |||||
if (!m_ScriptInterface->CallFunctionVoid(m_Players.back()->m_Obj, "Deserialize", scriptData, m_SharedAIObj)) | |||||
LOGERROR("AI script Deserialize call failed"); | |||||
} | |||||
else if (!m_ScriptInterface->CallFunctionVoid(m_Players.back()->m_Obj, "Deserialize", scriptData)) | |||||
{ | |||||
LOGERROR("AI script deserialize() call failed"); | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
deserializer.ScriptVal("data", &m_Players.back()->m_Obj); | |||||
} | |||||
} | } | ||||
// AI pathfinder | // AI pathfinder | ||||
Serializer(deserializer, "non pathfinding pass classes", m_NonPathfindingPassClasses); | Serializer(deserializer, "non pathfinding pass classes", m_NonPathfindingPassClasses); | ||||
Serializer(deserializer, "pathfinding pass classes", m_PathfindingPassClasses); | Serializer(deserializer, "pathfinding pass classes", m_PathfindingPassClasses); | ||||
u16 mapW, mapH; | u16 mapW, mapH; | ||||
deserializer.NumberU16_Unbounded("pathfinder grid w", mapW); | deserializer.NumberU16_Unbounded("pathfinder grid w", mapW); | ||||
deserializer.NumberU16_Unbounded("pathfinder grid h", mapH); | deserializer.NumberU16_Unbounded("pathfinder grid h", mapH); | ||||
▲ Show 20 Lines • Show All 362 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator