public void PointyPropertiesTest(HexagonalGridType type) { var grid = new HexagonalGrid(type, InscribedRadius); Assert.AreEqual(grid.InscribedRadius, InscribedRadius); Assert.AreEqual(grid.DescribedRadius, DescribedRadius); Assert.AreEqual(grid.InscribedDiameter, InscribedRadius * 2); Assert.AreEqual(grid.DescribedDiameter, DescribedRadius * 2); Assert.AreEqual(grid.HorizontalOffset, InscribedRadius * 2.0f); Assert.AreEqual(grid.VerticalOffset, DescribedRadius * 1.5f); Assert.AreEqual(grid.Side, DescribedRadius); Assert.AreEqual(grid.AngleToFirstNeighbor, 0.0f); }
public void CoordinateConversionTest( [Values] HexagonalGridType type, [Values(-13, -8, 0, 15, 22)] int offsetX, [Values(-13, -8, 0, 15, 22)] int offsetY) { var grid = new HexagonalGrid(type, InscribedRadius); var offset = new Offset(offsetX, offsetY); var axial = grid.ToAxial(offset); var cubic = grid.ToCubic(offset); Assert.IsTrue(cubic.IsValid(), $"Invalid cubic coordinate: {cubic.X}-{cubic.Y}-{cubic.Z}"); Assert.AreEqual(offset, grid.ToOffset(axial)); Assert.AreEqual(offset, grid.ToOffset(cubic)); Assert.AreEqual(axial, grid.ToAxial(offset)); Assert.AreEqual(axial, grid.ToAxial(cubic)); Assert.AreEqual(cubic, grid.ToCubic(offset)); Assert.AreEqual(cubic, grid.ToCubic(axial)); }
public void Vector3ConversionTest( [Values] HexagonalGridType type, [Values(-13, -8, 0, 15, 22)] int offsetX, [Values(-13, -8, 0, 15, 22)] int offsetY) { var grid = new HexagonalGrid(type, InscribedRadius); var offset = new Offset(offsetX, offsetY); var axial = grid.ToAxial(offset); var cubic = grid.ToCubic(offset); var fromOffset = grid.ToVector3(offset); var fromAxial = grid.ToVector3(axial); var fromCubic = grid.ToVector3(cubic); Assert.IsTrue(fromOffset.SimilarTo(fromAxial), $"Expected: {fromAxial}; Actual: {fromOffset}"); Assert.IsTrue(fromOffset.SimilarTo(fromCubic), $"Expected: {fromCubic}; Actual: {fromOffset}"); Assert.AreEqual(offset, grid.ToOffset(fromOffset)); Assert.AreEqual(axial, grid.ToAxial(fromAxial)); Assert.AreEqual(cubic, grid.ToCubic(fromCubic)); }
public void IsNeighborTest( [Values] HexagonalGridType type, [Values(-13, -8, 0, 15, 22)] int offsetX, [Values(-13, -8, 0, 15, 22)] int offsetY, [Values(-1, 0, 1, 2, 3, 4, 5, 6)] int neighborIndex) { var grid = new HexagonalGrid(type, InscribedRadius); var offset = new Offset(offsetX, offsetY); var axial = grid.ToAxial(offset); var cubic = grid.ToCubic(offset); Assert.IsTrue(cubic.IsValid(), $"Invalid cubic coordinate: {cubic.X}-{cubic.Y}-{cubic.Z}"); var oNeighbor = grid.GetNeighbor(offset, neighborIndex); var aNeighbor = grid.GetNeighbor(axial, neighborIndex); var cNeighbor = grid.GetNeighbor(cubic, neighborIndex); Assert.IsTrue(cNeighbor.IsValid(), $"Invalid cubic coordinate: {cNeighbor.X}-{cNeighbor.Y}-{cNeighbor.Z}"); Assert.IsTrue(grid.IsNeighbors(offset, oNeighbor), $"Neighbor1={offset}; Neighbor2={oNeighbor}; Index={neighborIndex};"); Assert.IsTrue(grid.IsNeighbors(axial, aNeighbor), $"Neighbor1={axial}; Neighbor2={aNeighbor}; Index={neighborIndex};"); Assert.IsTrue(grid.IsNeighbors(cubic, cNeighbor), $"Neighbor1={cubic}; Neighbor2={cNeighbor}; Index={neighborIndex};"); }
public void NeighborsOrderTest( [Values] HexagonalGridType type, [Values(-13, -8, 0, 15, 22)] int offsetX, [Values(-13, -8, 0, 15, 22)] int offsetY, [Values(-1, 0, 1, 2, 3, 4, 5, 6)] int neighborIndex) { var grid = new HexagonalGrid(type, InscribedRadius); var offset = new Offset(offsetX, offsetY); var axial = grid.ToAxial(offset); var cubic = grid.ToCubic(offset); var oNeighbor = grid.GetNeighbor(offset, neighborIndex); var aNeighbor = grid.GetNeighbor(axial, neighborIndex); var cNeighbor = grid.GetNeighbor(cubic, neighborIndex); Assert.IsTrue(cNeighbor.IsValid(), $"Invalid cubic coordinate: {cNeighbor.X}-{cNeighbor.Y}-{cNeighbor.Z}"); var fromAxial = grid.ToOffset(aNeighbor); var fromCubic = grid.ToOffset(cNeighbor); Assert.AreEqual(oNeighbor, fromAxial, $"Center=({offset} - {axial}); Current=({oNeighbor} - {aNeighbor}); Index={neighborIndex};"); Assert.AreEqual(oNeighbor, fromCubic, $"Center=({offset} - {cubic}); Current=({oNeighbor} - {cNeighbor}); Index={neighborIndex};"); }
/// <summary> /// Base constructor for hexagonal grid /// </summary> /// <param name="type">Orientation and layout of the grid</param> /// <param name="radius">Inscribed radius</param> public HexagonalGrid(HexagonalGridType type, float radius) { Type = type; InscribedRadius = radius; DescribedRadius = (float)(radius / Cos(PI / EdgesCount)); }