* Add a ResearchProject to the list of already discovered ResearchProject * @param r The newly found ResearchProject * @param ruleset the game Ruleset */
| 899 | * @param ruleset the game Ruleset |
| 900 | */ |
| 901 | void SavedGame::addFinishedResearch (const RuleResearch * r, const Ruleset * ruleset) |
| 902 | { |
| 903 | std::vector<const RuleResearch *>::const_iterator itDiscovered = std::find(_discovered.begin (), _discovered.end (), r); |
| 904 | if(itDiscovered == _discovered.end()) |
| 905 | { |
| 906 | _discovered.push_back(r); |
| 907 | removePoppedResearch(r); |
| 908 | addResearchScore(r->getPoints()); |
| 909 | } |
| 910 | if(ruleset) |
| 911 | { |
| 912 | std::vector<RuleResearch*> availableResearch; |
| 913 | for(std::vector<Base*>::const_iterator it = _bases.begin (); it != _bases.end (); ++it) |
| 914 | { |
| 915 | getDependableResearchBasic(availableResearch, r, ruleset, *it); |
| 916 | } |
| 917 | for(std::vector<RuleResearch*>::iterator it = availableResearch.begin (); it != availableResearch.end (); ++it) |
| 918 | { |
| 919 | if((*it)->getCost() == 0 && (*it)->getRequirements().empty()) |
| 920 | { |
| 921 | addFinishedResearch(*it, ruleset); |
| 922 | } |
| 923 | else if((*it)->getCost() == 0) |
| 924 | { |
| 925 | int entry(0); |
| 926 | for(std::vector<std::string>::const_iterator iter = (*it)->getRequirements().begin (); iter != (*it)->getRequirements().end (); ++iter) |
| 927 | { |
| 928 | if((*it)->getRequirements().at(entry) == (*iter)) |
| 929 | { |
| 930 | addFinishedResearch(*it, ruleset); |
| 931 | } |
| 932 | entry++; |
| 933 | } |
| 934 | } |
| 935 | } |
| 936 | } |
| 937 | } |
| 938 | |
| 939 | /** |
| 940 | * Returns the list of already discovered ResearchProject |