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); }
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(); }