private static bool NeedToTrackBack(Description desc, Stack<Iteration> iterations, Car car, Iteration currentIteration, int maxSteps) { var needToTrackBack = iterations.Any() && ( iterations.Count >= maxSteps || !desc.BoundingBox.IsInside(car.Position) || IsAccSumInvalid(iterations.Count, currentIteration.SumAcc, maxSteps) || IsWrongCarState(iterations.Count, car, desc, maxSteps) || IsCrashWithObstacles(desc.Obstacles, iterations.PeekCheckNull()?.Line) /* || CheckIfTrackForCrossedOldTrack(iterations, currentIteration, car)*/ ); return needToTrackBack; }
private static bool CheckIfTrackForCrossedOldTrack(Stack<Iteration> iterations, Iteration currentIteration, Car currentCar) { const int skipFirst = 2; if (iterations.Count <= skipFirst) { return false; } var currentTrack = currentIteration.Line; var currentPosition = currentCar.Position; var result = iterations .Skip(1) .Any(it => FilterCheckIfTrackForCrossedOldTrack(currentTrack, it.Line, currentPosition)); return result; }