Changeset - r3103:40fda1056325
[Not reviewed]
master
0 3 0
tron - 19 years ago 2006-03-01 12:31:39
tron@openttd.org
(svn r3698) Add GetCrossingRailBits() and ComplementRoadBits(). Simplify the code by using them
3 files changed with 17 insertions and 20 deletions:
0 comments (0 inline, 0 general)
rail_cmd.c
Show inline comments
 
@@ -434,23 +434,15 @@ int32 CmdRemoveSingleRail(int x, int y, 
 
			break;
 

	
 
		case MP_STREET: {
 
			RoadBits bits;
 

	
 
			if (!IsLevelCrossing(tile)) return CMD_ERROR;
 

	
 
			/* This is a crossing, let's check if the direction is correct */
 
			if (_m[tile].m5 & 8) {
 
				if (track != TRACK_X) return CMD_ERROR;
 
				bits = ROAD_Y;
 
			} else {
 
				if (track != TRACK_Y) return CMD_ERROR;
 
				bits = ROAD_X;
 
			}
 
			if (GetCrossingRailBits(tile) != trackbit) return CMD_ERROR;
 

	
 
			if (!(flags & DC_EXEC))
 
				return _price.remove_rail;
 

	
 
			MakeRoadNormal(tile, _m[tile].m3, bits, 0);
 
			MakeRoadNormal(tile, _m[tile].m3, GetCrossingRoadBits(tile), 0);
 
			break;
 
		}
 

	
road.h
Show inline comments
 
@@ -17,6 +17,11 @@ typedef enum RoadBits {
 
	ROAD_ALL = ROAD_X  | ROAD_Y
 
} RoadBits;
 

	
 
static inline RoadBits ComplementRoadBits(RoadBits r)
 
{
 
	return ROAD_ALL ^ r;
 
}
 

	
 
static inline RoadBits GetRoadBits(TileIndex tile)
 
{
 
	return GB(_m[tile].m5, 0, 4);
 
@@ -27,6 +32,12 @@ static inline RoadBits GetCrossingRoadBi
 
	return _m[tile].m5 & 8 ? ROAD_Y : ROAD_X;
 
}
 

	
 
static inline TrackBits GetCrossingRailBits(TileIndex tile)
 
{
 
	return _m[tile].m5 & 8 ? TRACK_BIT_X : TRACK_BIT_Y;
 
}
 

	
 

	
 
typedef enum RoadType {
 
	ROAD_NORMAL,
 
	ROAD_CROSSING,
road_cmd.c
Show inline comments
 
@@ -235,21 +235,15 @@ int32 CmdRemoveRoad(int x, int y, uint32
 
				}
 

	
 
				case ROAD_CROSSING: {
 
					TrackBits track;
 

	
 
					if (!(ti.map5 & 8)) {
 
						if (pieces & ROAD_Y) goto return_error;
 
						track = TRACK_BIT_Y;
 
					} else {
 
						if (pieces & ROAD_X) goto return_error;
 
						track = TRACK_BIT_X;
 
					if (pieces & ComplementRoadBits(GetCrossingRoadBits(tile))) {
 
						goto return_error;
 
					}
 

	
 
					cost = _price.remove_road * 2;
 
					if (flags & DC_EXEC) {
 
						ChangeTownRating(t, -road_remove_cost[(byte)edge_road], RATING_ROAD_MINIMUM);
 

	
 
						MakeRailNormal(tile, GetTileOwner(tile), track, GB(_m[tile].m4, 0, 4));
 
						MakeRailNormal(tile, GetTileOwner(tile), GetCrossingRailBits(tile), GB(_m[tile].m4, 0, 4));
 
						MarkTileDirtyByTile(tile);
 
					}
 
					return cost;
 
@@ -371,7 +365,7 @@ int32 CmdBuildRoad(int x, int y, uint32 
 
					break;
 

	
 
				case ROAD_CROSSING:
 
					if (pieces != (ti.map5 & 8 ? ROAD_Y : ROAD_X)) { // XXX is this correct?
 
					if (pieces != GetCrossingRoadBits(ti.tile)) { // XXX is this correct?
 
						return_cmd_error(STR_1007_ALREADY_BUILT);
 
					}
 
					goto do_clear;
0 comments (0 inline, 0 general)