1
0
forked from 0ad/0ad

Handle (de)serialization of the AI pathfinder.

This was SVN commit r16815.
This commit is contained in:
Nicolas Auvray 2015-06-24 20:24:58 +00:00
parent 0b7343dccc
commit e1a34eb4ea
2 changed files with 31 additions and 0 deletions

View File

@ -496,6 +496,7 @@ public:
ScriptInterface::ToJSVal(cx, &m_TerritoryMapVal, territoryMap);
m_PassabilityMap = passabilityMap;
m_PassClasses = passClassMasks;
m_LongPathfinder.Reload(passClassMasks, &m_PassabilityMap);
if (m_HasSharedComponent)
@ -655,6 +656,13 @@ public:
serializer.ScriptVal("data", &m_Players[i]->m_Obj);
}
}
// AI pathfinder
SerializeMap<SerializeString, SerializeU16_Unbounded>()(serializer, "pass classes", m_PassClasses);
serializer.NumberU16_Unbounded("pathfinder grid w", m_PassabilityMap.m_W);
serializer.NumberU16_Unbounded("pathfinder grid h", m_PassabilityMap.m_H);
serializer.RawBytes("pathfinder grid data", (const u8*)m_PassabilityMap.m_Data,
m_PassabilityMap.m_W*m_PassabilityMap.m_H*sizeof(NavcellData));
}
void Deserialize(std::istream& stream, u32 numAis)
@ -735,6 +743,15 @@ public:
deserializer.ScriptVal("data", &m_Players.back()->m_Obj);
}
}
// AI pathfinder
SerializeMap<SerializeString, SerializeU16_Unbounded>()(deserializer, "pass classes", m_PassClasses);
u16 mapW, mapH;
deserializer.NumberU16_Unbounded("pathfinder grid w", mapW);
deserializer.NumberU16_Unbounded("pathfinder grid h", mapH);
m_PassabilityMap = Grid<NavcellData>(mapW, mapH);
deserializer.RawBytes("pathfinder grid data", (u8*)m_PassabilityMap.m_Data, mapW*mapH*sizeof(NavcellData));
m_LongPathfinder.Reload(m_PassClasses, &m_PassabilityMap);
}
int getPlayerSize()
@ -849,6 +866,7 @@ private:
Grid<u8> m_TerritoryMap;
JS::PersistentRootedValue m_TerritoryMapVal;
std::map<std::string, pass_class_t> m_PassClasses;
LongPathfinder m_LongPathfinder;
bool m_CommandsComputed;

View File

@ -203,6 +203,19 @@ struct SerializeBool
}
};
struct SerializeString
{
void operator()(ISerializer& serialize, const char* name, const std::string& value)
{
serialize.StringASCII(name, value, 0, UINT32_MAX);
}
void operator()(IDeserializer& deserialize, const char* name, std::string& value)
{
deserialize.StringASCII(name, value, 0, UINT32_MAX);
}
};
struct SerializeWaypoint
{
void operator()(ISerializer& serialize, const char* UNUSED(name), const Waypoint& value)