Browse Source

Allow underground zones to connect more easily. Regression: Obstacles spawn at zone boundaries.

DjWarmonger 11 years ago
parent
commit
866cd6f540
3 changed files with 14 additions and 12 deletions
  1. 12 10
      lib/rmg/CRmgTemplateZone.cpp
  2. 1 1
      lib/rmg/CRmgTemplateZone.h
  3. 1 1
      lib/rmg/CZonePlacer.cpp

+ 12 - 10
lib/rmg/CRmgTemplateZone.cpp

@@ -360,16 +360,18 @@ std::set<int3> CRmgTemplateZone::getTileInfo () const
 	return tileinfo;
 	return tileinfo;
 }
 }
 
 
-void CRmgTemplateZone::discardDistantTiles (CMapGenerator* gen, int distance)
-{
-	for (auto tile : tileinfo)
-	{
-		if (tile.dist2d(this->pos) > distance)
-		{
-			gen->setOccupied(tile, ETileType::USED);
-			//gen->setOccupied(tile, ETileType::BLOCKED); //fixme: crash at rendering?
-		}
-	}
+void CRmgTemplateZone::discardDistantTiles (CMapGenerator* gen, float distance)
+{
+	//TODO: mark tiles beyond zone as unavailable, but allow to connect with adjacent zones
+
+	//for (auto tile : tileinfo)
+	//{
+	//	if (tile.dist2d(this->pos) > distance)
+	//	{
+	//		gen->setOccupied(tile, ETileType::USED);
+	//		//gen->setOccupied(tile, ETileType::BLOCKED); //fixme: crash at rendering?
+	//	}
+	//}
 	vstd::erase_if (tileinfo, [distance, this](const int3 &tile) -> bool
 	vstd::erase_if (tileinfo, [distance, this](const int3 &tile) -> bool
 	{
 	{
 		return tile.dist2d(this->pos) > distance;
 		return tile.dist2d(this->pos) > distance;

+ 1 - 1
lib/rmg/CRmgTemplateZone.h

@@ -129,7 +129,7 @@ public:
 
 
 	void addTile (const int3 &pos);
 	void addTile (const int3 &pos);
 	std::set<int3> getTileInfo () const;
 	std::set<int3> getTileInfo () const;
-	void discardDistantTiles (CMapGenerator* gen, int distance);
+	void discardDistantTiles (CMapGenerator* gen, float distance);
 
 
 	void addRequiredObject(CGObjectInstance * obj, si32 guardStrength=0);
 	void addRequiredObject(CGObjectInstance * obj, si32 guardStrength=0);
 	bool addMonster(CMapGenerator* gen, int3 &pos, si32 strength);
 	bool addMonster(CMapGenerator* gen, int3 &pos, si32 strength);

+ 1 - 1
lib/rmg/CZonePlacer.cpp

@@ -266,7 +266,7 @@ void CZonePlacer::assignZones(shared_ptr<CMapGenOptions> mapGenOptions)
 		//TODO: similiar for islands
 		//TODO: similiar for islands
 		if (zone.second->getPos().z)
 		if (zone.second->getPos().z)
 		{
 		{
-			zone.second->discardDistantTiles(gen, zone.second->getSize());
+			zone.second->discardDistantTiles(gen, zone.second->getSize() + 1);
 
 
 			//make sure that terrain inside zone is not a rock
 			//make sure that terrain inside zone is not a rock
 			//FIXME: reorder actions?
 			//FIXME: reorder actions?