OpenTTD Source 20260206-master-g4d4e37dbf1
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

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

Variables

GroupPool _group_pool ("Group")

Detailed Description

Handling of the engine groups.

Definition in file group_cmd.cpp.

Function Documentation

◆ AddVehicleToGroup()

◆ CmdAddSharedVehicleGroup()

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

Add all shared vehicles of all vehicles from a group.

Parameters
flagstype of operation
id_gindex of group
typetype of vehicles
Returns
the cost of this operation or an error

Definition at line 627 of file group_cmd.cpp.

References _current_company, CMD_ERROR, Execute, Vehicle::FirstShared(), GetWindowClassForVehicleType(), InvalidateWindowData(), IsCompanyBuildableVehicleType(), Vehicle::NextShared(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), and VL_GROUP_LIST.

◆ CmdAddVehicleGroup()

std::tuple< CommandCost, GroupID > CmdAddVehicleGroup ( DoCommandFlags 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.
vliThe list of vehicles that should be added to the group (can be empty).
Returns
the cost of this operation or an error

Definition at line 562 of file group_cmd.cpp.

References _current_company, AddVehicleToGroup(), CMD_ERROR, CmdCreateGroup(), Execute, Vehicle::FirstShared(), GenerateVehicleSortList(), GetWindowClassForVehicleType(), InvalidateWindowData(), NEW_GROUP, Vehicle::NextShared(), Group::owner, SetWindowDirty(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), Vehicle::tile, GroupStatistics::UpdateAutoreplace(), Group::vehicle_type, VL_GROUP_LIST, WC_REPLACE_VEHICLE, and WC_VEHICLE_DEPOT.

◆ CmdAlterGroup()

◆ CmdCreateGroup()

◆ CmdDeleteGroup()

CommandCost CmdDeleteGroup ( DoCommandFlags flags,
GroupID group_id )

Add all vehicles in the given group to the default group and then deletes the group.

Parameters
flagstype of operation
group_idindex of group
Returns
the cost of this operation or an error

Definition at line 393 of file group_cmd.cpp.

References _current_company, Group::children, OrderBackup::ClearGroup(), CloseWindowById(), CMD_ERROR, Execute, GetWindowClassForVehicleType(), InvalidateWindowData(), Group::number, Group::owner, Group::parent, FreeUnitIDGenerator::ReleaseID(), RemoveEngineReplacementForCompany(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), Group::vehicle_type, VL_GROUP_LIST, WC_COMPANY_COLOUR, and WC_REPLACE_VEHICLE.

◆ CmdRemoveAllVehiclesGroup()

CommandCost CmdRemoveAllVehiclesGroup ( DoCommandFlags flags,
GroupID group_id )

Remove all vehicles from a group.

Parameters
flagstype of operation
group_idindex of group
Returns
the cost of this operation or an error

Definition at line 658 of file group_cmd.cpp.

References _current_company, CMD_ERROR, DEFAULT_GROUP, Execute, GetWindowClassForVehicleType(), InvalidateWindowData(), Group::owner, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), VehicleListIdentifier::ToWindowNumber(), Group::vehicle_type, and VL_GROUP_LIST.

◆ CmdSetGroupFlag()

CommandCost CmdSetGroupFlag ( DoCommandFlags flags,
GroupID group_id,
GroupFlag 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 745 of file group_cmd.cpp.

References _current_company, CMD_ERROR, Execute, GetWindowClassForVehicleType(), InvalidateWindowData(), Group::owner, ReplaceProtection, ReplaceWagonRemoval, SetGroupFlag(), SetWindowDirty(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), VehicleListIdentifier::ToWindowNumber(), Group::vehicle_type, VL_GROUP_LIST, and WC_REPLACE_VEHICLE.

◆ CmdSetGroupLivery()

CommandCost CmdSetGroupLivery ( DoCommandFlags 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 688 of file group_cmd.cpp.

References _current_company, CMD_ERROR, Livery::colour1, Livery::colour2, Execute, Livery::in_use, Group::livery, MarkWholeScreenDirty(), Group::owner, Livery::Primary, PropagateChildLivery(), Livery::Secondary, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Set(), and BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test().

◆ 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 822 of file group_cmd.cpp.

References Group::children, GroupStatistics::Get(), GetGroupNumEngines(), and GroupStatistics::GetNumEngines().

Referenced by DrawEngineList(), ReplaceVehicleWindow::GenerateReplaceVehList(), GetGroupNumEngines(), InvalidateAutoreplaceWindow(), NewVehicleAvailable(), ReplaceVehicleWindow::OnClick(), and GroupStatistics::UpdateAutoreplace().

◆ 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 843 of file group_cmd.cpp.

References Group::children, GroupStatistics::Get(), GetGroupNumVehicle(), and GroupStatistics::num_vehicle.

Referenced by VehicleGroupWindow::ComputeGroupInfoSize(), VehicleGroupWindow::DrawGroupInfo(), GetGroupNumVehicle(), and VehicleGroupWindow::GetWidgetString().

◆ 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 864 of file group_cmd.cpp.

References Group::children, GroupStatistics::Get(), GetGroupNumVehicleMinAge(), and GroupStatistics::num_vehicle_min_age.

Referenced by GetGroupNumVehicleMinAge(), and VehicleGroupWindow::GetGroupProfitSpriteID().

◆ 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 885 of file group_cmd.cpp.

References Group::children, GroupStatistics::Get(), GetGroupProfitLastYearMinAge(), and GroupStatistics::profit_last_year_min_age.

Referenced by GetGroupProfitLastYearMinAge(), and VehicleGroupWindow::GetGroupProfitSpriteID().

◆ GetParentLivery()

const Livery * GetParentLivery ( const Group * g)

Definition at line 285 of file group_cmd.cpp.

◆ 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 912 of file group_cmd.cpp.

Referenced by CmdAlterGroup(), GenerateVehicleSortList(), and GetEngineReplacement().

◆ PropagateChildLivery()

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 302 of file group_cmd.cpp.

References Group::children, Livery::colour1, Livery::colour2, Livery::in_use, Group::livery, Vehicle::Next(), Livery::Primary, PropagateChildLivery(), Livery::Secondary, and BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test().

Referenced by CmdAlterGroup(), CmdSetGroupLivery(), PropagateChildLivery(), and UpdateCompanyGroupLiveries().

◆ RemoveAllGroupsForCompany()

void RemoveAllGroupsForCompany ( const CompanyID company)

Definition at line 898 of file group_cmd.cpp.

◆ SetGroupFlag()

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

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

Parameters
ginitial group.
flagThe flag to set.
settrue to set or false to clear protection.
childrenWhether to propagate the change to the children.

Definition at line 721 of file group_cmd.cpp.

References Group::children, Group::flags, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Reset(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Set(), and SetGroupFlag().

Referenced by CmdSetGroupFlag(), and SetGroupFlag().

◆ 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 768 of file group_cmd.cpp.

References Vehicle::IsFrontEngine(), SpecializedVehicle< T, Type >::Next(), Vehicle::owner, SetWindowDirty(), GroupStatistics::UpdateAutoreplace(), UpdateNumEngineGroup(), VEH_TRAIN, and WC_REPLACE_VEHICLE.

Referenced by AddVehicleToGroup(), and CmdMoveRailVehicle().

◆ 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 329 of file group_cmd.cpp.

References Livery::colour1, Livery::colour2, Livery::in_use, Group::livery, Group::owner, Group::parent, Livery::Primary, PropagateChildLivery(), Livery::Secondary, and BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test().

Referenced by UpdateCompanyLiveries().

◆ UpdateGroupChildren()

void UpdateGroupChildren ( )

Update children list for each group.

Definition at line 47 of file group_cmd.cpp.

References Group::children, Debug, Group::owner, and Group::vehicle_type.

Referenced by AfterLoadGame().

◆ UpdateNumEngineGroup()

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 273 of file group_cmd.cpp.

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

Referenced by AddVehicleToGroup(), SetTrainGroupID(), and 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 796 of file group_cmd.cpp.

References DEFAULT_GROUP, Vehicle::group_id, GroundVehicle< T, Type >::IsFreeWagon(), Vehicle::IsFrontEngine(), SpecializedVehicle< T, Type >::Next(), Vehicle::owner, SetWindowDirty(), GroupStatistics::UpdateAutoreplace(), UpdateNumEngineGroup(), VEH_TRAIN, and WC_REPLACE_VEHICLE.

Referenced by CmdBuildRailVehicle(), CmdBuildRailWagon(), and NormaliseTrainHead().