OpenTTD
cargoaction.h
Go to the documentation of this file.
1 /*
2  * This file is part of OpenTTD.
3  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6  */
7 
10 #ifndef CARGOACTION_H
11 #define CARGOACTION_H
12 
13 #include "cargopacket.h"
14 
19 template<class Tsource>
20 class CargoRemoval {
21 protected:
22  Tsource *source;
23  uint max_move;
24  uint Preprocess(CargoPacket *cp);
25  bool Postprocess(CargoPacket *cp, uint remove);
26 public:
27  CargoRemoval(Tsource *source, uint max_move) : source(source), max_move(max_move) {}
28 
33  uint MaxMove() { return this->max_move; }
34 
35  bool operator()(CargoPacket *cp);
36 };
37 
39 class CargoDelivery : public CargoRemoval<VehicleCargoList> {
40 protected:
42 public:
44  CargoRemoval<VehicleCargoList>(source, max_move), payment(payment) {}
45  bool operator()(CargoPacket *cp);
46 };
47 
53 template<class Tsource, class Tdest>
55 protected:
56  Tsource *source;
57  Tdest *destination;
58  uint max_move;
60 public:
61  CargoMovement(Tsource *source, Tdest *destination, uint max_move) : source(source), destination(destination), max_move(max_move) {}
62 
67  uint MaxMove() { return this->max_move; }
68 };
69 
71 class CargoTransfer : public CargoMovement<VehicleCargoList, StationCargoList> {
72 public:
75  bool operator()(CargoPacket *cp);
76 };
77 
79 class CargoLoad : public CargoMovement<StationCargoList, VehicleCargoList> {
80 protected:
82 public:
83  CargoLoad(StationCargoList *source, VehicleCargoList *destination, uint max_move, TileIndex load_place) :
84  CargoMovement<StationCargoList, VehicleCargoList>(source, destination, max_move), load_place(load_place) {}
85  bool operator()(CargoPacket *cp);
86 };
87 
89 class CargoReservation : public CargoLoad {
90 public:
92  CargoLoad(source, destination, max_move, load_place) {}
93  bool operator()(CargoPacket *cp);
94 };
95 
97 class CargoReturn : public CargoMovement<VehicleCargoList, StationCargoList> {
98  StationID next;
99 public:
100  CargoReturn(VehicleCargoList *source, StationCargoList *destination, uint max_move, StationID next) :
102  bool operator()(CargoPacket *cp);
103 };
104 
106 class CargoShift : public CargoMovement<VehicleCargoList, VehicleCargoList> {
107 public:
110  bool operator()(CargoPacket *cp);
111 };
112 
114 template<class Tlist>
115 class CargoReroute : public CargoMovement<Tlist, Tlist> {
116 protected:
117  StationID avoid;
118  StationID avoid2;
119  const GoodsEntry *ge;
120 public:
121  CargoReroute(Tlist *source, Tlist *dest, uint max_move, StationID avoid, StationID avoid2, const GoodsEntry *ge) :
122  CargoMovement<Tlist, Tlist>(source, dest, max_move), avoid(avoid), avoid2(avoid2), ge(ge) {}
123 };
124 
126 class StationCargoReroute : public CargoReroute<StationCargoList> {
127 public:
128  StationCargoReroute(StationCargoList *source, StationCargoList *dest, uint max_move, StationID avoid, StationID avoid2, const GoodsEntry *ge) :
129  CargoReroute<StationCargoList>(source, dest, max_move, avoid, avoid2, ge) {}
130  bool operator()(CargoPacket *cp);
131 };
132 
134 class VehicleCargoReroute : public CargoReroute<VehicleCargoList> {
135 public:
136  VehicleCargoReroute(VehicleCargoList *source, VehicleCargoList *dest, uint max_move, StationID avoid, StationID avoid2, const GoodsEntry *ge) :
137  CargoReroute<VehicleCargoList>(source, dest, max_move, avoid, avoid2, ge)
138  {
139  assert(this->max_move <= source->ActionCount(VehicleCargoList::MTA_TRANSFER));
140  }
141  bool operator()(CargoPacket *cp);
142 };
143 
144 #endif /* CARGOACTION_H */
Action of rerouting cargo in a station.
Definition: cargoaction.h:126
Action of rerouting cargo between different cargo lists and/or next hops.
Definition: cargoaction.h:115
CargoList that is used for stations.
Definition: cargopacket.h:448
Action of shifting cargo from one vehicle to another.
Definition: cargoaction.h:106
Stores station stats for a single cargo.
Definition: station_base.h:170
Action of rerouting cargo staged for transfer in a vehicle.
Definition: cargoaction.h:134
uint max_move
Maximum amount of cargo to be removed with this action.
Definition: cargoaction.h:23
bool Postprocess(CargoPacket *cp, uint remove)
Finalize cargo removal.
Definition: cargoaction.cpp:61
Tsource * source
Source of the cargo.
Definition: cargoaction.h:22
Base class for cargo packets.
Container for cargo from the same location and time.
Definition: cargopacket.h:42
uint MaxMove()
Returns how much more cargo can be moved with this action.
Definition: cargoaction.h:67
TileIndex load_place
TileIndex to be saved in the packets&#39; loaded_at_xy.
Definition: cargoaction.h:81
Abstract action for moving cargo from one list to another.
Definition: cargoaction.h:54
CargoPayment * payment
Payment object where payments will be registered.
Definition: cargoaction.h:41
Helper class to perform the cargo payment.
Definition: economy_base.h:24
Action of transferring cargo from a vehicle to a station.
Definition: cargoaction.h:71
Action of reserving cargo from a station to be loaded onto a vehicle.
Definition: cargoaction.h:89
CargoList that is used for vehicles.
Definition: cargopacket.h:268
uint MaxMove()
Returns how much more cargo can be removed with this action.
Definition: cargoaction.h:33
uint max_move
Maximum amount of cargo to be moved with this action.
Definition: cargoaction.h:58
uint32 TileIndex
The index/ID of a Tile.
Definition: tile_type.h:78
Action of returning previously reserved cargo from the vehicle to the station.
Definition: cargoaction.h:97
Tsource * source
Source of the cargo.
Definition: cargoaction.h:56
Abstract action of removing cargo from a vehicle or a station.
Definition: cargoaction.h:20
uint Preprocess(CargoPacket *cp)
Determines the amount of cargo to be removed from a packet and removes that from the metadata of the ...
Definition: cargoaction.cpp:42
Action of final delivery of cargo.
Definition: cargoaction.h:39
Action of loading cargo from a station onto a vehicle.
Definition: cargoaction.h:79
Tdest * destination
Destination for the cargo.
Definition: cargoaction.h:57