summaryrefslogtreecommitdiff
path: root/src/autoreplace_cmd.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-06-18 19:53:50 +0000
committerrubidium <rubidium@openttd.org>2007-06-18 19:53:50 +0000
commit773a7c9cb64856bd2bca11f9c38eea049b353e4e (patch)
tree62843984493ffedb69f91d7b85cb631ecb61ff3e /src/autoreplace_cmd.cpp
parentbcdb89906b06a64c368e89d2f267cd617b2210c1 (diff)
downloadopenttd-773a7c9cb64856bd2bca11f9c38eea049b353e4e.tar.xz
(svn r10205) -Codechange: refactor returning of cost, so it can be more easily modified.
Diffstat (limited to 'src/autoreplace_cmd.cpp')
-rw-r--r--src/autoreplace_cmd.cpp39
1 files changed, 22 insertions, 17 deletions
diff --git a/src/autoreplace_cmd.cpp b/src/autoreplace_cmd.cpp
index 4a69e17fa..0a2fd313c 100644
--- a/src/autoreplace_cmd.cpp
+++ b/src/autoreplace_cmd.cpp
@@ -154,7 +154,7 @@ static CommandCost ReplaceVehicle(Vehicle **w, byte flags, int32 total_cost)
replacement_cargo_type = GetNewCargoTypeForReplace(old_v, new_engine_type);
/* check if we can't refit to the needed type, so no replace takes place to prevent the vehicle from altering cargo type */
- if (replacement_cargo_type == CT_INVALID) return 0;
+ if (replacement_cargo_type == CT_INVALID) return CommandCost();
sell_value = DoCommand(0, old_v->index, 0, DC_QUERY_COST, GetCmdSellVeh(old_v));
@@ -167,15 +167,17 @@ static CommandCost ReplaceVehicle(Vehicle **w, byte flags, int32 total_cost)
cost = DoCommand(old_v->tile, new_engine_type, 3, flags, GetCmdBuildVeh(old_v));
if (CmdFailed(cost)) {
SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
- SubtractMoneyFromPlayer(-sell_value); // Take back the money we just gave the player
+ /* Take back the money we just gave the player */
+ sell_value.MultiplyCost(-1);
+ SubtractMoneyFromPlayer(sell_value);
return cost;
}
if (replacement_cargo_type != CT_NO_REFIT) {
/* add refit cost */
CommandCost refit_cost = GetRefitCost(new_engine_type);
- if (old_v->type == VEH_TRAIN && IsMultiheaded(old_v)) refit_cost += refit_cost; // pay for both ends
- cost += refit_cost;
+ if (old_v->type == VEH_TRAIN && IsMultiheaded(old_v)) refit_cost.AddCost(refit_cost); // pay for both ends
+ cost.AddCost(refit_cost);
}
if (flags & DC_EXEC) {
@@ -246,7 +248,7 @@ static CommandCost ReplaceVehicle(Vehicle **w, byte flags, int32 total_cost)
GetName(vehicle_name, old_v->string_id & 0x7FF, lastof(vehicle_name));
}
} else { // flags & DC_EXEC not set
- CommandCost tmp_move = 0;
+ CommandCost tmp_move;
if (old_v->type == VEH_TRAIN && IsFrontEngine(old_v) && old_v->next != NULL) {
/* Verify that the wagons can be placed on the engine in question.
* This is done by building an engine, test if the wagons can be added and then sell the test engine. */
@@ -258,9 +260,11 @@ static CommandCost ReplaceVehicle(Vehicle **w, byte flags, int32 total_cost)
/* Ensure that the player will not end up having negative money while autoreplacing
* This is needed because the only other check is done after the income from selling the old vehicle is substracted from the cost */
- if (CmdFailed(tmp_move) || p->money64 < (cost + total_cost)) {
+ if (CmdFailed(tmp_move) || p->money64 < (cost.GetCost() + total_cost)) {
SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
- SubtractMoneyFromPlayer(-sell_value); // Pay back the loan
+ /* Pay back the loan */
+ sell_value.MultiplyCost(-1);
+ SubtractMoneyFromPlayer(sell_value);
return CMD_ERROR;
}
}
@@ -268,10 +272,11 @@ static CommandCost ReplaceVehicle(Vehicle **w, byte flags, int32 total_cost)
/* Take back the money we just gave the player just before building the vehicle
* The player will get the same amount now that the sale actually takes place */
SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);
- SubtractMoneyFromPlayer(-sell_value);
+ sell_value.MultiplyCost(-1);
+ SubtractMoneyFromPlayer(sell_value);
/* sell the engine/ find out how much you get for the old engine (income is returned as negative cost) */
- cost += DoCommand(0, old_v->index, 0, flags, GetCmdSellVeh(old_v));
+ cost.AddCost(DoCommand(0, old_v->index, 0, flags, GetCmdSellVeh(old_v)));
if (new_front) {
/* now we assign the old unitnumber to the new vehicle */
@@ -300,7 +305,7 @@ CommandCost MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs)
Vehicle *w;
const Player *p = GetPlayer(v->owner);
byte flags = 0;
- CommandCost cost, temp_cost = 0;
+ CommandCost cost, temp_cost;
bool stopped;
/* Remember the length in case we need to trim train later on
@@ -326,7 +331,7 @@ CommandCost MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs)
v->leave_depot_instantly = false;
for (;;) {
- cost = 0;
+ cost = CommandCost();
w = v;
do {
if (w->type == VEH_TRAIN && IsMultiheaded(w) && !IsTrainEngine(w)) {
@@ -352,7 +357,7 @@ CommandCost MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs)
}
/* Now replace the vehicle */
- temp_cost = ReplaceVehicle(&w, flags, cost);
+ temp_cost = ReplaceVehicle(&w, flags, cost.GetCost());
if (CmdFailed(temp_cost)) break; // replace failed for some reason. Leave the vehicle alone
@@ -364,11 +369,11 @@ CommandCost MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs)
*/
v = w;
}
- cost += temp_cost;
+ cost.AddCost(temp_cost);
} while (w->type == VEH_TRAIN && (w = GetNextVehicle(w)) != NULL);
- if (!(flags & DC_EXEC) && (p->money64 < (int32)(cost + p->engine_renew_money) || cost == 0)) {
- if (!check && p->money64 < (int32)(cost + p->engine_renew_money) && ( _local_player == v->owner ) && cost != 0) {
+ if (!(flags & DC_EXEC) && (p->money64 < (int32)(cost.GetCost() + p->engine_renew_money) || cost.GetCost() == 0)) {
+ if (!check && p->money64 < (int32)(cost.GetCost() + p->engine_renew_money) && ( _local_player == v->owner ) && cost.GetCost() != 0) {
StringID message;
SetDParam(0, v->unitnumber);
switch (v->type) {
@@ -418,13 +423,13 @@ CommandCost MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs)
w = GetNextVehicle(w);
DoCommand(0, (INVALID_VEHICLE << 16) | temp->index, 0, DC_EXEC, CMD_MOVE_RAIL_VEHICLE);
MoveVehicleCargo(v, temp);
- cost += DoCommand(0, temp->index, 0, DC_EXEC, CMD_SELL_RAIL_WAGON);
+ cost.AddCost(DoCommand(0, temp->index, 0, DC_EXEC, CMD_SELL_RAIL_WAGON));
}
}
if (stopped) v->vehstatus &= ~VS_STOPPED;
if (display_costs) {
- if (IsLocalPlayer()) ShowCostOrIncomeAnimation(v->x_pos, v->y_pos, v->z_pos, cost);
+ if (IsLocalPlayer()) ShowCostOrIncomeAnimation(v->x_pos, v->y_pos, v->z_pos, cost.GetCost());
_current_player = OWNER_NONE;
}
return cost;