///<summary>Проверяет наличие персонажа на этой итерации и добавлять все проверки в allAvailablePaths</summary> private List <PathPoint> CheckPathToCharacterAmongPaths(List <PathPoint> iterationPaths, Vector2 characterPosition) { // Словарь с путями, где ключ - это значение приоритета, значение - словарь, в котором ключ - это индекс точки в данной итерации, // а значение - доступные от него дальнейшие пути Dictionary <int, Dictionary <int, List <PathPoint> > > priorityPaths = new Dictionary <int, Dictionary <int, List <PathPoint> > >(); for (int i = 0; i < iterationPaths.Count; i++) { PathPoint pathPoint = iterationPaths[i]; Dictionary <int, List <PathPoint> > iterationPathsByPriority = new Dictionary <int, List <PathPoint> >(); foreach (Vector2Int axis in axises) { if (axis != -pathPoint.axisFromParent) { Vector2 actionPosition = pathPoint.PointPosition + axis; if (!checkedPositions.Contains(actionPosition)) { checkedPositions.Add(actionPosition); // На клетке находится персонаж, значит мы нашли путь if (checkIfCharacterOnCellRequest.MakeRequest(actionPosition, characterPosition)) { List <PathPoint> pointsToCharacter = new List <PathPoint>() { new PathPoint(pathPoint.state, pathPoint.PointPosition, axis) }; allAvailablePaths.AddPathsToPositionInPath(iterationPaths[i].positionInPath, pointsToCharacter); return(pointsToCharacter); } else if (cellLayoutRequest.MakeRequest(new ParamsObject(actionPosition), out LayerMask cellLayerMask)) { AddCellPoint(pathPoint.PointPosition, axis, cellLayerMask, ref iterationPathsByPriority); } } } } if (iterationPathsByPriority.Count > 0) { AddIterationHighestPriorityPaths(iterationPathsByPriority, i, ref priorityPaths); } } if (priorityPaths.Count > 0) { AddHighestPriorityPaths(iterationPaths, priorityPaths); } return(null); }