forked from mirror/OpenTTD
(svn r11793) -Codechange: pass the expense type via the CommandCost instead of a global variable. Patch by Noldo (FS#1114).
This commit is contained in:
@@ -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;
|
||||
|
Reference in New Issue
Block a user