OpenTTD Source
20240917-master-g9ab0a47812
|
Go to the documentation of this file.
23 #include "table/strings.h"
35 this->num_vehicle = 0;
36 this->profit_last_year = 0;
37 this->num_vehicle_min_age = 0;
38 this->profit_last_year_min_age = 0;
41 this->num_engines.clear();
52 if (found != std::end(this->
num_engines))
return found->second;
67 assert(g->
owner == company);
72 if (IsDefaultGroupID(id_g))
return Company::Get(company)->group_default[type];
106 c->group_all[type].Clear();
107 c->group_default[type].Clear();
113 g->statistics.Clear();
117 if (!v->IsEngineCountable())
continue;
135 assert(delta == 1 || delta == -1);
160 assert(delta == 1 || delta == -1);
199 c->group_all[type].ClearProfits();
200 c->group_default[type].ClearProfits();
206 g->statistics.ClearProfits();
210 if (v->IsPrimaryVehicle()) {
232 if (g->owner != company)
continue;
233 g->statistics.ClearAutoreplace();
256 if (old_g != new_g) {
270 return &c->livery[LS_DEFAULT];
288 if (v->group_id == g->
index && (!v->IsGroundVehicle() || v->IsFrontEngine())) {
289 for (
Vehicle *u = v; u !=
nullptr; u = u->
Next()) {
290 u->colourmap = PAL_NONE;
291 u->InvalidateNewGRFCache();
298 if (cg->parent == g->
index) {
322 Group::Group(
Owner owner)
392 if (gp->parent == g->
index) {
441 bool reset = text.empty();
474 const Livery *livery = GetParentLivery(g);
508 default: NOT_REACHED();
518 for (
Vehicle *u = v; u !=
nullptr; u = u->
Next()) {
519 u->colourmap = PAL_NONE;
520 u->InvalidateNewGRFCache();
521 u->UpdateViewport(
true);
552 for (
const Vehicle *v : list) {
564 if (ret.Failed())
return { ret, new_group_id };
566 new_g = new_group_id;
570 for (
const Vehicle *vc : list) {
614 if (v->type == type && v->IsPrimaryVehicle()) {
615 if (v->group_id != id_g)
continue;
646 if (v->IsPrimaryVehicle()) {
647 if (v->group_id != group_id)
continue;
673 if (colour >= COLOUR_END && colour != INVALID_COLOUR)
return CMD_ERROR;
678 if (colour == INVALID_COLOUR) colour = GetParentLivery(g)->
colour1;
682 if (colour == INVALID_COLOUR) colour = GetParentLivery(g)->
colour2;
706 if (!children)
return;
727 if (flag >= GroupFlags::GF_END)
return CMD_ERROR;
751 for (
Vehicle *u = v; u !=
nullptr; u = u->
Next()) {
755 u->colourmap = PAL_NONE;
756 u->InvalidateNewGRFCache();
757 u->UpdateViewport(
true);
778 for (
Vehicle *u = v; u !=
nullptr; u = u->
Next()) {
782 u->colourmap = PAL_NONE;
783 u->InvalidateNewGRFCache();
860 void RemoveAllGroupsForCompany(
const CompanyID company)
863 if (company == g->
owner)
delete g;
879 if (search == group)
return true;
debug_inline bool IsFrontEngine() const
Check if the vehicle is a front engine.
CommandCost CmdAddSharedVehicleGroup(DoCommandFlag flags, GroupID id_g, VehicleType type)
Add all shared vehicles of all vehicles from a group.
void InvalidateWindowData(WindowClass cls, WindowNumber number, int data, bool gui_scope)
Mark window data of the window of a given class and specific window number as invalid (in need of re-...
constexpr T SetBit(T &x, const uint8_t y)
Set a bit in a variable.
std::vector< const Vehicle * > VehicleList
A list of vehicles.
static Titem * Get(size_t index)
Returns Titem with given index.
void SetWindowDirty(WindowClass cls, WindowNumber number)
Mark window as dirty (in need of repainting)
static void CountEngine(const Vehicle *v, int delta)
Update num_engines when adding/removing an engine.
GroupStatistics group_all[VEH_COMPANY_END]
NOSAVE: Statistics for the ALL_GROUP group.
static Titem * GetIfValid(size_t index)
Returns Titem with given index.
static const CommandCost CMD_ERROR
Define a default return value for a failed command.
std::tuple< CommandCost, GroupID > CmdCreateGroup(DoCommandFlag flags, VehicleType vt, GroupID parent_group)
Create a new vehicle group.
CommandCost CmdDeleteGroup(DoCommandFlag flags, GroupID group_id)
Add all vehicles in the given group to the default group and then deletes the group.
bool IsEngineCountable() const
Check if a vehicle is counted in num_engines in each company struct.
The information about a vehicle list.
Vehicle * Next() const
Get the next vehicle of this vehicle.
T * Next() const
Get next vehicle in the chain.
@ WC_COMPANY_COLOUR
Company colour selection; Window numbers:
void CloseWindowById(WindowClass cls, WindowNumber number, bool force, int data)
Close a window by its class and window number (if it is open).
GroupID parent
Parent group.
Owner
Enum for all companies/owners.
Tindex index
Index of this pool item.
@ VEH_TRAIN
Train vehicle type.
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.
std::map< EngineID, uint16_t > num_engines
Caches the number of engines of each type the company owns.
GroupID group_id
Index of group Pool array.
static void UpdateNumEngineGroup(const Vehicle *v, GroupID old_g, GroupID new_g)
Update the num engines of a groupID.
static void CountVehicle(const Vehicle *v, int delta)
Update num_vehicle when adding or removing a vehicle.
static void VehicleReachedMinAge(const Vehicle *v)
Add a vehicle to the profit sum of its group.
bool autoreplace_finished
Have all autoreplacement finished?
@ VEH_ROAD
Road vehicle type.
Livery livery
Custom colour scheme for vehicles in this group.
static const uint MAX_LENGTH_GROUP_NAME_CHARS
The maximum length of a group name in characters including '\0'.
void ReleaseID(UnitID index)
Release a unit number.
Money profit_last_year
Sum of profits for all vehicles.
Owner owner
Which company owns the vehicle?
@ DC_EXEC
execute the given command
VehicleType vehicle_type
Vehicle type of the group.
static const GroupID NEW_GROUP
Sentinel for a to-be-created group.
DoCommandFlag
List of flags for a command.
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...
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.
static const GroupID ALL_GROUP
All vehicles are in this group.
UnitID UseID(UnitID index)
Use a unit number.
bool renew_keep_length
sell some wagons if after autoreplace the train is longer than before
size_t Utf8StringLength(const char *s)
Get the length of an UTF-8 encoded string in number of characters and thus not the number of bytes th...
Statistics and caches on the vehicles in a group.
#define return_cmd_error(errcode)
Returns from a function with a specific StringID as error.
static const GroupID INVALID_GROUP
Sentinel for invalid groups.
Common return value for all commands.
@ WC_VEHICLE_VIEW
Vehicle view; Window numbers:
uint8_t in_use
Bit 0 set if this livery should override the default livery first colour, Bit 1 for the second colour...
static void PropagateChildLivery(const Group *g, bool reset_cache)
Propagate a livery change to a group's children, and optionally update cached vehicle colourmaps.
GroupStatistics statistics
NOSAVE: Statistics and caches on the vehicles in the group.
GroupStatistics group_default[VEH_COMPANY_END]
NOSAVE: Statistics for the DEFAULT_GROUP group.
TileIndex tile
Current tile index.
static const VehicleID INVALID_VEHICLE
Constant representing a non-existing vehicle.
EngineID engine_type
The type of engine used for this vehicle.
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.
@ Rename
Change group name.
@ VEH_SHIP
Ship vehicle type.
@ WC_REPLACE_VEHICLE
Replace vehicle window; Window numbers:
bool IsCompanyBuildableVehicleType(VehicleType type)
Is the given vehicle type buildable by a company?
CompanySettings settings
settings specific for each company
@ WC_VEHICLE_DETAILS
Vehicle details; Window numbers:
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...
uint32_t Pack() const
Pack a VehicleListIdentifier in a single uint32.
bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli)
Generate a list of vehicles based on window type.
static void UpdateAutoreplace(CompanyID company)
Update autoreplace_defined and autoreplace_finished of all statistics of a company.
'Train' is either a loco or a wagon.
static GroupStatistics & Get(CompanyID company, GroupID id_g, VehicleType type)
Returns the GroupStatistics for a specific group.
static const GroupID DEFAULT_GROUP
Ungrouped vehicles are in this group.
static GroupStatistics & GetAllGroup(const Vehicle *v)
Returns the GroupStatistic for the ALL_GROUPO of a vehicle type.
Money profit_last_year_min_age
Sum of profits for vehicles considered for profit statistics.
uint32_t VehicleID
The type all our vehicle IDs have.
GroupPool _group_pool("Group")
Pool of groups.
Struct to store engine replacements.
CommandCost CmdRemoveAllVehiclesGroup(DoCommandFlag flags, GroupID group_id)
Remove all vehicles from a group.
uint16_t num_vehicle
Number of vehicles.
bool autoreplace_defined
Are any autoreplace rules set?
CommandCost CmdSetGroupFlag(DoCommandFlag flags, GroupID group_id, GroupFlags flag, bool value, bool recursive)
(Un)set group flag from a group
constexpr T AssignBit(T &x, const uint8_t y, bool value)
Assigns a bit in a variable.
CommandCost CmdSetGroupLivery(DoCommandFlag flags, GroupID group_id, bool primary, Colours colour)
Set the livery for a vehicle group.
bool IsAllGroupID(GroupID id_g)
Checks if a GroupID stands for all vehicles of a company.
Vehicle * FirstShared() const
Get the first vehicle of this vehicle chain.
CompanyID _current_company
Company currently doing an action.
static Pool::IterateWrapper< Titem > Iterate(size_t from=0)
Returns an iterable ensemble of all valid Titem.
Base class for all pools.
uint8_t flags
Group flags.
static void UpdateProfits()
Recompute the profits for all groups.
static void SetGroupFlag(Group *g, GroupFlags flag, bool set, bool children)
Set group flag for a group and its sub-groups.
static Train * From(Vehicle *v)
Converts a Vehicle to SpecializedVehicle with type checking.
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.
TimerGameEconomy::Date economy_age
Age in economy days.
void InvalidateWindowClassesData(WindowClass cls, int data, bool gui_scope)
Mark window data of all windows of a given class as invalid (in need of re-computing) Note that by de...
CommandCost CmdAlterGroup(DoCommandFlag flags, AlterGroupMode mode, GroupID group_id, GroupID parent_id, const std::string &text)
Alter a group.
Colours colour1
First colour, for all vehicles.
Vehicle * NextShared() const
Get the next vehicle of the shared vehicle chain.
bool GroupIsInGroup(GroupID search, GroupID group)
Test if GroupID group is a descendant of (or is) GroupID search.
@ WC_VEHICLE_DEPOT
Depot view; Window numbers:
static bool CanAllocateItem(size_t n=1)
Helper functions so we can use PoolItem::Function() instead of _poolitem_pool.Function()
UnitID NextID() const
Find first unused unit number.
static void ClearGroup(GroupID group)
Clear the group of all backups having this group ID.
uint16_t GroupID
Type for all group identifiers.
CommandCost RemoveEngineReplacementForCompany(Company *c, EngineID engine, GroupID group, DoCommandFlag flags)
Remove an engine replacement for the company.
std::string name
Group Name.
#define INSTANTIATE_POOL_METHODS(name)
Force instantiation of pool methods so we don't get linker errors.
void MarkWholeScreenDirty()
This function mark the whole screen as dirty.
VehicleType
Available vehicle types.
bool folded
NOSAVE: Is this group folded in the group view?
@ VEH_AIRCRAFT
Aircraft vehicle type.
uint16_t EngineID
Unique identification number of an engine.
bool IsFreeWagon() const
Check if the vehicle is a free wagon (got no engine in front of it).
@ MAX_COMPANIES
Maximum number of companies.
static bool IsValidID(size_t index)
Tests whether given index can be used to get valid (non-nullptr) Titem.
VehicleType type
Type of vehicle.
uint16_t GetNumEngines(EngineID engine) const
Get number of vehicles of a specific engine ID.
EngineRenewList engine_renew_list
Engine renewals of this company.
uint16_t number
Per-company group number.
static void AddVehicleToGroup(Vehicle *v, GroupID new_g)
Do add a vehicle to a group.
Colours colour2
Second colour, for vehicles with 2CC support.
constexpr T ClrBit(T &x, const uint8_t y)
Clears a bit in a variable.
void UpdateCompanyGroupLiveries(const Company *c)
Update group liveries for a company.
Information about a particular livery.
AlterGroupMode
Action for CmdAlterGroup.
static const TimerGameEconomy::Date VEHICLE_PROFIT_MIN_AGE
Only vehicles older than this have a meaningful profit.
Money GetDisplayProfitLastYear() const
Gets the profit vehicle had last year.
VehicleType type
Vehicle type, ie VEH_ROAD, VEH_TRAIN, etc.
static void UpdateAfterLoad()
Update all caches after loading a game, changing NewGRF, etc.
WindowClass GetWindowClassForVehicleType(VehicleType vt)
Get WindowClass for vehicle list of given vehicle type.
@ GF_REPLACE_WAGON_REMOVAL
If set, autoreplace will perform wagon removal on vehicles in this group.
@ VEH_COMPANY_END
Last company-ownable type.
static void AddProfitLastYear(const Vehicle *v)
Add a vehicle's last year profit to the profit sum of its group.
uint16_t num_vehicle_min_age
Number of vehicles considered for profit statistics;.
@ SetParent
Change group parent.
constexpr debug_inline bool HasBit(const T x, const uint8_t y)
Checks if a bit in a value is set.