Pārlūkot izejas kodu

Fixed CID 1366289 and 1366290.

DjWarmonger 9 gadi atpakaļ
vecāks
revīzija
56b201e7e8
1 mainītis faili ar 12 papildinājumiem un 9 dzēšanām
  1. 12 9
      lib/rmg/CZonePlacer.cpp

+ 12 - 9
lib/rmg/CZonePlacer.cpp

@@ -374,7 +374,7 @@ void CZonePlacer::moveOneZone(TZoneMap &zones, TForceVector &totalForces, TDista
 	}
 	logGlobal->traceStream() << boost::format("Worst misplacement/movement ratio: %3.2f") % maxRatio;
 
-	if (maxRatio > maxDistanceMovementRatio)
+	if (maxRatio > maxDistanceMovementRatio && misplacedZone)
 	{
 		CRmgTemplateZone * targetZone = nullptr;
 		float3 ourCenter = misplacedZone->getCenter();
@@ -419,14 +419,17 @@ void CZonePlacer::moveOneZone(TZoneMap &zones, TForceVector &totalForces, TDista
 					targetZone = otherZone.second;
 				}
 			}
-			float3 vec = ourCenter - targetZone->getCenter();
-			float newDistanceBetweenZones = (misplacedZone->getSize() + targetZone->getSize()) / mapSize;
-			logGlobal->traceStream() << boost::format("Trying to move zone %d %s away from %d %s. Old distance %f") %
-				misplacedZone->getId() % ourCenter() % targetZone->getId() % targetZone->getCenter()() % maxOverlap;
-			logGlobal->traceStream() << boost::format("direction is %s") % vec();
-
-			misplacedZone->setCenter(targetZone->getCenter() + vec.unitVector() * newDistanceBetweenZones); //zones should now be just separated
-			logGlobal->traceStream() << boost::format("New distance %f") % targetZone->getCenter().dist2d(misplacedZone->getCenter());
+			if (targetZone)
+			{
+				float3 vec = ourCenter - targetZone->getCenter();
+				float newDistanceBetweenZones = (misplacedZone->getSize() + targetZone->getSize()) / mapSize;
+				logGlobal->traceStream() << boost::format("Trying to move zone %d %s away from %d %s. Old distance %f") %
+					misplacedZone->getId() % ourCenter() % targetZone->getId() % targetZone->getCenter()() % maxOverlap;
+				logGlobal->traceStream() << boost::format("direction is %s") % vec();
+
+				misplacedZone->setCenter(targetZone->getCenter() + vec.unitVector() * newDistanceBetweenZones); //zones should now be just separated
+				logGlobal->traceStream() << boost::format("New distance %f") % targetZone->getCenter().dist2d(misplacedZone->getCenter());
+			}
 		}
 	}
 }