DjWarmonger 10 роки тому
батько
коміт
f81b46088a
1 змінених файлів з 10 додано та 2 видалено
  1. 10 2
      lib/rmg/CRmgTemplateZone.cpp

+ 10 - 2
lib/rmg/CRmgTemplateZone.cpp

@@ -1506,7 +1506,10 @@ bool CRmgTemplateZone::placeMines (CMapGenerator* gen)
 			mine->subID = static_cast<si32>(res);
 			mine->producedResource = res;
 			mine->producedQuantity = mine->defaultResProduction();
-			addCloseObject(mine, 1500);
+			if (!i)
+				addCloseObject(mine, 1500); //only firts one is close
+			else
+				addRequiredObject(mine, 1500);
 		}
 	}
 	for (const auto & res : preciousResources)
@@ -1587,7 +1590,12 @@ bool CRmgTemplateZone::createRequiredObjects(CMapGenerator* gen)
 		// smallest distance to zone center, greatest distance to nearest object
 		auto isCloser = [this, gen](const int3 & lhs, const int3 & rhs) -> bool
 		{
-			return (this->pos.dist2dSQ(lhs) * 0.5f - gen->getNearestObjectDistance(lhs)) < (this->pos.dist2dSQ(rhs) * 0.5f - gen->getNearestObjectDistance(rhs));
+			float lDist = this->pos.dist2d(lhs);
+			float rDist = this->pos.dist2d(rhs);
+			lDist *= (lDist > 12) ? 10 : 1; //objects within 12 tile radius are preferred (smaller distance rating)
+			rDist *= (rDist > 12) ? 10 : 1;
+
+			return (lDist * 0.5f - std::sqrt(gen->getNearestObjectDistance(lhs))) < (rDist * 0.5f - std::sqrt(gen->getNearestObjectDistance(rhs)));
 		};
 
 		boost::sort (tiles, isCloser);