company_base.h

Go to the documentation of this file.
00001 /* $Id: company_base.h 15903 2009-03-30 23:15:05Z rubidium $ */
00002 
00005 #ifndef COMPANY_BASE_H
00006 #define COMPANY_BASE_H
00007 
00008 #include "company_type.h"
00009 #include "oldpool.h"
00010 #include "road_type.h"
00011 #include "rail_type.h"
00012 #include "date_type.h"
00013 #include "engine_type.h"
00014 #include "livery.h"
00015 #include "autoreplace_type.h"
00016 #include "economy_type.h"
00017 #include "tile_type.h"
00018 
00019 struct CompanyEconomyEntry {
00020   Money income;
00021   Money expenses;
00022   int32 delivered_cargo;
00023   int32 performance_history; 
00024   Money company_value;
00025 };
00026 
00027 /* The third parameter and the number after >> MUST be the same,
00028  * otherwise more (or less) companies will be allowed to be
00029  * created than what MAX_COMPANIES specifies!
00030  */
00031 DECLARE_OLD_POOL(Company, Company, 1, (MAX_COMPANIES + 1) >> 1)
00032 
00033 struct Company : PoolItem<Company, CompanyByte, &_Company_pool> {
00034   Company(uint16 name_1 = 0, bool is_ai = false);
00035   ~Company();
00036 
00037   uint32 name_2;
00038   uint16 name_1;
00039   char *name;
00040 
00041   uint16 president_name_1;
00042   uint32 president_name_2;
00043   char *president_name;
00044 
00045   CompanyManagerFace face;
00046 
00047   Money money;
00048   byte money_fraction;
00049   Money current_loan;
00050 
00051   byte colour;
00052   Livery livery[LS_END];
00053   RailTypes avail_railtypes;
00054   RoadTypes avail_roadtypes;
00055   byte block_preview;
00056 
00057   uint32 cargo_types; 
00058 
00059   TileIndex location_of_HQ; 
00060   TileIndex last_build_coordinate;
00061 
00062   OwnerByte share_owners[4];
00063 
00064   Year inaugurated_year;
00065   byte num_valid_stat_ent;
00066 
00067   byte quarters_of_bankrupcy;
00068   CompanyMask bankrupt_asked; 
00069   int16 bankrupt_timeout;
00070   Money bankrupt_value;
00071 
00072   bool is_ai;
00073 
00074   class AIInstance *ai_instance;
00075   class AIInfo *ai_info;
00076 
00077   Money yearly_expenses[3][EXPENSES_END];
00078   CompanyEconomyEntry cur_economy;
00079   CompanyEconomyEntry old_economy[24];
00080   EngineRenewList engine_renew_list; 
00081   bool engine_renew;
00082   bool renew_keep_length;
00083   int16 engine_renew_months;
00084   uint32 engine_renew_money;
00085   uint16 *num_engines; 
00086 
00087   inline bool IsValid() const { return this->name_1 != 0; }
00088 };
00089 
00090 static inline bool IsValidCompanyID(CompanyID company)
00091 {
00092   return company < MAX_COMPANIES && (uint)company < GetCompanyPoolSize() && GetCompany(company)->IsValid();
00093 }
00094 
00095 #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())
00096 #define FOR_ALL_COMPANIES(d) FOR_ALL_COMPANIES_FROM(d, 0)
00097 
00098 static inline byte ActiveCompanyCount()
00099 {
00100   const Company *c;
00101   byte count = 0;
00102 
00103   FOR_ALL_COMPANIES(c) count++;
00104 
00105   return count;
00106 }
00107 
00108 Money CalculateCompanyValue(const Company *c);
00109 
00110 extern uint _next_competitor_start;
00111 extern uint _cur_company_tick_index;
00112 
00113 #endif /* COMPANY_BASE_H */

Generated on Wed Jun 3 19:05:09 2009 for OpenTTD by  doxygen 1.5.6