1
0
Fork 0

(svn r27252) -Fix [FS#6281]: Invalid infrastructure counting when crossing tram tracks with railroads. (adf88)

release/1.6
frosch 2015-04-26 10:23:55 +00:00
parent 0ea4127837
commit 3a82bae0d3
1 changed files with 21 additions and 21 deletions

View File

@ -485,31 +485,31 @@ CommandCost CmdBuildSingleRail(TileIndex tile, DoCommandFlag flags, uint32 p1, u
RoadTypes roadtypes = GetRoadTypes(tile); RoadTypes roadtypes = GetRoadTypes(tile);
RoadBits road = GetRoadBits(tile, ROADTYPE_ROAD); RoadBits road = GetRoadBits(tile, ROADTYPE_ROAD);
RoadBits tram = GetRoadBits(tile, ROADTYPE_TRAM); RoadBits tram = GetRoadBits(tile, ROADTYPE_TRAM);
switch (roadtypes) { if ((track == TRACK_X && (road | tram) == ROAD_Y) ||
default: break; (track == TRACK_Y && (road | tram) == ROAD_X)) {
case ROADTYPES_TRAM: switch (roadtypes) {
/* Tram crossings must always have road. */ default: break;
if (flags & DC_EXEC) { case ROADTYPES_TRAM:
SetRoadOwner(tile, ROADTYPE_ROAD, _current_company); /* Tram crossings must always have road. */
Company *c = Company::GetIfValid(_current_company); if (flags & DC_EXEC) {
if (c != NULL) { SetRoadOwner(tile, ROADTYPE_ROAD, _current_company);
/* A full diagonal tile has two road bits. */ Company *c = Company::GetIfValid(_current_company);
c->infrastructure.road[ROADTYPE_ROAD] += 2; if (c != NULL) {
DirtyCompanyInfrastructureWindows(c->index); /* A full diagonal tile has two road bits. */
c->infrastructure.road[ROADTYPE_ROAD] += 2;
DirtyCompanyInfrastructureWindows(c->index);
}
} }
} roadtypes |= ROADTYPES_ROAD;
roadtypes |= ROADTYPES_ROAD; break;
break;
case ROADTYPES_ALL: case ROADTYPES_ALL:
if (road != tram) return CMD_ERROR; if (road != tram) return CMD_ERROR;
break; break;
} }
road |= tram; road |= tram;
if ((track == TRACK_X && road == ROAD_Y) ||
(track == TRACK_Y && road == ROAD_X)) {
if (flags & DC_EXEC) { if (flags & DC_EXEC) {
MakeRoadCrossing(tile, GetRoadOwner(tile, ROADTYPE_ROAD), GetRoadOwner(tile, ROADTYPE_TRAM), _current_company, (track == TRACK_X ? AXIS_Y : AXIS_X), railtype, roadtypes, GetTownIndex(tile)); MakeRoadCrossing(tile, GetRoadOwner(tile, ROADTYPE_ROAD), GetRoadOwner(tile, ROADTYPE_TRAM), _current_company, (track == TRACK_X ? AXIS_Y : AXIS_X), railtype, roadtypes, GetTownIndex(tile));
UpdateLevelCrossing(tile, false); UpdateLevelCrossing(tile, false);