示例#1
0
    ///<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);
    }