浏览代码

Final fixes and tweaks

Tomasz Zieliński 1 年之前
父节点
当前提交
4d13c3b94f
共有 2 个文件被更改,包括 10 次插入11 次删除
  1. 5 1
      lib/rmg/RmgObject.cpp
  2. 5 10
      lib/rmg/modificators/RoadPlacer.cpp

+ 5 - 1
lib/rmg/RmgObject.cpp

@@ -189,7 +189,7 @@ Object::Object(CGObjectInstance & object):
 }
 
 Object::Object(const Object & object):
-	guarded(object.guarded),
+	guarded(false),
 	value(object.value)
 {
 	for(const auto & i : object.dInstances)
@@ -392,7 +392,11 @@ const Area & Object::getBorderAbove() const
 	if(dBorderAboveCache.empty())
 	{
 		for(const auto & instance : dInstances)
+		{
+			if (instance.isRemovable() || instance.object().appearance->isVisitableFromTop())
+				continue;
 			dBorderAboveCache.unite(instance.getBorderAbove());
+		}
 	}
 	return dBorderAboveCache;
 }

+ 5 - 10
lib/rmg/modificators/RoadPlacer.cpp

@@ -137,17 +137,12 @@ bool RoadPlacer::createRoad(const int3 & dst)
 
 void RoadPlacer::drawRoads(bool secondary)
 {	
+	//Do not draw roads on underground rock or water
+	roads.erase_if([this](const int3& pos) -> bool
 	{
-		//Clean space under roads even if they won't be eventually generated
-		Zone::Lock lock(zone.areaMutex);
-
-		//Do not draw roads on underground rock or water
-		roads.erase_if([this](const int3& pos) -> bool
-		{
-			const auto* terrain = map.getTile(pos).terType;
-			return !terrain->isPassable() || !terrain->isLand();
-		});
-	}
+		const auto* terrain = map.getTile(pos).terType;
+		return !terrain->isPassable() || !terrain->isLand();
+	});
 
 	if(!generator.getMapGenOptions().isRoadEnabled())
 	{