Ring(CubicHexCoord center, int range, DirectionEnum startDirection = DirectionEnum.E) { if (range <= 0) { throw new ArgumentOutOfRangeException("range must be a positive integer value."); } CubicHexCoord[] result = new CubicHexCoord[6 * range]; CubicHexCoord cube = center + DIRECTIONS[(int)startDirection].Scale(range); int[] directions = new int[6]; for (int i = 0; i < 6; i++) { directions[i] = ((int)startDirection + i) % 6; } int index = 0; for (int i = 0; i < 6; i++) { int neighborDirection = (directions[i] + 2) % 6; for (int j = 0; j < range; j++) { result[index++] = cube; cube = cube.Neighbor((DirectionEnum)neighborDirection); } } return(result); }
public void DistanceTo() { CubicHexCoord cubic1 = new CubicHexCoord( 0, 0, 0 ); CubicHexCoord cubic2 = cubic1.Neighbor( DirectionEnum.E ).Neighbor( DirectionEnum.SE ); int distance = cubic1.DistanceTo( cubic2 ); Assert.That( distance, Is.EqualTo( 2 ) ); }
public void Neighbors() { CubicHexCoord cubic = new CubicHexCoord( 1, 2, 3 ); CubicHexCoord[] neighbors = cubic.Neighbors(); Assert.That( neighbors, Is.EquivalentTo( new CubicHexCoord[ 6 ] { cubic.Neighbor( DirectionEnum.E ), cubic.Neighbor( DirectionEnum.SE ), cubic.Neighbor( DirectionEnum.SW ), cubic.Neighbor( DirectionEnum.W ), cubic.Neighbor( DirectionEnum.NW ), cubic.Neighbor( DirectionEnum.NE ) } ) ); }