Esempio n. 1
0
    public Field GetOffsetNeighbour(Field field, HexUtils.HexDirection dir)
    {
        Vector2 tmp;

        if (field.y % 2 == 0)
        {
            tmp = HexUtils.GetValueFromHexDirEven(dir);
        }
        else
        {
            tmp = HexUtils.GetValueFromHexDirOdd(dir)
            ;
        } return(GetField(field.x + (int)tmp.x, field.y + (int)tmp.y));
    }
Esempio n. 2
0
    public Vector2[] OffsetReachable(Vector2 start, int movement)
    {
        Vector2        neighbor;
        List <Vector2> visited = new List <Vector2>();

        visited.Add(start);
        fringes.Clear();
        var tmp = new List <Vector2>();

        tmp.Add(start);
        fringes.Add(tmp);

        for (int i = 1; i <= movement; i++)
        {
            fringes.Add(new List <Vector2>());
            for (int j = 0; j < fringes[i - 1].Count; j++)
            {
                Debug.LogWarning(fringes[i - 1].Count + " i: " + i);
                for (int n = 0; n < 6; n++)
                {
                    if (fringes[i - 1][j].y % 2 == 0)
                    {
                        neighbor = HexUtils.GetValueFromHexDirEven((HexUtils.HexDirection)n);
                    }
                    else
                    {
                        neighbor = HexUtils.GetValueFromHexDirOdd((HexUtils.HexDirection)n);
                    }
                    //Debug.LogWarning(neighbor.ToString("f4") + " | " + fringes[i - 1][j].ToString("f4"));
                    //neighbor.x += fringes[i - 1][j].x;
                    //neighbor.y += fringes[i - 1][j].y;
                    neighbor += fringes[i - 1][j];

                    //TODO Blocked Hex
                    if (!visited.Contains(neighbor))
                    {
                        visited.Add(neighbor);
                        fringes[i].Add(neighbor);
                    }
                }
            }
        }

        return(visited.ToArray());
    }