コード例 #1
0
ファイル: Spot.cs プロジェクト: kostyl2220/game_strategy
    public List <UnitPoint> MakeSpot(Vector3 StartPos, Vector3 Center, Grid grid, int unitCount, Item item, PathfindingA pathfindingA)
    {
        Vector3 direction = (Center - StartPos).normalized;

        this.grid = grid;
        Strategy.InitStrategy();
        List <Vector3> EndCells = Strategy.GetMoveCells(direction, Center, unitCount, grid, item);

        spotsArray.Clear();
        activeSpots.Clear();

        pointsToCover.Clear();
        CoveredPoints.Clear();
        foreach (var Cell in EndCells)
        {
            AddToCover(new UnitPoint(grid, Cell));
        }

        Vector2 centerPos      = grid.GetPointByPosition(Center);
        Vector2 startPosInGrid = grid.GetPointByPosition(StartPos);

        foreach (var startPos in Strategy.GetStartPoints(centerPos, pointsToCover))
        {
            bool walkable = grid.GetGrid()[(int)startPos.x, (int)startPos.y] == 0;
            if (walkable && pathfindingA.HasPath(startPos, startPosInGrid) || !walkable)
            {
                AddToSpot(new SpotPoint(startPos, walkable));
            }
        }

        while (CoveredPoints.Count < unitCount)
        {
            while (pointsToCover.Count != 0 && CoveredPoints.Count < unitCount && HasActiveSpot())
            {
                SpotPoint        point      = GetCurrentActiveSpot();
                List <SpotPoint> Neighbours = GetNeighbours(point, grid);
                AddToSpot(Neighbours, unitCount);
            }

            if (CoveredPoints.Count < unitCount)
            {
                List <Vector3> NewCells = Strategy.ExpandPoints(direction, Center, unitCount, grid, item);
                foreach (var cell in NewCells)
                {
                    AddToCover(new UnitPoint(grid, cell));
                }

                CheckNewPointsToCover(unitCount);
            }

            if (!HasActiveSpot())
            {
                /*foreach (var line in spotsArray.Values)
                 * {
                 *  foreach (SpotPoint point in line.Values)
                 *  {
                 *      grid.PlaceSpot(point.X, point.Z, point.Walkable);
                 *  }
                 * } */
                return(new List <UnitPoint>());
            }
        }

        /*foreach (var line in spotsArray.Values)
         * {
         *  foreach (SpotPoint point in line.Values)
         *  {
         *      grid.PlaceSpot(point.X, point.Z, point.Walkable);
         *  }
         * }*/

        return(CoveredPoints);
    }