Changeset - r22088:26743df88282
[Not reviewed]
master
0 1 0
frosch - 9 years ago 2015-04-26 10:23:55
frosch@openttd.org
(svn r27252) -Fix [FS#6281]: Invalid infrastructure counting when crossing tram tracks with railroads. (adf88)
1 file changed with 24 insertions and 24 deletions:
0 comments (0 inline, 0 general)
src/rail_cmd.cpp
Show inline comments
 
@@ -485,31 +485,31 @@ CommandCost CmdBuildSingleRail(TileIndex
 
				RoadTypes roadtypes = GetRoadTypes(tile);
 
				RoadBits road = GetRoadBits(tile, ROADTYPE_ROAD);
 
				RoadBits tram = GetRoadBits(tile, ROADTYPE_TRAM);
 
				switch (roadtypes) {
 
					default: break;
 
					case ROADTYPES_TRAM:
 
						/* Tram crossings must always have road. */
 
						if (flags & DC_EXEC) {
 
							SetRoadOwner(tile, ROADTYPE_ROAD, _current_company);
 
							Company *c = Company::GetIfValid(_current_company);
 
							if (c != NULL) {
 
								/* A full diagonal tile has two road bits. */
 
								c->infrastructure.road[ROADTYPE_ROAD] += 2;
 
								DirtyCompanyInfrastructureWindows(c->index);
 
				if ((track == TRACK_X && (road | tram) == ROAD_Y) ||
 
						(track == TRACK_Y && (road | tram) == ROAD_X)) {
 
					switch (roadtypes) {
 
						default: break;
 
						case ROADTYPES_TRAM:
 
							/* Tram crossings must always have road. */
 
							if (flags & DC_EXEC) {
 
								SetRoadOwner(tile, ROADTYPE_ROAD, _current_company);
 
								Company *c = Company::GetIfValid(_current_company);
 
								if (c != NULL) {
 
									/* A full diagonal tile has two road bits. */
 
									c->infrastructure.road[ROADTYPE_ROAD] += 2;
 
									DirtyCompanyInfrastructureWindows(c->index);
 
								}
 
							}
 
						}
 
						roadtypes |= ROADTYPES_ROAD;
 
						break;
 

	
 
					case ROADTYPES_ALL:
 
						if (road != tram) return CMD_ERROR;
 
						break;
 
				}
 

	
 
				road |= tram;
 

	
 
				if ((track == TRACK_X && road == ROAD_Y) ||
 
						(track == TRACK_Y && road == ROAD_X)) {
 
							roadtypes |= ROADTYPES_ROAD;
 
							break;
 

	
 
						case ROADTYPES_ALL:
 
							if (road != tram) return CMD_ERROR;
 
							break;
 
					}
 

	
 
					road |= tram;
 

	
 
					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));
 
						UpdateLevelCrossing(tile, false);
0 comments (0 inline, 0 general)