Exemplo n.º 1
0
    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();
    }
Exemplo n.º 2
0
        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]);
            }            
        }
Exemplo n.º 3
0
        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])));
                }
            }
        }