Fix refit in station with articulated vehicles with no capacity in leading part
This commit is contained in:
@@ -305,6 +305,19 @@ bool IsArticulatedVehicleCarryingDifferentCargoes(const Vehicle *v, CargoID *car
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the overall cargo of an articulated vehicle if all parts are refitted to the same cargo.
|
||||||
|
* Note: Vehicles not carrying anything are ignored
|
||||||
|
* @param v the first vehicle in the chain
|
||||||
|
* @return the common CargoID. (CT_INVALID if no part is carrying something or they are carrying different things)
|
||||||
|
*/
|
||||||
|
CargoID GetOverallCargoOfArticulatedVehicle(const Vehicle *v)
|
||||||
|
{
|
||||||
|
CargoID cargo_id;
|
||||||
|
IsArticulatedVehicleCarryingDifferentCargoes(v, &cargo_id);
|
||||||
|
return cargo_id;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the specs of freshly build articulated vehicles are consistent with the information specified in the purchase list.
|
* Checks whether the specs of freshly build articulated vehicles are consistent with the information specified in the purchase list.
|
||||||
* Only essential information is checked to leave room for magic tricks/workarounds to grfcoders.
|
* Only essential information is checked to leave room for magic tricks/workarounds to grfcoders.
|
||||||
|
@@ -22,6 +22,7 @@ void GetArticulatedRefitMasks(EngineID engine, bool include_initial_cargo_type,
|
|||||||
CargoTypes GetUnionOfArticulatedRefitMasks(EngineID engine, bool include_initial_cargo_type);
|
CargoTypes GetUnionOfArticulatedRefitMasks(EngineID engine, bool include_initial_cargo_type);
|
||||||
CargoTypes GetIntersectionOfArticulatedRefitMasks(EngineID engine, bool include_initial_cargo_type);
|
CargoTypes GetIntersectionOfArticulatedRefitMasks(EngineID engine, bool include_initial_cargo_type);
|
||||||
bool IsArticulatedVehicleCarryingDifferentCargoes(const Vehicle *v, CargoID *cargo_type);
|
bool IsArticulatedVehicleCarryingDifferentCargoes(const Vehicle *v, CargoID *cargo_type);
|
||||||
|
CargoID GetOverallCargoOfArticulatedVehicle(const Vehicle *v);
|
||||||
bool IsArticulatedVehicleRefittable(EngineID engine);
|
bool IsArticulatedVehicleRefittable(EngineID engine);
|
||||||
bool IsArticulatedEngine(EngineID engine_type);
|
bool IsArticulatedEngine(EngineID engine_type);
|
||||||
void CheckConsistencyOfArticulatedVehicle(const Vehicle *v);
|
void CheckConsistencyOfArticulatedVehicle(const Vehicle *v);
|
||||||
|
@@ -1762,7 +1762,7 @@ static void HandleStationRefit(Vehicle *v, CargoArray &consist_capleft, Station
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Refit if given a valid cargo. */
|
/* Refit if given a valid cargo. */
|
||||||
if (new_cid < NUM_CARGO && new_cid != v_start->cargo_type) {
|
if (new_cid < NUM_CARGO && new_cid != GetOverallCargoOfArticulatedVehicle(v_start)) {
|
||||||
/* INVALID_STATION because in the DT_MANUAL case that's correct and in the DT_(A)SYMMETRIC
|
/* INVALID_STATION because in the DT_MANUAL case that's correct and in the DT_(A)SYMMETRIC
|
||||||
* cases the next hop of the vehicle doesn't really tell us anything if the cargo had been
|
* cases the next hop of the vehicle doesn't really tell us anything if the cargo had been
|
||||||
* "via any station" before reserving. We rather produce some more "any station" cargo than
|
* "via any station" before reserving. We rather produce some more "any station" cargo than
|
||||||
|
Reference in New Issue
Block a user