00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #if !defined( __PLANET_H__ )
00016 #define __PLANET_H__
00017
00018 class Planet : public HPaint {
00019 private:
00020
00021 int id;
00022
00023 XRect area;
00024
00025 protected:
00026
00027 friend class Colony;
00028 friend class StarSystem;
00029 friend class Galaxy;
00030
00031 int ore , energy , soil , fauna , flora , lithium , deuterium;
00032
00033 StarSystem *&ss;
00034
00035 Colony *colony;
00036
00037 double humidity , surfaceTemperature , gravity , atmPressure , sunEnergy , water;
00038 double humidityTerraformedDelta , surfaceTemperatureTerraformedDelta , pressureTerraformedDelta;
00039
00040 public:
00041
00042 const int planetType;
00043 const int planetSize;
00044 const string planetName;
00045 const int planetNo;
00046
00047 static vector<Planet *> allPlanets;
00048
00049 Planet( StarSystem *&aSs , const string &aPlanetName , const int aPLanetType , const int aPlanetSize , const int aPlanetNo );
00050
00051 virtual ~Planet( void );
00052
00053 const int GetPlanetSize( void ) const { return 1 + planetSize; }
00054
00055 const bool DrawPlanet( XRect *plRect );
00056
00057 const int GetType( void ) const { return planetType; }
00058 const double GetSurfaceGravity( void ) const { return gravity; }
00059 const double GetTotalHumidity( void ) const { return humidity + humidityTerraformedDelta; }
00060 const double GetTotalSurfaceTemperature( void ) const { return surfaceTemperature + surfaceTemperatureTerraformedDelta; }
00061 const double GetTotalPressure( void ) const { return atmPressure + pressureTerraformedDelta; }
00062 const double GetSoil( void ) const { return soil + soil * (GetTotalHumidity() + (1 - GetSunFactor())) / 200.0; }
00063 const double GetSunFactor( void ) const { return sunEnergy; }
00064 const double GetOre( void ) const { return ore; }
00065 const double GetEnergy( void ) const { return energy; }
00066 const double GetFauna( void ) const { return fauna * GetFlora() / 100.0; }
00067 const double GetFlora( void ) const { return flora * (GetWater() + GetSoil()) / 200.0; }
00068 const double GetWater( void ) const { return water * GetTotalPressure() / 100.0 + GetTotalHumidity() / 10.0; }
00069 const double GetLithium( void ) const { return lithium + lithium * GetOre() / 100.0; }
00070 const double GetDeuterium( void ) const { return deuterium + deuterium * GetWater() / 100.0; }
00071
00073 const bool ClickedOn( const XPoint *p );
00074
00075 void Colonize( const icstring &aSpecies , const bool aHomeWorld = false );
00076 const bool IsColonized( void ) const { return colony != 0; }
00077
00078 const bool IsCompatible( SpeciesInfo *aPi );
00079
00080 const bool IsHomeWorldOf( const icstring &species );
00081
00082 const bool IsPlanetName( const char *aName ) const { return planetName == aName; }
00083 protected:
00084
00085 const bool Save( ofstream *of );
00086
00087 void Setup( void );
00088 };
00089
00090 #endif