Ejemplo n.º 1
0
    public void SearchInRange(HexCell cell, int range, int action)
    {
        for (int i = 0; i < cells.Length; i++)
        {
            cells[i].Distance = int.MaxValue;
            cells[i].DisableValidation();
        }

        Queue <HexCell> frontier = new Queue <HexCell>();

        cell.Distance = 0;
        frontier.Enqueue(cell);
        while (frontier.Count > 0)
        {
            HexCell current = frontier.Dequeue();
            current.EnableValidation(Color.yellow);

            for (HexDirection d = HexDirection.NE; d <= HexDirection.NW; d++)
            {
                HexCell neighbor = current.GetNeighbor(d);
                if (neighbor == null || neighbor.Distance != int.MaxValue)
                {
                    continue;
                }
                if (current.GetEdgeType(neighbor) == HexEdgeType.Cliff && action == 0)
                {
                    continue;
                }
                if (current.Distance > (range - 1))
                {
                    break;
                }
                neighbor.Distance = current.Distance + 1;
                frontier.Enqueue(neighbor);
            }
        }
    }