Fix infrastructure totals when connecting road/tram of different owners

across dual road/tram bridge with custom bridge heads
This commit is contained in:
Jonathan G Rennison
2023-12-29 00:25:37 +00:00
parent 2810c4fe65
commit ec6d2b68de

View File

@@ -2884,23 +2884,24 @@ static TrackStatus GetTileTrackStatus_TunnelBridge(TileIndex tile, TransportType
static void UpdateRoadTunnelBridgeInfrastructure(TileIndex begin, TileIndex end, bool add) { static void UpdateRoadTunnelBridgeInfrastructure(TileIndex begin, TileIndex end, bool add) {
/* A full diagonal road has two road bits. */ /* A full diagonal road has two road bits. */
const uint middle_len = 2 * GetTunnelBridgeLength(begin, end) * TUNNELBRIDGE_TRACKBIT_FACTOR; const uint half_middle_len = GetTunnelBridgeLength(begin, end) * TUNNELBRIDGE_TRACKBIT_FACTOR;
const uint len = middle_len + (4 * TUNNELBRIDGE_TRACKBIT_FACTOR); const uint half_len = half_middle_len + (2 * TUNNELBRIDGE_TRACKBIT_FACTOR);
for (TileIndex t : { begin, end }) {
for (RoadTramType rtt : _roadtramtypes) { for (RoadTramType rtt : _roadtramtypes) {
RoadType rt = GetRoadType(begin, rtt); RoadType rt = GetRoadType(t, rtt);
if (rt == INVALID_ROADTYPE) continue; if (rt == INVALID_ROADTYPE) continue;
Company * const c = Company::GetIfValid(GetRoadOwner(begin, rtt)); Company * const c = Company::GetIfValid(GetRoadOwner(t, rtt));
if (c != nullptr) { if (c != nullptr) {
uint infra = 0; uint infra = 0;
if (IsBridge(begin)) { if (IsBridge(t)) {
const RoadBits bits = GetCustomBridgeHeadRoadBits(begin, rtt); const RoadBits bits = GetCustomBridgeHeadRoadBits(t, rtt);
infra += CountBits(bits) * TUNNELBRIDGE_TRACKBIT_FACTOR; infra += CountBits(bits) * TUNNELBRIDGE_TRACKBIT_FACTOR;
if (bits & DiagDirToRoadBits(GetTunnelBridgeDirection(begin))) { if (bits & DiagDirToRoadBits(GetTunnelBridgeDirection(t))) {
infra += middle_len; infra += half_middle_len;
} }
} else { } else {
infra += len; infra += half_len;
} }
if (add) { if (add) {
c->infrastructure.road[rt] += infra; c->infrastructure.road[rt] += infra;
@@ -2909,22 +2910,6 @@ static void UpdateRoadTunnelBridgeInfrastructure(TileIndex begin, TileIndex end,
} }
} }
} }
for (RoadTramType rtt : _roadtramtypes) {
RoadType rt = GetRoadType(end, rtt);
if (rt == INVALID_ROADTYPE) continue;
Company * const c = Company::GetIfValid(GetRoadOwner(end, rtt));
if (c != nullptr) {
uint infra = 0;
if (IsBridge(end)) {
const RoadBits bits = GetCustomBridgeHeadRoadBits(end, rtt);
infra += CountBits(bits) * TUNNELBRIDGE_TRACKBIT_FACTOR;
}
if (add) {
c->infrastructure.road[rt] += infra;
} else {
c->infrastructure.road[rt] -= infra;
}
}
} }
} }