OpenTTD Source  20241108-master-g80f628063a
group.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 GROUP_H
11 #define GROUP_H
12 
13 #include "group_type.h"
14 #include "core/pool_type.hpp"
15 #include "company_type.h"
16 #include "vehicle_type.h"
17 #include "engine_type.h"
18 #include "livery.h"
19 
21 extern GroupPool _group_pool;
22 
27  std::map<EngineID, uint16_t> num_engines;
28  uint16_t num_vehicle;
32 
33  void Clear();
34 
35  void ClearProfits()
36  {
37  this->profit_last_year = 0;
38 
39  this->num_vehicle_min_age = 0;
40  this->profit_last_year_min_age = 0;
41  }
42 
43  void ClearAutoreplace()
44  {
45  this->autoreplace_defined = false;
46  this->autoreplace_finished = false;
47  }
48 
49  uint16_t GetNumEngines(EngineID engine) const;
50 
51  static GroupStatistics &Get(CompanyID company, GroupID id_g, VehicleType type);
52  static GroupStatistics &Get(const Vehicle *v);
53  static GroupStatistics &GetAllGroup(const Vehicle *v);
54 
55  static void CountVehicle(const Vehicle *v, int delta);
56  static void CountEngine(const Vehicle *v, int delta);
57  static void AddProfitLastYear(const Vehicle *v);
58  static void VehicleReachedMinAge(const Vehicle *v);
59 
60  static void UpdateProfits();
61  static void UpdateAfterLoad();
62  static void UpdateAutoreplace(CompanyID company);
63 };
64 
65 enum GroupFlags : uint8_t {
68  GF_END,
69 };
70 
72 struct Group : GroupPool::PoolItem<&_group_pool> {
73  std::string name;
76 
77  uint8_t flags;
80 
81  bool folded;
82 
84  uint16_t number;
85 
87 };
88 
89 
90 inline bool IsDefaultGroupID(GroupID index)
91 {
92  return index == DEFAULT_GROUP;
93 }
94 
100 inline bool IsAllGroupID(GroupID id_g)
101 {
102  return id_g == ALL_GROUP;
103 }
104 
105 
106 uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e);
107 uint GetGroupNumVehicle(CompanyID company, GroupID id_g, VehicleType type);
108 uint GetGroupNumVehicleMinAge(CompanyID company, GroupID id_g, VehicleType type);
110 
111 void SetTrainGroupID(Train *v, GroupID grp);
112 void UpdateTrainGroupID(Train *v);
113 void RemoveAllGroupsForCompany(const CompanyID company);
114 bool GroupIsInGroup(GroupID search, GroupID group);
115 void UpdateCompanyGroupLiveries(const Company *c);
116 
117 #endif /* GROUP_H */
Types related to companies.
Owner
Enum for all companies/owners.
Definition: company_type.h:18
@ INVALID_COMPANY
An invalid company.
Definition: company_type.h:30
Types related to engines.
uint16_t EngineID
Unique identification number of an engine.
Definition: engine_type.h:21
Money GetGroupProfitLastYearMinAge(CompanyID company, GroupID id_g, VehicleType type)
Get last year's profit of vehicles above minimum age for the group with GroupID id_g and its sub-grou...
Definition: group_cmd.cpp:851
GroupFlags
Definition: group.h:65
@ GF_REPLACE_PROTECTION
If set to true, the global autoreplace has no effect on the group.
Definition: group.h:66
@ GF_REPLACE_WAGON_REMOVAL
If set, autoreplace will perform wagon removal on vehicles in this group.
Definition: group.h:67
void UpdateCompanyGroupLiveries(const Company *c)
Update group liveries for a company.
Definition: group_cmd.cpp:311
void UpdateTrainGroupID(Train *v)
Recalculates the groupID of a train.
Definition: group_cmd.cpp:773
uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e)
Get the number of engines with EngineID id_e in the group with GroupID id_g and its sub-groups.
Definition: group_cmd.cpp:799
void SetTrainGroupID(Train *v, GroupID grp)
Affect the groupID of a train to new_g.
Definition: group_cmd.cpp:745
GroupPool _group_pool
Pool of groups.
bool IsAllGroupID(GroupID id_g)
Checks if a GroupID stands for all vehicles of a company.
Definition: group.h:100
uint GetGroupNumVehicle(CompanyID company, GroupID id_g, VehicleType type)
Get the number of vehicles in the group with GroupID id_g and its sub-groups.
Definition: group_cmd.cpp:817
uint GetGroupNumVehicleMinAge(CompanyID company, GroupID id_g, VehicleType type)
Get the number of vehicles above profit minimum age in the group with GroupID id_g and its sub-groups...
Definition: group_cmd.cpp:834
bool GroupIsInGroup(GroupID search, GroupID group)
Test if GroupID group is a descendant of (or is) GroupID search.
Definition: group_cmd.cpp:874
Types of a group.
uint16_t GroupID
Type for all group identifiers.
Definition: group_type.h:13
static const GroupID DEFAULT_GROUP
Ungrouped vehicles are in this group.
Definition: group_type.h:17
static const GroupID ALL_GROUP
All vehicles are in this group.
Definition: group_type.h:16
Functions/types related to livery colours.
Definition of Pool, structure used to access PoolItems, and PoolItem, base structure for Vehicle,...
Statistics and caches on the vehicles in a group.
Definition: group.h:24
static void CountVehicle(const Vehicle *v, int delta)
Update num_vehicle when adding or removing a vehicle.
Definition: group_cmd.cpp:133
static void AddProfitLastYear(const Vehicle *v)
Add a vehicle's last year profit to the profit sum of its group.
Definition: group_cmd.cpp:168
static void VehicleReachedMinAge(const Vehicle *v)
Add a vehicle to the profit sum of its group.
Definition: group_cmd.cpp:180
uint16_t GetNumEngines(EngineID engine) const
Get number of vehicles of a specific engine ID.
Definition: group_cmd.cpp:49
Money profit_last_year
Sum of profits for all vehicles.
Definition: group.h:25
static GroupStatistics & GetAllGroup(const Vehicle *v)
Returns the GroupStatistic for the ALL_GROUPO of a vehicle type.
Definition: group_cmd.cpp:93
static void UpdateAfterLoad()
Update all caches after loading a game, changing NewGRF, etc.
Definition: group_cmd.cpp:101
static void CountEngine(const Vehicle *v, int delta)
Update num_engines when adding/removing an engine.
Definition: group_cmd.cpp:158
uint16_t num_vehicle
Number of vehicles.
Definition: group.h:28
Money profit_last_year_min_age
Sum of profits for vehicles considered for profit statistics.
Definition: group.h:26
static void UpdateAutoreplace(CompanyID company)
Update autoreplace_defined and autoreplace_finished of all statistics of a company.
Definition: group_cmd.cpp:221
static void UpdateProfits()
Recompute the profits for all groups.
Definition: group_cmd.cpp:194
void Clear()
Clear all caches.
Definition: group_cmd.cpp:33
bool autoreplace_defined
Are any autoreplace rules set?
Definition: group.h:30
static GroupStatistics & Get(CompanyID company, GroupID id_g, VehicleType type)
Returns the GroupStatistics for a specific group.
Definition: group_cmd.cpp:63
bool autoreplace_finished
Have all autoreplacement finished?
Definition: group.h:31
std::map< EngineID, uint16_t > num_engines
Caches the number of engines of each type the company owns.
Definition: group.h:27
uint16_t num_vehicle_min_age
Number of vehicles considered for profit statistics;.
Definition: group.h:29
Group data.
Definition: group.h:72
Livery livery
Custom colour scheme for vehicles in this group.
Definition: group.h:78
GroupID parent
Parent group.
Definition: group.h:83
GroupStatistics statistics
NOSAVE: Statistics and caches on the vehicles in the group.
Definition: group.h:79
VehicleType vehicle_type
Vehicle type of the group.
Definition: group.h:75
bool folded
NOSAVE: Is this group folded in the group view?
Definition: group.h:81
std::string name
Group Name.
Definition: group.h:73
uint16_t number
Per-company group number.
Definition: group.h:84
Owner owner
Group Owner.
Definition: group.h:74
uint8_t flags
Group flags.
Definition: group.h:77
Information about a particular livery.
Definition: livery.h:78
Base class for all PoolItems.
Definition: pool_type.hpp:237
Base class for all pools.
Definition: pool_type.hpp:80
'Train' is either a loco or a wagon.
Definition: train.h:89
Vehicle data structure.
Definition: vehicle_base.h:244
Types related to vehicles.
VehicleType
Available vehicle types.
Definition: vehicle_type.h:21