mirror of https://github.com/OpenTTD/OpenTTD
(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
parent
c0999109a9
commit
b448b7c98d
|
@ -234,7 +234,7 @@
|
||||||
EnforcePrecondition(false, start_tile < ::MapSize());
|
EnforcePrecondition(false, start_tile < ::MapSize());
|
||||||
EnforcePrecondition(false, end_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)
|
/* static */ bool AITile::DemolishTile(TileIndex tile)
|
||||||
|
|
|
@ -75,4 +75,11 @@ static const uint MAX_MAP_SIZE = 1 << MAX_MAP_SIZE_BITS; ///< Maximal map s
|
||||||
*/
|
*/
|
||||||
#define STRAIGHT_TRACK_LENGTH 7071/10000
|
#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 */
|
#endif /* MAP_TYPE_H */
|
||||||
|
|
|
@ -378,7 +378,8 @@ CommandCost CmdTerraformLand(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
|
||||||
* @param tile end tile of area-drag
|
* @param tile end tile of area-drag
|
||||||
* @param flags for this command type
|
* @param flags for this command type
|
||||||
* @param p1 start tile of area drag
|
* @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
|
* @param text unused
|
||||||
* @return the cost of this operation or an error
|
* @return the cost of this operation or an error
|
||||||
*/
|
*/
|
||||||
|
@ -392,14 +393,21 @@ CommandCost CmdLevelLand(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||||
uint oldh = TileHeight(p1);
|
uint oldh = TileHeight(p1);
|
||||||
|
|
||||||
/* compute new height */
|
/* 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 */
|
/* 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);
|
if (h > MAX_TILE_HEIGHT) return_cmd_error((oldh == 0) ? STR_ERROR_ALREADY_AT_SEA_LEVEL : STR_ERROR_TOO_HIGH);
|
||||||
|
|
||||||
Money money = GetAvailableMoneyForCommand();
|
Money money = GetAvailableMoneyForCommand();
|
||||||
CommandCost cost(EXPENSES_CONSTRUCTION);
|
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;
|
bool had_success = false;
|
||||||
|
|
||||||
TileArea ta(tile, p1);
|
TileArea ta(tile, p1);
|
||||||
|
|
|
@ -110,13 +110,13 @@ bool GUIPlaceProcDragXY(ViewportDragDropSelectionProcess proc, TileIndex start_t
|
||||||
DoCommandP(end_tile, start_tile, 0, CMD_CLEAR_AREA | CMD_MSG(STR_ERROR_CAN_T_CLEAR_THIS_AREA), CcPlaySound10);
|
DoCommandP(end_tile, start_tile, 0, CMD_CLEAR_AREA | CMD_MSG(STR_ERROR_CAN_T_CLEAR_THIS_AREA), CcPlaySound10);
|
||||||
break;
|
break;
|
||||||
case DDSP_RAISE_AND_LEVEL_AREA:
|
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;
|
break;
|
||||||
case DDSP_LOWER_AND_LEVEL_AREA:
|
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;
|
break;
|
||||||
case DDSP_LEVEL_AREA:
|
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;
|
break;
|
||||||
case DDSP_CREATE_ROCKS:
|
case DDSP_CREATE_ROCKS:
|
||||||
GenerateRockyArea(end_tile, start_tile);
|
GenerateRockyArea(end_tile, start_tile);
|
||||||
|
|
Loading…
Reference in New Issue