Exemplo n.º 1
0
	bool Input::Update()
	{
		//check for exit
		if ( m_pHGE->Input_GetKeyState( HGEK_ESCAPE ) ) 
		{
			return true;
		}

		m_FrameInput.Clear();

		for( InputKeyVector::iterator iter( m_InputKeyVector.begin() ), endIter( m_InputKeyVector.end());
			 iter != endIter;
			 ++iter )
		{
			if( m_pHGE->Input_GetKeyState( (*iter).m_iHGEKeyMap) )
			{
				m_FrameInput.Actions[(*iter).m_eAction] = true;
			}
		}

		m_pHGE->Input_GetMousePos( &m_FrameInput.MousePosition[0], &m_FrameInput.MousePosition[1] );


		return false;
	}
int GetMiddleMax(const vector<int>& Array, const int Low,const int Mid, const int High)
{
	auto left_max = Array[Mid - 1];
	auto right_max = Array[Mid];

	std::reverse_iterator<decltype(Array.begin())> beginIter(Array.begin()+ Mid);
	std::reverse_iterator<decltype(Array.begin())> endIter(Array.begin() + Low);

	auto accumulater = [](auto&& beginIter,auto&& endIter,auto&& init,auto&& MaxDirect)
	{
		accumulate(beginIter, endIter, init, [&MaxDirect](auto&& Sum, auto&& Element)
		{
			Sum += Element;
			if(Sum > MaxDirect)
			{
				MaxDirect = Sum;
			}
			return Sum;
		});
		return MaxDirect;
	};
	return accumulater(beginIter, endIter, 0, left_max) + accumulater(Array.begin() + Mid, Array.begin() + High, 0, right_max);
}
Exemplo n.º 3
0
    ResearchTech getResearchTech(const PlayerTactics& playerTactics, TechTypes ignoreTechType)
    {
        TechSelectionData selectionData(playerTactics);

        // pure tech tactics ('first to tech' items, open borders, etc...)
        for (PlayerTactics::TechTacticsMap::const_iterator ci = playerTactics.techTacticsMap_.begin(), ciEnd = playerTactics.techTacticsMap_.end();
            ci != ciEnd; ++ci)
        {
            if (ci->second)
            {
                ci->second->apply(selectionData.tacticSelectionDataMap[DependencyItem(ResearchTechDependency::ID, ci->first)]);
            }
        }

        // buildings
        for (PlayerTactics::CityBuildingTacticsMap::const_iterator ci = playerTactics.cityBuildingTacticsMap_.begin(), 
            ciEnd = playerTactics.cityBuildingTacticsMap_.end(); ci != ciEnd; ++ci)
        {
            const CvCity* pCity = getCity(ci->first);
            const City& city = gGlobals.getGame().getAltAI()->getPlayer(pCity->getOwner())->getCity(pCity);

            for (PlayerTactics::CityBuildingTacticsList::const_iterator li(ci->second.begin()), liEnd(ci->second.end()); li != liEnd; ++li)
            {
                li->second->update(playerTactics.player, city.getCityData());
                li->second->apply(selectionData.tacticSelectionDataMap, IDependentTactic::Ignore_Techs);
            }
        }

        // units
        for (PlayerTactics::UnitTacticsMap::const_iterator iter(playerTactics.unitTacticsMap_.begin()),
            endIter(playerTactics.unitTacticsMap_.end()); iter != endIter; ++iter)
        {
            if (iter->second)
            {
                iter->second->update(playerTactics.player);
                iter->second->apply(selectionData.tacticSelectionDataMap, IDependentTactic::Ignore_Techs);
            }
        }

        // city improvements
        for (PlayerTactics::CityImprovementTacticsMap::const_iterator ci(playerTactics.cityImprovementTacticsMap_.begin()), ciEnd(playerTactics.cityImprovementTacticsMap_.end());
            ci != ciEnd; ++ci)
        {
            const CvCity* pCity = getCity(ci->first);
            if (pCity)
            {
                const City& city = playerTactics.player.getCity(pCity);
                TotalOutput base = city.getCurrentOutputProjection().getOutput();

                for (PlayerTactics::CityImprovementTacticsList::const_iterator li(ci->second.begin()), liEnd(ci->second.end()); li != liEnd; ++li)
                {
                    (*li)->update(playerTactics.player, city.getCityData());

                    const std::vector<ResearchTechDependencyPtr> techs = (*li)->getTechDependencies();
                    for (size_t i = 0, count = techs.size(); i < count; ++i)
                    {
                        selectionData.tacticSelectionDataMap[techs[i]->getDependencyItem()].cityImprovementsDelta +=
                            (*li)->getProjection().getOutput() - base;
                    }
                }
            }
        }

        // processes
        for (PlayerTactics::ProcessTacticsMap::const_iterator ci(playerTactics.processTacticsMap_.begin()), ciEnd(playerTactics.processTacticsMap_.end());
            ci != ciEnd; ++ci)
        {
            if (ci->second->areDependenciesSatisfied(playerTactics.player, IDependentTactic::Ignore_Techs))
            {
                CityIter iter(*playerTactics.player.getCvPlayer());
                TotalOutput processOutput;
                while (CvCity* pCity = iter())
                {
                    ProjectionLadder projection = ci->second->getProjection(pCity->getIDInfo());
                    processOutput += projection.getProcessOutput();
                }

                const std::vector<ResearchTechDependencyPtr>& techs = ci->second->getTechDependencies();
                for (size_t i = 0, count = techs.size(); i < count; ++i)
                {
                    selectionData.tacticSelectionDataMap[techs[i]->getDependencyItem()].
                        processOutputsMap[ci->second->getProcessType()] += processOutput;
                }
            }
        }

        selectionData.processTechs();
        if (ignoreTechType != NO_TECH)
        {
            //selectionData.removeTech(ignoreTechType);
        }
        selectionData.scoreTechs();
        selectionData.debug();

        return selectionData.getSelection();
    }