Quellcode durchsuchen

Merge pull request #519 from dydzio0614/ObjectRemovalFix

Do not evaluate goals related to removed hero
Alexander Shishkin vor 7 Jahren
Ursprung
Commit
8e34b1b9a8
1 geänderte Dateien mit 24 neuen und 0 gelöschten Zeilen
  1. 24 0
      AI/VCAI/VCAI.cpp

+ 24 - 0
AI/VCAI/VCAI.cpp

@@ -2825,6 +2825,30 @@ void VCAI::lostHero(HeroPtr h)
 	{
 		vstd::erase_if_present(heroVec.second, h);
 	}
+
+	//remove goals with removed hero assigned from main loop
+	vstd::erase_if(ultimateGoalsFromBasic, [&](const std::pair<Goals::TSubgoal, Goals::TGoalVec> & x) -> bool
+	{
+		if(x.first->hero == h)
+			return true;
+		else
+			return false;
+	});
+
+	auto removedHeroGoalPredicate = [&](const Goals::TSubgoal & x) ->bool
+	{
+		if(x->hero == h)
+			return true;
+		else
+			return false;
+	};
+
+	vstd::erase_if(basicGoals, removedHeroGoalPredicate);
+	vstd::erase_if(goalsToAdd, removedHeroGoalPredicate);
+	vstd::erase_if(goalsToRemove, removedHeroGoalPredicate);
+
+	for(auto goal : ultimateGoalsFromBasic)
+		vstd::erase_if(goal.second, removedHeroGoalPredicate);
 }
 
 void VCAI::answerQuery(QueryID queryID, int selection)