diff options
author | michi_cc <michi_cc@openttd.org> | 2011-11-04 15:04:24 +0000 |
---|---|---|
committer | michi_cc <michi_cc@openttd.org> | 2011-11-04 15:04:24 +0000 |
commit | ad2fdd8d6fefe8cde63aa4147ae5cd77ebae49d5 (patch) | |
tree | a2d4023cab37416a582f13f59d057126e3dee4cf /src | |
parent | 9782b7bb0af914d749b125c3a0ae56cccc99c8e3 (diff) | |
download | openttd-ad2fdd8d6fefe8cde63aa4147ae5cd77ebae49d5.tar.xz |
(svn r23111) -Fix: Keep subtype when automatically choosing the cargo for auto-refitting.
Diffstat (limited to 'src')
-rw-r--r-- | src/economy.cpp | 1 | ||||
-rw-r--r-- | src/vehicle_func.h | 3 | ||||
-rw-r--r-- | src/vehicle_gui.cpp | 9 |
3 files changed, 9 insertions, 4 deletions
diff --git a/src/economy.cpp b/src/economy.cpp index 2480be14f..5ba852bc6 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1300,6 +1300,7 @@ static void LoadUnloadVehicle(Vehicle *front, int *cargo_left) if (cargo_left[cid] > amount) { /* Try to find out if auto-refitting would succeed. In case the refit is allowed, * the returned refit capacity will be greater than zero. */ + new_subtype = GetBestFittingSubType(v, v, cid); DoCommand(v->tile, v->index, cid | 1U << 6 | new_subtype << 8 | 1U << 16, DC_QUERY_COST, GetCmdRefitVeh(v)); // Auto-refit and only this vehicle including artic parts. if (_returned_refit_capacity > 0) { amount = cargo_left[cid]; diff --git a/src/vehicle_func.h b/src/vehicle_func.h index efc07ed07..7082404ae 100644 --- a/src/vehicle_func.h +++ b/src/vehicle_func.h @@ -21,6 +21,7 @@ #include "newgrf_config.h" #include "track_type.h" #include "livery.h" +#include "cargotype.h" #define is_custom_sprite(x) (x >= 0xFD) #define IS_CUSTOM_FIRSTHEAD_SPRITE(x) (x == 0xFD) @@ -44,7 +45,7 @@ byte VehicleRandomBits(); void ResetVehiclePosHash(); void ResetVehicleColourMap(); -byte GetBestFittingSubType(Vehicle *v_from, Vehicle *v_for); +byte GetBestFittingSubType(Vehicle *v_from, Vehicle *v_for, CargoID dest_cargo_type = INVALID_CARGO); void ViewportAddVehicles(DrawPixelInfo *dpi); diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 5a2993516..abd1e3317 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -213,9 +213,10 @@ static const uint MAX_REFIT_CYCLE = 256; * Assuming they are going to carry the same cargo ofcourse! * @param v_from the vehicle to match the subtype from * @param v_for the vehicle to get the subtype for + * @param dest_cargo_type Destination cargo type, taken from #v_from if set to #INVALID_CARGO. * @return the best sub type */ -byte GetBestFittingSubType(Vehicle *v_from, Vehicle *v_for) +byte GetBestFittingSubType(Vehicle *v_from, Vehicle *v_for, CargoID dest_cargo_type) { const Engine *e_from = v_from->GetEngine(); const Engine *e_for = v_for->GetEngine(); @@ -229,8 +230,10 @@ byte GetBestFittingSubType(Vehicle *v_from, Vehicle *v_for) return 0; } + if (dest_cargo_type == INVALID_CARGO) dest_cargo_type = v_from->cargo_type; + /* It has to be possible for v_for to carry the cargo of v_from. */ - if (!HasBit(e_for->info.refit_mask, v_from->cargo_type)) return 0; + if (!HasBit(e_for->info.refit_mask, dest_cargo_type)) return 0; StringID expected_string = GetCargoSubtypeText(v_from); @@ -239,7 +242,7 @@ byte GetBestFittingSubType(Vehicle *v_from, Vehicle *v_for) byte ret_refit_cyc = 0; /* Set the 'destination' cargo */ - v_for->cargo_type = v_from->cargo_type; + v_for->cargo_type = dest_cargo_type; /* Cycle through the refits */ for (uint refit_cyc = 0; refit_cyc < MAX_REFIT_CYCLE; refit_cyc++) { |