tron@2186: /* $Id$ */ tron@2186: rubidium@8750: /** @file player_base.h Definition of stuff that is very close to a player, like the player struct itself. */ belugas@6678: rubidium@8750: #ifndef PLAYER_BASE_H rubidium@8750: #define PLAYER_BASE_H truelight@0: rubidium@8732: #include "road_type.h" rubidium@8732: #include "rail_type.h" rubidium@8636: #include "date_type.h" peter1138@2573: #include "engine.h" peter1138@4603: #include "livery.h" rubidium@8708: #include "autoreplace_type.h" rubidium@8733: #include "economy_type.h" rubidium@8733: #include "tile_type.h" truelight@84: rubidium@6574: struct PlayerEconomyEntry { rubidium@7449: Money income; rubidium@7449: Money expenses; truelight@0: int32 delivered_cargo; belugas@6678: int32 performance_history; ///< player score (scale 0-1000) rubidium@7451: Money company_value; rubidium@6574: }; truelight@0: rubidium@6574: struct Player { truelight@0: uint32 name_2; truelight@0: uint16 name_1; peter1138@8754: char *name; truelight@0: truelight@0: uint16 president_name_1; truelight@0: uint32 president_name_2; peter1138@8754: char *president_name; truelight@0: rubidium@6516: PlayerFace face; truelight@0: rubidium@7451: Money player_money; rubidium@7449: Money current_loan; truelight@0: truelight@0: byte player_color; peter1138@4603: Livery livery[LS_END]; truelight@0: byte player_money_fraction; rubidium@8732: RailTypes avail_railtypes; rubidium@8732: RoadTypes avail_roadtypes; truelight@0: byte block_preview; rubidium@5838: PlayerByte index; truelight@0: belugas@6678: uint16 cargo_types; ///< which cargo types were transported the last year truelight@0: truelight@0: TileIndex location_of_house; truelight@0: TileIndex last_build_coordinate; truelight@145: rubidium@5838: PlayerByte share_owners[4]; truelight@145: rubidium@4326: Year inaugurated_year; truelight@0: byte num_valid_stat_ent; truelight@145: truelight@0: byte quarters_of_bankrupcy; belugas@6678: byte bankrupt_asked; ///< which players were asked about buying it? truelight@0: int16 bankrupt_timeout; rubidium@7449: Money bankrupt_value; truelight@0: truelight@0: bool is_active; Darkvater@3345: bool is_ai; truelight@145: rubidium@7451: Money yearly_expenses[3][13]; truelight@0: PlayerEconomyEntry cur_economy; truelight@0: PlayerEconomyEntry old_economy[24]; belugas@6678: EngineRenewList engine_renew_list; ///< Defined later bjarni@2293: bool engine_renew; bjarni@2617: bool renew_keep_length; bjarni@2293: int16 engine_renew_months; bjarni@2293: uint32 engine_renew_money; belugas@6678: uint16 num_engines[TOTAL_NUM_ENGINES]; ///< caches the number of engines of each type the player owns (no need to save this) rubidium@6574: }; truelight@0: rubidium@8750: extern Player _players[MAX_PLAYERS]; tron@2952: #define FOR_ALL_PLAYERS(p) for (p = _players; p != endof(_players); p++) truelight@0: rubidium@6573: static inline byte ActivePlayerCount() Darkvater@4824: { Darkvater@4824: const Player *p; Darkvater@4824: byte count = 0; Darkvater@4824: Darkvater@4824: FOR_ALL_PLAYERS(p) { Darkvater@4824: if (p->is_active) count++; Darkvater@4824: } Darkvater@4824: Darkvater@4824: return count; Darkvater@4824: } Darkvater@2944: rubidium@7814: static inline Player *GetPlayer(PlayerID i) tron@1767: { skidd13@8450: assert(IsInsideBS(i, PLAYER_FIRST, lengthof(_players))); Darkvater@2425: return &_players[i]; Darkvater@2425: } Darkvater@2425: rubidium@8750: Money CalculateCompanyValue(const Player *p); Darkvater@4845: rubidium@8750: #endif /* PLAYER_BASE_H */