From: <geo...@us...> - 2012-03-18 04:58:55
|
Revision: 4738 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4738&view=rev Author: geoffthemedio Date: 2012-03-18 04:58:49 +0000 (Sun, 18 Mar 2012) Log Message: ----------- Added "native" property to species, with parsing by a flag after Playable. Not yet used for anything or added to Species.txt. Modified Paths: -------------- trunk/FreeOrion/parse/SpeciesParser.cpp trunk/FreeOrion/universe/Names.h trunk/FreeOrion/universe/Species.cpp trunk/FreeOrion/universe/Species.h Modified: trunk/FreeOrion/parse/SpeciesParser.cpp =================================================================== --- trunk/FreeOrion/parse/SpeciesParser.cpp 2012-03-18 03:31:48 UTC (rev 4737) +++ trunk/FreeOrion/parse/SpeciesParser.cpp 2012-03-18 04:58:49 UTC (rev 4738) @@ -48,6 +48,7 @@ qi::_f_type _f; qi::_g_type _g; qi::_h_type _h; + qi::_i_type _i; qi::_r1_type _r1; qi::_val_type _val; using phoenix::construct; @@ -95,12 +96,14 @@ > parse::label(Name_name) > tok.string [ _a = _1 ] > parse::label(Description_name) > tok.string [ _b = _1 ] > -tok.Playable_ [ _c = true ] - > -tok.CanProduceShips_ [ _d = true ] - > -tok.CanColonize_ [ _e = true ] - > -foci(_f) - > -effects(_g) - > -environments(_h) - > parse::label(Graphic_name) > tok.string [ insert_species(_r1, new_<Species>(_a, _b, _f, _h, _g, _c, _e, _d, _1)) ] + > -tok.Native_ [ _d = true ] + > -tok.CanProduceShips_ [ _e = true ] + > -tok.CanColonize_ [ _f = true ] + > -foci(_g) + > -effects(_h) + > -environments(_i) + > parse::label(Graphic_name) > tok.string + [ insert_species(_r1, new_<Species>(_a, _b, _g, _i, _h, _c, _d, _f, _e, _1)) ] ; start @@ -181,6 +184,7 @@ bool, bool, bool, + bool, std::vector<FocusType>, std::vector<boost::shared_ptr<const Effect::EffectsGroup> >, std::map<PlanetType, PlanetEnvironment> Modified: trunk/FreeOrion/universe/Names.h =================================================================== --- trunk/FreeOrion/universe/Names.h 2012-03-18 03:31:48 UTC (rev 4737) +++ trunk/FreeOrion/universe/Names.h 2012-03-18 04:58:49 UTC (rev 4738) @@ -159,6 +159,7 @@ #define NAMES_SEQ_3 \ (Name) \ + (Native) \ (Neutron) \ (NextBetterPlanetType) \ (ClockwiseNextPlanetType) \ Modified: trunk/FreeOrion/universe/Species.cpp =================================================================== --- trunk/FreeOrion/universe/Species.cpp 2012-03-18 03:31:48 UTC (rev 4737) +++ trunk/FreeOrion/universe/Species.cpp 2012-03-18 04:58:49 UTC (rev 4738) @@ -69,6 +69,10 @@ ++g_indent; retval += DumpIndent() + "name = \"" + m_name + "\"\n"; retval += DumpIndent() + "description = \"" + m_description + "\"\n"; + if (m_playable) + retval += DumpIndent() + "Playable\n"; + if (m_native) + retval += DumpIndent() + "Native\n"; if (m_can_produce_ships) retval += DumpIndent() + "CanProduceShips\n"; if (m_can_colonize) @@ -199,18 +203,6 @@ return RingPreviousPlanetType(initial_planet_type); } -bool Species::Playable() const -{ return m_playable; } - -bool Species::CanColonize() const -{ return m_can_colonize; } - -bool Species::CanProduceShips() const -{ return m_can_produce_ships; } - -const std::string& Species::Graphic() const -{ return m_graphic; } - void Species::AddHomeworld(int homeworld_id) { if (!GetUniverseObject(homeworld_id)) Logger().debugStream() << "Species asked to add homeworld id " << homeworld_id << " but there is no such object in the Universe"; @@ -247,6 +239,10 @@ const std::map<std::string, Species*>::value_type& species_map_iterator) const { return species_map_iterator.second->Playable(); } +bool SpeciesManager::NativeSpecies::operator()( + const std::map<std::string, Species*>::value_type& species_map_iterator) const +{ return species_map_iterator.second->Native(); } + SpeciesManager::SpeciesManager() { if (s_instance) throw std::runtime_error("Attempted to create more than one SpeciesManager."); @@ -293,6 +289,12 @@ SpeciesManager::playable_iterator SpeciesManager::playable_end() const { return playable_iterator(PlayableSpecies(), m_species.end(), m_species.end()); } +SpeciesManager::native_iterator SpeciesManager::native_begin() const +{ return native_iterator(NativeSpecies(), m_species.begin(), m_species.end()); } + +SpeciesManager::native_iterator SpeciesManager::native_end() const +{ return native_iterator(NativeSpecies(), m_species.end(), m_species.end()); } + bool SpeciesManager::empty() const { return m_species.empty(); } @@ -302,6 +304,9 @@ int SpeciesManager::NumPlayableSpecies() const { return std::distance(playable_begin(), playable_end()); } +int SpeciesManager::NumNativeSpecies() const +{ return std::distance(native_begin(), native_end()); } + namespace { const std::string EMPTY_STRING; } Modified: trunk/FreeOrion/universe/Species.h =================================================================== --- trunk/FreeOrion/universe/Species.h 2012-03-18 03:31:48 UTC (rev 4737) +++ trunk/FreeOrion/universe/Species.h 2012-03-18 04:58:49 UTC (rev 4738) @@ -25,8 +25,7 @@ * target has a particular focus. By this method, techs or buildings or * species can act on planets or other ResourceCenters depending what their * focus setting is. */ -class FocusType -{ +class FocusType { public: /** \name Structors */ //@{ /** default ctor */ @@ -66,8 +65,7 @@ * properties that affect how the object on which they reside functions. * Each kind of Species must have a \a unique name string, by which it can be * looked up using GetSpecies(). */ -class Species -{ +class Species { public: /** \name Structors */ //@{ /** basic ctor */ @@ -75,7 +73,7 @@ const std::vector<FocusType>& foci, const std::map<PlanetType, PlanetEnvironment>& planet_environments, const std::vector<boost::shared_ptr<const Effect::EffectsGroup> >& effects, - bool playable, bool can_colonize, bool can_produce_ships, + bool playable, bool native, bool can_colonize, bool can_produce_ships, const std::string& graphic) : m_name(name), m_description(description), @@ -83,6 +81,7 @@ m_planet_environments(planet_environments), m_effects(effects), m_playable(playable), + m_native(native), m_can_colonize(can_colonize), m_can_produce_ships(can_produce_ships), m_graphic(graphic) @@ -98,11 +97,12 @@ const std::map<PlanetType, PlanetEnvironment>& PlanetEnvironments() const { return m_planet_environments; } ///< returns a map from PlanetType to the PlanetEnvironment this Species has on that PlanetType PlanetEnvironment GetPlanetEnvironment(PlanetType planet_type) const; ///< returns the PlanetEnvironment this species has on PlanetType \a planet_type PlanetType NextBetterPlanetType(PlanetType initial_planet_type) const; ///< returns the next better PlanetType for this species from the \a initial_planet_type specified - const std::vector<boost::shared_ptr<const Effect::EffectsGroup> >& Effects() const { return m_effects; } ///< returns the EffectsGroups that encapsulate the effects that species of this type have - bool Playable() const; ///< returns whether this species is a suitable starting species for players - bool CanColonize() const; ///< returns whether this species can colonize planets - bool CanProduceShips() const;///< returns whether this species can produce ships - const std::string& Graphic() const; ///< returns the name of the grapic file for this species + const std::vector<boost::shared_ptr<const Effect::EffectsGroup> >& Effects() const { return m_effects; }///< returns the EffectsGroups that encapsulate the effects that species of this type have + bool Playable() const { return m_playable; } ///< returns whether this species is a suitable starting species for players + bool Native() const { return m_native; } ///< returns whether this species is a suitable native species (for non player-controlled planets) + bool CanColonize() const { return m_can_colonize; } ///< returns whether this species can colonize planets + bool CanProduceShips() const { return m_can_produce_ships; } ///< returns whether this species can produce ships + const std::string& Graphic() const { return m_graphic; } ///< returns the name of the grapic file for this species //@} /** \name Mutators */ //@{ @@ -120,6 +120,7 @@ std::vector<boost::shared_ptr<const Effect::EffectsGroup> > m_effects; bool m_playable; + bool m_native; bool m_can_colonize; bool m_can_produce_ships; std::string m_graphic; @@ -127,14 +128,16 @@ /** Holds all FreeOrion species. Types may be looked up by name. */ -class SpeciesManager -{ +class SpeciesManager { private: struct PlayableSpecies { bool operator()(const std::map<std::string, Species*>::value_type& species_map_iterator) const; }; + struct NativeSpecies + { bool operator()(const std::map<std::string, Species*>::value_type& species_map_iterator) const; }; public: typedef std::map<std::string, Species*>::const_iterator iterator; typedef boost::filter_iterator<PlayableSpecies, iterator> playable_iterator; + typedef boost::filter_iterator<NativeSpecies, iterator> native_iterator; /** \name Accessors */ //@{ /** returns the building type with the name \a name; you should use the @@ -150,12 +153,17 @@ playable_iterator playable_begin() const; playable_iterator playable_end() const; + /** iterators for native species. */ + native_iterator native_begin() const; + native_iterator native_end() const; + /** returns true iff this SpeciesManager is empty. */ bool empty() const; /** returns the number of species stored in this manager. */ int NumSpecies() const; int NumPlayableSpecies() const; + int NumNativeSpecies() const; /** returns the name of a species in this manager, or an empty string if * this manager is empty. */ |