|
OpenTTD Source 20251117-master-g7398d2e290
|
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 Livery * | GetParentLivery (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") |
Handling of the engine groups.
Definition in file group_cmd.cpp.
Do add a vehicle to a group.
Definition at line 514 of file group_cmd.cpp.
References GroupStatistics::CountVehicle(), SpecializedVehicle< T, Type >::From(), Vehicle::group_id, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem< Tpool >::index, InvalidateWindowData(), Vehicle::IsEngineCountable(), Vehicle::Next(), SetTrainGroupID(), BaseVehicle::type, UpdateNumEngineGroup(), VEH_AIRCRAFT, VEH_ROAD, VEH_SHIP, VEH_TRAIN, WC_VEHICLE_DETAILS, and WC_VEHICLE_VIEW.
Referenced by CmdAddVehicleGroup().
| CommandCost CmdAddSharedVehicleGroup | ( | DoCommandFlags | flags, |
| GroupID | id_g, | ||
| VehicleType | type | ||
| ) |
Add all shared vehicles of all vehicles from a group.
| flags | type of operation |
| id_g | index of group |
| type | type of vehicles |
Definition at line 616 of file group_cmd.cpp.
References _current_company, CMD_ERROR, Execute, Vehicle::FirstShared(), GetWindowClassForVehicleType(), InvalidateWindowData(), IsCompanyBuildableVehicleType(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::IsValidID(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_vehicle_pool >::Iterate(), Vehicle::NextShared(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), and VL_GROUP_LIST.
| 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.
| flags | type of operation |
| group_id | index of group |
| veh_id | vehicle to add to a group |
| add_shared | Add shared vehicles as well. |
Definition at line 551 of file group_cmd.cpp.
References _current_company, AddVehicleToGroup(), CMD_ERROR, CmdCreateGroup(), Execute, Vehicle::FirstShared(), GenerateVehicleSortList(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_vehicle_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_vehicle_pool >::GetIfValid(), GetWindowClassForVehicleType(), InvalidateWindowData(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::IsValidID(), NEW_GROUP, 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.
| CommandCost CmdAlterGroup | ( | DoCommandFlags | flags, |
| AlterGroupMode | mode, | ||
| GroupID | group_id, | ||
| GroupID | parent_id, | ||
| const std::string & | text | ||
| ) |
Alter a group.
| flags | type of operation |
| mode | Operation to perform. |
| group_id | GroupID |
| parent_id | parent group index |
| text | the new name or an empty string when resetting to the default |
Definition at line 439 of file group_cmd.cpp.
References _current_company, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::All(), CMD_ERROR, Livery::colour1, Livery::colour2, Execute, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::GetIfValid(), GetWindowClassForVehicleType(), GroupIsInGroup(), Livery::in_use, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem< Tpool >::index, InvalidateWindowClassesData(), InvalidateWindowData(), Group::livery, MarkWholeScreenDirty(), MAX_LENGTH_GROUP_NAME_CHARS, Group::name, Group::owner, Group::parent, Livery::Primary, PropagateChildLivery(), Rename, Livery::Secondary, SetParent, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), VehicleListIdentifier::ToWindowNumber(), GroupStatistics::UpdateAutoreplace(), Utf8StringLength(), Group::vehicle_type, VL_GROUP_LIST, WC_COMPANY_COLOUR, WC_REPLACE_VEHICLE, WC_VEHICLE_DETAILS, and WC_VEHICLE_VIEW.
| std::tuple< CommandCost, GroupID > CmdCreateGroup | ( | DoCommandFlags | flags, |
| VehicleType | vt, | ||
| GroupID | parent_group | ||
| ) |
Create a new vehicle group.
| flags | type of operation |
| vt | vehicle type |
| parent_group | parent groupid |
Definition at line 339 of file group_cmd.cpp.
References _current_company, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::CanAllocateItem(), Group::children, CMD_ERROR, Livery::colour1, Livery::colour2, Execute, Group::flags, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_company_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::GetIfValid(), GetWindowClassForVehicleType(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem< Tpool >::index, InvalidateWindowData(), IsCompanyBuildableVehicleType(), Group::livery, FreeUnitIDGenerator::NextID(), Group::number, Group::owner, Group::parent, CompanySettings::renew_keep_length, ReplaceWagonRemoval, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Set(), CompanyProperties::settings, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), FreeUnitIDGenerator::UseID(), Group::vehicle_type, VL_GROUP_LIST, and WC_COMPANY_COLOUR.
Referenced by CmdAddVehicleGroup().
| CommandCost CmdDeleteGroup | ( | DoCommandFlags | flags, |
| GroupID | group_id | ||
| ) |
Add all vehicles in the given group to the default group and then deletes the group.
| flags | type of operation |
| group_id | index of group |
Definition at line 384 of file group_cmd.cpp.
References _current_company, Group::children, OrderBackup::ClearGroup(), CloseWindowById(), CMD_ERROR, Execute, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_company_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::GetIfValid(), GetWindowClassForVehicleType(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem< Tpool >::index, InvalidateWindowData(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_enginerenew_pool >::Iterate(), 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.
| CommandCost CmdRemoveAllVehiclesGroup | ( | DoCommandFlags | flags, |
| GroupID | group_id | ||
| ) |
Remove all vehicles from a group.
| flags | type of operation |
| group_id | index of group |
Definition at line 647 of file group_cmd.cpp.
References _current_company, CMD_ERROR, DEFAULT_GROUP, Execute, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::GetIfValid(), GetWindowClassForVehicleType(), InvalidateWindowData(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_vehicle_pool >::Iterate(), Group::owner, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), VehicleListIdentifier::ToWindowNumber(), Group::vehicle_type, and VL_GROUP_LIST.
| CommandCost CmdSetGroupFlag | ( | DoCommandFlags | flags, |
| GroupID | group_id, | ||
| GroupFlag | flag, | ||
| bool | value, | ||
| bool | recursive | ||
| ) |
(Un)set group flag from a group
| flags | type of operation |
| group_id | index of group array |
| flag | flag to set, by value not bit. |
| value | value to set the flag to. |
| recursive | to apply to sub-groups. |
Definition at line 732 of file group_cmd.cpp.
References _current_company, CMD_ERROR, Execute, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::GetIfValid(), 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.
| CommandCost CmdSetGroupLivery | ( | DoCommandFlags | flags, |
| GroupID | group_id, | ||
| bool | primary, | ||
| Colours | colour | ||
| ) |
Set the livery for a vehicle group.
| flags | Command flags. |
| group_id | Group ID. |
| primary | Set primary instead of secondary colour |
| colour | Colour. |
Definition at line 677 of file group_cmd.cpp.
References _current_company, CMD_ERROR, Livery::colour1, Livery::colour2, Execute, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::GetIfValid(), 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().
Get the number of engines with EngineID id_e in the group with GroupID id_g and its sub-groups.
| company | The company the group belongs to |
| id_g | The GroupID of the group used |
| id_e | The EngineID of the engine to count |
Definition at line 809 of file group_cmd.cpp.
References Group::children, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_engine_pool >::Get(), GroupStatistics::Get(), GetGroupNumEngines(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::GetIfValid(), and GroupStatistics::GetNumEngines().
Referenced by DrawEngineList(), ReplaceVehicleWindow::GenerateReplaceVehList(), GetGroupNumEngines(), InvalidateAutoreplaceWindow(), NewVehicleAvailable(), ReplaceVehicleWindow::OnClick(), and GroupStatistics::UpdateAutoreplace().
| 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.
| company | The company the group belongs to |
| id_g | The GroupID of the group used |
| type | The vehicle type of the group |
Definition at line 830 of file group_cmd.cpp.
References Group::children, GroupStatistics::Get(), GetGroupNumVehicle(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::GetIfValid(), and GroupStatistics::num_vehicle.
Referenced by VehicleGroupWindow::ComputeGroupInfoSize(), VehicleGroupWindow::DrawGroupInfo(), GetGroupNumVehicle(), and VehicleGroupWindow::GetWidgetString().
| 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.
| company | The company the group belongs to |
| id_g | The GroupID of the group used |
| type | The vehicle type of the group |
Definition at line 851 of file group_cmd.cpp.
References Group::children, GroupStatistics::Get(), GetGroupNumVehicleMinAge(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::GetIfValid(), and GroupStatistics::num_vehicle_min_age.
Referenced by VehicleGroupWindow::DrawGroupInfo(), and GetGroupNumVehicleMinAge().
| 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.
| company | The company the group belongs to |
| id_g | The GroupID of the group used |
| type | The vehicle type of the group |
Definition at line 872 of file group_cmd.cpp.
References Group::children, GroupStatistics::Get(), GetGroupProfitLastYearMinAge(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::GetIfValid(), and GroupStatistics::profit_last_year_min_age.
Referenced by VehicleGroupWindow::DrawGroupInfo(), and GetGroupProfitLastYearMinAge().
Definition at line 276 of file group_cmd.cpp.
Test if GroupID group is a descendant of (or is) GroupID search.
| search | The GroupID to search in |
| group | The GroupID to search for |
Definition at line 899 of file group_cmd.cpp.
References Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::Get(), and Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::IsValidID().
Referenced by CmdAlterGroup(), GenerateVehicleSortList(), and GetEngineReplacement().
|
static |
Propagate a livery change to a group's children, and optionally update cached vehicle colourmaps.
| g | Group to propagate colours to children. |
| reset_cache | Reset colourmap of vehicles in this group. |
Definition at line 293 of file group_cmd.cpp.
References Group::children, Livery::colour1, Livery::colour2, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::Get(), Livery::in_use, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem< Tpool >::index, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_vehicle_pool >::Iterate(), Group::livery, Vehicle::Next(), Livery::Primary, PropagateChildLivery(), Livery::Secondary, and BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test().
Referenced by CmdAlterGroup(), CmdSetGroupLivery(), PropagateChildLivery(), and UpdateCompanyGroupLiveries().
| void RemoveAllGroupsForCompany | ( | const CompanyID | company | ) |
Definition at line 885 of file group_cmd.cpp.
Set group flag for a group and its sub-groups.
| g | initial group. |
| set | 1 to set or 0 to clear protection. |
Definition at line 708 of file group_cmd.cpp.
References Group::children, Group::flags, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::Get(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Reset(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Set(), and SetGroupFlag().
Referenced by CmdSetGroupFlag(), and SetGroupFlag().
Affect the groupID of a train to new_g.
| v | First vehicle of the chain. |
| new_g | index of array group |
Definition at line 755 of file group_cmd.cpp.
References Vehicle::IsFrontEngine(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::IsValidID(), SpecializedVehicle< T, Type >::Next(), Vehicle::owner, SetWindowDirty(), GroupStatistics::UpdateAutoreplace(), UpdateNumEngineGroup(), VEH_TRAIN, and WC_REPLACE_VEHICLE.
Referenced by AddVehicleToGroup(), and CmdMoveRailVehicle().
| 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.
| c | Company to update. |
Definition at line 320 of file group_cmd.cpp.
References Livery::colour1, Livery::colour2, Livery::in_use, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem< Tpool >::index, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::Iterate(), Group::livery, Group::owner, Group::parent, Livery::Primary, PropagateChildLivery(), Livery::Secondary, and BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test().
Referenced by UpdateCompanyLiveries().
| void UpdateGroupChildren | ( | ) |
Update children list for each group.
Definition at line 47 of file group_cmd.cpp.
References Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::Get(), and Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_group_pool >::Iterate().
Referenced by AfterLoadGame().
Update the num engines of a groupID.
Decrease the old one and increase the new one
| v | Vehicle we have to update |
| old_g | index of the old group |
| new_g | index of the new group |
Definition at line 264 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().
| void UpdateTrainGroupID | ( | Train * | v | ) |
Recalculates the groupID of a train.
Should be called each time a vehicle is added to/removed from the chain,.
| v | First vehicle of the chain. |
Definition at line 783 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().