(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:
rubidium
2008-01-09 16:55:48 +00:00
parent b4337eba83
commit 46650c54b6
27 changed files with 190 additions and 294 deletions

View File

@@ -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;