summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/autoreplace_cmd.cpp168
1 files changed, 84 insertions, 84 deletions
diff --git a/src/autoreplace_cmd.cpp b/src/autoreplace_cmd.cpp
index 2fd087a24..9faf79611 100644
--- a/src/autoreplace_cmd.cpp
+++ b/src/autoreplace_cmd.cpp
@@ -375,115 +375,115 @@ static CommandCost ReplaceChain(Vehicle **chain, uint32 flags, bool wagon_remova
assert(GetNextUnit(new_head) == NULL);
- /* Append engines to the new chain
- * We do this from back to front, so that the head of the temporary vehicle chain does not change all the time.
- * OTOH the vehicle attach callback is more expensive this way :s */
- Vehicle *last_engine = NULL; ///< Shall store the last engine unit after this step
- if (cost.Succeeded()) {
- for (int i = num_units - 1; i > 0; i--) {
- Vehicle *append = (new_vehs[i] != NULL ? new_vehs[i] : old_vehs[i]);
+ /* Append engines to the new chain
+ * We do this from back to front, so that the head of the temporary vehicle chain does not change all the time.
+ * OTOH the vehicle attach callback is more expensive this way :s */
+ Vehicle *last_engine = NULL; ///< Shall store the last engine unit after this step
+ if (cost.Succeeded()) {
+ for (int i = num_units - 1; i > 0; i--) {
+ Vehicle *append = (new_vehs[i] != NULL ? new_vehs[i] : old_vehs[i]);
- if (RailVehInfo(append->engine_type)->railveh_type == RAILVEH_WAGON) continue;
+ if (RailVehInfo(append->engine_type)->railveh_type == RAILVEH_WAGON) continue;
- if (last_engine == NULL) last_engine = append;
- cost.AddCost(MoveVehicle(append, new_head, DC_EXEC, false));
- if (cost.Failed()) break;
+ if (last_engine == NULL) last_engine = append;
+ cost.AddCost(MoveVehicle(append, new_head, DC_EXEC, false));
+ if (cost.Failed()) break;
+ }
+ if (last_engine == NULL) last_engine = new_head;
}
- if (last_engine == NULL) last_engine = new_head;
- }
-
- /* When wagon removal is enabled and the new engines without any wagons are already longer than the old, we have to fail */
- if (cost.Succeeded() && wagon_removal && new_head->u.rail.cached_total_length > old_total_length) cost = CommandCost(STR_TRAIN_TOO_LONG_AFTER_REPLACEMENT);
-
- /* Append/insert wagons into the new vehicle chain
- * We do this from back to front, so we can stop when wagon removal or maximum train length (i.e. from mammoth-train setting) is triggered.
- */
- if (cost.Succeeded()) {
- for (int i = num_units - 1; i > 0; i--) {
- assert(last_engine != NULL);
- Vehicle *append = (new_vehs[i] != NULL ? new_vehs[i] : old_vehs[i]);
- if (RailVehInfo(append->engine_type)->railveh_type == RAILVEH_WAGON) {
- /* Insert wagon after 'last_engine' */
- CommandCost res = MoveVehicle(append, last_engine, DC_EXEC, false);
+ /* When wagon removal is enabled and the new engines without any wagons are already longer than the old, we have to fail */
+ if (cost.Succeeded() && wagon_removal && new_head->u.rail.cached_total_length > old_total_length) cost = CommandCost(STR_TRAIN_TOO_LONG_AFTER_REPLACEMENT);
- if (res.Succeeded() && wagon_removal && new_head->u.rail.cached_total_length > old_total_length) {
- MoveVehicle(append, NULL, DC_EXEC | DC_AUTOREPLACE, false);
- break;
+ /* Append/insert wagons into the new vehicle chain
+ * We do this from back to front, so we can stop when wagon removal or maximum train length (i.e. from mammoth-train setting) is triggered.
+ */
+ if (cost.Succeeded()) {
+ for (int i = num_units - 1; i > 0; i--) {
+ assert(last_engine != NULL);
+ Vehicle *append = (new_vehs[i] != NULL ? new_vehs[i] : old_vehs[i]);
+
+ if (RailVehInfo(append->engine_type)->railveh_type == RAILVEH_WAGON) {
+ /* Insert wagon after 'last_engine' */
+ CommandCost res = MoveVehicle(append, last_engine, DC_EXEC, false);
+
+ if (res.Succeeded() && wagon_removal && new_head->u.rail.cached_total_length > old_total_length) {
+ MoveVehicle(append, NULL, DC_EXEC | DC_AUTOREPLACE, false);
+ break;
+ }
+
+ cost.AddCost(res);
+ if (cost.Failed()) break;
+ } else {
+ /* We have reached 'last_engine', continue with the next engine towards the front */
+ assert(append == last_engine);
+ last_engine = GetPrevUnit(last_engine);
}
-
- cost.AddCost(res);
- if (cost.Failed()) break;
- } else {
- /* We have reached 'last_engine', continue with the next engine towards the front */
- assert(append == last_engine);
- last_engine = GetPrevUnit(last_engine);
}
}
- }
- /* Sell superfluous new vehicles that could not be inserted. */
- if (cost.Succeeded() && wagon_removal) {
- for (int i = 1; i < num_units; i++) {
- Vehicle *wagon = new_vehs[i];
- if (wagon == NULL) continue;
- if (wagon->First() == new_head) break;
+ /* Sell superfluous new vehicles that could not be inserted. */
+ if (cost.Succeeded() && wagon_removal) {
+ for (int i = 1; i < num_units; i++) {
+ Vehicle *wagon = new_vehs[i];
+ if (wagon == NULL) continue;
+ if (wagon->First() == new_head) break;
- assert(RailVehInfo(wagon->engine_type)->railveh_type == RAILVEH_WAGON);
+ assert(RailVehInfo(wagon->engine_type)->railveh_type == RAILVEH_WAGON);
- /* Sell wagon */
- CommandCost ret = DoCommand(0, wagon->index, 0, DC_EXEC, GetCmdSellVeh(wagon));
- assert(ret.Succeeded());
- new_vehs[i] = NULL;
+ /* Sell wagon */
+ CommandCost ret = DoCommand(0, wagon->index, 0, DC_EXEC, GetCmdSellVeh(wagon));
+ assert(ret.Succeeded());
+ new_vehs[i] = NULL;
- /* Revert the money subtraction when the vehicle was built.
- * This value is different from the sell value, esp. because of refitting */
- cost.AddCost(-new_costs[i]);
+ /* Revert the money subtraction when the vehicle was built.
+ * This value is different from the sell value, esp. because of refitting */
+ cost.AddCost(-new_costs[i]);
+ }
}
- }
- /* The new vehicle chain is constructed, now take over orders and everything... */
- if (cost.Succeeded()) cost.AddCost(CopyHeadSpecificThings(old_head, new_head, flags));
+ /* The new vehicle chain is constructed, now take over orders and everything... */
+ if (cost.Succeeded()) cost.AddCost(CopyHeadSpecificThings(old_head, new_head, flags));
- if (cost.Succeeded()) {
- /* Success ! */
- if ((flags & DC_EXEC) != 0 && new_head != old_head) {
- *chain = new_head;
- }
+ if (cost.Succeeded()) {
+ /* Success ! */
+ if ((flags & DC_EXEC) != 0 && new_head != old_head) {
+ *chain = new_head;
+ }
- /* Transfer cargo of old vehicles and sell them*/
- for (int i = 0; i < num_units; i++) {
- Vehicle *w = old_vehs[i];
- /* Is the vehicle again part of the new chain?
- * Note: We cannot test 'new_vehs[i] != NULL' as wagon removal might cause to remove both */
- if (w->First() == new_head) continue;
+ /* Transfer cargo of old vehicles and sell them*/
+ for (int i = 0; i < num_units; i++) {
+ Vehicle *w = old_vehs[i];
+ /* Is the vehicle again part of the new chain?
+ * Note: We cannot test 'new_vehs[i] != NULL' as wagon removal might cause to remove both */
+ if (w->First() == new_head) continue;
- if ((flags & DC_EXEC) != 0) TransferCargo(w, new_head);
+ if ((flags & DC_EXEC) != 0) TransferCargo(w, new_head);
- cost.AddCost(DoCommand(0, w->index, 0, flags, GetCmdSellVeh(w)));
- if ((flags & DC_EXEC) != 0) {
- old_vehs[i] = NULL;
- if (i == 0) old_head = NULL;
+ cost.AddCost(DoCommand(0, w->index, 0, flags, GetCmdSellVeh(w)));
+ if ((flags & DC_EXEC) != 0) {
+ old_vehs[i] = NULL;
+ if (i == 0) old_head = NULL;
+ }
}
}
- }
- /* If we are not in DC_EXEC undo everything, i.e. rearrange old vehicles.
- * We do this from back to front, so that the head of the temporary vehicle chain does not change all the time.
- * Note: The vehicle attach callback is disabled here :) */
- if ((flags & DC_EXEC) == 0) {
- /* Separate the head, so we can reattach the old vehicles */
- Vehicle *second = GetNextUnit(old_head);
- if (second != NULL) MoveVehicle(second, NULL, DC_EXEC | DC_AUTOREPLACE, true);
+ /* If we are not in DC_EXEC undo everything, i.e. rearrange old vehicles.
+ * We do this from back to front, so that the head of the temporary vehicle chain does not change all the time.
+ * Note: The vehicle attach callback is disabled here :) */
+ if ((flags & DC_EXEC) == 0) {
+ /* Separate the head, so we can reattach the old vehicles */
+ Vehicle *second = GetNextUnit(old_head);
+ if (second != NULL) MoveVehicle(second, NULL, DC_EXEC | DC_AUTOREPLACE, true);
- assert(GetNextUnit(old_head) == NULL);
+ assert(GetNextUnit(old_head) == NULL);
- for (int i = num_units - 1; i > 0; i--) {
- CommandCost ret = MoveVehicle(old_vehs[i], old_head, DC_EXEC | DC_AUTOREPLACE, false);
- assert(ret.Succeeded());
+ for (int i = num_units - 1; i > 0; i--) {
+ CommandCost ret = MoveVehicle(old_vehs[i], old_head, DC_EXEC | DC_AUTOREPLACE, false);
+ assert(ret.Succeeded());
+ }
}
}
- }
/* Finally undo buying of new vehicles */
if ((flags & DC_EXEC) == 0) {