std::vector<std::string> Planet::AvailableFoci() const { std::vector<std::string> retval; TemporaryPtr<const Planet> this_planet = boost::dynamic_pointer_cast<const Planet>(TemporaryFromThis()); if (!this_planet) return retval; ScriptingContext context(this_planet); if (const Species* species = GetSpecies(this_planet->SpeciesName())) { for (const FocusType& focus_type : species->Foci()) { if (const Condition::ConditionBase* location = focus_type.Location()) { if (location->Eval(context, this_planet)) retval.push_back(focus_type.Name()); } } } return retval; }
TemporaryPtr<UniverseObject> UniverseObject::Accept(const UniverseObjectVisitor& visitor) const { return visitor.Visit(boost::const_pointer_cast<UniverseObject>(TemporaryFromThis()));}
TemporaryPtr<UniverseObject> Planet::Accept(const UniverseObjectVisitor& visitor) const { return visitor.Visit(boost::const_pointer_cast<Planet>(boost::static_pointer_cast<const Planet>(TemporaryFromThis()))); }