mirror of https://github.com/OpenTTD/OpenTTD
(svn r19363) -Codechange: Remove use of _error_message global from TerraformTile_Track.
parent
384e870be2
commit
5881a80b6d
|
@ -2723,10 +2723,10 @@ static VehicleEnterTileStatus VehicleEnter_Track(Vehicle *u, TileIndex tile, int
|
||||||
*/
|
*/
|
||||||
static CommandCost TestAutoslopeOnRailTile(TileIndex tile, uint flags, uint z_old, Slope tileh_old, uint z_new, Slope tileh_new, TrackBits rail_bits)
|
static CommandCost TestAutoslopeOnRailTile(TileIndex tile, uint flags, uint z_old, Slope tileh_old, uint z_new, Slope tileh_new, TrackBits rail_bits)
|
||||||
{
|
{
|
||||||
if (!_settings_game.construction.build_on_slopes || !AutoslopeEnabled()) return CMD_ERROR;
|
if (!_settings_game.construction.build_on_slopes || !AutoslopeEnabled()) return_cmd_error(STR_ERROR_MUST_REMOVE_RAILROAD_TRACK);
|
||||||
|
|
||||||
/* Is the slope-rail_bits combination valid in general? I.e. is it safe to call GetRailFoundation() ? */
|
/* Is the slope-rail_bits combination valid in general? I.e. is it safe to call GetRailFoundation() ? */
|
||||||
if (CheckRailSlope(tileh_new, rail_bits, TRACK_BIT_NONE, tile).Failed()) return CMD_ERROR;
|
if (CheckRailSlope(tileh_new, rail_bits, TRACK_BIT_NONE, tile).Failed()) return_cmd_error(STR_ERROR_MUST_REMOVE_RAILROAD_TRACK);
|
||||||
|
|
||||||
/* Get the slopes on top of the foundations */
|
/* Get the slopes on top of the foundations */
|
||||||
z_old += ApplyFoundationToSlope(GetRailFoundation(tileh_old, rail_bits), &tileh_old);
|
z_old += ApplyFoundationToSlope(GetRailFoundation(tileh_old, rail_bits), &tileh_old);
|
||||||
|
@ -2740,13 +2740,15 @@ static CommandCost TestAutoslopeOnRailTile(TileIndex tile, uint flags, uint z_ol
|
||||||
case TRACK_BIT_UPPER: track_corner = CORNER_N; break;
|
case TRACK_BIT_UPPER: track_corner = CORNER_N; break;
|
||||||
|
|
||||||
/* Surface slope must not be changed */
|
/* Surface slope must not be changed */
|
||||||
default: return (((z_old != z_new) || (tileh_old != tileh_new)) ? CMD_ERROR : CommandCost(EXPENSES_CONSTRUCTION, _price[PR_BUILD_FOUNDATION]));
|
default:
|
||||||
|
if (z_old != z_new || tileh_old != tileh_new) return_cmd_error(STR_ERROR_MUST_REMOVE_RAILROAD_TRACK);
|
||||||
|
return CommandCost(EXPENSES_CONSTRUCTION, _price[PR_BUILD_FOUNDATION]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The height of the track_corner must not be changed. The rest ensures GetRailFoundation() already. */
|
/* The height of the track_corner must not be changed. The rest ensures GetRailFoundation() already. */
|
||||||
z_old += GetSlopeZInCorner(RemoveHalftileSlope(tileh_old), track_corner);
|
z_old += GetSlopeZInCorner(RemoveHalftileSlope(tileh_old), track_corner);
|
||||||
z_new += GetSlopeZInCorner(RemoveHalftileSlope(tileh_new), track_corner);
|
z_new += GetSlopeZInCorner(RemoveHalftileSlope(tileh_new), track_corner);
|
||||||
if (z_old != z_new) return CMD_ERROR;
|
if (z_old != z_new) return_cmd_error(STR_ERROR_MUST_REMOVE_RAILROAD_TRACK);
|
||||||
|
|
||||||
CommandCost cost = CommandCost(EXPENSES_CONSTRUCTION, _price[PR_BUILD_FOUNDATION]);
|
CommandCost cost = CommandCost(EXPENSES_CONSTRUCTION, _price[PR_BUILD_FOUNDATION]);
|
||||||
/* Make the ground dirty, if surface slope has changed */
|
/* Make the ground dirty, if surface slope has changed */
|
||||||
|
@ -2767,10 +2769,9 @@ static CommandCost TerraformTile_Track(TileIndex tile, DoCommandFlag flags, uint
|
||||||
/* Is there flat water on the lower halftile, that must be cleared expensively? */
|
/* Is there flat water on the lower halftile, that must be cleared expensively? */
|
||||||
bool was_water = (GetRailGroundType(tile) == RAIL_GROUND_WATER && IsSlopeWithOneCornerRaised(tileh_old));
|
bool was_water = (GetRailGroundType(tile) == RAIL_GROUND_WATER && IsSlopeWithOneCornerRaised(tileh_old));
|
||||||
|
|
||||||
_error_message = STR_ERROR_MUST_REMOVE_RAILROAD_TRACK;
|
|
||||||
|
|
||||||
/* First test autoslope. However if it succeeds we still have to test the rest, because non-autoslope terraforming is cheaper. */
|
/* First test autoslope. However if it succeeds we still have to test the rest, because non-autoslope terraforming is cheaper. */
|
||||||
CommandCost autoslope_result = TestAutoslopeOnRailTile(tile, flags, z_old, tileh_old, z_new, tileh_new, rail_bits);
|
CommandCost autoslope_result = TestAutoslopeOnRailTile(tile, flags, z_old, tileh_old, z_new, tileh_new, rail_bits);
|
||||||
|
autoslope_result.SetGlobalErrorMessage();
|
||||||
|
|
||||||
/* When there is only a single horizontal/vertical track, one corner can be terraformed. */
|
/* When there is only a single horizontal/vertical track, one corner can be terraformed. */
|
||||||
Corner allowed_corner;
|
Corner allowed_corner;
|
||||||
|
|
Loading…
Reference in New Issue