Changeset - r16025:1f133eec9df1
[Not reviewed]
master
0 1 0
yexo - 14 years ago 2010-09-03 21:41:08
yexo@openttd.org
(svn r20728) -Codechange: shuffle some code in CMD_BUILD_ROAD so it doesn't call CMD_LANDSCAPE_CLEAR in test-mode from exec-mode
1 file changed with 27 insertions and 27 deletions:
0 comments (0 inline, 0 general)
src/road_cmd.cpp
Show inline comments
 
@@ -476,7 +476,7 @@ CommandCost CmdBuildRoad(TileIndex tile,
 

	
 
	Slope tileh = GetTileSlope(tile, NULL);
 

	
 
	bool tile_cleared = false; // Used to remember that the tile was cleared during test run
 
	bool need_to_clear = false;
 
	switch (GetTileType(tile)) {
 
		case MP_ROAD:
 
			switch (GetRoadTileType(tile)) {
 
@@ -614,14 +614,17 @@ CommandCost CmdBuildRoad(TileIndex tile,
 

	
 
		default: {
 
do_clear:;
 
			CommandCost ret = DoCommand(tile, 0, 0, flags & ~DC_EXEC, CMD_LANDSCAPE_CLEAR);
 
			if (ret.Failed()) return ret;
 
			cost.AddCost(ret);
 
			tile_cleared = true;
 
			need_to_clear = true;
 
			break;
 
		}
 
	}
 

	
 
	if (need_to_clear) {
 
		CommandCost ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 
		if (ret.Failed()) return ret;
 
		cost.AddCost(ret);
 
	}
 

	
 
	if (other_bits != pieces) {
 
		/* Check the foundation/slopes when adding road/tram bits */
 
		CommandCost ret = CheckRoadSlope(tileh, &pieces, existing, other_bits);
 
@@ -633,44 +636,41 @@ do_clear:;
 
		cost.AddCost(ret);
 
	}
 

	
 
	if (!tile_cleared && IsTileType(tile, MP_ROAD)) {
 
		/* Don't put the pieces that already exist */
 
		pieces &= ComplementRoadBits(existing);
 
	if (!need_to_clear) {
 
		if (IsTileType(tile, MP_ROAD)) {
 
			/* Don't put the pieces that already exist */
 
			pieces &= ComplementRoadBits(existing);
 

	
 
		/* Check if new road bits will have the same foundation as other existing road types */
 
		if (IsNormalRoad(tile)) {
 
			Slope slope = GetTileSlope(tile, NULL);
 
			Foundation found_new = GetRoadFoundation(slope, pieces | existing);
 
			/* Check if new road bits will have the same foundation as other existing road types */
 
			if (IsNormalRoad(tile)) {
 
				Slope slope = GetTileSlope(tile, NULL);
 
				Foundation found_new = GetRoadFoundation(slope, pieces | existing);
 

	
 
			/* Test if all other roadtypes can be built at that foundation */
 
			for (RoadType rtest = ROADTYPE_ROAD; rtest < ROADTYPE_END; rtest++) {
 
				if (rtest != rt) { // check only other road types
 
					RoadBits bits = GetRoadBits(tile, rtest);
 
					/* do not check if there are not road bits of given type */
 
					if (bits != ROAD_NONE && GetRoadFoundation(slope, bits) != found_new) {
 
						return_cmd_error(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION);
 
				/* Test if all other roadtypes can be built at that foundation */
 
				for (RoadType rtest = ROADTYPE_ROAD; rtest < ROADTYPE_END; rtest++) {
 
					if (rtest != rt) { // check only other road types
 
						RoadBits bits = GetRoadBits(tile, rtest);
 
						/* do not check if there are not road bits of given type */
 
						if (bits != ROAD_NONE && GetRoadFoundation(slope, bits) != found_new) {
 
							return_cmd_error(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION);
 
						}
 
					}
 
				}
 
			}
 
		}
 
	}
 

	
 
	if (!tile_cleared) {
 
		CommandCost ret = EnsureNoVehicleOnGround(tile);
 
		if (ret.Failed()) return ret;
 
	}
 

	
 
	}
 
	cost.AddCost(CountBits(pieces) * _price[PR_BUILD_ROAD]);
 
	if (!tile_cleared && IsTileType(tile, MP_TUNNELBRIDGE)) {
 

	
 
	if (!need_to_clear && IsTileType(tile, MP_TUNNELBRIDGE)) {
 
		/* Pay for *every* tile of the bridge or tunnel */
 
		cost.MultiplyCost(GetTunnelBridgeLength(GetOtherTunnelBridgeEnd(tile), tile) + 2);
 
	}
 

	
 
	if (flags & DC_EXEC) {
 
		/* CmdBuildLongRoad calls us directly with DC_EXEC, so we may only clear the tile after all
 
		 * fail/success tests have been done. */
 
		if (tile_cleared) DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
 

	
 
		switch (GetTileType(tile)) {
 
			case MP_ROAD: {
 
				RoadTileType rtt = GetRoadTileType(tile);
0 comments (0 inline, 0 general)