File diff r18977:1c3e0e63f950 → r18978:7e76e962d9b9
src/station_cmd.cpp
Show inline comments
 
@@ -3612,16 +3612,41 @@ static void ChangeTileOwner_Station(Tile
 
		Company *old_company = Company::Get(old_owner);
 
		Company *new_company = Company::Get(new_owner);
 

	
 
		if ((IsRailWaypoint(tile) || IsRailStation(tile)) && !IsStationTileBlocked(tile)) {
 
			old_company->infrastructure.rail[GetRailType(tile)]--;
 
			new_company->infrastructure.rail[GetRailType(tile)]++;
 
		/* Update counts for underlying infrastructure. */
 
		switch (GetStationType(tile)) {
 
			case STATION_RAIL:
 
			case STATION_WAYPOINT:
 
				if (!IsStationTileBlocked(tile)) {
 
					old_company->infrastructure.rail[GetRailType(tile)]--;
 
					new_company->infrastructure.rail[GetRailType(tile)]++;
 
				}
 
				break;
 

	
 
			case STATION_BUS:
 
			case STATION_TRUCK:
 
				if (!IsDriveThroughStopTile(tile)) {
 
					/* Drive-through stops were already handled above. */
 
					old_company->infrastructure.road[FIND_FIRST_BIT(GetRoadTypes(tile))] -= 2;
 
					new_company->infrastructure.road[FIND_FIRST_BIT(GetRoadTypes(tile))] += 2;
 
				}
 
				break;
 

	
 
			case STATION_BUOY:
 
			case STATION_DOCK:
 
				if (GetWaterClass(tile) == WATER_CLASS_CANAL) {
 
					old_company->infrastructure.water--;
 
					new_company->infrastructure.water++;
 
				}
 
				break;
 

	
 
			default:
 
				break;
 
		}
 
		if (IsRoadStop(tile) && !IsDriveThroughStopTile(tile)) {
 
			RoadType rt;
 
			FOR_EACH_SET_ROADTYPE(rt, GetRoadTypes(tile)) {
 
				old_company->infrastructure.road[rt] -= 2;
 
				new_company->infrastructure.road[rt] += 2;
 
			}
 

	
 
		/* Update station tile count. */
 
		if (!IsBuoy(tile) && !IsAirport(tile)) {
 
			old_company->infrastructure.station--;
 
			new_company->infrastructure.station++;
 
		}
 

	
 
		/* for buoys, owner of tile is owner of water, st->owner == OWNER_NONE */