예제 #1
0
    public void TestSingleSplitGeneration()
    {
        var splitSource = new SplitRect()
        {
            _rect      = new RectInt(Vector2Int.zero, Vector2Int.one * 4),
            Neighbours = new HashSet <SplitRect>()
        };

        var divisionAlgorithm = new SubdivisionAlgorithm()
        {
            _minRectWidth  = 1,
            _minRectHeight = 1
        };

        var rectangles  = divisionAlgorithm.SplitRectRandomly(splitSource, Axis.Y);
        var splitResult = divisionAlgorithm.CreateSplits(splitSource, rectangles);

        Assert.IsTrue(splitResult[0]._rect.height == splitSource._rect.height);
        Assert.IsTrue(splitResult[1]._rect.height == splitSource._rect.height);

        Assert.IsTrue(splitResult[0]._rect.width < splitSource._rect.width);
        Assert.IsTrue(splitResult[1]._rect.width < splitSource._rect.width);

        Assert.IsTrue(splitResult[0].Neighbours.Contains(splitResult[1]));
        Assert.IsTrue(splitResult[0].Neighbours.Count == 1);

        Assert.IsTrue(splitResult[1].Neighbours.Contains(splitResult[0]));
        Assert.IsTrue(splitResult[1].Neighbours.Count == 1);
    }
예제 #2
0
        /// <summary>
        /// Build a layout of a given width and height
        /// </summary>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <param name="traverselAlgoirithm"></param>
        /// <param name="divisionAlgorithm"></param>
        /// <returns>The root of a path through the level rectangle </returns>
        public TraversalNode BuildLevelLayout(int width, int height, SplitRectTraversalAlgorithm traverselAlgoirithm,
                                              SubdivisionAlgorithm divisionAlgorithm)
        {
            var levelRect         = new SplitRect(0, 0, width, height);
            var levelSubdivisions = _divisionAlgorithm.Subdivide(levelRect);

            return(_traversalAlgorithm.TraverseSplitRects(levelSubdivisions));
        }
예제 #3
0
    public void TestRandomYSplits()
    {
        var split = new SplitRect()
        {
            _rect      = new RectInt(Vector2Int.zero, Vector2Int.one * 4),
            Neighbours = new HashSet <SplitRect>()
        };

        var divisionAlgorithm = new SubdivisionAlgorithm()
        {
            _minRectWidth  = 1,
            _minRectHeight = 1
        };

        var widthCount = new int[5];

        for (int i = 0; i < 200; i++)
        {
            var result = divisionAlgorithm.SplitRectRandomly(split, Axis.Y);
            Assert.IsTrue(result[0].width >= divisionAlgorithm._minRectWidth);
            Assert.IsTrue(result[1].width >= divisionAlgorithm._minRectWidth);
            Assert.IsTrue(result[0].width < split._rect.width);
            Assert.IsTrue(result[1].width < split._rect.width);
            Assert.IsTrue(result[0].height == split._rect.height);
            Assert.IsTrue(result[1].height == split._rect.height);

            widthCount[result[0].width]++;
            widthCount[result[1].width]++;
        }

        Assert.IsTrue(widthCount[0] == 0);
        Assert.IsTrue(widthCount[1] > 0);
        Assert.IsTrue(widthCount[2] > 0);
        Assert.IsTrue(widthCount[3] > 0);
        Assert.IsTrue(widthCount[4] == 0);
    }
 public SplitInto(SplitRect split)
 {
     this.split = split;
 }