OpenTTD Source  20241108-master-g80f628063a
group_cmd.cpp File Reference

Handling of the engine groups. More...

#include "stdafx.h"
#include "command_func.h"
#include "train.h"
#include "vehiclelist.h"
#include "vehicle_func.h"
#include "autoreplace_base.h"
#include "autoreplace_func.h"
#include "string_func.h"
#include "company_func.h"
#include "core/pool_func.hpp"
#include "order_backup.h"
#include "group_cmd.h"
#include "table/strings.h"
#include "safeguards.h"

Go to the source code of this file.

Functions

static void UpdateNumEngineGroup (const Vehicle *v, GroupID old_g, GroupID new_g)
 Update the num engines of a groupID. More...
 
const LiveryGetParentLivery (const Group *g)
 
static void PropagateChildLivery (const Group *g, bool reset_cache)
 Propagate a livery change to a group's children, and optionally update cached vehicle colourmaps. More...
 
void UpdateCompanyGroupLiveries (const Company *c)
 Update group liveries for a company. More...
 
std::tuple< CommandCost, GroupIDCmdCreateGroup (DoCommandFlag flags, VehicleType vt, GroupID parent_group)
 Create a new vehicle group. More...
 
CommandCost CmdDeleteGroup (DoCommandFlag flags, GroupID group_id)
 Add all vehicles in the given group to the default group and then deletes the group. More...
 
CommandCost CmdAlterGroup (DoCommandFlag flags, AlterGroupMode mode, GroupID group_id, GroupID parent_id, const std::string &text)
 Alter a group. More...
 
static void AddVehicleToGroup (Vehicle *v, GroupID new_g)
 Do add a vehicle to a group. More...
 
std::tuple< CommandCost, GroupIDCmdAddVehicleGroup (DoCommandFlag flags, GroupID group_id, VehicleID veh_id, bool add_shared, const VehicleListIdentifier &vli)
 Add a vehicle to a group. More...
 
CommandCost CmdAddSharedVehicleGroup (DoCommandFlag flags, GroupID id_g, VehicleType type)
 Add all shared vehicles of all vehicles from a group. More...
 
CommandCost CmdRemoveAllVehiclesGroup (DoCommandFlag flags, GroupID group_id)
 Remove all vehicles from a group. More...
 
CommandCost CmdSetGroupLivery (DoCommandFlag flags, GroupID group_id, bool primary, Colours colour)
 Set the livery for a vehicle group. More...
 
static void SetGroupFlag (Group *g, GroupFlags flag, bool set, bool children)
 Set group flag for a group and its sub-groups. More...
 
CommandCost CmdSetGroupFlag (DoCommandFlag flags, GroupID group_id, GroupFlags flag, bool value, bool recursive)
 (Un)set group flag from a group More...
 
void SetTrainGroupID (Train *v, GroupID new_g)
 Affect the groupID of a train to new_g. More...
 
void UpdateTrainGroupID (Train *v)
 Recalculates the groupID of a train. More...
 
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. More...
 
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. More...
 
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. More...
 
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-groups. More...
 
void RemoveAllGroupsForCompany (const CompanyID company)
 
bool GroupIsInGroup (GroupID search, GroupID group)
 Test if GroupID group is a descendant of (or is) GroupID search. More...
 

Variables

GroupPool _group_pool ("Group")
 

Detailed Description

Handling of the engine groups.

Definition in file group_cmd.cpp.

Function Documentation

◆ AddVehicleToGroup()

static void AddVehicleToGroup ( Vehicle v,
GroupID  new_g 
)
static

Do add a vehicle to a group.

Parameters
vVehicle to add.
new_gGroup to add to.

Definition at line 503 of file group_cmd.cpp.

References GroupStatistics::CountVehicle(), and BaseVehicle::type.

◆ CmdAddSharedVehicleGroup()

CommandCost CmdAddSharedVehicleGroup ( DoCommandFlag  flags,
GroupID  id_g,
VehicleType  type 
)

◆ CmdAddVehicleGroup()

std::tuple<CommandCost, GroupID> CmdAddVehicleGroup ( DoCommandFlag  flags,
GroupID  group_id,
VehicleID  veh_id,
bool  add_shared,
const VehicleListIdentifier vli 
)

Add a vehicle to a group.

Parameters
flagstype of operation
group_idindex of group
veh_idvehicle to add to a group
add_sharedAdd shared vehicles as well.
Returns
the cost of this operation or an error

Definition at line 537 of file group_cmd.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_group_pool >::IsValidID().

◆ CmdAlterGroup()

CommandCost CmdAlterGroup ( DoCommandFlag  flags,
AlterGroupMode  mode,
GroupID  group_id,
GroupID  parent_id,
const std::string &  text 
)

◆ CmdCreateGroup()

◆ CmdDeleteGroup()

◆ CmdRemoveAllVehiclesGroup()

◆ CmdSetGroupFlag()

CommandCost CmdSetGroupFlag ( DoCommandFlag  flags,
GroupID  group_id,
GroupFlags  flag,
bool  value,
bool  recursive 
)

(Un)set group flag from a group

Parameters
flagstype of operation
group_idindex of group array
flagflag to set, by value not bit.
valuevalue to set the flag to.
recursiveto apply to sub-groups.
Returns
the cost of this operation or an error

Definition at line 722 of file group_cmd.cpp.

References _current_company, CMD_ERROR, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_group_pool >::GetIfValid(), and Group::owner.

◆ CmdSetGroupLivery()

CommandCost CmdSetGroupLivery ( DoCommandFlag  flags,
GroupID  group_id,
bool  primary,
Colours  colour 
)

Set the livery for a vehicle group.

Parameters
flagsCommand flags.
group_idGroup ID.
primarySet primary instead of secondary colour
colourColour.

Definition at line 667 of file group_cmd.cpp.

References _current_company, CMD_ERROR, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_group_pool >::GetIfValid(), and Group::owner.

◆ 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.

Parameters
companyThe company the group belongs to
id_gThe GroupID of the group used
id_eThe EngineID of the engine to count
Returns
The number of engines with EngineID id_e in the group

Definition at line 799 of file group_cmd.cpp.

References GroupStatistics::Get(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_engine_pool >::Get(), GetGroupNumEngines(), GroupStatistics::GetNumEngines(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_group_pool >::Iterate(), Group::parent, and Engine::type.

Referenced by ReplaceVehicleWindow::GenerateReplaceVehList(), GetGroupNumEngines(), and InvalidateAutoreplaceWindow().

◆ 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.

Parameters
companyThe company the group belongs to
id_gThe GroupID of the group used
typeThe vehicle type of the group
Returns
The number of vehicles in the group

Definition at line 817 of file group_cmd.cpp.

References GroupStatistics::Get(), GetGroupNumVehicle(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_group_pool >::Iterate(), GroupStatistics::num_vehicle, and Group::parent.

Referenced by GetGroupNumVehicle().

◆ 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.

Parameters
companyThe company the group belongs to
id_gThe GroupID of the group used
typeThe vehicle type of the group
Returns
The number of vehicles above profit minimum age in the group

Definition at line 834 of file group_cmd.cpp.

References GroupStatistics::Get(), GetGroupNumVehicleMinAge(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_group_pool >::Iterate(), GroupStatistics::num_vehicle_min_age, and Group::parent.

Referenced by GetGroupNumVehicleMinAge().

◆ 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-groups.

Parameters
companyThe company the group belongs to
id_gThe GroupID of the group used
typeThe vehicle type of the group
Returns
Last year's profit of vehicles above minimum age for the group

Definition at line 851 of file group_cmd.cpp.

References GroupStatistics::Get(), GetGroupProfitLastYearMinAge(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_group_pool >::Iterate(), Group::parent, and GroupStatistics::profit_last_year_min_age.

Referenced by GetGroupProfitLastYearMinAge().

◆ GroupIsInGroup()

bool GroupIsInGroup ( GroupID  search,
GroupID  group 
)

Test if GroupID group is a descendant of (or is) GroupID search.

Parameters
searchThe GroupID to search in
groupThe GroupID to search for
Returns
True iff group is search or a descendant of search

Definition at line 874 of file group_cmd.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_group_pool >::Get(), INVALID_GROUP, and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_group_pool >::IsValidID().

Referenced by CmdAlterGroup(), and GetEngineReplacement().

◆ PropagateChildLivery()

static void PropagateChildLivery ( const Group g,
bool  reset_cache 
)
static

Propagate a livery change to a group's children, and optionally update cached vehicle colourmaps.

Parameters
gGroup to propagate colours to children.
reset_cacheReset colourmap of vehicles in this group.

Definition at line 283 of file group_cmd.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_vehicle_pool >::Iterate(), and Vehicle::Next().

◆ SetGroupFlag()

static void SetGroupFlag ( Group g,
GroupFlags  flag,
bool  set,
bool  children 
)
static

Set group flag for a group and its sub-groups.

Parameters
ginitial group.
set1 to set or 0 to clear protection.

Definition at line 698 of file group_cmd.cpp.

References ClrBit(), Group::flags, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_group_pool >::Iterate(), and SetBit().

◆ SetTrainGroupID()

void SetTrainGroupID ( Train v,
GroupID  new_g 
)

Affect the groupID of a train to new_g.

Note
called in CmdAddVehicleGroup and CmdMoveRailVehicle
Parameters
vFirst vehicle of the chain.
new_gindex of array group

Definition at line 745 of file group_cmd.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_group_pool >::IsValidID().

◆ UpdateCompanyGroupLiveries()

void UpdateCompanyGroupLiveries ( const Company c)

Update group liveries for a company.

This is called when the LS_DEFAULT scheme is changed, to update groups with colours set to default.

Parameters
cCompany to update.

Definition at line 311 of file group_cmd.cpp.

References Livery::colour1, HasBit(), Livery::in_use, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_GROUP, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_group_pool >::Iterate(), Group::livery, Group::owner, and Group::parent.

◆ UpdateNumEngineGroup()

static void UpdateNumEngineGroup ( const Vehicle v,
GroupID  old_g,
GroupID  new_g 
)
inlinestatic

Update the num engines of a groupID.

Decrease the old one and increase the new one

Note
called in SetTrainGroupID and UpdateTrainGroupID
Parameters
vVehicle we have to update
old_gindex of the old group
new_gindex of the new group

Definition at line 254 of file group_cmd.cpp.

References Vehicle::engine_type, GroupStatistics::Get(), GroupStatistics::num_engines, Vehicle::owner, and BaseVehicle::type.

Referenced by UpdateTrainGroupID().

◆ UpdateTrainGroupID()

void UpdateTrainGroupID ( Train v)

Recalculates the groupID of a train.

Should be called each time a vehicle is added to/removed from the chain,.

Note
this needs to be called too for 'wagon chains' (in the depot, without an engine)
Called in CmdBuildRailVehicle, CmdBuildRailWagon, CmdMoveRailVehicle, CmdSellRailWagon
Parameters
vFirst vehicle of the chain.

Definition at line 773 of file group_cmd.cpp.

References DEFAULT_GROUP, Vehicle::group_id, GroundVehicle< T, Type >::IsFreeWagon(), Vehicle::IsFrontEngine(), SpecializedVehicle< T, Type >::Next(), and UpdateNumEngineGroup().

Referenced by NormaliseTrainHead().