OpenTTD Source: src/cargoaction.h Source File

OpenTTD Source 15.0-RC2

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 <https://www.gnu.org/licenses/old-licenses/gpl-2.0>.
6 */
7
10#ifndef CARGOACTION_H
11#define CARGOACTION_H
12
13#include "cargopacket.h"
14
19template <class Tsource>
20 class CargoRemoval {
21protected:
22 Tsource *source;
23 uint max_move;
24 uint Preprocess(CargoPacket *cp);
25 bool Postprocess(CargoPacket *cp, uint remove);
26public:
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> {
40protected:
41 TileIndex current_tile;
42 CargoPayment *payment;
43 CargoType cargo;
44public:
45 CargoDelivery(VehicleCargoList *source, uint max_move, CargoType cargo, CargoPayment *payment, TileIndex current_tile) :
46 CargoRemoval<VehicleCargoList>(source, max_move), current_tile(current_tile), payment(payment), cargo(cargo) {}
47 bool operator()(CargoPacket *cp);
48};
49
55template <class Tsource, class Tdest>
56 class CargoMovement {
57protected:
58 Tsource *source;
59 Tdest *destination;
60 uint max_move;
61 CargoPacket *Preprocess(CargoPacket *cp);
62public:
63 CargoMovement(Tsource *source, Tdest *destination, uint max_move) : source(source), destination(destination), max_move(max_move) {}
64
69 uint MaxMove() { return this->max_move; }
70};
71
73 class CargoTransfer : public CargoMovement<VehicleCargoList, StationCargoList> {
74protected:
75 TileIndex current_tile;
76public:
77 CargoTransfer(VehicleCargoList *source, StationCargoList *destination, uint max_move, TileIndex current_tile) :
78 CargoMovement<VehicleCargoList, StationCargoList>(source, destination, max_move), current_tile(current_tile) {}
79 bool operator()(CargoPacket *cp);
80};
81
83 class CargoLoad : public CargoMovement<StationCargoList, VehicleCargoList> {
84protected:
85 TileIndex current_tile;
86public:
87 CargoLoad(StationCargoList *source, VehicleCargoList *destination, uint max_move, TileIndex current_tile) :
88 CargoMovement<StationCargoList, VehicleCargoList>(source, destination, max_move), current_tile(current_tile) {}
89 bool operator()(CargoPacket *cp);
90};
91
93 class CargoReservation : public CargoLoad {
94public:
95 CargoReservation(StationCargoList *source, VehicleCargoList *destination, uint max_move, TileIndex current_tile) :
96 CargoLoad(source, destination, max_move, current_tile) {}
97 bool operator()(CargoPacket *cp);
98};
99
101 class CargoReturn : public CargoMovement<VehicleCargoList, StationCargoList> {
102protected:
103 TileIndex current_tile;
104 StationID next;
105public:
106 CargoReturn(VehicleCargoList *source, StationCargoList *destination, uint max_move, StationID next, TileIndex current_tile) :
107 CargoMovement<VehicleCargoList, StationCargoList>(source, destination, max_move), current_tile(current_tile), next(next) {}
108 bool operator()(CargoPacket *cp);
109};
110
112 class CargoShift : public CargoMovement<VehicleCargoList, VehicleCargoList> {
113public:
114 CargoShift(VehicleCargoList *source, VehicleCargoList *destination, uint max_move) :
115 CargoMovement<VehicleCargoList, VehicleCargoList>(source, destination, max_move) {}
116 bool operator()(CargoPacket *cp);
117};
118
120template <class Tlist>
121 class CargoReroute : public CargoMovement<Tlist, Tlist> {
122protected:
123 StationID avoid;
124 StationID avoid2;
125 const GoodsEntry *ge;
126public:
127 CargoReroute(Tlist *source, Tlist *dest, uint max_move, StationID avoid, StationID avoid2, const GoodsEntry *ge) :
128 CargoMovement<Tlist, Tlist>(source, dest, max_move), avoid(avoid), avoid2(avoid2), ge(ge) {}
129};
130
132 class StationCargoReroute : public CargoReroute<StationCargoList> {
133public:
134 StationCargoReroute(StationCargoList *source, StationCargoList *dest, uint max_move, StationID avoid, StationID avoid2, const GoodsEntry *ge) :
135 CargoReroute<StationCargoList>(source, dest, max_move, avoid, avoid2, ge) {}
136 bool operator()(CargoPacket *cp);
137};
138
140 class VehicleCargoReroute : public CargoReroute<VehicleCargoList> {
141public:
142 VehicleCargoReroute(VehicleCargoList *source, VehicleCargoList *dest, uint max_move, StationID avoid, StationID avoid2, const GoodsEntry *ge) :
143 CargoReroute<VehicleCargoList>(source, dest, max_move, avoid, avoid2, ge)
144 {
145 assert(this->max_move <= source->ActionCount(VehicleCargoList::MTA_TRANSFER));
146 }
147 bool operator()(CargoPacket *cp);
148};
149
150#endif /* CARGOACTION_H */
CargoType
uint8_t CargoType
Cargo slots to indicate a cargo type within a game.
Definition cargo_type.h:21
cargopacket.h
Base class for cargo packets.
CargoDelivery
Action of final delivery of cargo.
Definition cargoaction.h:39
CargoDelivery::payment
CargoPayment * payment
Payment object where payments will be registered.
Definition cargoaction.h:42
CargoDelivery::cargo
CargoType cargo
The cargo type of the cargo.
Definition cargoaction.h:43
CargoDelivery::current_tile
TileIndex current_tile
Current tile cargo delivery is happening.
Definition cargoaction.h:41
CargoDelivery::operator()
bool operator()(CargoPacket *cp)
Delivers some cargo.
Definition cargoaction.cpp:106
CargoList< VehicleCargoList, CargoPacketList >::MTA_TRANSFER
@ MTA_TRANSFER
Transfer the cargo to the station.
Definition cargopacket.h:288
CargoLoad
Action of loading cargo from a station onto a vehicle.
Definition cargoaction.h:83
CargoLoad::operator()
bool operator()(CargoPacket *cp)
Loads some cargo onto a vehicle.
Definition cargoaction.cpp:119
CargoLoad::current_tile
TileIndex current_tile
Current tile cargo loading is happening.
Definition cargoaction.h:85
CargoMovement
Abstract action for moving cargo from one list to another.
Definition cargoaction.h:56
CargoMovement::MaxMove
uint MaxMove()
Returns how much more cargo can be moved with this action.
Definition cargoaction.h:69
CargoMovement::source
Tsource * source
Source of the cargo.
Definition cargoaction.h:58
CargoMovement::Preprocess
CargoPacket * Preprocess(CargoPacket *cp)
Decides if a packet needs to be split.
Definition cargoaction.cpp:24
CargoMovement::destination
Tdest * destination
Destination for the cargo.
Definition cargoaction.h:59
CargoMovement::max_move
uint max_move
Maximum amount of cargo to be moved with this action.
Definition cargoaction.h:60
CargoRemoval
Abstract action of removing cargo from a vehicle or a station.
Definition cargoaction.h:20
CargoRemoval::Preprocess
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
CargoRemoval::Postprocess
bool Postprocess(CargoPacket *cp, uint remove)
Finalize cargo removal.
Definition cargoaction.cpp:61
CargoRemoval::source
Tsource * source
Source of the cargo.
Definition cargoaction.h:22
CargoRemoval::max_move
uint max_move
Maximum amount of cargo to be removed with this action.
Definition cargoaction.h:23
CargoRemoval::MaxMove
uint MaxMove()
Returns how much more cargo can be removed with this action.
Definition cargoaction.h:33
CargoReroute
Action of rerouting cargo between different cargo lists and/or next hops.
Definition cargoaction.h:121
CargoReservation
Action of reserving cargo from a station to be loaded onto a vehicle.
Definition cargoaction.h:93
CargoReservation::operator()
bool operator()(CargoPacket *cp)
Reserves some cargo for loading.
Definition cargoaction.cpp:134
CargoReturn
Action of returning previously reserved cargo from the vehicle to the station.
Definition cargoaction.h:101
CargoReturn::current_tile
TileIndex current_tile
Current tile cargo unloading is happening.
Definition cargoaction.h:103
CargoReturn::operator()
bool operator()(CargoPacket *cp)
Returns some reserved cargo.
Definition cargoaction.cpp:150
CargoShift
Action of shifting cargo from one vehicle to another.
Definition cargoaction.h:112
CargoShift::operator()
bool operator()(CargoPacket *cp)
Shifts some cargo from a vehicle to another one.
Definition cargoaction.cpp:183
CargoTransfer
Action of transferring cargo from a vehicle to a station.
Definition cargoaction.h:73
CargoTransfer::operator()
bool operator()(CargoPacket *cp)
Transfers some cargo from a vehicle to a station.
Definition cargoaction.cpp:167
CargoTransfer::current_tile
TileIndex current_tile
Current tile cargo unloading is happening.
Definition cargoaction.h:75
StationCargoList
CargoList that is used for stations.
Definition cargopacket.h:519
StationCargoReroute
Action of rerouting cargo in a station.
Definition cargoaction.h:132
StationCargoReroute::operator()
bool operator()(CargoPacket *cp)
Reroutes some cargo from one Station sublist to another.
Definition cargoaction.cpp:197
VehicleCargoList
CargoList that is used for vehicles.
Definition cargopacket.h:342
VehicleCargoReroute
Action of rerouting cargo staged for transfer in a vehicle.
Definition cargoaction.h:140
VehicleCargoReroute::operator()
bool operator()(CargoPacket *cp)
Reroutes some cargo in a VehicleCargoList.
Definition cargoaction.cpp:220
CargoPacket
Container for cargo from the same location and time.
Definition cargopacket.h:41
CargoPayment
Helper class to perform the cargo payment.
Definition economy_base.h:23
GoodsEntry
Stores station stats for a single cargo.
Definition station_base.h:167
PoolID< uint16_t, struct StationIDTag, 64000, 0xFFFF >
StrongType::Typedef< uint32_t, struct TileIndexTag, StrongType::Compare, StrongType::Integer, StrongType::Compatible< int32_t >, StrongType::Compatible< int64_t > >