summaryrefslogtreecommitdiff
path: root/src/road_cmd.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2008-01-09 16:55:48 +0000
committerrubidium <rubidium@openttd.org>2008-01-09 16:55:48 +0000
commit0365c1f33ba130bcfc663309b806fe65d730381f (patch)
treea0181571819fca45c3cc170c7ce718009cb12535 /src/road_cmd.cpp
parent98b4fa7c070f2433539f2c399129c24fba842632 (diff)
downloadopenttd-0365c1f33ba130bcfc663309b806fe65d730381f.tar.xz
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
Diffstat (limited to 'src/road_cmd.cpp')
-rw-r--r--src/road_cmd.cpp53
1 files changed, 22 insertions, 31 deletions
diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp
index e7c62400d..b011345fe 100644
--- a/src/road_cmd.cpp
+++ b/src/road_cmd.cpp
@@ -114,8 +114,6 @@ CommandCost CmdRemoveRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
* false if it was a center piece. Affects town ratings drop */
bool edge_road;
- SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
-
RoadType rt = (RoadType)GB(p1, 4, 2);
if (!IsValidRoadType(rt)) return CMD_ERROR;
@@ -156,7 +154,7 @@ CommandCost CmdRemoveRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
/* If it's the last roadtype, just clear the whole tile */
if (rts == RoadTypeToRoadTypes(rt)) return DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR);
- CommandCost cost;
+ CommandCost cost(EXPENSES_CONSTRUCTION);
if (IsTileType(tile, MP_TUNNELBRIDGE)) {
TileIndex other_end = GetOtherTunnelBridgeEnd(tile);
/* Pay for *every* tile of the bridge or tunnel */
@@ -181,7 +179,7 @@ CommandCost CmdRemoveRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
MarkTileDirtyByTile(tile);
}
}
- return CommandCost(cost);
+ return cost;
}
switch (GetRoadTileType(tile)) {
@@ -224,7 +222,7 @@ CommandCost CmdRemoveRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
MarkTileDirtyByTile(tile);
}
}
- return CommandCost(CountBits(c) * _price.remove_road);
+ return CommandCost(EXPENSES_CONSTRUCTION, CountBits(c) * _price.remove_road);
}
case ROAD_TILE_CROSSING: {
@@ -250,7 +248,7 @@ CommandCost CmdRemoveRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
MarkTileDirtyByTile(tile);
YapfNotifyTrackLayoutChange(tile, FindFirstTrack(GetTrackBits(tile)));
}
- return CommandCost(_price.remove_road * 2);
+ return CommandCost(EXPENSES_CONSTRUCTION, _price.remove_road * 2);
}
default:
@@ -346,7 +344,7 @@ static CommandCost CheckRoadSlope(Slope tileh, RoadBits* pieces, RoadBits existi
*pieces |= MirrorRoadBits(*pieces);
if (existing == ROAD_NONE || existing == *pieces) {
- if (*pieces == ROAD_X || *pieces == ROAD_Y) return _price.terraform;
+ if (*pieces == ROAD_X || *pieces == ROAD_Y) return CommandCost(EXPENSES_CONSTRUCTION, _price.terraform);
}
return CMD_ERROR;
}
@@ -358,7 +356,7 @@ static CommandCost CheckRoadSlope(Slope tileh, RoadBits* pieces, RoadBits existi
if (_patches.build_on_slopes && !_is_old_ai_player &&
existing == ROAD_NONE && CountBits(*pieces) == 1 &&
(_valid_tileh_slopes_road[2][tileh] & *pieces) == ROAD_NONE) {
- return CommandCost(_price.terraform);
+ return CommandCost(EXPENSES_CONSTRUCTION, _price.terraform);
}
/* no special foundation */
@@ -370,7 +368,7 @@ static CommandCost CheckRoadSlope(Slope tileh, RoadBits* pieces, RoadBits existi
/* foundation is used. Whole tile is leveled up */
if ((~_valid_tileh_slopes_road[1][tileh] & road_bits) == ROAD_NONE) {
- return CommandCost(existing != ROAD_NONE ? (Money)0 : _price.terraform);
+ return CommandCost(EXPENSES_CONSTRUCTION, existing != ROAD_NONE ? (Money)0 : _price.terraform);
}
/* Force straight roads. */
@@ -378,7 +376,7 @@ static CommandCost CheckRoadSlope(Slope tileh, RoadBits* pieces, RoadBits existi
/* partly leveled up tile, only if there's no road on that tile */
if ((existing == ROAD_NONE || existing == *pieces) && (tileh == SLOPE_W || tileh == SLOPE_S || tileh == SLOPE_E || tileh == SLOPE_N)) {
- if (*pieces == ROAD_X || *pieces == ROAD_Y) return _price.terraform;
+ if (*pieces == ROAD_X || *pieces == ROAD_Y) return CommandCost(EXPENSES_CONSTRUCTION, _price.terraform);
}
return CMD_ERROR;
}
@@ -393,14 +391,12 @@ static CommandCost CheckRoadSlope(Slope tileh, RoadBits* pieces, RoadBits existi
*/
CommandCost CmdBuildRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
{
- CommandCost cost;
+ CommandCost cost(EXPENSES_CONSTRUCTION);
CommandCost ret;
RoadBits existing = ROAD_NONE;
RoadBits all_bits = ROAD_NONE;
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 ((IsValidPlayer(_current_player) && p2 != 0) || (_current_player == OWNER_TOWN && !IsValidTownID(p2))) return CMD_ERROR;
@@ -494,7 +490,7 @@ CommandCost CmdBuildRoad(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
MakeRoadCrossing(tile, _current_player, _current_player, _current_player, GetTileOwner(tile), roaddir, GetRailType(tile), RoadTypeToRoadTypes(rt) | ROADTYPES_ROAD, p2);
MarkTileDirtyByTile(tile);
}
- return CommandCost(_price.build_road * (rt == ROADTYPE_ROAD ? 2 : 4));
+ return CommandCost(EXPENSES_CONSTRUCTION, _price.build_road * (rt == ROADTYPE_ROAD ? 2 : 4));
}
case MP_STATION:
@@ -604,14 +600,12 @@ do_clear:;
CommandCost CmdBuildLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
{
TileIndex start_tile, tile;
- CommandCost cost, ret;
+ CommandCost ret, cost(EXPENSES_CONSTRUCTION);
bool had_bridge = false;
bool had_tunnel = false;
bool had_success = false;
DisallowedRoadDirections drd = DRD_NORTHBOUND;
- SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
-
if (p1 >= MapSize()) return CMD_ERROR;
start_tile = p1;
@@ -691,9 +685,8 @@ CommandCost CmdBuildLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32
CommandCost CmdRemoveLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint32 p2)
{
TileIndex start_tile, tile;
- CommandCost cost, ret, money;
-
- SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
+ CommandCost ret, cost(EXPENSES_CONSTRUCTION);
+ Money money;
if (p1 >= MapSize()) return CMD_ERROR;
@@ -713,7 +706,7 @@ CommandCost CmdRemoveLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint3
p2 ^= IsInsideMM(p2 & 3, 1, 3) ? 3 : 0;
}
- money.AddCost(GetAvailableMoneyForCommand());
+ money = GetAvailableMoneyForCommand();
tile = start_tile;
/* Start tile is the small number. */
for (;;) {
@@ -727,8 +720,8 @@ CommandCost CmdRemoveLongRoad(TileIndex end_tile, uint32 flags, uint32 p1, uint3
ret = DoCommand(tile, rt << 4 | bits, 0, flags & ~DC_EXEC, CMD_REMOVE_ROAD);
if (CmdSucceeded(ret)) {
if (flags & DC_EXEC) {
- money.AddCost(-ret.GetCost());
- if (money.GetCost() < 0) {
+ money -= ret.GetCost();
+ if (money < 0) {
_additional_cash_required = DoCommand(end_tile, start_tile, p2, flags & ~DC_EXEC, CMD_REMOVE_LONG_ROAD).GetCost();
return cost;
}
@@ -761,8 +754,6 @@ CommandCost CmdBuildRoadDepot(TileIndex tile, uint32 flags, uint32 p1, uint32 p2
CommandCost cost;
Slope tileh;
- SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION);
-
DiagDirection dir = Extract<DiagDirection, 0>(p1);
RoadType rt = (RoadType)GB(p1, 2, 2);
@@ -808,7 +799,7 @@ static CommandCost RemoveRoadDepot(TileIndex tile, uint32 flags)
delete GetDepotByTile(tile);
}
- return CommandCost(_price.remove_road_depot);
+ return CommandCost(EXPENSES_CONSTRUCTION, _price.remove_road_depot);
}
static CommandCost ClearTile_Road(TileIndex tile, byte flags)
@@ -824,7 +815,7 @@ static CommandCost ClearTile_Road(TileIndex tile, byte flags)
!(flags & DC_AUTO)
) {
RoadTypes rts = GetRoadTypes(tile);
- CommandCost ret;
+ CommandCost ret(EXPENSES_CONSTRUCTION);
for (RoadType rt = ROADTYPE_ROAD; rt < ROADTYPE_END; rt++) {
if (HasBit(rts, rt)) {
CommandCost tmp_ret = DoCommand(tile, rt << 4 | GetRoadBits(tile, rt), 0, flags, CMD_REMOVE_ROAD);
@@ -839,7 +830,7 @@ static CommandCost ClearTile_Road(TileIndex tile, byte flags)
case ROAD_TILE_CROSSING: {
RoadTypes rts = GetRoadTypes(tile);
- CommandCost ret;
+ CommandCost ret(EXPENSES_CONSTRUCTION);
if (flags & DC_AUTO) return_cmd_error(STR_1801_MUST_REMOVE_ROAD_FIRST);
@@ -1420,11 +1411,11 @@ static CommandCost TerraformTile_Road(TileIndex tile, uint32 flags, uint z_new,
if (_patches.build_on_slopes && AutoslopeEnabled()) {
switch (GetRoadTileType(tile)) {
case ROAD_TILE_CROSSING:
- if (!IsSteepSlope(tileh_new) && (GetTileMaxZ(tile) == z_new + GetSlopeMaxZ(tileh_new)) && HasBit(VALID_LEVEL_CROSSING_SLOPES, tileh_new)) return _price.terraform;
+ if (!IsSteepSlope(tileh_new) && (GetTileMaxZ(tile) == z_new + GetSlopeMaxZ(tileh_new)) && HasBit(VALID_LEVEL_CROSSING_SLOPES, tileh_new)) return CommandCost(EXPENSES_CONSTRUCTION, _price.terraform);
break;
case ROAD_TILE_DEPOT:
- if (AutoslopeCheckForEntranceEdge(tile, z_new, tileh_new, GetRoadDepotDirection(tile))) return _price.terraform;
+ if (AutoslopeCheckForEntranceEdge(tile, z_new, tileh_new, GetRoadDepotDirection(tile))) return CommandCost(EXPENSES_CONSTRUCTION, _price.terraform);
break;
case ROAD_TILE_NORMAL: {
@@ -1442,7 +1433,7 @@ static CommandCost TerraformTile_Road(TileIndex tile, uint32 flags, uint z_new,
z_new += ApplyFoundationToSlope(GetRoadFoundation(tileh_new, bits), &tileh_new);
/* The surface slope must not be changed */
- if ((z_old == z_new) && (tileh_old == tileh_new)) return _price.terraform;
+ if ((z_old == z_new) && (tileh_old == tileh_new)) return CommandCost(EXPENSES_CONSTRUCTION, _price.terraform);
}
}
break;