Highlight tunnel connections in green when selected

This commit is contained in:
2026-07-21 21:16:21 +02:00
parent a75222f111
commit a8a6a04f1e
6 changed files with 220 additions and 12 deletions

View File

@@ -113,3 +113,43 @@ TunnelCompletion resolveTunnelCompletion(const TunnelLookup& lookup, QPoint hove
}
return TunnelCompletion{BuildingType::TunnelEntry, exitPartner};
}
std::optional<QPoint> findTunnelPartner(const TunnelLookup& lookup, QPoint tile,
BuildingType type, Rotation rotation,
int maxDistance)
{
if (type == BuildingType::TunnelEntry)
{
// An entry pairs with the first same-direction tunnel ahead, if it is an exit.
const std::optional<QPoint> ahead =
firstTunnelFacing(lookup, tile, rotation, rotation, maxDistance);
if (ahead.has_value())
{
const std::optional<TunnelTileInfo> info = lookup(*ahead);
if (info.has_value() && info->type == BuildingType::TunnelExit)
{
return ahead;
}
}
return std::nullopt;
}
if (type == BuildingType::TunnelExit)
{
// An exit is claimed by the first same-direction tunnel behind it, if it is an
// entry (its forward search reaches this exit as its first same-direction tunnel).
const std::optional<QPoint> behind =
firstTunnelFacing(lookup, tile, oppositeRotation(rotation), rotation, maxDistance);
if (behind.has_value())
{
const std::optional<TunnelTileInfo> info = lookup(*behind);
if (info.has_value() && info->type == BuildingType::TunnelEntry)
{
return behind;
}
}
return std::nullopt;
}
return std::nullopt;
}