Changeset - r6368:b0a38d4167ad
[Not reviewed]
master
0 4 0
celestar - 17 years ago 2007-03-24 09:12:03
celestar@openttd.org
(svn r9425) -Codechange/Fix (FS#689): Housekeeping in the convert rail functions: Changed the order of error checks to generate more meaningful error messages, added some doxygen comments and replaced bitshifting by proper mathematical operations
4 files changed with 42 insertions and 7 deletions:
0 comments (0 inline, 0 general)
src/rail_cmd.cpp
Show inline comments
 
@@ -849,14 +849,23 @@ int32 CmdRemoveSignalTrack(TileIndex til
 

	
 
typedef int32 DoConvertRailProc(TileIndex tile, RailType totype, bool exec);
 

	
 
/**
 
 * Switches the rail type.
 
 * Railtypes are stored on a per-tile basis, not on a per-track basis, so
 
 * all the tracks in the given tile will be converted.
 
 * @param tile        The tile on which the railtype is to be convert.
 
 * @param totype      The railtype we want to convert to
 
 * @param exec        Switches between test and execute mode
 
 * @return            The cost and state of the operation
 
 * @retval CMD_ERROR  An error occured during the operation.
 
 */
 
static int32 DoConvertRail(TileIndex tile, RailType totype, bool exec)
 
{
 
	if (!CheckTileOwnership(tile)) return CMD_ERROR;
 

	
 
	if (!EnsureNoVehicle(tile) && (!IsCompatibleRail(GetRailType(tile), totype) || IsPlainRailTile(tile))) return CMD_ERROR;
 
	if (GetRailType(tile) == totype) return CMD_ERROR;
 

	
 
	// tile is already of requested type?
 
	if (GetRailType(tile) == totype) return CMD_ERROR;
 
	if (!EnsureNoVehicle(tile) && (!IsCompatibleRail(GetRailType(tile), totype) || IsPlainRailTile(tile))) return CMD_ERROR;
 

	
 
	// 'hidden' elrails can't be downgraded to normal rail when elrails are disabled
 
	if (_patches.disable_elrails && totype == RAILTYPE_RAIL && GetRailType(tile) == RAILTYPE_ELECTRIC) return CMD_ERROR;
src/road_cmd.cpp
Show inline comments
 
@@ -367,6 +367,14 @@ do_clear:;
 
	return cost;
 
}
 

	
 
/**
 
 * Switches the rail type on a level crossing.
 
 * @param tile        The tile on which the railtype is to be convert.
 
 * @param totype      The railtype we want to convert to
 
 * @param exec        Switches between test and execute mode
 
 * @return            The cost and state of the operation
 
 * @retval CMD_ERROR  An error occured during the operation.
 
 */
 
int32 DoConvertStreetRail(TileIndex tile, RailType totype, bool exec)
 
{
 
	// not a railroad crossing?
 
@@ -386,7 +394,7 @@ int32 DoConvertStreetRail(TileIndex tile
 
		YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetCrossingRailBits(tile)));
 
	}
 

	
 
	return _price.build_rail >> 1;
 
	return _price.build_rail / 2;
 
}
 

	
 

	
src/station_cmd.cpp
Show inline comments
 
@@ -1120,6 +1120,14 @@ static int32 RemoveRailroadStation(Stati
 
	return cost;
 
}
 

	
 
/**
 
 * Switches the rail type at a railway station tile.
 
 * @param tile        The tile on which the railtype is to be convert.
 
 * @param totype      The railtype we want to convert to
 
 * @param exec        Switches between test and execute mode
 
 * @return            The cost and state of the operation
 
 * @retval CMD_ERROR  An error occured during the operation.
 
 */
 
int32 DoConvertStationRail(TileIndex tile, RailType totype, bool exec)
 
{
 
	const Station* st = GetStationByTile(tile);
 
@@ -1140,7 +1148,7 @@ int32 DoConvertStationRail(TileIndex til
 
		YapfNotifyTrackLayoutChange(tile, GetRailStationTrack(tile));
 
	}
 

	
 
	return _price.build_rail >> 1;
 
	return _price.build_rail / 2;
 
}
 

	
 
/**
src/tunnelbridge_cmd.cpp
Show inline comments
 
@@ -696,6 +696,16 @@ static int32 ClearTile_TunnelBridge(Tile
 
	return CMD_ERROR;
 
}
 

	
 
/**
 
 * Switches the rail type for a tunnel or a bridgehead. As the railtype
 
 * on the bridge are determined by the one of the bridgehead, this
 
 * functions converts the railtype on the entire bridge.
 
 * @param tile        The tile on which the railtype is to be convert.
 
 * @param totype      The railtype we want to convert to
 
 * @param exec        Switches between test and execute mode
 
 * @return            The cost and state of the operation
 
 * @retval CMD_ERROR  An error occured during the operation.
 
 */
 
int32 DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec)
 
{
 
	TileIndex endtile;
 
@@ -724,7 +734,7 @@ int32 DoConvertTunnelBridgeRail(TileInde
 
			YapfNotifyTrackLayoutChange(tile, track);
 
			YapfNotifyTrackLayoutChange(endtile, track);
 
		}
 
		return (length + 1) * (_price.build_rail >> 1);
 
		return (length + 1) * (_price.build_rail / 2);
 
	} else if (IsBridge(tile) && GetBridgeTransportType(tile) == TRANSPORT_RAIL) {
 

	
 
		if (!CheckTileOwnership(tile)) return CMD_ERROR;
 
@@ -758,7 +768,7 @@ int32 DoConvertTunnelBridgeRail(TileInde
 
			}
 
		}
 

	
 
		return (DistanceManhattan(tile, endtile) + 1) * (_price.build_rail >> 1);
 
		return (DistanceManhattan(tile, endtile) + 1) * (_price.build_rail / 2);
 
	} else {
 
		return CMD_ERROR;
 
	}
0 comments (0 inline, 0 general)