Browse Source

Add turn limit option to pathfinder

Ivan Savenko 2 years ago
parent
commit
c8a96647c3

+ 2 - 0
lib/pathfinder/CPathfinder.cpp

@@ -121,6 +121,8 @@ void CPathfinder::calculatePaths()
 			movement = hlp->getMaxMovePoints(source.node->layer);
 			if(!hlp->passOneTurnLimitCheck(source))
 				continue;
+			if(turn >= hlp->options.turnLimit)
+				continue;
 		}
 
 		source.isInitialPosition = source.nodeHero == hlp->hero;

+ 1 - 0
lib/pathfinder/PathfinderOptions.cpp

@@ -30,6 +30,7 @@ PathfinderOptions::PathfinderOptions()
 	, lightweightFlyingMode(false)
 	, oneTurnSpecialLayersLimit(true)
 	, originalMovementRules(false)
+	, turnLimit(std::numeric_limits<uint8_t>::max())
 {
 }
 

+ 3 - 0
lib/pathfinder/PathfinderOptions.h

@@ -68,6 +68,9 @@ struct DLL_LINKAGE PathfinderOptions
 	///   I find it's reasonable limitation, but it's will make some movements more expensive than in H3.
 	bool originalMovementRules;
 
+	/// Max number of turns to compute. Default = infinite
+	uint8_t turnLimit;
+
 	PathfinderOptions();
 };