Пример #1
0
        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);
        }
Пример #2
0
        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 ) );
        }
Пример #3
0
        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 )
            } ) );
        }