IUnitTacticsPtr makeUnitTactics(const Player& player, const boost::shared_ptr<UnitInfo>& pUnitInfo) { const int lookAheadDepth = 2; if (couldConstructUnit(player, lookAheadDepth, pUnitInfo, true)) { const UnitTypes unitType = pUnitInfo->getUnitType(); const CvUnitInfo& unitInfo = gGlobals.getUnitInfo(unitType); IUnitTacticsPtr pTactic(new UnitTactic(unitType)); CityIter iter(*player.getCvPlayer()); while (CvCity* pCity = iter()) { #ifdef ALTAI_DEBUG CivLog::getLog(*player.getCvPlayer())->getStream() << "\n" << __FUNCTION__ << " Adding tactic for unit: " << unitInfo.getType(); #endif pTactic->addCityTactic(pCity->getIDInfo(), makeCityUnitTactics(player, player.getCity(pCity), pUnitInfo)); } MakeUnitTacticsDependenciesVisitor dependentTacticsVisitor(player, NULL); boost::apply_visitor(dependentTacticsVisitor, pUnitInfo->getInfo()); const std::vector<ResearchTechDependencyPtr>& dependentTechs = dependentTacticsVisitor.getTechDependencies(); for (size_t i = 0, count = dependentTechs.size(); i < count; ++i) { pTactic->addTechDependency(dependentTechs[i]); } return pTactic; } return IUnitTacticsPtr(); }
void operator() (const UnitInfo::BaseNode& node) { pTactic_ = ICityUnitTacticsPtr(new CityUnitTactic(unitType_, city_.getCvCity()->getIDInfo())); MakeUnitTacticsDependenciesVisitor dependentTacticsVisitor(player_, city_.getCvCity()); dependentTacticsVisitor(node); const std::vector<IDependentTacticPtr>& dependentTactics = dependentTacticsVisitor.getDependentTactics(); for (size_t i = 0, count = dependentTactics.size(); i < count; ++i) { pTactic_->addDependency(dependentTactics[i]); } for (size_t i = 0, count = node.nodes.size(); i < count; ++i) { boost::apply_visitor(*this, node.nodes[i]); } }
void operator() (const BuildingInfo::BaseNode& node) { pTactic_ = ICityBuildingTacticsPtr(new CityBuildingTactic(buildingType_, city_.getCvCity()->getIDInfo())); MakeBuildingTacticsDependenciesVisitor dependentTacticsVisitor(player_, city_, buildingType_); for (size_t i = 0, count = node.buildConditions.size(); i < count; ++i) { boost::apply_visitor(dependentTacticsVisitor, node.buildConditions[i]); } const std::vector<IDependentTacticPtr>& dependentTactics = dependentTacticsVisitor.getDependentTactics(); for (size_t i = 0, count = dependentTactics.size(); i < count; ++i) { pTactic_->addDependency(dependentTactics[i]); } for (size_t i = 0, count = node.nodes.size(); i < count; ++i) { boost::apply_visitor(*this, node.nodes[i]); } if (node.happy > 0) { pTactic_->addTactic(ICityBuildingTacticPtr(new HappyBuildingTactic())); isEconomic_ = true; } if (node.health > 0) { pTactic_->addTactic(ICityBuildingTacticPtr(new HealthBuildingTactic())); isEconomic_ = true; } if (isEconomic_) { pTactic_->addTactic(ICityBuildingTacticPtr(new EconomicBuildingTactic())); } for (size_t i = 0, count = node.techs.size(); i < count; ++i) { if (player_.getTechResearchDepth(node.techs[i]) > 0) { pTactic_->addTechDependency(ResearchTechDependencyPtr(new ResearchTechDependency(node.techs[i]))); } } }