diff options
Diffstat (limited to 'src/cargoaction.h')
-rw-r--r-- | src/cargoaction.h | 27 |
1 files changed, 23 insertions, 4 deletions
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<StationCargoList, StationCargoList> { +/** Action of rerouting cargo between different cargo lists and/or next hops. */ +template<class Tlist> +class CargoReroute : public CargoMovement<Tlist, Tlist> { 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<StationCargoList, StationCargoList>(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<Tlist, Tlist>(source, dest, max_move), avoid(avoid), avoid2(avoid2), ge(ge) {} +}; + +/** Action of rerouting cargo in a station. */ +class StationCargoReroute : public CargoReroute<StationCargoList> { +public: + StationCargoReroute(StationCargoList *source, StationCargoList *dest, uint max_move, StationID avoid, StationID avoid2, const GoodsEntry *ge) : + CargoReroute<StationCargoList>(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<VehicleCargoList> { +public: + VehicleCargoReroute(VehicleCargoList *source, VehicleCargoList *dest, uint max_move, StationID avoid, StationID avoid2, const GoodsEntry *ge) : + CargoReroute<VehicleCargoList>(source, dest, max_move, avoid, avoid2, ge) + { + assert(this->max_move <= source->ActionCount(VehicleCargoList::MTA_TRANSFER)); + } bool operator()(CargoPacket *cp); }; |