diff options
author | tron <tron@openttd.org> | 2007-02-24 09:42:39 +0000 |
---|---|---|
committer | tron <tron@openttd.org> | 2007-02-24 09:42:39 +0000 |
commit | 47b677abfe6896926be9d0febfd33fb0b694c776 (patch) | |
tree | cfdc363aade39ceff0da3ef6b20dbd7e95b49c83 /src/road_cmd.cpp | |
parent | ac75cf0ae136626c5c998d556c8ed38410191ceb (diff) | |
download | openttd-47b677abfe6896926be9d0febfd33fb0b694c776.tar.xz |
(svn r8876) -Fix
Replace tests with magic numbers by a simple extraction template for command parameters
Diffstat (limited to 'src/road_cmd.cpp')
-rw-r--r-- | src/road_cmd.cpp | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 73b255096..caf24eb29 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -3,6 +3,7 @@ #include "stdafx.h" #include "openttd.h" #include "bridge_map.h" +#include "cmd_helper.h" #include "rail_map.h" #include "road_map.h" #include "sprite.h" @@ -85,7 +86,7 @@ static bool CheckAllowRemoveRoad(TileIndex tile, RoadBits remove, bool *edge_roa /** Delete a piece of road. * @param tile tile where to remove road from - * @param p1 road piece flags + * @param p1 bit 0..3 road pieces to remove (RoadBits) * @param p2 unused */ int32 CmdRemoveRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) @@ -98,14 +99,9 @@ int32 CmdRemoveRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) /* true if the roadpiece was always removeable, * false if it was a center piece. Affects town ratings drop */ bool edge_road; - RoadBits pieces; SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); - /* Road pieces are max 4 bitset values (NE, NW, SE, SW) */ - if (p1 >> 4) return CMD_ERROR; - pieces = (RoadBits)p1; - if (!IsTileType(tile, MP_STREET)) return CMD_ERROR; owner = IsLevelCrossingTile(tile) ? GetCrossingRoadOwner(tile) : GetTileOwner(tile); @@ -116,6 +112,8 @@ int32 CmdRemoveRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) t = NULL; } + RoadBits pieces = Extract<RoadBits, 0>(p1); + if (!CheckAllowRemoveRoad(tile, pieces, &edge_road)) return CMD_ERROR; if (!EnsureNoVehicle(tile)) return CMD_ERROR; @@ -249,7 +247,7 @@ static uint32 CheckRoadSlope(Slope tileh, RoadBits* pieces, RoadBits existing) /** Build a piece of road. * @param tile tile where to build road - * @param p1 road piece flags + * @param p1 bit 0..3 road pieces to build (RoadBits) * @param p2 the town that is building the road (0 if not applicable) */ int32 CmdBuildRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) @@ -257,15 +255,15 @@ int32 CmdBuildRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) int32 cost = 0; int32 ret; RoadBits existing = ROAD_NONE; - RoadBits pieces; Slope tileh; SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); /* Road pieces are max 4 bitset values (NE, NW, SE, SW) and town can only be non-zero * if a non-player is building the road */ - if ((p1 >> 4) || (IsValidPlayer(_current_player) && p2 != 0) || (_current_player == OWNER_TOWN && !IsValidTownID(p2))) return CMD_ERROR; - pieces = (RoadBits)p1; + if ((IsValidPlayer(_current_player) && p2 != 0) || (_current_player == OWNER_TOWN && !IsValidTownID(p2))) return CMD_ERROR; + + RoadBits pieces = Extract<RoadBits, 0>(p1); tileh = GetTileSlope(tile, NULL); @@ -502,7 +500,7 @@ int32 CmdRemoveLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2) /** Build a road depot. * @param tile tile where to build the depot - * @param p1 entrance direction (DiagDirection) + * @param p1 bit 0..1 entrance direction (DiagDirection) * @param p2 unused * * @todo When checking for the tile slope, @@ -516,13 +514,13 @@ int32 CmdBuildRoadDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); - if (p1 > 3) return CMD_ERROR; // check direction + DiagDirection dir = Extract<DiagDirection, 0>(p1); tileh = GetTileSlope(tile, NULL); if (tileh != SLOPE_FLAT && ( !_patches.build_on_slopes || IsSteepSlope(tileh) || - !CanBuildDepotByTileh(p1, tileh) + !CanBuildDepotByTileh(dir, tileh) )) { return_cmd_error(STR_0007_FLAT_LAND_REQUIRED); } @@ -539,7 +537,7 @@ int32 CmdBuildRoadDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2) dep->xy = tile; dep->town_index = ClosestTownFromTile(tile, (uint)-1)->index; - MakeRoadDepot(tile, _current_player, (DiagDirection)p1); + MakeRoadDepot(tile, _current_player, dir); MarkTileDirtyByTile(tile); } return cost + _price.build_road_depot; |