Changeset - r17187:3e2dea89941f
[Not reviewed]
master
0 1 0
terkhen - 14 years ago 2011-02-01 10:48:10
terkhen@openttd.org
(svn r21936) -Fix [FS#4457](r19231): Do not remove existing road/tram bits when overbuilding stops of the opposite road type.
-Change: Build only the required road/tram bits when building stops with drag and drop.
1 file changed with 6 insertions and 5 deletions:
0 comments (0 inline, 0 general)
src/station_cmd.cpp
Show inline comments
 
@@ -827,10 +827,10 @@ static CommandCost CheckFlatLandRailStat
 
 * @param is_truck_stop True when building a truck stop, false otherwise.
 
 * @param axis Axis of a drive-through road stop.
 
 * @param station StationID to be queried and returned if available.
 
 * @param rts Road types to build. Bits already built at the tile will be removed.
 
 * @param rts Road types to build.
 
 * @return The cost in case of success, or an error code if it failed.
 
 */
 
static CommandCost CheckFlatLandRoadStop(TileArea tile_area, DoCommandFlag flags, uint invalid_dirs, bool is_drive_through, bool is_truck_stop, Axis axis, StationID *station, RoadTypes &rts)
 
static CommandCost CheckFlatLandRoadStop(TileArea tile_area, DoCommandFlag flags, uint invalid_dirs, bool is_drive_through, bool is_truck_stop, Axis axis, StationID *station, RoadTypes rts)
 
{
 
	CommandCost cost(EXPENSES_CONSTRUCTION);
 
	int allowed_z = -1;
 
@@ -906,7 +906,7 @@ static CommandCost CheckFlatLandRoadStop
 
					num_roadbits += CountBits(GetRoadBits(cur_tile, ROADTYPE_TRAM));
 
				}
 

	
 
				/* Do not remove roadtypes! */
 
				/* Take into account existing roadbits. */
 
				rts |= cur_rts;
 
			} else {
 
				ret = DoCommand(cur_tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 
@@ -1787,6 +1787,8 @@ CommandCost CmdBuildRoadStop(TileIndex t
 
	if (flags & DC_EXEC) {
 
		/* Check every tile in the area. */
 
		TILE_AREA_LOOP(cur_tile, roadstop_area) {
 
			RoadTypes cur_rts = GetRoadTypes(cur_tile);
 

	
 
			if (IsTileType(cur_tile, MP_STATION) && IsRoadStop(cur_tile)) {
 
				RemoveRoadStop(cur_tile, flags);
 
			}
 
@@ -1809,10 +1811,9 @@ CommandCost CmdBuildRoadStop(TileIndex t
 

	
 
			RoadStopType rs_type = type ? ROADSTOP_TRUCK : ROADSTOP_BUS;
 
			if (is_drive_through) {
 
				RoadTypes cur_rts = IsNormalRoadTile(cur_tile) ? GetRoadTypes(cur_tile) : ROADTYPES_NONE;
 
				Owner road_owner = HasBit(cur_rts, ROADTYPE_ROAD) ? GetRoadOwner(cur_tile, ROADTYPE_ROAD) : _current_company;
 
				Owner tram_owner = HasBit(cur_rts, ROADTYPE_TRAM) ? GetRoadOwner(cur_tile, ROADTYPE_TRAM) : _current_company;
 
				MakeDriveThroughRoadStop(cur_tile, st->owner, road_owner, tram_owner, st->index, rs_type, rts, DiagDirToAxis(ddir));
 
				MakeDriveThroughRoadStop(cur_tile, st->owner, road_owner, tram_owner, st->index, rs_type, rts | cur_rts, DiagDirToAxis(ddir));
 
				road_stop->MakeDriveThrough();
 
			} else {
 
				MakeRoadStop(cur_tile, st->owner, st->index, rs_type, rts, ddir);
0 comments (0 inline, 0 general)