SHARE
TWEET

generalized research handling

a guest Jun 10th, 2017 62 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 1151a1152
  2. >
  3. 1156,1160c1157
  4. <       std::vector<const RuleResearch *>::const_iterator itDiscovered = std::find(discovered.begin(), discovered.end(), research);
  5. <
  6. <       bool liveAlien = mod->getUnit(research->getName()) != 0;
  7. <
  8. <       if (itDiscovered != discovered.end())
  9. ---
  10. >       if (!research->getRequirements().empty())
  11. 1162,1175c1159
  12. <           bool cull = true;
  13. <           if (!research->getGetOneFree().empty())
  14. <           {
  15. <               for (std::vector<std::string>::const_iterator ohBoy = research->getGetOneFree().begin(); ohBoy != research->getGetOneFree().end(); ++ohBoy)
  16. <               {
  17. <                   std::vector<const RuleResearch *>::const_iterator more_iteration = std::find(discovered.begin(), discovered.end(), mod->getResearch(*ohBoy));
  18. <                   if (more_iteration == discovered.end())
  19. <                   {
  20. <                       cull = false;
  21. <                       break;
  22. <                   }
  23. <               }
  24. <           }
  25. <           if (!liveAlien && cull)
  26. ---
  27. >                         if(!isResearched(research->getRequirements()))
  28. 1179,1203d1162
  29. <           else
  30. <           {
  31. <               std::vector<std::string>::const_iterator leaderCheck = std::find(research->getUnlocked().begin(), research->getUnlocked().end(), "STR_LEADER_PLUS");
  32. <               std::vector<std::string>::const_iterator cmnderCheck = std::find(research->getUnlocked().begin(), research->getUnlocked().end(), "STR_COMMANDER_PLUS");
  33. <
  34. <               bool leader ( leaderCheck != research->getUnlocked().end());
  35. <               bool cmnder ( cmnderCheck != research->getUnlocked().end());
  36. <
  37. <               if (leader)
  38. <               {
  39. <                   std::vector<const RuleResearch*>::const_iterator found = std::find(discovered.begin(), discovered.end(), mod->getResearch("STR_LEADER_PLUS"));
  40. <                   if (found == discovered.end())
  41. <                       cull = false;
  42. <               }
  43. <
  44. <               if (cmnder)
  45. <               {
  46. <                   std::vector<const RuleResearch*>::const_iterator found = std::find(discovered.begin(), discovered.end(), mod->getResearch("STR_COMMANDER_PLUS"));
  47. <                   if (found == discovered.end())
  48. <                       cull = false;
  49. <               }
  50. <
  51. <               if (cull)
  52. <                   continue;
  53. <           }
  54. 1205c1164,1186
  55. <
  56. ---
  57. >                 std::vector<const RuleResearch *>::const_iterator itDiscovered = std::find(discovered.begin(), discovered.end(), research);
  58. >                 if(itDiscovered != discovered.end())
  59. >                 {
  60. >                         bool removeFromMenu = true;
  61. >                         if(!research->getGetOneFree().empty())
  62. >                         {
  63. >                                 if(!isResearched(research->getGetOneFree()))
  64. >                                 {
  65. >                                         removeFromMenu = false;
  66. >                                 }
  67. >                         }
  68. >                         if(research->getCost() != 0 && !research->getUnlocked().empty())
  69. >                         {
  70. >                                 if(!isResearched(research->getUnlocked()))
  71. >                                 {
  72. >                                         removeFromMenu = false;
  73. >                                 }
  74. >                         }
  75. >                         if(removeFromMenu)
  76. >                         {
  77. >                                 continue;
  78. >                         }
  79. >                 }
  80. 1214,1227d1194
  81. <       if (!research->getRequirements().empty())
  82. <       {
  83. <           size_t tally(0);
  84. <           for (size_t itreq = 0; itreq != research->getRequirements().size(); ++itreq)
  85. <           {
  86. <               itDiscovered = std::find(discovered.begin(), discovered.end(), mod->getResearch(research->getRequirements().at(itreq)));
  87. <               if (itDiscovered != discovered.end())
  88. <               {
  89. <                   tally++;
  90. <               }
  91. <           }
  92. <           if (tally != research->getRequirements().size())
  93. <               continue;
  94. <       }
  95. 1273,1275d1239
  96. <   std::vector<std::string> deps = r->getDependencies();
  97. <   const std::vector<const RuleResearch *> & discovered(getDiscoveredResearch());
  98. <   bool liveAlien = mod->getUnit(r->getName()) != 0;
  99. 1280,1305c1244
  100. <   else if (liveAlien)
  101. <   {
  102. <       if (!r->getGetOneFree().empty())
  103. <       {
  104. <           std::vector<std::string>::const_iterator leaderCheck = std::find(r->getUnlocked().begin(), r->getUnlocked().end(), "STR_LEADER_PLUS");
  105. <           std::vector<std::string>::const_iterator cmnderCheck = std::find(r->getUnlocked().begin(), r->getUnlocked().end(), "STR_COMMANDER_PLUS");
  106. <
  107. <           bool leader ( leaderCheck != r->getUnlocked().end());
  108. <           bool cmnder ( cmnderCheck != r->getUnlocked().end());
  109. <
  110. <           if (leader)
  111. <           {
  112. <               std::vector<const RuleResearch*>::const_iterator found = std::find(discovered.begin(), discovered.end(), mod->getResearch("STR_LEADER_PLUS"));
  113. <               if (found == discovered.end())
  114. <                   return true;
  115. <           }
  116. <
  117. <           if (cmnder)
  118. <           {
  119. <               std::vector<const RuleResearch*>::const_iterator found = std::find(discovered.begin(), discovered.end(), mod->getResearch("STR_COMMANDER_PLUS"));
  120. <               if (found == discovered.end())
  121. <                   return true;
  122. <           }
  123. <       }
  124. <   }
  125. <   for (std::vector<std::string>::const_iterator itFree = r->getGetOneFree().begin(); itFree != r->getGetOneFree().end(); ++itFree)
  126. ---
  127. >   if (!r->getDependencies().empty())
  128. 1307,1317c1246
  129. <       if (std::find(unlocked.begin(), unlocked.end(), mod->getResearch(*itFree)) == unlocked.end())
  130. <       {
  131. <           return true;
  132. <       }
  133. <   }
  134. <
  135. <   for (std::vector<std::string>::const_iterator iter = deps.begin(); iter != deps.end(); ++ iter)
  136. <   {
  137. <       RuleResearch *research = mod->getResearch(*iter);
  138. <       std::vector<const RuleResearch *>::const_iterator itDiscovered = std::find(discovered.begin(), discovered.end(), research);
  139. <       if (itDiscovered == discovered.end())
  140. ---
  141. >                 if(!isResearched(r->getDependencies()))
  142. 1322c1251,1270
  143. <
  144. ---
  145. >         bool allGetOneFree = false;
  146. >         bool allUnlocks = false;
  147. >         if(!r->getGetOneFree().empty())
  148. >         {
  149. >                 if(isResearched(r->getGetOneFree()))
  150. >       {
  151. >           allGetOneFree = true;
  152. >       }
  153. >         }
  154. >         if(!r->getUnlocked().empty())
  155. >         {
  156. >                 if(isResearched(r->getUnlocked()))
  157. >                 {
  158. >                         allUnlocks = true;
  159. >                 }
  160. >         }
  161. >         if(allGetOneFree && allUnlocks)
  162. >         {
  163. >                 return false;
  164. >         }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top