OpenTTD
Functions | Variables
group_cmd.cpp File Reference

Handling of the engine groups. More...

#include "stdafx.h"
#include "cmd_helper.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 "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...
 
CommandCost CmdCreateGroup (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Create a new vehicle group. More...
 
CommandCost CmdDeleteGroup (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Add all vehicles in the given group to the default group and then deletes the group. More...
 
static bool IsUniqueGroupNameForVehicleType (const char *name, VehicleType type)
 
CommandCost CmdAlterGroup (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Alter a group. More...
 
static void AddVehicleToGroup (Vehicle *v, GroupID new_g)
 Do add a vehicle to a group. More...
 
CommandCost CmdAddVehicleGroup (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Add a vehicle to a group. More...
 
CommandCost CmdAddSharedVehicleGroup (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Add all shared vehicles of all vehicles from a group. More...
 
CommandCost CmdRemoveAllVehiclesGroup (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 Remove all vehicles from a group. More...
 
static void SetGroupReplaceProtection (Group *g, bool protect)
 Set replace protection for a group and its sub-groups. More...
 
CommandCost CmdSetGroupReplaceProtection (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 (Un)set global replace protection from a group More...
 
void RemoveVehicleFromGroup (const Vehicle *v)
 Decrease the num_vehicle variable before delete an front engine 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...
 
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

GroupID _new_group_id
 
GroupPool _group_pool ("Group")
 Pool of groups.
 

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

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

◆ CmdAddSharedVehicleGroup()

CommandCost CmdAddSharedVehicleGroup ( TileIndex  tile,
DoCommandFlag  flags,
uint32  p1,
uint32  p2,
const char *  text 
)

Add all shared vehicles of all vehicles from a group.

Parameters
tileunused
flagstype of operation
p1index of group array
  • p1 bit 0-15 : GroupID
p2type of vehicles
textunused
Returns
the cost of this operation or an error

Definition at line 514 of file group_cmd.cpp.

References CMD_ADD_VEHICLE_GROUP, CMD_ERROR, DC_EXEC, DoCommand(), Vehicle::FirstShared(), FOR_ALL_VEHICLES, GetWindowClassForVehicleType(), Vehicle::group_id, InvalidateWindowData(), IsCompanyBuildableVehicleType(), Vehicle::IsPrimaryVehicle(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_group_pool >::IsValidID(), Vehicle::NextShared(), and BaseVehicle::type.

◆ CmdAddVehicleGroup()

CommandCost CmdAddVehicleGroup ( TileIndex  tile,
DoCommandFlag  flags,
uint32  p1,
uint32  p2,
const char *  text 
)

Add a vehicle to a group.

Parameters
tileunused
flagstype of operation
p1index of array group
  • p1 bit 0-15 : GroupID
p2vehicle to add to a group
  • p2 bit 0-19 : VehicleID
  • p2 bit 31 : Add shared vehicles as well.
textunused
Returns
the cost of this operation or an error

Definition at line 462 of file group_cmd.cpp.

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

◆ CmdAlterGroup()

CommandCost CmdAlterGroup ( TileIndex  tile,
DoCommandFlag  flags,
uint32  p1,
uint32  p2,
const char *  text 
)

Alter a group.

Parameters
tileunused
flagstype of operation
p1index of array group
  • p1 bit 0-15 : GroupID
  • p1 bit 16: 0 - Rename grouop 1 - Set group parent
p2parent group index
textthe new name or an empty string when resetting to the default
Returns
the cost of this operation or an error

Definition at line 377 of file group_cmd.cpp.

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

◆ CmdCreateGroup()

CommandCost CmdCreateGroup ( TileIndex  tile,
DoCommandFlag  flags,
uint32  p1,
uint32  p2,
const char *  text 
)

Create a new vehicle group.

Parameters
tileunused
flagstype of operation
p1vehicle type
p2unused
textunused
Returns
the cost of this operation or an error

Definition at line 279 of file group_cmd.cpp.

References _current_company, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_group_pool >::CanAllocateItem(), CMD_ERROR, DC_EXEC, INVALID_GROUP, IsCompanyBuildableVehicleType(), Group::parent, Group::replace_protection, and Group::vehicle_type.

◆ CmdDeleteGroup()

CommandCost CmdDeleteGroup ( TileIndex  tile,
DoCommandFlag  flags,
uint32  p1,
uint32  p2,
const char *  text 
)

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

Parameters
tileunused
flagstype of operation
p1index of array group
  • p1 bit 0-15 : GroupID
p2unused
textunused
Returns
the cost of this operation or an error

Definition at line 311 of file group_cmd.cpp.

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

◆ CmdRemoveAllVehiclesGroup()

CommandCost CmdRemoveAllVehiclesGroup ( TileIndex  tile,
DoCommandFlag  flags,
uint32  p1,
uint32  p2,
const char *  text 
)

◆ CmdSetGroupReplaceProtection()

CommandCost CmdSetGroupReplaceProtection ( TileIndex  tile,
DoCommandFlag  flags,
uint32  p1,
uint32  p2,
const char *  text 
)

(Un)set global replace protection from a group

Parameters
tileunused
flagstype of operation
p1index of group array
  • p1 bit 0-15 : GroupID
p2
  • p2 bit 0 : 1 to set or 0 to clear protection.
  • p2 bit 1 : 1 to apply to sub-groups.
textunused
Returns
the cost of this operation or an error

Definition at line 606 of file group_cmd.cpp.

References _current_company, CMD_ERROR, DC_EXEC, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_group_pool >::GetIfValid(), GetWindowClassForVehicleType(), HasBit(), Group::owner, Group::replace_protection, SetGroupReplaceProtection(), SetWindowDirty(), and Group::vehicle_type.

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

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

Referenced by InvalidateAutoreplaceWindow(), and IsAllGroupID().

◆ 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 720 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 GetEngineReplacement().

◆ RemoveVehicleFromGroup()

void RemoveVehicleFromGroup ( const Vehicle v)

Decrease the num_vehicle variable before delete an front engine from a group.

Note
Called in CmdSellRailWagon and DeleteLasWagon,
Parameters
vFrontEngine of the train we want to remove.

Definition at line 630 of file group_cmd.cpp.

References Vehicle::IsPrimaryVehicle().

Referenced by IsAllGroupID().

◆ SetGroupReplaceProtection()

static void SetGroupReplaceProtection ( Group g,
bool  protect 
)
static

Set replace protection for a group and its sub-groups.

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

Definition at line 584 of file group_cmd.cpp.

References Group::replace_protection.

Referenced by CmdSetGroupReplaceProtection().

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

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

Referenced by IsAllGroupID().

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

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

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

Referenced by IsAllGroupID(), and NormaliseTrainHead().