Ejemplo n.º 1
0
    private List <GroundNode> FindNeighbors(GroundNode _ground)
    {
        int x, y;
        List <GroundNode> _neighbors = new List <GroundNode>();

        x = _ground.GetIndex()[0];
        y = _ground.GetIndex()[1];

        if (x > 0)
        {   //field 가장 왼쪽일 때
            if (allNode[x - 1, y].IsPassable())
            {
                _neighbors.Add(allNode[x - 1, y]);
            }
        }
        if (x < field.sizeOfFieldWidth - 1)
        {   //field 가장 오른쪽일 때
            if (allNode[x + 1, y].IsPassable())
            {
                _neighbors.Add(allNode[x + 1, y]);
            }
        }
        if (y > 0)
        {   //field 가장 아래쪽일 때
            if (allNode[x, y - 1].IsPassable())
            {
                _neighbors.Add(allNode[x, y - 1]);
            }
        }
        if (y < field.sizeOfFieldHeight - 1)
        {   //field 가장 위쪽일 때
            if (allNode[x, y + 1].IsPassable())
            {
                _neighbors.Add(allNode[x, y + 1]);
            }
        }

        //대각선 움직임을 포함할 때만 사용

        /*if (x > 0)
         * {
         *
         *  if (y > 0)
         *  {
         *      if (allNode[x - 1, y].IsPassable() && allNode[x, y - 1].IsPassable() && allNode[x-1,y-1].IsPassable())
         *      {   //대각선 좌측하단 노드
         *          _neighbors.Add(allNode[x - 1, y - 1]);
         *      }
         *  }
         *  if (y < field.sizeOfFieldHeight - 1)
         *  {
         *      if (allNode[x - 1, y].IsPassable() && allNode[x, y + 1].IsPassable() && allNode[x-1, y+1].IsPassable())
         *      {   //대각선 좌측상단 노드
         *          _neighbors.Add(allNode[x - 1, y + 1]);
         *      }
         *  }
         *
         * }
         * if (x < field.sizeOfFieldWidth - 1)
         * {
         *
         *  if (y > 0)
         *  {
         *      if (allNode[x + 1, y].IsPassable() && allNode[x, y - 1].IsPassable() && allNode[x + 1, y - 1].IsPassable())
         *      {   //대각선 우측하단 노드
         *          _neighbors.Add(allNode[x + 1, y - 1]);
         *      }
         *  }
         *  if (y < field.sizeOfFieldHeight - 1)
         *  {
         *      if (allNode[x + 1, y].IsPassable() && allNode[x, y + 1].IsPassable() && allNode[x + 1, y + 1].IsPassable())
         *      {   //대각선 우측상단 노드
         *          _neighbors.Add(allNode[x + 1, y + 1]);
         *      }
         *  }
         *
         * }*/

        return(_neighbors);
    }