public void StaticSpiralOutward()
        {
            CubicHexCoord cubic = new CubicHexCoord(1, 0, -1);

            CubicHexCoord[] spiral = CubicHexCoord.SpiralOutward(cubic, 2, DirectionEnum.W);

            Assert.That(spiral, Is.EquivalentTo(new CubicHexCoord[19] {
                // Center
                new CubicHexCoord(1, 0, -1),
                // Distance 1
                new CubicHexCoord(0, 1, -1),
                new CubicHexCoord(1, 1, -2),
                new CubicHexCoord(2, 0, -2),
                new CubicHexCoord(2, -1, -1),
                new CubicHexCoord(1, -1, 0),
                new CubicHexCoord(0, 0, 0),
                // Distance 2
                new CubicHexCoord(-1, 2, -1),
                new CubicHexCoord(0, 2, -2),
                new CubicHexCoord(1, 2, -3),
                new CubicHexCoord(2, 1, -3),
                new CubicHexCoord(3, 0, -3),
                new CubicHexCoord(3, -1, -2),
                new CubicHexCoord(3, -2, -1),
                new CubicHexCoord(2, -2, 0),
                new CubicHexCoord(1, -2, 1),
                new CubicHexCoord(0, -1, 1),
                new CubicHexCoord(-1, 0, 1),
                new CubicHexCoord(-1, 1, 0)
            }));
        }
        public void ToOffset()
        {
            OffsetHexCoord offset = new CubicHexCoord(0, -2, 2).ToOffset();

            Assert.That(offset.q, Is.EqualTo(1));
            Assert.That(offset.r, Is.EqualTo(2));
        }
Exemple #3
0
        public override List <Tile> Action(Board <Piece> board, Piece piece, Tile tile)
        {
            var validTiles = new List <Tile>();

            if (piece == null || tile == null)
            {
                return(validTiles);
            }

            validTiles.Add(tile);
            var playerTile = board.TileOf(piece);

            CubicHexCoord clockwisePosition = CubicHexCoord.RotateOnceLeft(playerTile.Position, tile.Position);
            Tile          clockwiseTile     = board.TileAt(clockwisePosition);

            while (clockwiseTile == null)
            {
                clockwisePosition = CubicHexCoord.RotateOnceLeft(playerTile.Position, clockwisePosition);
                clockwiseTile     = board.TileAt(clockwisePosition);
            }

            CubicHexCoord counterClockwisePosition = CubicHexCoord.RotateOnceRight(playerTile.Position, tile.Position);
            Tile          counterClockwiseTile     = board.TileAt(counterClockwisePosition);

            while (counterClockwiseTile == null)
            {
                counterClockwisePosition = CubicHexCoord.RotateOnceRight(playerTile.Position, counterClockwisePosition);
                counterClockwiseTile     = board.TileAt(counterClockwisePosition);
            }

            validTiles.Add(clockwiseTile);
            validTiles.Add(counterClockwiseTile);

            return(validTiles);
        }
        public void ToAxial()
        {
            AxialHexCoord axial = new CubicHexCoord(1, 2, 3).ToAxial();

            Assert.That(axial.q, Is.EqualTo(1));
            Assert.That(axial.r, Is.EqualTo(3));
        }
        public void StaticArea()
        {
            CubicHexCoord cubic = new CubicHexCoord(1, 0, -1);

            CubicHexCoord[] area = CubicHexCoord.Area(cubic, 2);

            // Center
            Assert.Contains(new CubicHexCoord(1, 0, -1), area);
            // Distance 1
            Assert.Contains(new CubicHexCoord(0, 1, -1), area);
            Assert.Contains(new CubicHexCoord(1, 1, -2), area);
            Assert.Contains(new CubicHexCoord(2, 0, -2), area);
            Assert.Contains(new CubicHexCoord(2, -1, -1), area);
            Assert.Contains(new CubicHexCoord(1, -1, 0), area);
            Assert.Contains(new CubicHexCoord(0, 0, 0), area);
            // Distance 2
            Assert.Contains(new CubicHexCoord(-1, 2, -1), area);
            Assert.Contains(new CubicHexCoord(0, 2, -2), area);
            Assert.Contains(new CubicHexCoord(1, 2, -3), area);
            Assert.Contains(new CubicHexCoord(2, 1, -3), area);
            Assert.Contains(new CubicHexCoord(3, 0, -3), area);
            Assert.Contains(new CubicHexCoord(3, -1, -2), area);
            Assert.Contains(new CubicHexCoord(3, -2, -1), area);
            Assert.Contains(new CubicHexCoord(2, -2, 0), area);
            Assert.Contains(new CubicHexCoord(1, -2, 1), area);
            Assert.Contains(new CubicHexCoord(0, -1, 1), area);
            Assert.Contains(new CubicHexCoord(-1, 0, 1), area);
            Assert.Contains(new CubicHexCoord(-1, 1, 0), area);
        }
        public void StaticDirectionDiff()
        {
            CubicHexCoord cubic = CubicHexCoord.DirectionDiff(DirectionEnum.E);

            Assert.That(cubic.x, Is.EqualTo(1));
            Assert.That(cubic.y, Is.EqualTo(-1));
            Assert.That(cubic.z, Is.EqualTo(0));
        }
        public void ConstructorParameterless()
        {
            CubicHexCoord cubic = new CubicHexCoord();

            Assert.That(cubic.x, Is.EqualTo(0));
            Assert.That(cubic.y, Is.EqualTo(0));
            Assert.That(cubic.z, Is.EqualTo(0));
        }
        public void Neighbor()
        {
            CubicHexCoord cubic = new CubicHexCoord(1, 2, 3).Neighbor(DirectionEnum.E);

            Assert.That(cubic.x, Is.EqualTo(2));
            Assert.That(cubic.y, Is.EqualTo(1));
            Assert.That(cubic.z, Is.EqualTo(3));
        }
        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 ConstructorXYZ()
        {
            CubicHexCoord cubic = new CubicHexCoord(1, 2, 3);

            Assert.That(cubic.x, Is.EqualTo(1));
            Assert.That(cubic.y, Is.EqualTo(2));
            Assert.That(cubic.z, Is.EqualTo(3));
        }
        public void OperatorOverloadPlus()
        {
            CubicHexCoord cubic = new CubicHexCoord(1, 2, 3) + new CubicHexCoord(4, 5, 6);

            Assert.That(cubic.x, Is.EqualTo(5));
            Assert.That(cubic.y, Is.EqualTo(7));
            Assert.That(cubic.z, Is.EqualTo(9));
        }
        public void OperatorOverloadMinus()
        {
            CubicHexCoord cubic = new CubicHexCoord(6, 5, 4) - new CubicHexCoord(1, 2, 3);

            Assert.That(cubic.x, Is.EqualTo(5));
            Assert.That(cubic.y, Is.EqualTo(3));
            Assert.That(cubic.z, Is.EqualTo(1));
        }
Exemple #13
0
        public static Vector3 BoardToWorldPosition(CubicHexCoord boardPos)
        {
            var worldPos = boardPos.ToAxial().ToPixel();

            return(new Vector3 {
                x = worldPos.x, z = worldPos.y
            });
        }
        public void OperatorOverloadNotEquals()
        {
            bool isTrue  = new CubicHexCoord(1, 2, 3) != new CubicHexCoord(4, 5, 6);
            bool isFalse = new CubicHexCoord(1, 2, 3) != new CubicHexCoord(1, 2, 3);

            Assert.That(isTrue, Is.True);
            Assert.That(isFalse, Is.False);
        }
        public void Diagonal()
        {
            CubicHexCoord cubic = new CubicHexCoord(1, 2, 3).Diagonal(DiagonalEnum.ESE);

            Assert.That(cubic.x, Is.EqualTo(2));
            Assert.That(cubic.y, Is.EqualTo(0));
            Assert.That(cubic.z, Is.EqualTo(4));
        }
        public void StaticDiagonalDiff()
        {
            CubicHexCoord cubic = CubicHexCoord.DiagonalDiff(DiagonalEnum.ESE);

            Assert.That(cubic.x, Is.EqualTo(1));
            Assert.That(cubic.y, Is.EqualTo(-2));
            Assert.That(cubic.z, Is.EqualTo(1));
        }
        public void Scale()
        {
            CubicHexCoord cubic  = CubicHexCoord.DirectionDiff(DirectionEnum.SE);
            CubicHexCoord scaled = cubic.Scale(3);

            Assert.That(scaled.x, Is.EqualTo(3 * cubic.x));
            Assert.That(scaled.y, Is.EqualTo(3 * cubic.y));
            Assert.That(scaled.z, Is.EqualTo(3 * cubic.z));
        }
Exemple #18
0
        public void Round()
        {
            FloatCubic    floatCubic = new FloatAxial(1.2f, 2.2f).ToFloatCubic();
            CubicHexCoord rounded    = floatCubic.Round();
            AxialHexCoord axial      = rounded.ToAxial();

            Assert.That(axial.q, Is.EqualTo(1));
            Assert.That(axial.r, Is.EqualTo(2));
        }
Exemple #19
0
        public Tile TileAt(CubicHexCoord position)
        {
            if (_tiles.TryGetValue(position, out var tile))
            {
                return(tile);
            }


            return(null);
        }
        public void StaticLine()
        {
            CubicHexCoord startCubic = new CubicHexCoord(1, 0, -1);
            CubicHexCoord endCubic   = new CubicHexCoord(-2, 2, 0);

            CubicHexCoord[] line = CubicHexCoord.Line(startCubic, endCubic);

            Assert.That(line, Is.EquivalentTo(new CubicHexCoord[4] {
                new CubicHexCoord(1, 0, -1),
                new CubicHexCoord(0, 1, -1),
                new CubicHexCoord(-1, 1, 0),
                new CubicHexCoord(-2, 2, 0)
            }));
        }
        public void Diagonals()
        {
            CubicHexCoord cubic = new CubicHexCoord(1, 2, 3);

            CubicHexCoord[] diagonals = cubic.Diagonals();

            Assert.That(diagonals, Is.EquivalentTo(new CubicHexCoord[6] {
                cubic.Diagonal(DiagonalEnum.ESE),
                cubic.Diagonal(DiagonalEnum.S),
                cubic.Diagonal(DiagonalEnum.WSW),
                cubic.Diagonal(DiagonalEnum.WNW),
                cubic.Diagonal(DiagonalEnum.N),
                cubic.Diagonal(DiagonalEnum.ENE)
            }));
        }
        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)
            }));
        }
        public void StaticRing()
        {
            CubicHexCoord cubic = new CubicHexCoord(1, 0, -1);

            CubicHexCoord[] ring = CubicHexCoord.Ring(cubic, 2, DirectionEnum.W);

            Assert.That(ring, Is.EquivalentTo(new CubicHexCoord[12] {
                new CubicHexCoord(-1, 2, -1),
                new CubicHexCoord(0, 2, -2),
                new CubicHexCoord(1, 2, -3),
                new CubicHexCoord(2, 1, -3),
                new CubicHexCoord(3, 0, -3),
                new CubicHexCoord(3, -1, -2),
                new CubicHexCoord(3, -2, -1),
                new CubicHexCoord(2, -2, 0),
                new CubicHexCoord(1, -2, 1),
                new CubicHexCoord(0, -1, 1),
                new CubicHexCoord(-1, 0, 1),
                new CubicHexCoord(-1, 1, 0)
            }));
        }
Exemple #24
0
        public MovementHelper Collect(CubicHexCoord offset, int step = int.MaxValue, params Validator[] validators)
        {
            Tile lastTile = _tile;

            if (_piece != null)
            {
                lastTile = _board.TileOf(_piece);
            }


            for (int count = 1; count <= step; count++)
            {
                Tile tile = lastTile;

                var pos = tile.Position - offset;
                tile = _board.TileAt(pos);

                if (tile == null)
                {
                    break;
                }
                lastTile = tile;

                var pawn = _board.PieceAt(tile);
                //if (pawn != null && pawn.PlayerID == _piece.PlayerID) continue;
                var valid = validators.All(v => v(_board, _piece, tile));

                if (pawn == null || valid)
                {
                    _validTile.Add(tile);
                }

                if (!valid)
                {
                    break;
                }
            }

            return(this);
        }
Exemple #25
0
        public void PlaceRandomEnemies()
        {
            var spots = new List <CubicHexCoord>()
            {
                new CubicHexCoord()
            };
            var board = BoardPositionHelper.GenerateBoard(_boardSize);

            while (spots.Count <= _enemyAmount)
            {
                var go = Instantiate(_enemyPrefab);

                CubicHexCoord spot = GetRandomSpot(board);
                while (spots.Contains(spot))
                {
                    spot = GetRandomSpot(board);
                }

                go.transform.position = BoardPositionHelper.BoardToWorldPosition(spot);
                spots.Add(spot);
            }
        }
Exemple #26
0
        public override List <Tile> Action(Board <Piece> board, Piece piece, Tile tile)
        {
            if (piece == null || tile == null)
            {
                return(new List <Tile>());
            }

            var playerTile = board.TileOf(piece);
            var dir        = playerTile.Position - tile.Position;

            dir = new CubicHexCoord(Mathf.Clamp(dir.x, -1, 1), Mathf.Clamp(dir.y, -1, 1), Mathf.Clamp(dir.z, -1, 1));
            if (dir.Equals(new CubicHexCoord()))
            {
                return(new List <Tile>());
            }

            var validTiles = new MovementHelper(board, piece)
                             .Collect(dir)
                             .Generate();

            return(validTiles);
        }
Exemple #27
0
        public void PointToCubic()
        {
            HexGrid       grid      = new HexGrid(3f);
            float         hexRadius = grid.HexRadius;
            CubicHexCoord cubic     = grid.PointToCubic(new Vec2D(10f, 10f));

            float rExpected = 10f / ((3f / 2f) * hexRadius);
            float qExpected = 10f / (SQRT_3 * hexRadius * (1f + 0.5f * rExpected));

            Console.WriteLine("Axial: q: " + qExpected + ", r: " + rExpected);

            float xExpected = qExpected;
            float zExpected = rExpected;
            float yExpected = -xExpected - zExpected;

            Console.WriteLine("Cubic: x: " + xExpected + ", y: " + yExpected + ", z: " + zExpected);

            // Now that I'm close enough to guess, I'll just do that rather than trying to emulate
            // the rounding all the way through. Not accurate, but good enough for government work.
            Assert.That(cubic.x, Is.EqualTo(1));
            Assert.That(cubic.y, Is.EqualTo(-3));
            Assert.That(cubic.z, Is.EqualTo(2));
        }
Exemple #28
0
 public MovementHelper Diagonal(DiagonalEnum direction, params Validator[] validators)
 {
     return(Collect(CubicHexCoord.DiagonalDiff(direction), validators: validators));
 }