mirror of
https://github.com/vcmi/vcmi.git
synced 2025-04-07 07:10:04 +02:00
more experiments
This commit is contained in:
parent
27c46c83d6
commit
84a2623c37
@ -495,7 +495,7 @@ void CRmgTemplateZone::fractalize(CMapGenerator* gen)
|
|||||||
//if tiles is not close enough, make path to it
|
//if tiles is not close enough, make path to it
|
||||||
if (currentDistance > minDistance)
|
if (currentDistance > minDistance)
|
||||||
{
|
{
|
||||||
crunchPath(gen, tileToMakePath, closestTile, id, &tilesToClear);
|
crunchPath(gen, tileToMakePath, closestTile, &tilesToClear);
|
||||||
break; //next iteration - use already cleared tiles
|
break; //next iteration - use already cleared tiles
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -608,7 +608,7 @@ do not leave zone border
|
|||||||
|
|
||||||
auto lastDistance = distance;
|
auto lastDistance = distance;
|
||||||
|
|
||||||
auto processNeighbours = [this, gen, ¤tPos, dst, &distance, &result, &end, clearedTiles](int3 &pos)
|
auto processNeighbours = [this, gen, ¤tPos, dst, &distance, &result, &end, clearedTiles,forRoad](int3 &pos)
|
||||||
{
|
{
|
||||||
if (!result) //not sure if lambda is worth it...
|
if (!result) //not sure if lambda is worth it...
|
||||||
{
|
{
|
||||||
@ -631,11 +631,23 @@ do not leave zone border
|
|||||||
currentPos = pos;
|
currentPos = pos;
|
||||||
distance = currentPos.dist2dSQ (dst);
|
distance = currentPos.dist2dSQ (dst);
|
||||||
}
|
}
|
||||||
else if (gen->isFree(pos))
|
else if (!forRoad && gen->isFree(pos))
|
||||||
{
|
{
|
||||||
end = true;
|
end = true;
|
||||||
result = true;
|
result = true;
|
||||||
}
|
}
|
||||||
|
else if (forRoad && vstd::contains(this->roads, pos))
|
||||||
|
{
|
||||||
|
end = true;
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
else if (forRoad && gen->isFree(pos))
|
||||||
|
{
|
||||||
|
if (clearedTiles)
|
||||||
|
clearedTiles->insert(pos);
|
||||||
|
currentPos = pos;
|
||||||
|
distance = currentPos.dist2dSQ (dst);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -714,7 +726,7 @@ bool CRmgTemplateZone::crunchRoad(CMapGenerator* gen, const int3& src, const int
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
logGlobal->warnStream() << boost::format("Failed to crunch road from %s to %s") %src %dst;
|
logGlobal->warnStream() << boost::format("Failed to crunch road from %s to %s") %src %dst;
|
||||||
return crunchPath(gen, src, dst, clearedTiles, false);
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1482,14 +1494,10 @@ void CRmgTemplateZone::createObstacles2(CMapGenerator* gen)
|
|||||||
|
|
||||||
void CRmgTemplateZone::drawRoads(CMapGenerator* gen)
|
void CRmgTemplateZone::drawRoads(CMapGenerator* gen)
|
||||||
{
|
{
|
||||||
|
|
||||||
auto doDrawRoad = []()
|
|
||||||
{
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
logGlobal->debug("Started building roads");
|
logGlobal->debug("Started building roads");
|
||||||
|
|
||||||
|
std::set<int3> processed;
|
||||||
|
|
||||||
while(!roadNodes.empty())
|
while(!roadNodes.empty())
|
||||||
{
|
{
|
||||||
int3 node = *roadNodes.begin();
|
int3 node = *roadNodes.begin();
|
||||||
@ -1502,10 +1510,14 @@ void CRmgTemplateZone::drawRoads(CMapGenerator* gen)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int3 cross = *RandomGeneratorUtil::nextItem(roads, gen->rand);
|
auto comparator = [=](int3 lhs, int3 rhs) { return node.dist2dSQ(lhs) < node.dist2dSQ(rhs); };
|
||||||
|
|
||||||
|
int3 cross = * boost::range::min_element(processed, comparator);
|
||||||
logGlobal->debugStream() << "Building road from " << node << " to " << cross;
|
logGlobal->debugStream() << "Building road from " << node << " to " << cross;
|
||||||
crunchRoad(gen, node, cross, &freePaths);
|
crunchRoad(gen, node, cross, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
processed.insert(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
logGlobal->debug("Finished building roads");
|
logGlobal->debug("Finished building roads");
|
||||||
@ -1760,7 +1772,7 @@ void CRmgTemplateZone::placeObject(CMapGenerator* gen, CGObjectInstance* object,
|
|||||||
case Obj::MONOLITH_ONE_WAY_EXIT:
|
case Obj::MONOLITH_ONE_WAY_EXIT:
|
||||||
case Obj::SUBTERRANEAN_GATE:
|
case Obj::SUBTERRANEAN_GATE:
|
||||||
{
|
{
|
||||||
roadNodes.insert(pos + object->getVisitableOffset());
|
roadNodes.insert(pos - object->getVisitableOffset());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user