OpenTTD Source: src/group.h Source File

OpenTTD Source 13.2.1

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 #include <string>
20
21 typedef Pool<Group, GroupID, 16, 64000> GroupPool;
22 extern GroupPool _group_pool;
23
25 struct GroupStatistics {
26 Money profit_last_year;
27 Money profit_last_year_min_age;
28 uint16 *num_engines;
29 uint16 num_vehicle;
30 uint16 num_vehicle_min_age;
31 bool autoreplace_defined;
32 bool autoreplace_finished;
33
34 GroupStatistics();
35 ~GroupStatistics();
36
37 void Clear();
38
39 void ClearProfits()
40 {
41 this->profit_last_year = 0;
42
43 this->num_vehicle_min_age = 0;
44 this->profit_last_year_min_age = 0;
45 }
46
47 void ClearAutoreplace()
48 {
49 this->autoreplace_defined = false;
50 this->autoreplace_finished = false;
51 }
52
53 static GroupStatistics &Get(CompanyID company, GroupID id_g, VehicleType type);
54 static GroupStatistics &Get(const Vehicle *v);
55 static GroupStatistics &GetAllGroup(const Vehicle *v);
56
57 static void CountVehicle(const Vehicle *v, int delta);
58 static void CountEngine(const Vehicle *v, int delta);
59 static void AddProfitLastYear(const Vehicle *v);
60 static void VehicleReachedMinAge(const Vehicle *v);
61
62 static void UpdateProfits();
63 static void UpdateAfterLoad();
64 static void UpdateAutoreplace(CompanyID company);
65 };
66
67 enum GroupFlags : uint8 {
68 GF_REPLACE_PROTECTION,
69 GF_REPLACE_WAGON_REMOVAL,
70 GF_END,
71 };
72
74 struct Group : GroupPool::PoolItem<&_group_pool> {
75 std::string name;
76 Owner owner;
77 VehicleType vehicle_type;
78
79 uint8 flags;
80 Livery livery;
81 GroupStatistics statistics;
82
83 bool folded;
84
85 GroupID parent;
86
87 Group(CompanyID owner = INVALID_COMPANY);
88 };
89
90
91 static inline bool IsDefaultGroupID(GroupID index)
92 {
93 return index == DEFAULT_GROUP;
94 }
95
101 static inline bool IsAllGroupID(GroupID id_g)
102 {
103 return id_g == ALL_GROUP;
104 }
105
106
107 uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e);
108 uint GetGroupNumVehicle(CompanyID company, GroupID id_g, VehicleType type);
109 uint GetGroupNumVehicleMinAge(CompanyID company, GroupID id_g, VehicleType type);
110 Money GetGroupProfitLastYearMinAge(CompanyID company, GroupID id_g, VehicleType type);
111
112 void SetTrainGroupID(Train *v, GroupID grp);
113 void UpdateTrainGroupID(Train *v);
114 void RemoveVehicleFromGroup(const Vehicle *v);
115 void RemoveAllGroupsForCompany(const CompanyID company);
116 bool GroupIsInGroup(GroupID search, GroupID group);
117
118 #endif /* GROUP_H */
SetTrainGroupID
void SetTrainGroupID(Train *v, GroupID grp)
Affect the groupID of a train to new_g.
Definition: group_cmd.cpp:721
_group_pool
GroupPool _group_pool
Pool of groups.
GF_REPLACE_PROTECTION
@ GF_REPLACE_PROTECTION
If set to true, the global autoreplace has no effect on the group.
Definition: group.h:68
GroupStatistics::CountEngine
static void CountEngine(const Vehicle *v, int delta)
Update num_engines when adding/removing an engine.
Definition: group_cmd.cpp:157
Group::parent
GroupID parent
Parent group.
Definition: group.h:85
GroupStatistics::CountVehicle
static void CountVehicle(const Vehicle *v, int delta)
Update num_vehicle when adding or removing a vehicle.
Definition: group_cmd.cpp:132
GroupStatistics::VehicleReachedMinAge
static void VehicleReachedMinAge(const Vehicle *v)
Add a vehicle to the profit sum of its group.
Definition: group_cmd.cpp:179
GroupStatistics::autoreplace_finished
bool autoreplace_finished
Have all autoreplacement finished?
Definition: group.h:32
Group::livery
Livery livery
Custom colour scheme for vehicles in this group.
Definition: group.h:80
GetGroupProfitLastYearMinAge
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:827
Vehicle
Vehicle data structure.
Definition: vehicle_base.h:224
GroupStatistics::profit_last_year
Money profit_last_year
Sum of profits for all vehicles.
Definition: group.h:26
Owner
Owner
Enum for all companies/owners.
Definition: company_type.h:18
Group::vehicle_type
VehicleType vehicle_type
Vehicle type of the group.
Definition: group.h:77
GroupStatistics::num_vehicle
uint16 num_vehicle
Number of vehicles.
Definition: group.h:29
ALL_GROUP
static const GroupID ALL_GROUP
All vehicles are in this group.
Definition: group_type.h:16
RemoveVehicleFromGroup
void RemoveVehicleFromGroup(const Vehicle *v)
Decrease the num_vehicle variable before delete an front engine from a group.
Definition: group_cmd.cpp:707
GroupStatistics::num_vehicle_min_age
uint16 num_vehicle_min_age
Number of vehicles considered for profit statistics;.
Definition: group.h:30
Group
Group data.
Definition: group.h:74
GroupStatistics
Statistics and caches on the vehicles in a group.
Definition: group.h:25
EngineID
uint16 EngineID
Unique identification number of an engine.
Definition: engine_type.h:21
UpdateTrainGroupID
void UpdateTrainGroupID(Train *v)
Recalculates the groupID of a train.
Definition: group_cmd.cpp:749
GetGroupNumVehicleMinAge
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:810
GroupFlags
GroupFlags
Definition: group.h:67
Group::statistics
GroupStatistics statistics
NOSAVE: Statistics and caches on the vehicles in the group.
Definition: group.h:81
Group::owner
Owner owner
Group Owner.
Definition: group.h:76
GroupStatistics::UpdateAutoreplace
static void UpdateAutoreplace(CompanyID company)
Update autoreplace_defined and autoreplace_finished of all statistics of a company.
Definition: group_cmd.cpp:220
Train
'Train' is either a loco or a wagon.
Definition: train.h:89
GroupStatistics::Get
static GroupStatistics & Get(CompanyID company, GroupID id_g, VehicleType type)
Returns the GroupStatistics for a specific group.
Definition: group_cmd.cpp:62
DEFAULT_GROUP
static const GroupID DEFAULT_GROUP
Ungrouped vehicles are in this group.
Definition: group_type.h:17
GroupStatistics::num_engines
uint16 * num_engines
Caches the number of engines of each type the company owns.
Definition: group.h:28
GroupStatistics::GetAllGroup
static GroupStatistics & GetAllGroup(const Vehicle *v)
Returns the GroupStatistic for the ALL_GROUPO of a vehicle type.
Definition: group_cmd.cpp:92
GroupStatistics::profit_last_year_min_age
Money profit_last_year_min_age
Sum of profits for vehicles considered for profit statistics.
Definition: group.h:27
IsAllGroupID
static bool IsAllGroupID(GroupID id_g)
Checks if a GroupID stands for all vehicles of a company.
Definition: group.h:101
livery.h
Group::flags
uint8 flags
Group flags.
Definition: group.h:79
VehicleType
VehicleType
Available vehicle types.
Definition: vehicle_type.h:21
GroupStatistics::autoreplace_defined
bool autoreplace_defined
Are any autoreplace rules set?
Definition: group.h:31
vehicle_type.h
Pool
Base class for all pools.
Definition: pool_type.hpp:81
GroupID
uint16 GroupID
Type for all group identifiers.
Definition: group_type.h:13
engine_type.h
GroupStatistics::UpdateProfits
static void UpdateProfits()
Recompute the profits for all groups.
Definition: group_cmd.cpp:193
Group::name
std::string name
Group Name.
Definition: group.h:75
GetGroupNumEngines
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:775
GroupStatistics::Clear
void Clear()
Clear all caches.
Definition: group_cmd.cpp:43
OverflowSafeInt< int64 >
GetGroupNumVehicle
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:793
Group::folded
bool folded
NOSAVE: Is this group folded in the group view?
Definition: group.h:83
INVALID_COMPANY
@ INVALID_COMPANY
An invalid company.
Definition: company_type.h:30
pool_type.hpp
GF_REPLACE_WAGON_REMOVAL
@ GF_REPLACE_WAGON_REMOVAL
If set, autoreplace will perform wagon removal on vehicles in this group.
Definition: group.h:69
group_type.h
Pool::PoolItem
Base class for all PoolItems.
Definition: pool_type.hpp:234
Livery
Information about a particular livery.
Definition: livery.h:78
company_type.h
GroupStatistics::UpdateAfterLoad
static void UpdateAfterLoad()
Update all caches after loading a game, changing NewGRF, etc.
Definition: group_cmd.cpp:100
GroupStatistics::AddProfitLastYear
static void AddProfitLastYear(const Vehicle *v)
Add a vehicle's last year profit to the profit sum of its group.
Definition: group_cmd.cpp:167
GroupIsInGroup
bool GroupIsInGroup(GroupID search, GroupID group)
Test if GroupID group is a descendant of (or is) GroupID search.
Definition: group_cmd.cpp:850