From: <geo...@us...> - 2010-05-29 08:11:20
|
Revision: 3610 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3610&view=rev Author: geoffthemedio Date: 2010-05-29 08:11:13 +0000 (Sat, 29 May 2010) Log Message: ----------- -Made ConditionBase::Match (and that of subclasses) public instead of private, so that a condition can be easily applied to a single object, which is useful for location conditions on BuildingType and FocusType, the use of which has been updated. -Added Dump function to Species and FocusType and fixed up BuildingType's Dump. -Changed Species to store a vector of FocusType instead of a map -Changed ResourceCenter (and thus Planet) to return a vector of available FocusType by value instead of const reference, since this needs to be recalculated each time due to the FocusType's location condition's result potentially changing -Removed testing "Admin" condition from species.txt -Removed FocusIcon function from InfoPanels.cpp and added it to ResourceCenter (virtual, and thus Planet) so that the FocusIcon for a particular name of focus for a particular species can be gotten from the FocusType directly, so that the graphics defined for FocusTypes in Species definitions can be used, and hard-coded icons by focus name in code aren't needed. -Grooming -Removed some unused monochrome focus icons Modified Paths: -------------- trunk/FreeOrion/UI/InfoPanels.cpp trunk/FreeOrion/default/species.txt trunk/FreeOrion/python/PythonUniverseWrapper.cpp trunk/FreeOrion/universe/Building.cpp trunk/FreeOrion/universe/Condition.h trunk/FreeOrion/universe/Planet.cpp trunk/FreeOrion/universe/Planet.h trunk/FreeOrion/universe/ResourceCenter.cpp trunk/FreeOrion/universe/ResourceCenter.h trunk/FreeOrion/universe/Species.cpp trunk/FreeOrion/universe/Species.h Removed Paths: ------------- trunk/FreeOrion/default/data/art/icons/farming_mono.png trunk/FreeOrion/default/data/art/icons/industry_mono.png trunk/FreeOrion/default/data/art/icons/mining_mono.png trunk/FreeOrion/default/data/art/icons/research_mono.png trunk/FreeOrion/default/data/art/icons/trade_mono.png Modified: trunk/FreeOrion/UI/InfoPanels.cpp =================================================================== --- trunk/FreeOrion/UI/InfoPanels.cpp 2010-05-29 05:33:58 UTC (rev 3609) +++ trunk/FreeOrion/UI/InfoPanels.cpp 2010-05-29 08:11:13 UTC (rev 3610) @@ -205,21 +205,6 @@ return retval; } - /** What icon to show for focus options. Probably to be replaced with something moddable. */ - boost::shared_ptr<GG::Texture> FocusIcon(const std::string& focus) { - if (focus == "FOCUS_FARMING") - return ClientUI::MeterIcon(METER_FARMING); - else if (focus == "FOCUS_MINING") - return ClientUI::MeterIcon(METER_MINING); - else if (focus == "FOCUS_INDUSTRY") - return ClientUI::MeterIcon(METER_INDUSTRY); - else if (focus == "FOCUS_RESEARCH") - return ClientUI::MeterIcon(METER_RESEARCH); - else if (focus == "FOCUS_TRADE") - return ClientUI::MeterIcon(METER_TRADE); - else - return ClientUI::MeterIcon(INVALID_METER_TYPE); - } } ///////////////////////////////////// @@ -515,7 +500,7 @@ const std::vector<std::string>& available_foci = res->AvailableFoci(); m_focus_drop = new CUIDropDownList(GG::X0, GG::Y0, MeterIconSize().x*4, MeterIconSize().y*3/2, MeterIconSize().y*19/2); for (std::vector<std::string>::const_iterator it = available_foci.begin(); it != available_foci.end(); ++it) { - boost::shared_ptr<GG::Texture> texture = FocusIcon(*it); + boost::shared_ptr<GG::Texture> texture = ClientUI::GetTexture(ClientUI::ArtDir() / res->FocusIcon(*it), true); graphic = new GG::StaticGraphic(GG::X0, GG::Y0, MeterIconSize().x*3/2, MeterIconSize().y*3/2, texture, GG::GRAPHIC_FITGRAPHIC | GG::GRAPHIC_PROPSCALE); row = new GG::DropDownList::Row(graphic->Width(), graphic->Height(), ""); row->push_back(dynamic_cast<GG::Control*>(graphic)); Deleted: trunk/FreeOrion/default/data/art/icons/farming_mono.png =================================================================== (Binary files differ) Deleted: trunk/FreeOrion/default/data/art/icons/industry_mono.png =================================================================== (Binary files differ) Deleted: trunk/FreeOrion/default/data/art/icons/mining_mono.png =================================================================== (Binary files differ) Deleted: trunk/FreeOrion/default/data/art/icons/research_mono.png =================================================================== (Binary files differ) Deleted: trunk/FreeOrion/default/data/art/icons/trade_mono.png =================================================================== (Binary files differ) Modified: trunk/FreeOrion/default/species.txt =================================================================== --- trunk/FreeOrion/default/species.txt 2010-05-29 05:33:58 UTC (rev 3609) +++ trunk/FreeOrion/default/species.txt 2010-05-29 08:11:13 UTC (rev 3610) @@ -37,13 +37,6 @@ description = "FOCUS_LOGISTICS_DESC" location = OwnerHasTech name = "SHP_FLEET_LOGISTICS" graphic = "icons/meter/supply.png" - - Focus - name = "FOCUS_ADMIN" - description = "FOCUS_ADMIN_DESC" - location = WithinStarlaneJumps jumps = 3 condition = - Building name = "BLD_IMPERIAL_PALACE" - graphic = "icons/meter/pop.png" ] effectsgroups = [ EffectsGroup Modified: trunk/FreeOrion/python/PythonUniverseWrapper.cpp =================================================================== --- trunk/FreeOrion/python/PythonUniverseWrapper.cpp 2010-05-29 05:33:58 UTC (rev 3609) +++ trunk/FreeOrion/python/PythonUniverseWrapper.cpp 2010-05-29 08:11:13 UTC (rev 3610) @@ -235,49 +235,47 @@ // ShipDesign // ////////////////// class_<ShipDesign, noncopyable>("shipDesign", no_init) - .add_property("id", make_function(&ShipDesign::ID, return_value_policy<return_by_value>())) - .def("name", make_function(&ShipDesign::Name, return_value_policy<copy_const_reference>())) - .add_property("description", make_function(&ShipDesign::Description, return_value_policy<copy_const_reference>())) - .add_property("designedByEmpireID", make_function(&ShipDesign::DesignedByEmpire, return_value_policy<return_by_value>())) - .add_property("designedOnTurn", make_function(&ShipDesign::DesignedOnTurn, return_value_policy<return_by_value>())) - .add_property("battleSpeed", make_function(&ShipDesign::BattleSpeed, return_value_policy<return_by_value>())) - .add_property("starlaneSpeed", make_function(&ShipDesign::StarlaneSpeed, return_value_policy<return_by_value>())) - .add_property("defense", make_function(&ShipDesign::Defense, return_value_policy<return_by_value>())) - .add_property("attack", make_function(&ShipDesign::Attack, return_value_policy<return_by_value>())) - .add_property("canColonize", make_function(&ShipDesign::CanColonize, return_value_policy<return_by_value>())) - .add_property("cost", make_function(&ShipDesign::Cost, return_value_policy<return_by_value>())) - .add_property("buildTime", make_function(&ShipDesign::BuildTime, return_value_policy<return_by_value>())) - .add_property("hull", make_function(&ShipDesign::Hull, return_value_policy<return_by_value>())) - .add_property("parts", make_function(PartsVoid, return_internal_reference<>())) - .def("partsInSlotType", PartsSlotType, return_value_policy<return_by_value>()) - //.add_property("graphic", make_function(&ShipDesign::Graphic, return_value_policy<copy_const_reference>())) - //.add_property("model", make_function(&ShipDesign::Model, return_value_policy<copy_const_reference>())) + .add_property("id", make_function(&ShipDesign::ID, return_value_policy<return_by_value>())) + .def("name", make_function(&ShipDesign::Name, return_value_policy<copy_const_reference>())) + .add_property("description", make_function(&ShipDesign::Description, return_value_policy<copy_const_reference>())) + .add_property("designedByEmpireID", make_function(&ShipDesign::DesignedByEmpire,return_value_policy<return_by_value>())) + .add_property("designedOnTurn", make_function(&ShipDesign::DesignedOnTurn, return_value_policy<return_by_value>())) + .add_property("battleSpeed", make_function(&ShipDesign::BattleSpeed, return_value_policy<return_by_value>())) + .add_property("starlaneSpeed", make_function(&ShipDesign::StarlaneSpeed, return_value_policy<return_by_value>())) + .add_property("defense", make_function(&ShipDesign::Defense, return_value_policy<return_by_value>())) + .add_property("attack", make_function(&ShipDesign::Attack, return_value_policy<return_by_value>())) + .add_property("canColonize", make_function(&ShipDesign::CanColonize, return_value_policy<return_by_value>())) + .add_property("cost", make_function(&ShipDesign::Cost, return_value_policy<return_by_value>())) + .add_property("buildTime", make_function(&ShipDesign::BuildTime, return_value_policy<return_by_value>())) + .add_property("hull", make_function(&ShipDesign::Hull, return_value_policy<return_by_value>())) + .add_property("parts", make_function(PartsVoid, return_internal_reference<>())) + .def("partsInSlotType", PartsSlotType, return_value_policy<return_by_value>()) .def("productionLocationForEmpire", &ShipDesign::ProductionLocation) ; def("validShipDesign", ValidDesignHullAndParts); def("validShipDesign", ValidDesignDesign); - def("getShipDesign", &GetShipDesign, return_value_policy<reference_existing_object>()); + def("getShipDesign", &GetShipDesign, return_value_policy<reference_existing_object>()); class_<PartType, noncopyable>("partType", no_init) - .add_property("name", make_function(&PartType::Name, return_value_policy<copy_const_reference>())) + .add_property("name", make_function(&PartType::Name, return_value_policy<copy_const_reference>())) .def("canMountInSlotType", &PartType::CanMountInSlotType) ; - def("getPartType", &GetPartType, return_value_policy<reference_existing_object>()); + def("getPartType", &GetPartType, return_value_policy<reference_existing_object>()); class_<HullType, noncopyable>("hullType", no_init) - .add_property("name", make_function(&HullType::Name, return_value_policy<copy_const_reference>())) - .add_property("numSlots", make_function(NumSlotsTotal, return_value_policy<return_by_value>())) + .add_property("name", make_function(&HullType::Name, return_value_policy<copy_const_reference>())) + .add_property("numSlots", make_function(NumSlotsTotal, return_value_policy<return_by_value>())) .def("numSlotsOfSlotType", NumSlotsOfSlotType) - .add_property("slots", make_function(&HullType::Slots, return_internal_reference<>())) + .add_property("slots", make_function(&HullType::Slots, return_internal_reference<>())) ; - def("getHullType", &GetHullType, return_value_policy<reference_existing_object>()); + def("getHullType", &GetHullType, return_value_policy<reference_existing_object>()); ////////////////// // Building // ////////////////// class_<Building, bases<UniverseObject>, noncopyable>("building", no_init) - .def("getBuildingType", &Building::GetBuildingType, return_value_policy<reference_existing_object>()) + .def("getBuildingType", &Building::GetBuildingType, return_value_policy<reference_existing_object>()) //.add_property("operating", &Building::Operating) .def("planetID", &Building::PlanetID) ; @@ -286,22 +284,22 @@ // BuildingType // ////////////////// class_<BuildingType, noncopyable>("buildingType", no_init) - .add_property("name", make_function(&BuildingType::Name, return_value_policy<copy_const_reference>())) - .add_property("description", make_function(&BuildingType::Description, return_value_policy<copy_const_reference>())) + .add_property("name", make_function(&BuildingType::Name, return_value_policy<copy_const_reference>())) + .add_property("description", make_function(&BuildingType::Description, return_value_policy<copy_const_reference>())) .add_property("buildCost", &BuildingType::BuildCost) .add_property("buildTime", &BuildingType::BuildTime) .add_property("maintenanceCost", &BuildingType::MaintenanceCost) .def("captureResult", &BuildingType::GetCaptureResult) ; - def("getBuildingType", &GetBuildingType, return_value_policy<reference_existing_object>()); + def("getBuildingType", &GetBuildingType, return_value_policy<reference_existing_object>()); //////////////////// // ResourceCenter // //////////////////// class_<ResourceCenter, noncopyable>("resourceCenter", no_init) - .add_property("focus", make_function(&ResourceCenter::Focus, return_value_policy<copy_const_reference>())) - .add_property("availableFoci", make_function(&ResourceCenter::AvailableFoci, return_internal_reference<>())) + .add_property("focus", make_function(&ResourceCenter::Focus, return_value_policy<copy_const_reference>())) + .add_property("availableFoci", &ResourceCenter::AvailableFoci) ; /////////////////// @@ -317,7 +315,7 @@ class_<Planet, bases<UniverseObject, PopCenter, ResourceCenter>, noncopyable>("planet", no_init) .add_property("size", &Planet::Size) .add_property("type", &Planet::Type) - .add_property("buildingIDs", make_function(&Planet::Buildings, return_internal_reference<>())) + .add_property("buildingIDs", make_function(&Planet::Buildings, return_internal_reference<>())) ; ////////////////// Modified: trunk/FreeOrion/universe/Building.cpp =================================================================== --- trunk/FreeOrion/universe/Building.cpp 2010-05-29 05:33:58 UTC (rev 3609) +++ trunk/FreeOrion/universe/Building.cpp 2010-05-29 08:11:13 UTC (rev 3610) @@ -226,6 +226,10 @@ retval += DumpIndent() + "buildcost = " + lexical_cast<std::string>(m_build_cost) + "\n"; retval += DumpIndent() + "buildtime = " + lexical_cast<std::string>(m_build_time) + "\n"; retval += DumpIndent() + "maintenancecost = " + lexical_cast<std::string>(m_maintenance_cost) + "\n"; + retval += DumpIndent() + "location = \n"; + ++g_indent; + retval += m_location->Dump(); + --g_indent; if (m_effects.size() == 1) { retval += DumpIndent() + "effectsgroups =\n"; ++g_indent; @@ -297,11 +301,7 @@ UniverseObject* source = objects.Object(empire->CapitolID()); if (!source) return false; - locations.insert(loc); - - m_location->Eval(source, locations, non_locations, Condition::TARGETS); - - return !(locations.empty()); + return m_location->Match(source, source); } CaptureResult BuildingType::GetCaptureResult(const std::set<int>& from_empire_ids, int to_empire_id, Modified: trunk/FreeOrion/universe/Condition.h =================================================================== --- trunk/FreeOrion/universe/Condition.h 2010-05-29 05:33:58 UTC (rev 3609) +++ trunk/FreeOrion/universe/Condition.h 2010-05-29 08:11:13 UTC (rev 3610) @@ -59,12 +59,12 @@ { ConditionBase(); virtual ~ConditionBase(); - virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; + virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; friend class boost::serialization::access; template <class Archive> @@ -78,7 +78,7 @@ { Number(const ValueRef::ValueRefBase<int>* low, const ValueRef::ValueRefBase<int>* high, const ConditionBase* condition); virtual ~Number(); - virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; + virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; @@ -97,9 +97,9 @@ { Turn(const ValueRef::ValueRefBase<int>* low, const ValueRef::ValueRefBase<int>* high); virtual ~Turn(); - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: const ValueRef::ValueRefBase<int>* m_low; @@ -116,7 +116,7 @@ { NumberOf(const ValueRef::ValueRefBase<int>* number, const ConditionBase* condition); virtual ~NumberOf(); - virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; + virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; @@ -133,7 +133,7 @@ struct Condition::All : Condition::ConditionBase { All(); - virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; + virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; @@ -151,9 +151,9 @@ virtual ~EmpireAffiliation(); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; const ValueRef::ValueRefBase<int>* m_empire_id; EmpireAffiliationType m_affiliation; bool m_exclusive; @@ -169,10 +169,9 @@ Self(); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; - friend class boost::serialization::access; template <class Archive> void serialize(Archive& ar, const unsigned int version); @@ -184,10 +183,9 @@ Homeworld(); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; - friend class boost::serialization::access; template <class Archive> void serialize(Archive& ar, const unsigned int version); @@ -199,10 +197,9 @@ Capitol(); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; - friend class boost::serialization::access; template <class Archive> void serialize(Archive& ar, const unsigned int version); @@ -214,9 +211,9 @@ Type(const ValueRef::ValueRefBase<UniverseObjectType>* type); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; const ValueRef::ValueRefBase<UniverseObjectType>* m_type; friend class boost::serialization::access; @@ -230,9 +227,9 @@ Building(const std::string& name); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; std::string m_name; friend class boost::serialization::access; @@ -248,9 +245,9 @@ HasSpecial(const std::string& name); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; std::string m_name; friend class boost::serialization::access; @@ -264,7 +261,7 @@ struct Condition::Contains : Condition::ConditionBase { Contains(const ConditionBase* condition); - virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; + virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; @@ -282,7 +279,7 @@ struct Condition::ContainedBy : Condition::ConditionBase { ContainedBy(const ConditionBase* condition); - virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; + virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; @@ -303,9 +300,9 @@ virtual ~PlanetType(); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; std::vector<const ValueRef::ValueRefBase< ::PlanetType>*> m_types; friend class boost::serialization::access; @@ -322,9 +319,9 @@ virtual ~PlanetSize(); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; std::vector<const ValueRef::ValueRefBase< ::PlanetSize>*> m_sizes; friend class boost::serialization::access; @@ -340,9 +337,9 @@ virtual ~PlanetEnvironment(); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; std::vector<const ValueRef::ValueRefBase< ::PlanetEnvironment>*> m_environments; friend class boost::serialization::access; @@ -356,9 +353,9 @@ FocusType(const std::string& focus); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; const std::string m_focus; friend class boost::serialization::access; @@ -374,9 +371,9 @@ virtual ~StarType(); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; std::vector<const ValueRef::ValueRefBase< ::StarType>*> m_types; friend class boost::serialization::access; @@ -390,9 +387,9 @@ DesignHasHull(const std::string& name); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; std::string m_name; friend class boost::serialization::access; @@ -408,9 +405,9 @@ virtual ~DesignHasPart(); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; const ValueRef::ValueRefBase<int>* m_low; const ValueRef::ValueRefBase<int>* m_high; std::string m_name; @@ -427,9 +424,9 @@ virtual ~Chance(); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; const ValueRef::ValueRefBase<double>* m_chance; friend class boost::serialization::access; @@ -445,9 +442,9 @@ virtual ~MeterValue(); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; MeterType m_meter; const ValueRef::ValueRefBase<double>* m_low; const ValueRef::ValueRefBase<double>* m_high; @@ -465,9 +462,9 @@ virtual ~EmpireStockpileValue(); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; ResourceType m_stockpile; const ValueRef::ValueRefBase<double>* m_low; const ValueRef::ValueRefBase<double>* m_high; @@ -483,9 +480,9 @@ OwnerHasTech(const std::string& name); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; std::string m_name; friend class boost::serialization::access; @@ -500,9 +497,9 @@ virtual ~VisibleToEmpire(); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; std::vector<const ValueRef::ValueRefBase<int>*> m_empire_ids; friend class boost::serialization::access; @@ -517,12 +514,12 @@ { WithinDistance(const ValueRef::ValueRefBase<double>* distance, const ConditionBase* condition); virtual ~WithinDistance(); - virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; + virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; const ValueRef::ValueRefBase<double>* m_distance; const ConditionBase* m_condition; @@ -538,12 +535,12 @@ { WithinStarlaneJumps(const ValueRef::ValueRefBase<int>* jumps, const ConditionBase* condition); virtual ~WithinStarlaneJumps(); - virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; + virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; const ValueRef::ValueRefBase<int>* m_jumps; const ConditionBase* m_condition; @@ -559,9 +556,9 @@ virtual ~ExploredByEmpire(); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; std::vector<const ValueRef::ValueRefBase<int>*> m_empire_ids; friend class boost::serialization::access; @@ -576,9 +573,9 @@ Stationary(); virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; + virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; private: - virtual bool Match(const UniverseObject* source, const UniverseObject* target) const; friend class boost::serialization::access; template <class Archive> @@ -590,7 +587,7 @@ { And(const std::vector<const ConditionBase*>& operands); virtual ~And(); - virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; + virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; @@ -607,7 +604,7 @@ { Or(const std::vector<const ConditionBase*>& operands); virtual ~Or(); - virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; + virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; @@ -624,7 +621,7 @@ { Not(const ConditionBase* operand); virtual ~Not(); - virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; + virtual void Eval(const UniverseObject* source, Condition::ObjectSet& targets, Condition::ObjectSet& non_targets, SearchDomain search_domain = NON_TARGETS) const; virtual std::string Description(bool negated = false) const; virtual std::string Dump() const; Modified: trunk/FreeOrion/universe/Planet.cpp =================================================================== --- trunk/FreeOrion/universe/Planet.cpp 2010-05-29 05:33:58 UTC (rev 3609) +++ trunk/FreeOrion/universe/Planet.cpp 2010-05-29 08:11:13 UTC (rev 3610) @@ -5,6 +5,8 @@ #include "Ship.h" #include "System.h" #include "Predicates.h" +#include "Species.h" +#include "Condition.h" #include "../util/AppInterface.h" #include "../util/MultiplayerCommon.h" #include "../util/OptionsDB.h" @@ -33,11 +35,7 @@ return 1.0; } - static const std::vector<std::string> FOCI = boost::assign::list_of("FOCUS_FARMING") - ("FOCUS_MINING") - ("FOCUS_INDUSTRY") - ("FOCUS_RESEARCH") - ("FOCUS_TRADE"); + static const std::string EMPTY_STRING; } @@ -263,12 +261,34 @@ } } -const std::vector<std::string>& Planet::AvailableFoci() const +std::vector<std::string> Planet::AvailableFoci() const { - // TODO: Get available Focus settings from species? - return FOCI; + std::vector<std::string> retval; + if (const Species* species = GetSpecies(this->SpeciesName())) { + const std::vector<FocusType>& foci = species->Foci(); + for (std::vector<FocusType>::const_iterator it = foci.begin(); it != foci.end(); ++it) { + const FocusType& focus_type = *it; + if (const Condition::ConditionBase* location = focus_type.Location()) + if (location->Match(this, this)) + retval.push_back(focus_type.Name()); + } + } + return retval; } +const std::string& Planet::FocusIcon(const std::string& focus_name) const +{ + if (const Species* species = GetSpecies(this->SpeciesName())) { + const std::vector<FocusType>& foci = species->Foci(); + for (std::vector<FocusType>::const_iterator it = foci.begin(); it != foci.end(); ++it) { + const FocusType& focus_type = *it; + if (focus_type.Name() == focus_name) + return focus_type.Graphic(); + } + } + return EMPTY_STRING; +} + void Planet::SetType(PlanetType type) { if (type <= INVALID_PLANET_TYPE) Modified: trunk/FreeOrion/universe/Planet.h =================================================================== --- trunk/FreeOrion/universe/Planet.h 2010-05-29 05:33:58 UTC (rev 3609) +++ trunk/FreeOrion/universe/Planet.h 2010-05-29 08:11:13 UTC (rev 3610) @@ -86,14 +86,14 @@ { public: /** \name Structors */ //@{ - Planet(); ///< default ctor - Planet(PlanetType type, PlanetSize size); ///< general ctor taking just the planet's type and size + Planet(); ///< default ctor + Planet(PlanetType type, PlanetSize size); ///< general ctor taking just the planet's type and size virtual Planet* Clone(int empire_id = ALL_EMPIRES) const; ///< returns new copy of this Planet //@} /** \name Accessors */ //@{ - virtual const std::string& TypeName() const; ///< returns user-readable string indicating the type of UniverseObject this is + virtual const std::string& TypeName() const; ///< returns user-readable string indicating the type of UniverseObject this is PlanetType Type() const {return m_type;} PlanetSize Size() const {return m_size;} @@ -107,22 +107,22 @@ const std::set<int>& Buildings() const {return m_buildings;} - double AvailableTrade() const; ///< returns the trade available at this planet for use in building maintenance - double BuildingCosts() const; ///< returns the cost in trade for the upkeep of all currently-enabled buildings + double AvailableTrade() const; ///< returns the trade available at this planet for use in building maintenance + double BuildingCosts() const; ///< returns the cost in trade for the upkeep of all currently-enabled buildings - virtual bool Contains(int object_id) const; ///< returns true iff this Planet contains a building with ID \a id. - virtual std::vector<UniverseObject*>FindObjects() const; ///< returns objects contained within this object - virtual std::vector<int> FindObjectIDs() const; ///< returns ids of objects contained within this object + virtual bool Contains(int object_id) const; ///< returns true iff this Planet contains a building with ID \a id. + virtual std::vector<UniverseObject*>FindObjects() const; ///< returns objects contained within this object + virtual std::vector<int> FindObjectIDs() const; ///< returns ids of objects contained within this object + virtual std::vector<std::string> AvailableFoci() const; + virtual const std::string& FocusIcon(const std::string& focus_name) const; + bool IsAboutToBeColonized() const {return m_is_about_to_be_colonized;} virtual UniverseObject* Accept(const UniverseObjectVisitor& visitor) const; virtual double CurrentMeterValue(MeterType type) const; virtual double NextTurnCurrentMeterValue(MeterType type) const; - - virtual const std::vector<std::string>& - AvailableFoci() const; //@} /** \name Mutators */ //@{ Modified: trunk/FreeOrion/universe/ResourceCenter.cpp =================================================================== --- trunk/FreeOrion/universe/ResourceCenter.cpp 2010-05-29 05:33:58 UTC (rev 3609) +++ trunk/FreeOrion/universe/ResourceCenter.cpp 2010-05-29 08:11:13 UTC (rev 3610) @@ -13,6 +13,10 @@ #include <stdexcept> +namespace { + static const std::string EMPTY_STRING; +} + ResourceCenter::ResourceCenter() : m_focus("") { @@ -63,12 +67,16 @@ return m_focus; } -const std::vector<std::string>& ResourceCenter::AvailableFoci() const +std::vector<std::string> ResourceCenter::AvailableFoci() const { - static const std::vector<std::string> EMPTY_VEC; - return EMPTY_VEC; + return std::vector<std::string>(); } +const std::string& ResourceCenter::FocusIcon(const std::string& focus_name) const +{ + return EMPTY_STRING; +} + double ResourceCenter::ResourceCenterNextTurnMeterValue(MeterType type) const { const Meter* meter = GetMeter(type); Modified: trunk/FreeOrion/universe/ResourceCenter.h =================================================================== --- trunk/FreeOrion/universe/ResourceCenter.h 2010-05-29 05:33:58 UTC (rev 3609) +++ trunk/FreeOrion/universe/ResourceCenter.h 2010-05-29 08:11:13 UTC (rev 3610) @@ -13,7 +13,6 @@ class Meter; class UniverseObject; - /** The ResourceCenter class is an abstract base class for anything in the * FreeOrion gamestate that generates resources (food, minerals, etc.). Most * likely, such an object will also be a subclass of UniverseObject. @@ -32,12 +31,12 @@ //@} /** \name Accessors */ //@{ - const std::string& Focus() const; ///< current focus to which this ResourceCenter is set - virtual const std::vector<std::string>& - AvailableFoci() const; ///< focus settings available to this ResourceCenter + const std::string& Focus() const; ///< current focus to which this ResourceCenter is set + virtual std::vector<std::string>AvailableFoci() const; ///< focus settings available to this ResourceCenter + virtual const std::string& FocusIcon(const std::string& focus_name) const; ///< icon representing focus with name \a focus_name for this ResourceCenter - virtual double CurrentMeterValue(MeterType type) const = 0; ///< implementation should return the current value of the specified meter \a type - virtual double NextTurnCurrentMeterValue(MeterType type) const = 0;///< implementation should return an estimate of the next turn's current value of the specified meter \a type + virtual double CurrentMeterValue(MeterType type) const = 0; ///< implementation should return the current value of the specified meter \a type + virtual double NextTurnCurrentMeterValue(MeterType type) const = 0; ///< implementation should return an estimate of the next turn's current value of the specified meter \a type mutable boost::signal<void ()> ResourceCenterChangedSignal; ///< the state changed signal object for this ResourceCenter //@} Modified: trunk/FreeOrion/universe/Species.cpp =================================================================== --- trunk/FreeOrion/universe/Species.cpp 2010-05-29 05:33:58 UTC (rev 3609) +++ trunk/FreeOrion/universe/Species.cpp 2010-05-29 08:11:13 UTC (rev 3610) @@ -1,209 +1,224 @@ -#include "Species.h" - -#include "ParserUtil.h" -#include "Effect.h" -#include "Condition.h" -#include "../util/MultiplayerCommon.h" -#include "../util/Directories.h" - -#include <boost/filesystem/fstream.hpp> - -std::string DumpIndent(); - -extern int g_indent; - -namespace { - struct store_species_impl - { - template <class T1, class T2> - struct result {typedef void type;}; - template <class T> - void operator()(std::map<std::string, Species*>& species_map, const T& species) const - { - if (species_map.find(species->Name()) != species_map.end()) { - std::string error_str = "ERROR: More than one building type in species.txt has the name " + species->Name(); - throw std::runtime_error(error_str.c_str()); - } - species_map[species->Name()] = species; - } - }; - - const phoenix::function<store_species_impl> store_species_; -} - - -///////////////////////////////////////////////// -// FocusType // -///////////////////////////////////////////////// -FocusType::FocusType() : - m_name(), - m_description(), - m_location(), - m_graphic() -{} - -FocusType::FocusType(const std::string& name, const std::string& description, - const Condition::ConditionBase* location, const std::string& graphic) : - m_name(name), - m_description(description), - m_location(location), - m_graphic(graphic) -{} - -const std::string& FocusType::Name() const { - return m_name; -} - -const std::string& FocusType::Description() const { - return m_description; -} - -const Condition::ConditionBase* FocusType::Location() const { - return m_location.get(); -} - -const std::string& FocusType::Graphic() const { - return m_graphic; -} - -///////////////////////////////////////////////// -// Species // -///////////////////////////////////////////////// -Species::Species(const std::string& name, const std::string& description, - const std::vector<FocusType>& foci, - const std::vector<boost::shared_ptr<const Effect::EffectsGroup> >& effects, - const std::string& graphic) : - m_name(name), - m_description(description), - m_foci(), - m_effects(effects), - m_graphic(graphic) -{ - for (std::vector<FocusType>::const_iterator it = foci.begin(); it != foci.end(); ++it) - m_foci[it->Name()] = *it; -} - -const std::string& Species::Name() const { - return m_name; -} - -const std::string& Species::Description() const { - return m_description; -} - -std::string Species::Dump() const { - std::string retval = DumpIndent() + "Species\n"; - ++g_indent; - retval += DumpIndent() + "name = \"" + m_name + "\"\n"; - retval += DumpIndent() + "description = \"" + m_description + "\"\n"; - if (m_foci.size() == 1) { - retval += DumpIndent() + "foci =\n"; - //... - } else { - retval += DumpIndent() + "foci = [\n"; - //... - retval += DumpIndent() + "]\n"; - } - if (m_effects.size() == 1) { - retval += DumpIndent() + "effectsgroups =\n"; - ++g_indent; - retval += m_effects[0]->Dump(); - --g_indent; - } else { - retval += DumpIndent() + "effectsgroups = [\n"; - ++g_indent; - for (unsigned int i = 0; i < m_effects.size(); ++i) { - retval += m_effects[i]->Dump(); - } - --g_indent; - retval += DumpIndent() + "]\n"; - } - retval += DumpIndent() + "graphic = \"" + m_graphic + "\"\n"; - --g_indent; - return retval; -} - -const std::map<std::string, FocusType>& Species::Foci() const -{ - return m_foci; -} - -const std::vector<boost::shared_ptr<const Effect::EffectsGroup> >& Species::Effects() const { - return m_effects; -} - -const std::string& Species::Graphic() const { - return m_graphic; -} - - -///////////////////////////////////////////////// -// SpeciesManager // -///////////////////////////////////////////////// -// static(s) -SpeciesManager* SpeciesManager::s_instance = 0; - -SpeciesManager::SpeciesManager() { - if (s_instance) - throw std::runtime_error("Attempted to create more than one SpeciesManager."); - - s_instance = this; - - std::string file_name = "species.txt"; - std::string input; - - boost::filesystem::ifstream ifs(GetResourceDir() / file_name); - if (ifs) { - std::getline(ifs, input, '\0'); - ifs.close(); - } else { - Logger().errorStream() << "Unable to open data file " << file_name; - return; - } - - using namespace boost::spirit::classic; - using namespace phoenix; - parse_info<const char*> result = - parse(input.c_str(), - as_lower_d[*species_p[store_species_(var(m_species), arg1)]] - >> end_p, - skip_p); - if (!result.full) - ReportError(input.c_str(), result); -} - -SpeciesManager::~SpeciesManager() { - for (std::map<std::string, Species*>::iterator it = m_species.begin(); it != m_species.end(); ++it) { - delete it->second; - } -} - -const Species* SpeciesManager::GetSpecies(const std::string& name) const { - std::map<std::string, Species*>::const_iterator it = m_species.find(name); - return it != m_species.end() ? it->second : 0; -} - -SpeciesManager& SpeciesManager::GetSpeciesManager() { - static SpeciesManager manager; - return manager; -} - -SpeciesManager::iterator SpeciesManager::begin() const { - return m_species.begin(); -} - -SpeciesManager::iterator SpeciesManager::end() const { - return m_species.end(); -} - - -/////////////////////////////////////////////////////////// -// Free Functions // -/////////////////////////////////////////////////////////// -SpeciesManager& GetSpeciesManager() { - return SpeciesManager::GetSpeciesManager(); -} - -const Species* GetSpecies(const std::string& name) { - return GetSpeciesManager().GetSpecies(name); -} +#include "Species.h" + +#include "ParserUtil.h" +#include "Effect.h" +#include "Condition.h" +#include "../util/MultiplayerCommon.h" +#include "../util/Directories.h" + +#include <boost/filesystem/fstream.hpp> + +std::string DumpIndent(); + +extern int g_indent; + +namespace { + struct store_species_impl + { + template <class T1, class T2> + struct result {typedef void type;}; + template <class T> + void operator()(std::map<std::string, Species*>& species_map, const T& species) const + { + if (species_map.find(species->Name()) != species_map.end()) { + std::string error_str = "ERROR: More than one building type in species.txt has the name " + species->Name(); + throw std::runtime_error(error_str.c_str()); + } + species_map[species->Name()] = species; + } + }; + + const phoenix::function<store_species_impl> store_species_; +} + + +///////////////////////////////////////////////// +// FocusType // +///////////////////////////////////////////////// +FocusType::FocusType() : + m_name(), + m_description(), + m_location(), + m_graphic() +{} + +FocusType::FocusType(const std::string& name, const std::string& description, + const Condition::ConditionBase* location, const std::string& graphic) : + m_name(name), + m_description(description), + m_location(location), + m_graphic(graphic) +{} + +const std::string& FocusType::Name() const { + return m_name; +} + +const std::string& FocusType::Description() const { + return m_description; +} + +const Condition::ConditionBase* FocusType::Location() const { + return m_location.get(); +} + +const std::string& FocusType::Graphic() const { + return m_graphic; +} + +std::string FocusType::Dump() const { + std::string retval = DumpIndent() + "FocusType\n"; + ++g_indent; + retval += DumpIndent() + "name = \"" + m_name + "\"\n"; + retval += DumpIndent() + "description = \"" + m_description + "\"\n"; + retval += DumpIndent() + "location = \n"; + ++g_indent; + retval += m_location->Dump(); + --g_indent; + retval += DumpIndent() + "graphic = \"" + m_graphic + "\"\n"; + --g_indent; + return retval; +} + +///////////////////////////////////////////////// +// Species // +///////////////////////////////////////////////// +Species::Species(const std::string& name, const std::string& description, + const std::vector<FocusType>& foci, + const std::vector<boost::shared_ptr<const Effect::EffectsGroup> >& effects, + const std::string& graphic) : + m_name(name), + m_description(description), + m_foci(foci), + m_effects(effects), + m_graphic(graphic) +{} + +const std::string& Species::Name() const { + return m_name; +} + +const std::string& Species::Description() const { + return m_description; +} + +std::string Species::Dump() const { + std::string retval = DumpIndent() + "Species\n"; + ++g_indent; + retval += DumpIndent() + "name = \"" + m_name + "\"\n"; + retval += DumpIndent() + "description = \"" + m_description + "\"\n"; + if (m_foci.size() == 1) { + retval += DumpIndent() + "foci =\n"; + m_foci.begin()->Dump(); + } else { + retval += DumpIndent() + "foci = [\n"; + ++g_indent; + for (std::vector<FocusType>::const_iterator it = m_foci.begin(); it != m_foci.end(); ++it) { + retval += it->Dump(); + } + --g_indent; + retval += DumpIndent() + "]\n"; + } + if (m_effects.size() == 1) { + retval += DumpIndent() + "effectsgroups =\n"; + ++g_indent; + retval += m_effects[0]->Dump(); + --g_indent; + } else { + retval += DumpIndent() + "effectsgroups = [\n"; + ++g_indent; + for (unsigned int i = 0; i < m_effects.size(); ++i) { + retval += m_effects[i]->Dump(); + } + --g_indent; + retval += DumpIndent() + "]\n"; + } + retval += DumpIndent() + "graphic = \"" + m_graphic + "\"\n"; + --g_indent; + return retval; +} + +const std::vector<FocusType>& Species::Foci() const +{ + return m_foci; +} + +const std::vector<boost::shared_ptr<const Effect::EffectsGroup> >& Species::Effects() const { + return m_effects; +} + +const std::string& Species::Graphic() const { + return m_graphic; +} + + +///////////////////////////////////////////////// +// SpeciesManager // +///////////////////////////////////////////////// +// static(s) +SpeciesManager* SpeciesManager::s_instance = 0; + +SpeciesManager::SpeciesManager() { + if (s_instance) + throw std::runtime_error("Attempted to create more than one SpeciesManager."); + + s_instance = this; + + std::string file_name = "species.txt"; + std::string input; + + boost::filesystem::ifstream ifs(GetResourceDir() / file_name); + if (ifs) { + std::getline(ifs, input, '\0'); + ifs.close(); + } else { + Logger().errorStream() << "Unable to open data file " << file_name; + return; + } + + using namespace boost::spirit::classic; + using namespace phoenix; + parse_info<const char*> result = + parse(input.c_str(), + as_lower_d[*species_p[store_species_(var(m_species), arg1)]] + >> end_p, + skip_p); + if (!result.full) + ReportError(input.c_str(), result); +} + +SpeciesManager::~SpeciesManager() { + for (std::map<std::string, Species*>::iterator it = m_species.begin(); it != m_species.end(); ++it) { + delete it->second; + } +} + +const Species* SpeciesManager::GetSpecies(const std::string& name) const { + std::map<std::string, Species*>::const_iterator it = m_species.find(name); + return it != m_species.end() ? it->second : 0; +} + +SpeciesManager& SpeciesManager::GetSpeciesManager() { + static SpeciesManager manager; + return manager; +} + +SpeciesManager::iterator SpeciesManager::begin() const { + return m_species.begin(); +} + +SpeciesManager::iterator SpeciesManager::end() const { + return m_species.end(); +} + + +/////////////////////////////////////////////////////////// +// Free Functions // +/////////////////////////////////////////////////////////// +SpeciesManager& GetSpeciesManager() { + return SpeciesManager::GetSpeciesManager(); +} + +const Species* GetSpecies(const std::string& name) { + return GetSpeciesManager().GetSpecies(name); +} Modified: trunk/FreeOrion/universe/Species.h =================================================================== --- trunk/FreeOrion/universe/Species.h 2010-05-29 05:33:58 UTC (rev 3609) +++ trunk/FreeOrion/universe/Species.h 2010-05-29 08:11:13 UTC (rev 3610) @@ -14,7 +14,6 @@ } namespace Effect { class EffectsGroup; - class EffectBase; } /** A setting that a ResourceCenter can be assigned to influence what it @@ -38,6 +37,7 @@ const std::string& Description() const;///< returns a text description of this focus type const Condition::ConditionBase* Location() const; ///< returns the condition that determines whether an UniverseObject can use this FocusType const std::string& Graphic() const; ///< returns the name of the grapic file for this focus type + std::string Dump() const; ///< returns a data file format representation of this object //@} private: @@ -64,23 +64,22 @@ //@} /** \name Accessors */ //@{ - const std::string& Name() const; ///< returns the unique name for this type of species - const std::string& Description() const;///< returns a text description of this type of species - std::string Dump() const; ///< returns a data file format representation of this object - const std::map<std::string, FocusType>& - Foci() const; ///< returns the focus types this species can use, indexed by name + const std::string& Name() const; ///< returns the unique name for this type of species + const std::string& Description() const;///< returns a text description of this type of species + std::string Dump() const; ///< returns a data file format representation of this object + const std::vector<FocusType>& Foci() const; ///< returns the focus types this species can use, indexed by name const std::vector<boost::shared_ptr<const Effect::EffectsGroup> >& - Effects() const; ///< returns the EffectsGroups that encapsulate the effects that species of this type have - const std::string& Graphic() const; ///< returns the name of the grapic file for this species + Effects() const; ///< returns the EffectsGroups that encapsulate the effects that species of this type have + const std::string& Graphic() const; ///< returns the name of the grapic file for this species //@} private: - std::string m_name; - std::string m_description; + std::string m_name; + std::string m_description; std::vector<boost::shared_ptr<const Effect::EffectsGroup> > - m_effects; - std::map<std::string, FocusType> m_foci; - std::string m_graphic; + m_effects; + std::vector<FocusType> m_foci; + std::string m_graphic; friend class boost::serialization::access; template <class Archive> |