OpenTTD
refresh.h
Go to the documentation of this file.
1 /* $Id: refresh.h 27614 2016-07-10 12:17:00Z fonsinchen $ */
2 
3 /*
4  * This file is part of OpenTTD.
5  * 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.
6  * 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.
7  * 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/>.
8  */
9 
12 #ifndef REFRESH_H
13 #define REFRESH_H
14 
15 #include "../cargo_type.h"
16 #include "../vehicle_base.h"
17 #include <vector>
18 #include <map>
19 #include <set>
20 
25 public:
26  static void Run(Vehicle *v, bool allow_merge = true, bool is_full_loading = false);
27 
28 protected:
33  enum RefreshFlags {
39  };
40 
44  struct RefitDesc {
46  uint16 capacity;
47  uint16 remaining;
48  RefitDesc(CargoID cargo, uint16 capacity, uint16 remaining) :
49  cargo(cargo), capacity(capacity), remaining(remaining) {}
50  };
51 
61  struct Hop {
62  OrderID from;
63  OrderID to;
65 
70  Hop() {NOT_REACHED();}
71 
78  Hop(OrderID from, OrderID to, CargoID cargo) : from(from), to(to), cargo(cargo) {}
79  bool operator<(const Hop &other) const;
80  };
81 
82  typedef std::vector<RefitDesc> RefitList;
83  typedef std::set<Hop> HopSet;
84 
87  RefitList refit_capacities;
88  HopSet *seen_hops;
90  bool allow_merge;
92 
94 
95  bool HandleRefit(CargoID refit_cargo);
96  void ResetRefit();
97  void RefreshStats(const Order *cur, const Order *next);
98  const Order *PredictNextOrder(const Order *cur, const Order *next, uint8 flags, uint num_hops = 0);
99 
100  void RefreshLinks(const Order *cur, const Order *next, uint8 flags, uint num_hops = 0);
101 };
102 
103 #endif /* REFRESH_H */