diff options
author | yexo <yexo@openttd.org> | 2010-09-03 21:41:08 +0000 |
---|---|---|
committer | yexo <yexo@openttd.org> | 2010-09-03 21:41:08 +0000 |
commit | bd379e283f4730f11bc40e9c3b583b44f9bc0a0b (patch) | |
tree | 003721f3892917471b3c3a7fd08f8cab7e6d26c3 | |
parent | 9b5808a89d24f4cb5b5ed84fddd3bfc3fec6c434 (diff) | |
download | openttd-bd379e283f4730f11bc40e9c3b583b44f9bc0a0b.tar.xz |
(svn r20728) -Codechange: shuffle some code in CMD_BUILD_ROAD so it doesn't call CMD_LANDSCAPE_CLEAR in test-mode from exec-mode
-rw-r--r-- | src/road_cmd.cpp | 58 |
1 files changed, 29 insertions, 29 deletions
diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 54dc7dd6b..1be419a99 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -476,7 +476,7 @@ CommandCost CmdBuildRoad(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 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, DoCommandFlag flags, uint32 p1, uint32 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); - - /* 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); + 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); + + /* 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); |