1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-22 22:13:35 +02:00

Ignore new connections for zone placement.

This commit is contained in:
Tomasz Zieliński 2024-07-30 05:07:05 +02:00
parent d10711928f
commit a7fa3c7d8b

View File

@ -80,12 +80,21 @@ void CZonePlacer::findPathsBetweenZones()
for (auto & connection : connectedZoneIds)
{
if (connection.getConnectionType() == rmg::EConnectionType::REPULSIVE)
switch (connection.getConnectionType())
{
//Do not consider virtual connections for graph distance
continue;
case rmg::EConnectionType::REPULSIVE:
case rmg::EConnectionType::FORCE_PORTAL:
continue;
}
auto neighbor = connection.getOtherZoneId(current);
if (current == neighbor)
{
//Do not consider self-connections
continue;
}
if (!visited[neighbor])
{
visited[neighbor] = true;
@ -552,8 +561,16 @@ void CZonePlacer::attractConnectedZones(TZoneMap & zones, TForceVector & forces,
for (const auto & connection : zone.second->getConnections())
{
if (connection.getConnectionType() == rmg::EConnectionType::REPULSIVE)
switch (connection.getConnectionType())
{
//Do not consider virtual connections for graph distance
case rmg::EConnectionType::REPULSIVE:
case rmg::EConnectionType::FORCE_PORTAL:
continue;
}
if (connection.getZoneA() == connection.getZoneB())
{
//Do not consider self-connections
continue;
}
@ -710,11 +727,19 @@ void CZonePlacer::moveOneZone(TZoneMap& zones, TForceVector& totalForces, TDista
std::set<TRmgTemplateZoneId> connectedZones;
for (const auto& connection : firstZone->getConnections())
{
//FIXME: Should we also exclude fictive connections?
if (connection.getConnectionType() != rmg::EConnectionType::REPULSIVE)
switch (connection.getConnectionType())
{
connectedZones.insert(connection.getOtherZoneId(firstZone->getId()));
//Do not consider virtual connections for graph distance
case rmg::EConnectionType::REPULSIVE:
case rmg::EConnectionType::FORCE_PORTAL:
continue;
}
if (connection.getZoneA() == connection.getZoneB())
{
//Do not consider self-connections
continue;
}
connectedZones.insert(connection.getOtherZoneId(firstZone->getId()));
}
auto level = firstZone->getCenter().z;