Mercurial > hg > openttd
changeset 16760:9e31dde37aed draft
(svn r21493) -Codechange: don't use the full 32 bits of the level land command to tell whether to raise, lower or keep the level of the first selected tile
author | rubidium <rubidium@openttd.org> |
---|---|
date | Mon, 13 Dec 2010 11:21:53 +0000 (2010-12-13) |
parents | aa34ba5a7da1 |
children | 89c7d67629e8 |
files | src/ai/api/ai_tile.cpp src/map_type.h src/terraform_cmd.cpp src/terraform_gui.cpp |
diffstat | 4 files changed, 22 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ai/api/ai_tile.cpp +++ b/src/ai/api/ai_tile.cpp @@ -234,7 +234,7 @@ EnforcePrecondition(false, start_tile < ::MapSize()); EnforcePrecondition(false, end_tile < ::MapSize()); - return AIObject::DoCommand(end_tile, start_tile, 0, CMD_LEVEL_LAND); + return AIObject::DoCommand(end_tile, start_tile, LM_LEVEL << 1, CMD_LEVEL_LAND); } /* static */ bool AITile::DemolishTile(TileIndex tile)
--- a/src/map_type.h +++ b/src/map_type.h @@ -75,4 +75,11 @@ */ #define STRAIGHT_TRACK_LENGTH 7071/10000 +/** Argument for CmdLevelLand describing what to do. */ +enum LevelMode { + LM_LEVEL, ///< Level the land. + LM_LOWER, ///< Lower the land. + LM_RAISE, ///< Raise the land. +}; + #endif /* MAP_TYPE_H */
--- a/src/terraform_cmd.cpp +++ b/src/terraform_cmd.cpp @@ -378,7 +378,8 @@ * @param tile end tile of area-drag * @param flags for this command type * @param p1 start tile of area drag - * @param p2 height difference; eg raise (+1), lower (-1) or level (0) + * @param p2 various bitstuffed data. + * bits 1 - 2: Mode of leveling \c LevelMode. * @param text unused * @return the cost of this operation or an error */ @@ -392,14 +393,21 @@ uint oldh = TileHeight(p1); /* compute new height */ - uint h = oldh + (int8)p2; + uint h = oldh; + LevelMode lm = (LevelMode)GB(p2, 1, 2); + switch (lm) { + case LM_LEVEL: break; + case LM_RAISE: h++; break; + case LM_LOWER: h--; break; + default: return CMD_ERROR; + } /* Check range of destination height */ if (h > MAX_TILE_HEIGHT) return_cmd_error((oldh == 0) ? STR_ERROR_ALREADY_AT_SEA_LEVEL : STR_ERROR_TOO_HIGH); Money money = GetAvailableMoneyForCommand(); CommandCost cost(EXPENSES_CONSTRUCTION); - CommandCost last_error((p2 == 0) ? STR_ERROR_ALREADY_LEVELLED : INVALID_STRING_ID); + CommandCost last_error(lm == LM_LEVEL ? STR_ERROR_ALREADY_LEVELLED : INVALID_STRING_ID); bool had_success = false; TileArea ta(tile, p1);
--- a/src/terraform_gui.cpp +++ b/src/terraform_gui.cpp @@ -110,13 +110,13 @@ DoCommandP(end_tile, start_tile, 0, CMD_CLEAR_AREA | CMD_MSG(STR_ERROR_CAN_T_CLEAR_THIS_AREA), CcPlaySound10); break; case DDSP_RAISE_AND_LEVEL_AREA: - DoCommandP(end_tile, start_tile, 1, CMD_LEVEL_LAND | CMD_MSG(STR_ERROR_CAN_T_RAISE_LAND_HERE), CcTerraform); + DoCommandP(end_tile, start_tile, LM_RAISE << 1, CMD_LEVEL_LAND | CMD_MSG(STR_ERROR_CAN_T_RAISE_LAND_HERE), CcTerraform); break; case DDSP_LOWER_AND_LEVEL_AREA: - DoCommandP(end_tile, start_tile, (uint32)-1, CMD_LEVEL_LAND | CMD_MSG(STR_ERROR_CAN_T_LOWER_LAND_HERE), CcTerraform); + DoCommandP(end_tile, start_tile, LM_LOWER << 1, CMD_LEVEL_LAND | CMD_MSG(STR_ERROR_CAN_T_LOWER_LAND_HERE), CcTerraform); break; case DDSP_LEVEL_AREA: - DoCommandP(end_tile, start_tile, 0, CMD_LEVEL_LAND | CMD_MSG(STR_ERROR_CAN_T_LEVEL_LAND_HERE), CcTerraform); + DoCommandP(end_tile, start_tile, LM_LEVEL << 1, CMD_LEVEL_LAND | CMD_MSG(STR_ERROR_CAN_T_LEVEL_LAND_HERE), CcTerraform); break; case DDSP_CREATE_ROCKS: GenerateRockyArea(end_tile, start_tile);