summaryrefslogtreecommitdiff
path: root/src/company_base.h
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2008-09-30 20:51:04 +0000
committerrubidium <rubidium@openttd.org>2008-09-30 20:51:04 +0000
commitb650a86e5859240e65d8654b5b08b211b2f33d7e (patch)
tree5cdc895449fdbe349dfb1703357a89cdea6cc5e0 /src/company_base.h
parent3b798599b63067c2e92aa49906ea66a07ae8de44 (diff)
downloadopenttd-b650a86e5859240e65d8654b5b08b211b2f33d7e.tar.xz
(svn r14422) -Codechange: also reflect the changes of r14421 in the filenames.
Diffstat (limited to 'src/company_base.h')
-rw-r--r--src/company_base.h107
1 files changed, 107 insertions, 0 deletions
diff --git a/src/company_base.h b/src/company_base.h
new file mode 100644
index 000000000..96603ca7b
--- /dev/null
+++ b/src/company_base.h
@@ -0,0 +1,107 @@
+/* $Id$ */
+
+/** @file company_base.h Definition of stuff that is very close to a company, like the company struct itself. */
+
+#ifndef COMPANY_BASE_H
+#define COMPANY_BASE_H
+
+#include "company_type.h"
+#include "oldpool.h"
+#include "road_type.h"
+#include "rail_type.h"
+#include "date_type.h"
+#include "engine_type.h"
+#include "livery.h"
+#include "autoreplace_type.h"
+#include "economy_type.h"
+#include "tile_type.h"
+
+struct CompanyEconomyEntry {
+ Money income;
+ Money expenses;
+ int32 delivered_cargo;
+ int32 performance_history; ///< company score (scale 0-1000)
+ Money company_value;
+};
+
+/* The third parameter and the number after >> MUST be the same,
+ * otherwise more (or less) companies will be allowed to be
+ * created than what MAX_COMPANIES specifies!
+ */
+DECLARE_OLD_POOL(Company, Company, 1, MAX_COMPANIES >> 1)
+
+struct Company : PoolItem<Company, CompanyByte, &_Company_pool> {
+ Company(uint16 name_1 = 0, bool is_ai = false);
+ ~Company();
+
+ uint32 name_2;
+ uint16 name_1;
+ char *name;
+
+ uint16 president_name_1;
+ uint32 president_name_2;
+ char *president_name;
+
+ CompanyManagerFace face;
+
+ Money money;
+ byte money_fraction;
+ Money current_loan;
+
+ byte colour;
+ Livery livery[LS_END];
+ RailTypes avail_railtypes;
+ RoadTypes avail_roadtypes;
+ byte block_preview;
+
+ uint32 cargo_types; ///< which cargo types were transported the last year
+
+ TileIndex location_of_HQ;
+ TileIndex last_build_coordinate;
+
+ OwnerByte share_owners[4];
+
+ Year inaugurated_year;
+ byte num_valid_stat_ent;
+
+ byte quarters_of_bankrupcy;
+ byte bankrupt_asked; ///< which companies were asked about buying it?
+ int16 bankrupt_timeout;
+ Money bankrupt_value;
+
+ bool is_ai;
+
+ Money yearly_expenses[3][EXPENSES_END];
+ CompanyEconomyEntry cur_economy;
+ CompanyEconomyEntry old_economy[24];
+ EngineRenewList engine_renew_list; ///< Defined later
+ bool engine_renew;
+ bool renew_keep_length;
+ int16 engine_renew_months;
+ uint32 engine_renew_money;
+ uint16 *num_engines; ///< caches the number of engines of each type the company owns (no need to save this)
+
+ inline bool IsValid() const { return this->name_1 != 0; }
+};
+
+static inline bool IsValidCompanyID(CompanyID company)
+{
+ return (uint)company < GetCompanyPoolSize() && GetCompany(company)->IsValid();
+}
+
+#define FOR_ALL_COMPANIES_FROM(d, start) for (d = GetCompany(start); d != NULL; d = (d->index + 1U < GetCompanyPoolSize()) ? GetCompany(d->index + 1U) : NULL) if (d->IsValid())
+#define FOR_ALL_COMPANIES(d) FOR_ALL_COMPANIES_FROM(d, 0)
+
+static inline byte ActiveCompanyCount()
+{
+ const Company *c;
+ byte count = 0;
+
+ FOR_ALL_COMPANIES(c) count++;
+
+ return count;
+}
+
+Money CalculateCompanyValue(const Company *c);
+
+#endif /* COMPANY_BASE_H */