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)); }
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()); }