From 3dd811e1794bc9247d5ace0bad7ade5998a7b54f Mon Sep 17 00:00:00 2001 From: fonsinchen Date: Sun, 23 Jun 2013 08:28:53 +0000 Subject: (svn r25434) -Fix: reroute cargo staged for unloading if a link breaks --- src/cargoaction.h | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'src/cargoaction.h') diff --git a/src/cargoaction.h b/src/cargoaction.h index b6879fb76..c305fcb29 100644 --- a/src/cargoaction.h +++ b/src/cargoaction.h @@ -112,15 +112,34 @@ public: bool operator()(CargoPacket *cp); }; -/** Action of rerouting cargo between different station cargo lists and/or next hops. */ -class CargoReroute : public CargoMovement { +/** Action of rerouting cargo between different cargo lists and/or next hops. */ +template +class CargoReroute : public CargoMovement { protected: StationID avoid; StationID avoid2; const GoodsEntry *ge; public: - CargoReroute(StationCargoList *source, StationCargoList *dest, uint max_move, StationID avoid, StationID avoid2, const GoodsEntry *ge) : - CargoMovement(source, dest, max_move), avoid(avoid), avoid2(avoid2), ge(ge) {} + CargoReroute(Tlist *source, Tlist *dest, uint max_move, StationID avoid, StationID avoid2, const GoodsEntry *ge) : + CargoMovement(source, dest, max_move), avoid(avoid), avoid2(avoid2), ge(ge) {} +}; + +/** Action of rerouting cargo in a station. */ +class StationCargoReroute : public CargoReroute { +public: + StationCargoReroute(StationCargoList *source, StationCargoList *dest, uint max_move, StationID avoid, StationID avoid2, const GoodsEntry *ge) : + CargoReroute(source, dest, max_move, avoid, avoid2, ge) {} + bool operator()(CargoPacket *cp); +}; + +/** Action of rerouting cargo staged for transfer in a vehicle. */ +class VehicleCargoReroute : public CargoReroute { +public: + VehicleCargoReroute(VehicleCargoList *source, VehicleCargoList *dest, uint max_move, StationID avoid, StationID avoid2, const GoodsEntry *ge) : + CargoReroute(source, dest, max_move, avoid, avoid2, ge) + { + assert(this->max_move <= source->ActionCount(VehicleCargoList::MTA_TRANSFER)); + } bool operator()(CargoPacket *cp); }; -- cgit v1.2.3-54-g00ecf