1
0
forked from 0ad/0ad

Following e757fb84d5: also regenerate the JS values for AI maps upon deserialization.

Fixes #4247, refs #4191

This was SVN commit r18797.
This commit is contained in:
Nicolas Auvray 2016-10-01 12:29:44 +00:00
parent b74b807444
commit 636da605bb

View File

@ -508,7 +508,7 @@ public:
m_GameState = gameState; m_GameState = gameState;
} }
void UpdatePathfinder(const Grid<NavcellData>& passabilityMap, bool globallyDirty, const Grid<u8>& dirtinessGrid, void UpdatePathfinder(const Grid<NavcellData>& passabilityMap, bool globallyDirty, const Grid<u8>& dirtinessGrid, bool justDeserialized,
const std::map<std::string, pass_class_t>& nonPathfindingPassClassMasks, const std::map<std::string, pass_class_t>& pathfindingPassClassMasks) const std::map<std::string, pass_class_t>& nonPathfindingPassClassMasks, const std::map<std::string, pass_class_t>& pathfindingPassClassMasks)
{ {
ENSURE(m_CommandsComputed); ENSURE(m_CommandsComputed);
@ -521,7 +521,7 @@ public:
m_LongPathfinder.Update(&m_PassabilityMap, dirtinessGrid); m_LongPathfinder.Update(&m_PassabilityMap, dirtinessGrid);
JSContext* cx = m_ScriptInterface->GetContext(); JSContext* cx = m_ScriptInterface->GetContext();
if (dimensionChange) if (dimensionChange || justDeserialized)
ScriptInterface::ToJSVal(cx, &m_PassabilityMapVal, m_PassabilityMap); ScriptInterface::ToJSVal(cx, &m_PassabilityMapVal, m_PassabilityMap);
else else
{ {
@ -1108,14 +1108,15 @@ public:
{ {
GridUpdateInformation dirtinessInformations = cmpPathfinder->GetDirtinessData(); GridUpdateInformation dirtinessInformations = cmpPathfinder->GetDirtinessData();
if (dirtinessInformations.dirty) if (dirtinessInformations.dirty || m_JustDeserialized)
{ {
const Grid<NavcellData>& passabilityMap = cmpPathfinder->GetPassabilityGrid(); const Grid<NavcellData>& passabilityMap = cmpPathfinder->GetPassabilityGrid();
std::map<std::string, pass_class_t> nonPathfindingPassClassMasks, pathfindingPassClassMasks; std::map<std::string, pass_class_t> nonPathfindingPassClassMasks, pathfindingPassClassMasks;
cmpPathfinder->GetPassabilityClasses(nonPathfindingPassClassMasks, pathfindingPassClassMasks); cmpPathfinder->GetPassabilityClasses(nonPathfindingPassClassMasks, pathfindingPassClassMasks);
m_Worker.UpdatePathfinder(passabilityMap, dirtinessInformations.globallyDirty, dirtinessInformations.dirtinessGrid, m_Worker.UpdatePathfinder(passabilityMap,
dirtinessInformations.globallyDirty, dirtinessInformations.dirtinessGrid, m_JustDeserialized,
nonPathfindingPassClassMasks, pathfindingPassClassMasks); nonPathfindingPassClassMasks, pathfindingPassClassMasks);
} }
} }
@ -1123,7 +1124,7 @@ public:
// Update the territory data // Update the territory data
// Since getting the territory grid can trigger a recalculation, we check NeedUpdate first // Since getting the territory grid can trigger a recalculation, we check NeedUpdate first
CmpPtr<ICmpTerritoryManager> cmpTerritoryManager(GetSystemEntity()); CmpPtr<ICmpTerritoryManager> cmpTerritoryManager(GetSystemEntity());
if (cmpTerritoryManager && cmpTerritoryManager->NeedUpdate(&m_TerritoriesDirtyID)) if (cmpTerritoryManager && (cmpTerritoryManager->NeedUpdate(&m_TerritoriesDirtyID) || m_JustDeserialized))
{ {
const Grid<u8>& territoryMap = cmpTerritoryManager->GetTerritoryGrid(); const Grid<u8>& territoryMap = cmpTerritoryManager->GetTerritoryGrid();
m_Worker.UpdateTerritoryMap(territoryMap); m_Worker.UpdateTerritoryMap(territoryMap);