Browse Source

- Restored evaluation of wander targets at every step.
- First wander target will be sorted by distance (closest) as well.

DjWarmonger 10 years ago
parent
commit
264a0c4fe7
1 changed files with 3 additions and 17 deletions
  1. 3 17
      AI/VCAI/VCAI.cpp

+ 3 - 17
AI/VCAI/VCAI.cpp

@@ -1413,8 +1413,10 @@ void VCAI::wander(HeroPtr h)
 		}
 		//end of objs empty
 
-		while (dests.size()) //performance improvement
+		if (dests.size()) //performance improvement
 		{
+			boost::sort(dests, CDistanceSorter(h.get())); //find next closest one
+
 			//wander should not cause heroes to be reserved - they are always considered free
 			const ObjectIdRef&dest = dests.front();
 			logAi->debugStream() << boost::format("Of all %d destinations, object oid=%d seems nice") % dests.size() % dest.id.getNum();
@@ -1430,22 +1432,6 @@ void VCAI::wander(HeroPtr h)
 					return;
 				}
 			}
-			//TODO: refactor removing deleted objects from the list
-			std::vector<const CGObjectInstance *> hlp;
-			retreiveVisitableObjs(hlp, true);
-
-			auto shouldBeErased = [&](const CGObjectInstance *obj) -> bool
-			{
-				if(!vstd::contains(hlp, obj))
-				{
-					return true;
-				}
-				return false;
-			};
-			erase_if(dests, shouldBeErased);
-
-			erase_if_present(dests, dest); //why that fails sometimes when removing monsters?
-			boost::sort(dests, CDistanceSorter(h.get())); //find next closest one
 		}
 
 		if (h->visitedTown)