Browse Source

Ensure distance between treasure piles.

DjWarmonger 11 years ago
parent
commit
f3d7c658f0
2 changed files with 6 additions and 6 deletions
  1. 5 5
      lib/rmg/CRmgTemplateZone.cpp
  2. 1 1
      lib/rmg/CRmgTemplateZone.h

+ 5 - 5
lib/rmg/CRmgTemplateZone.cpp

@@ -643,7 +643,7 @@ bool CRmgTemplateZone::addMonster(CMapGenerator* gen, int3 &pos, si32 strength,
 	return true;
 }
 
-bool CRmgTemplateZone::createTreasurePile (CMapGenerator* gen, int3 &pos)
+bool CRmgTemplateZone::createTreasurePile (CMapGenerator* gen, int3 &pos, float minDistance)
 {
 	CTreasurePileInfo info;
 
@@ -751,9 +751,9 @@ bool CRmgTemplateZone::createTreasurePile (CMapGenerator* gen, int3 &pos)
 				if (gen->isPossible(tile)) //we can place new treasure only on possible tile
 				{
 					bool here = true;
-					gen->foreach_neighbour (tile, [gen, &here](int3 pos)
+					gen->foreach_neighbour (tile, [gen, &here, minDistance](int3 pos)
 					{
-						if (!(gen->isBlocked(pos) || gen->isPossible(pos)))
+						if (!(gen->isBlocked(pos) || gen->isPossible(pos)) || gen->getNearestObjectDistance(pos) < minDistance)
 							here = false;
 					});
 					if (here)
@@ -1108,7 +1108,7 @@ void CRmgTemplateZone::createTreasures(CMapGenerator* gen)
 		{
 			break;
 		}
-		createTreasurePile (gen, pos);
+		createTreasurePile (gen, pos, minDistance);
 
 	} while(true);
 }
@@ -1238,7 +1238,7 @@ bool CRmgTemplateZone::findPlaceForTreasurePile(CMapGenerator* gen, float min_di
 	//logGlobal->infoStream() << boost::format("Min dist for density %f is %d") % density % min_dist;
 	for(auto tile : possibleTiles)
 	{
-		auto dist = gen->getTile(tile).getNearestObjectDistance();
+		auto dist = gen->getNearestObjectDistance(tile);
 
 		if ((dist >= min_dist) && (dist > best_distance))
 		{

+ 1 - 1
lib/rmg/CRmgTemplateZone.h

@@ -151,7 +151,7 @@ public:
 
 	void addRequiredObject(CGObjectInstance * obj, si32 guardStrength=0);
 	bool addMonster(CMapGenerator* gen, int3 &pos, si32 strength, bool clearSurroundingTiles = true, bool zoneGuard = false);
-	bool createTreasurePile (CMapGenerator* gen, int3 &pos);
+	bool createTreasurePile(CMapGenerator* gen, int3 &pos, float minDistance);
 	bool fill (CMapGenerator* gen);
 	bool placeMines (CMapGenerator* gen);
 	void initTownType (CMapGenerator* gen);