public void ObstaclePrioritizeCheck(float range = 20f)
{
if (DateTime.Now.Subtract(LastObstacleIntersectionTest).TotalMilliseconds > 1500)
{
if (!FunkyGame.Hero.IsMoving || FunkyGame.Hero.currentMovementState.Equals(MovementState.WalkingInPlace) || FunkyGame.Hero.currentMovementState.Equals(MovementState.None) || FunkyGame.Targeting.cMovement.BlockedMovementCounter > 0)
{
LastObstacleIntersectionTest = DateTime.Now;
//modify range based upon # of stucks
if (PlayerMover.iTotalAntiStuckAttempts > 0) range += (PlayerMover.iTotalAntiStuckAttempts * 5f);
//get collection of objects that pass the tests.
var intersectingObstacles = FunkyGame.Targeting.Cache.Environment.NearbyObstacleObjects //ObjectCache.Obstacles.Values.OfType<CacheServerObject>()
.Where(obstacle =>
!PrioritizedRAGUIDs.Contains(obstacle.RAGUID)//Only objects not already prioritized
&& obstacle.Obstacletype.HasValue
&& ObjectCache.CheckFlag(ObstacleType.Navigation, obstacle.Obstacletype.Value)//only navigation/intersection blocking objects!
&& obstacle.RadiusDistance <= range //Only within range..
&& obstacle.BotIsFacing() || obstacle.RadiusDistance <= 0f);
//&&obstacle.TestIntersection(BotGridPoint, IntersectionDestinationPoint));
if (intersectingObstacles.Any())
{
var intersectingObjectRAGUIDs = (from objs in intersectingObstacles
select objs.RAGUID);
PrioritizedRAGUIDs.AddRange(intersectingObjectRAGUIDs);
}
}
}
}