00001
00002
00003
00004
00005
00006
00007
00008
00009
00012 #ifndef CARGOACTION_H
00013 #define CARGOACTION_H
00014
00015 #include "cargopacket.h"
00016
00022 template<class Tsource>
00023 class CargoRemoval {
00024 protected:
00025 Tsource *source;
00026 uint max_move;
00027 uint Preprocess(CargoPacket *cp);
00028 bool Postprocess(CargoPacket *cp, uint remove);
00029 public:
00030 CargoRemoval(Tsource *source, uint max_move) : source(source), max_move(max_move) {}
00031
00036 uint MaxMove() { return this->max_move; }
00037
00038 bool operator()(CargoPacket *cp);
00039 };
00040
00042 class CargoDelivery : public CargoRemoval<VehicleCargoList> {
00043 protected:
00044 CargoPayment *payment;
00045 public:
00046 CargoDelivery(VehicleCargoList *source, uint max_move, CargoPayment *payment) :
00047 CargoRemoval<VehicleCargoList>(source, max_move), payment(payment) {}
00048 bool operator()(CargoPacket *cp);
00049 };
00050
00056 template<class Tsource, class Tdest>
00057 class CargoMovement {
00058 protected:
00059 Tsource *source;
00060 Tdest *destination;
00061 uint max_move;
00062 CargoPacket *Preprocess(CargoPacket *cp);
00063 public:
00064 CargoMovement(Tsource *source, Tdest *destination, uint max_move) : source(source), destination(destination), max_move(max_move) {}
00065
00070 uint MaxMove() { return this->max_move; }
00071 };
00072
00074 class CargoTransfer : public CargoMovement<VehicleCargoList, StationCargoList> {
00075 protected:
00076 CargoPayment *payment;
00077 public:
00078 CargoTransfer(VehicleCargoList *source, StationCargoList *destination, uint max_move, CargoPayment *payment) :
00079 CargoMovement<VehicleCargoList, StationCargoList>(source, destination, max_move), payment(payment) {}
00080 bool operator()(CargoPacket *cp);
00081 };
00082
00084 class CargoLoad : public CargoMovement<StationCargoList, VehicleCargoList> {
00085 protected:
00086 TileIndex load_place;
00087 public:
00088 CargoLoad(StationCargoList *source, VehicleCargoList *destination, uint max_move, TileIndex load_place) :
00089 CargoMovement<StationCargoList, VehicleCargoList>(source, destination, max_move), load_place(load_place) {}
00090 bool operator()(CargoPacket *cp);
00091 };
00092
00094 class CargoReservation: public CargoLoad {
00095 public:
00096 CargoReservation(StationCargoList *source, VehicleCargoList *destination, uint max_move, TileIndex load_place) :
00097 CargoLoad(source, destination, max_move, load_place) {}
00098 bool operator()(CargoPacket *cp);
00099 };
00100
00102 class CargoReturn: public CargoMovement<VehicleCargoList, StationCargoList> {
00103 StationID next;
00104 public:
00105 CargoReturn(VehicleCargoList *source, StationCargoList *destination, uint max_move, StationID next) :
00106 CargoMovement<VehicleCargoList, StationCargoList>(source, destination, max_move), next(next) {}
00107 bool operator()(CargoPacket *cp);
00108 };
00109
00111 class CargoShift : public CargoMovement<VehicleCargoList, VehicleCargoList> {
00112 public:
00113 CargoShift(VehicleCargoList *source, VehicleCargoList *destination, uint max_move) :
00114 CargoMovement<VehicleCargoList, VehicleCargoList>(source, destination, max_move) {}
00115 bool operator()(CargoPacket *cp);
00116 };
00117
00119 class CargoReroute : public CargoMovement<StationCargoList, StationCargoList> {
00120 protected:
00121 StationID avoid;
00122 const GoodsEntry *ge;
00123 public:
00124 CargoReroute(StationCargoList *source, StationCargoList *dest, uint max_move, StationID avoid, const GoodsEntry *ge) :
00125 CargoMovement<StationCargoList, StationCargoList>(source, dest, max_move), avoid(avoid), ge(ge) {}
00126 bool operator()(CargoPacket *cp);
00127 };
00128
00129 #endif