Fix infrastructure totals when connecting road/tram of different owners

across dual road/tram bridge with custom bridge heads
wip-string
Jonathan G Rennison 5 months ago
parent 2810c4fe65
commit ec6d2b68de

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

Loading…
Cancel
Save