Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        public HexAxialCoordinates OffsetCoordinatesToAxial(HexOffsetCoordinates offset)
        {
            var cube  = OffsetCoordinatesToCube(offset);
            var axial = CubeToAxial(cube);

            return(axial);
        }
Esempio n. 3
0
        public HexOffsetCoordinates GetNeighbor(HexOffsetCoordinates offset, Direction direction)
        {
            var cube         = OffsetCoordinatesToCube(offset);
            var neighbor     = GetNeighbor(cube, direction);
            var returnOffset = CubeToOffsetCoordinates(neighbor);

            return(returnOffset);
        }
Esempio n. 4
0
        public int GetDistance(HexOffsetCoordinates fromOffset, HexOffsetCoordinates toOffset)
        {
            var fromCube = OffsetCoordinatesToCube(fromOffset);
            var toCube   = OffsetCoordinatesToCube(toOffset);

            var distance = GetDistance(fromCube, toCube);

            return(distance);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
 public HexAxialCoordinates OffsetCoordinatesToAxial(HexOffsetCoordinates offset) => _hex.OffsetCoordinatesToAxial(offset);
Esempio n. 12
0
 public Point2F FromOffsetCoordinatesToPixel(HexOffsetCoordinates offset) => _hex.FromOffsetCoordinatesToPixel(offset);
Esempio n. 13
0
 public int GetDistance(HexOffsetCoordinates fromOffset, HexOffsetCoordinates toOffset) => _hex.GetDistance(fromOffset, toOffset);
Esempio n. 14
0
 public List <HexOffsetCoordinates> GetLine(HexOffsetCoordinates fromOffset, HexOffsetCoordinates toOffset) => _hex.GetLine(fromOffset, toOffset);
Esempio n. 15
0
 public HexOffsetCoordinates[] GetSpiralRing(HexOffsetCoordinates offset, int radius) => _hex.GetSpiralRing(offset, radius);
Esempio n. 16
0
 public HexOffsetCoordinates GetNeighbor(HexOffsetCoordinates offset, Direction direction) => _hex.GetNeighbor(offset, direction);
Esempio n. 17
0
 public HexOffsetCoordinates[] GetAllNeighbors(HexOffsetCoordinates offset) => _hex.GetAllNeighbors(offset);
Esempio n. 18
0
 public HexCubeCoordinates OffsetCoordinatesToCube(HexOffsetCoordinates offset) => _hex.OffsetCoordinatesToCube(offset);
Esempio n. 19
0
 public abstract Point2F FromOffsetCoordinatesToPixel(HexOffsetCoordinates offset);
Esempio n. 20
0
 public abstract HexCubeCoordinates OffsetCoordinatesToCube(HexOffsetCoordinates offset);