OpenTTD Source 20250312-master-gcdcc6b491d
company_base.h
Go to the documentation of this file.
1/*
2 * This file is part of OpenTTD.
3 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6 */
7
10#ifndef COMPANY_BASE_H
11#define COMPANY_BASE_H
12
13#include "road_type.h"
14#include "livery.h"
15#include "autoreplace_type.h"
16#include "tile_type.h"
18#include "settings_type.h"
19#include "group.h"
20
21static const Money COMPANY_MAX_LOAN_DEFAULT = INT64_MIN;
22
31
33 std::array<uint32_t, RAILTYPE_END> rail{};
34 std::array<uint32_t, ROADTYPE_END> road{};
35 uint32_t signal = 0;
36 uint32_t water = 0;
37 uint32_t station = 0;
38 uint32_t airport = 0;
39
40 auto operator<=>(const CompanyInfrastructure &) const = default;
41
43 uint32_t GetRailTotal() const
44 {
45 return std::accumulate(std::begin(this->rail), std::end(this->rail), 0U);
46 }
47
48 uint32_t GetRoadTotal() const;
49 uint32_t GetTramTotal() const;
50};
51
53public:
54 UnitID NextID() const;
55 UnitID UseID(UnitID index);
56 void ReleaseID(UnitID index);
57
58private:
59 using BitmapStorage = size_t;
60 static constexpr size_t BITMAP_SIZE = std::numeric_limits<BitmapStorage>::digits;
61
62 std::vector<BitmapStorage> used_bitmap{};
63};
64
66extern CompanyPool _company_pool;
67
70 uint32_t name_2 = 0;
72 std::string name{};
73
75 uint32_t president_name_2 = 0;
76 std::string president_name{};
77
79
81
83 uint8_t money_fraction = 0;
85 Money max_loan = COMPANY_MAX_LOAN_DEFAULT;
86
87 Colours colour = COLOUR_BEGIN;
88
89 uint8_t block_preview = 0;
90
93
96
97 uint8_t months_empty = 0;
100 int16_t bankrupt_timeout = 0;
101 Money bankrupt_value = 0;
102
103 uint32_t terraform_limit = 0;
104 uint32_t clear_limit = 0;
105 uint32_t tree_limit = 0;
106 uint32_t build_object_limit = 0;
107
112 bool is_ai = false;
113
114 std::array<Expenses, 3> yearly_expenses{};
116 std::array<CompanyEconomyEntry, MAX_HISTORY_QUARTERS> old_economy{};
117 uint8_t num_valid_stat_ent = 0;
118
119 std::array<Livery, LS_END> livery{};
120
123};
124
126 Company(StringID name_1 = STR_NULL, bool is_ai = false);
127 ~Company();
128
131
132 std::unique_ptr<class AIInstance> ai_instance{};
133 class AIInfo *ai_info = nullptr;
134 std::unique_ptr<class AIConfig> ai_config{};
135
136 std::array<GroupStatistics, VEH_COMPANY_END> group_all{};
137 std::array<GroupStatistics, VEH_COMPANY_END> group_default{};
138
140
141 std::array<FreeUnitIDGenerator, VEH_COMPANY_END> freeunits{};
142 FreeUnitIDGenerator freegroups{};
143
144 Money GetMaxLoan() const;
145
151 static inline bool IsValidAiID(auto index)
152 {
154 return c != nullptr && c->is_ai;
155 }
156
163 static inline bool IsValidHumanID(auto index)
164 {
166 return c != nullptr && !c->is_ai;
167 }
168
176 static inline bool IsHumanID(auto index)
177 {
178 return !Company::Get(index)->is_ai;
179 }
180
181 static void PostDestructor(size_t index);
182};
183
184Money CalculateCompanyValue(const Company *c, bool including_loan = true);
186
187extern uint _cur_company_tick_index;
188
189#endif /* COMPANY_BASE_H */
Types related to autoreplacing.
All static information from an AI like name, version, etc.
Definition ai_info.hpp:16
UnitID UseID(UnitID index)
Use a unit number.
Definition vehicle.cpp:1854
void ReleaseID(UnitID index)
Release a unit number.
Definition vehicle.cpp:1871
UnitID NextID() const
Find first unused unit number.
Definition vehicle.cpp:1839
Simple helper to (more easily) manage authorized keys.
Money CalculateHostileTakeoverValue(const Company *c)
Calculate what you have to pay to take over a company.
Definition economy.cpp:177
Money CalculateCompanyValue(const Company *c, bool including_loan=true)
Calculate the value of the company.
Definition economy.cpp:150
uint _cur_company_tick_index
used to generate a name for one company that doesn't have a name yet per tick
uint32_t CompanyManagerFace
Company manager face bits, info see in company_manager_face.h.
Base class for groups and group functions.
Functions/types related to livery colours.
RailTypes
Allow incrementing of Track variables.
Definition rail_type.h:44
Enums and other types related to roads.
RoadTypes
The different roadtypes we support, but then a bitmask of them.
Definition road_type.h:38
Types related to global configuration settings.
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
static const StringID INVALID_STRING_ID
Constant representing an invalid string (16bit in case it is used in savegames)
Class for storing amounts of cargo.
Definition cargo_type.h:113
Statistics about the economy.
Money income
The amount of income.
Money expenses
The amount of expenses.
Money company_value
The value of the company.
CargoArray delivered_cargo
The amount of delivered cargo.
int32_t performance_history
Company score (scale 0-1000)
std::array< uint32_t, ROADTYPE_END > road
Count of company owned track bits for each road type.
uint32_t GetRailTotal() const
Get total sum of all owned track bits.
uint32_t GetRoadTotal() const
Get total sum of all owned road bits.
uint32_t station
Count of company owned station tiles.
uint32_t signal
Count of company owned signals.
std::array< uint32_t, RAILTYPE_END > rail
Count of company owned track bits for each rail type.
uint32_t GetTramTotal() const
Get total sum of all owned tram bits.
uint32_t airport
Count of company owned airports.
uint32_t water
Count of company owned track bits for canals.
Statically loadable part of Company pool item.
TileIndex location_of_HQ
Northern tile of HQ; INVALID_TILE when there is none.
uint8_t months_of_bankruptcy
Number of months that the company is unable to pay its debts.
uint32_t clear_limit
Amount of tiles we can (still) clear (times 65536).
CompanyMask bankrupt_asked
which companies were asked about buying it?
std::string president_name
Name of the president if the user changed it.
int16_t bankrupt_timeout
If bigger than 0, amount of time to wait for an answer on an offer to buy this company.
CompanySettings settings
settings specific for each company
NetworkAuthorizedKeys allow_list
Public keys of clients that are allowed to join this company.
uint8_t months_empty
NOSAVE: Number of months this company has not had a client in multiplayer.
uint32_t build_object_limit
Amount of tiles we can (still) build objects on (times 65536). Also applies to buying land.
uint32_t name_2
Parameter of name_1.
uint8_t money_fraction
Fraction of money of the company, too small to represent in money.
bool is_ai
If true, the company is (also) controlled by the computer (a NoAI program).
uint32_t president_name_2
Parameter of president_name_1.
StringID name_1
Name of the company if the user did not change it.
Money current_loan
Amount of money borrowed from the bank.
TimerGameCalendar::Year inaugurated_year_calendar
Calendar year of starting the company. Used to display proper Inauguration year while in wallclock mo...
uint32_t terraform_limit
Amount of tileheights we can (still) terraform (times 65536).
TimerGameEconomy::Year inaugurated_year
Economy year of starting the company.
CompanyEconomyEntry cur_economy
Economic data of the company of this quarter.
Colours colour
Company colour.
uint32_t tree_limit
Amount of trees we can (still) plant (times 65536).
std::array< CompanyEconomyEntry, MAX_HISTORY_QUARTERS > old_economy
Economic data of the company of the last MAX_HISTORY_QUARTERS quarters.
CompanyManagerFace face
Face description of the president.
EngineRenewList engine_renew_list
Engine renewals of this company.
Money max_loan
Max allowed amount of the loan or COMPANY_MAX_LOAN_DEFAULT.
std::array< Expenses, 3 > yearly_expenses
Expenses of the company for the last three years.
TileIndex last_build_coordinate
Coordinate of the last build thing by this company.
StringID president_name_1
Name of the president if the user did not change it.
uint8_t block_preview
Number of quarters that the company is not allowed to get new exclusive engine previews (see Companie...
std::string name
Name of the company if the user changed it.
Money money
Money owned by the company.
uint8_t num_valid_stat_ent
Number of valid statistical entries in old_economy.
Settings that can be set per company.
Money GetMaxLoan() const
Calculate the max allowed loan for this company.
CompanyInfrastructure infrastructure
NOSAVE: Counts of company owned infrastructure.
std::array< GroupStatistics, VEH_COMPANY_END > group_default
NOSAVE: Statistics for the DEFAULT_GROUP group.
static bool IsHumanID(auto index)
Is this company a company not controlled by a NoAI program?
static bool IsValidAiID(auto index)
Is this company a valid company, controlled by the computer (a NoAI program)?
static bool IsValidHumanID(auto index)
Is this company a valid company, not controlled by a NoAI program?
std::array< GroupStatistics, VEH_COMPANY_END > group_all
NOSAVE: Statistics for the ALL_GROUP group.
RoadTypes avail_roadtypes
Road types available to this company.
~Company()
Destructor.
RailTypes avail_railtypes
Rail types available to this company.
static void PostDestructor(size_t index)
Invalidating some stuff after removing item from the pool.
Struct to store engine replacements.
Base class for all PoolItems.
static Titem * Get(auto index)
Returns Titem with given index.
Tindex index
Index of this pool item.
static Titem * GetIfValid(auto index)
Returns Titem with given index.
Base class for all pools.
Types related to tiles.
constexpr TileIndex INVALID_TILE
The very nice invalid tile marker.
Definition tile_type.h:95
Definition of the game-economy-timer.
uint16_t UnitID
Type for the company global vehicle unit number.