public HexOffsetCoordinates[] GetSingleRing(HexOffsetCoordinates offset, int radius) { var ring = new List <HexOffsetCoordinates>(); var cube = OffsetCoordinatesToCube(offset); var southWestNeighbor = GetNeighboringCube(Direction.SouthWest); var scaledCube = southWestNeighbor * radius; cube += scaledCube; var directions = GetRingDirections(); foreach (var direction in directions) { for (var j = 0; j < radius; j++) { var returnOffset = CubeToOffsetCoordinates(cube); if (!ring.Contains(returnOffset)) { ring.Add(returnOffset); } cube = GetNeighbor(cube, direction); } } var singleRing = ring.ToArray(); return(singleRing); }
public HexAxialCoordinates OffsetCoordinatesToAxial(HexOffsetCoordinates offset) { var cube = OffsetCoordinatesToCube(offset); var axial = CubeToAxial(cube); return(axial); }
public HexOffsetCoordinates GetNeighbor(HexOffsetCoordinates offset, Direction direction) { var cube = OffsetCoordinatesToCube(offset); var neighbor = GetNeighbor(cube, direction); var returnOffset = CubeToOffsetCoordinates(neighbor); return(returnOffset); }
public int GetDistance(HexOffsetCoordinates fromOffset, HexOffsetCoordinates toOffset) { var fromCube = OffsetCoordinatesToCube(fromOffset); var toCube = OffsetCoordinatesToCube(toOffset); var distance = GetDistance(fromCube, toCube); return(distance); }
public HexOffsetCoordinates[] GetSpiralRing(HexOffsetCoordinates offset, int radius) { var ring = new List <HexOffsetCoordinates> { offset }; for (var k = 1; k <= radius; k++) { var singleRing = GetSingleRing(offset, k); ring.AddRange(singleRing.ToList()); } var spiralRing = ring.ToArray(); return(spiralRing); }
public override Point2F FromOffsetCoordinatesToPixel(HexOffsetCoordinates offset) { var x = Size * (1.5f * offset.Col); var y = Size; y *= OffsetCoordinatesType switch { OffsetCoordinatesType.Even => (float)(Constants.SquareRootOf3 * (offset.Row - 0.5f * (offset.Col & 1))), OffsetCoordinatesType.Odd => (float)(Constants.SquareRootOf3 * (offset.Row + 0.5f * (offset.Col & 1))), _ => throw new ArgumentOutOfRangeException(nameof(OffsetCoordinatesType), OffsetCoordinatesType, $"OffsetCoordinatesType {OffsetCoordinatesType} is not supported.") }; var pixel = new Point2F(x, y); return(pixel); }
public HexOffsetCoordinates[] GetAllNeighbors(HexOffsetCoordinates offset) { var cube = OffsetCoordinatesToCube(offset); var allNeighboringCubes = GetAllNeighbors(cube); var neighbors = new HexOffsetCoordinates[6]; for (var i = 0; i < 6; i++) { var neighboringCube = allNeighboringCubes[i]; var neighboring = CubeToOffsetCoordinates(neighboringCube); neighbors[i] = neighboring; } return(neighbors); }
public override HexOffsetCoordinates CubeToOffsetCoordinates(HexCubeCoordinates cube) { var col = cube.X; var row = cube.Z; row += OffsetCoordinatesType switch { OffsetCoordinatesType.Even => (col + (col & 1)) / 2, OffsetCoordinatesType.Odd => (col - (col & 1)) / 2, _ => throw new ArgumentOutOfRangeException(nameof(OffsetCoordinatesType), OffsetCoordinatesType, $"OffsetCoordinatesType {OffsetCoordinatesType} is not supported.") }; var offsetCoordinates = new HexOffsetCoordinates(col, row); return(offsetCoordinates); }
public override HexCubeCoordinates OffsetCoordinatesToCube(HexOffsetCoordinates offset) { var col = offset.Col; var row = offset.Row; row -= OffsetCoordinatesType switch { OffsetCoordinatesType.Even => (col + (col & 1)) / 2, OffsetCoordinatesType.Odd => (col - (col & 1)) / 2, _ => throw new ArgumentOutOfRangeException(nameof(OffsetCoordinatesType), OffsetCoordinatesType, $"OffsetCoordinatesType {OffsetCoordinatesType} is not supported.") }; var y = -col - row; var cube = new HexCubeCoordinates(col, y, row); return(cube); }
public List <HexOffsetCoordinates> GetLine(HexOffsetCoordinates fromOffset, HexOffsetCoordinates toOffset) { var fromCube = OffsetCoordinatesToCube(fromOffset); var toCube = OffsetCoordinatesToCube(toOffset); var hexes = GetLine(fromCube, toCube); var result = new List <HexOffsetCoordinates>(); foreach (var hex in hexes) { var offsetCoordinates = CubeToOffsetCoordinates(hex); result.Add(offsetCoordinates); } return(result); }
public HexAxialCoordinates OffsetCoordinatesToAxial(HexOffsetCoordinates offset) => _hex.OffsetCoordinatesToAxial(offset);
public Point2F FromOffsetCoordinatesToPixel(HexOffsetCoordinates offset) => _hex.FromOffsetCoordinatesToPixel(offset);
public int GetDistance(HexOffsetCoordinates fromOffset, HexOffsetCoordinates toOffset) => _hex.GetDistance(fromOffset, toOffset);
public List <HexOffsetCoordinates> GetLine(HexOffsetCoordinates fromOffset, HexOffsetCoordinates toOffset) => _hex.GetLine(fromOffset, toOffset);
public HexOffsetCoordinates[] GetSpiralRing(HexOffsetCoordinates offset, int radius) => _hex.GetSpiralRing(offset, radius);
public HexOffsetCoordinates GetNeighbor(HexOffsetCoordinates offset, Direction direction) => _hex.GetNeighbor(offset, direction);
public HexOffsetCoordinates[] GetAllNeighbors(HexOffsetCoordinates offset) => _hex.GetAllNeighbors(offset);
public HexCubeCoordinates OffsetCoordinatesToCube(HexOffsetCoordinates offset) => _hex.OffsetCoordinatesToCube(offset);
public abstract Point2F FromOffsetCoordinatesToPixel(HexOffsetCoordinates offset);
public abstract HexCubeCoordinates OffsetCoordinatesToCube(HexOffsetCoordinates offset);