コード例 #1
0
        /// <summary>
        /// Create split from the source and the split up rectangles, spreading the neighbours
        /// of the split over its children
        /// </summary>
        /// <param name="source"></param>
        /// <param name="rectangles"></param>
        /// <returns></returns>
        public SplitRect[] CreateSplits(SplitRect source, RectInt[] rectangles)
        {
            var result = new SplitRect[rectangles.Length];

            for (var i = 0; i < rectangles.Length; ++i)
            {
                result[i] = new SplitRect()
                {
                    _rect      = rectangles[i],
                    Neighbours = new HashSet <SplitRect>(source.Neighbours.Where(
                                                             (neighbour) => !RectUtil.AreDisconnected(rectangles[i], neighbour._rect)))
                };

                foreach (var neighbour in result[i].Neighbours)
                {
                    neighbour.Neighbours.Add(result[i]);
                }
            }

            for (var i = 0; i < result.Length; ++i)
            {
                for (var j = i + 1; j < result.Length; ++j)
                {
                    result[i].Neighbours.Add(result[j]);
                    result[j].Neighbours.Add(result[i]);
                }
            }

            return(result);
        }
コード例 #2
0
    public void ShouldReturnFalseWhenCallingDisconnectedOnTheSameRect()
    {
        // trivial test two rects that are the same
        var r1 = new RectInt(Vector2Int.zero, Vector2Int.one * 2);
        var r2 = new RectInt(Vector2Int.zero, Vector2Int.one * 2);

        Assert.IsFalse(RectUtil.AreDisconnected(r1, r2));
        Assert.IsFalse(RectUtil.AreDisconnected(r1, r1));
        Assert.IsFalse(RectUtil.AreDisconnected(r2, r2));
    }
コード例 #3
0
    public void ShouldReturnTrueApart()
    {
        var r1 = new RectInt(Vector2Int.zero, Vector2Int.one * 2);
        var r2 = new RectInt(Vector2Int.left * 3, Vector2Int.one * 2);
        var r3 = new RectInt(Vector2Int.right * 3, Vector2Int.one * 2);
        var r4 = new RectInt(Vector2Int.up * 3, Vector2Int.one * 2);
        var r5 = new RectInt(Vector2Int.down * 3, Vector2Int.one * 2);

        Assert.IsTrue(RectUtil.AreDisconnected(r1, r2));
        Assert.IsTrue(RectUtil.AreDisconnected(r1, r3));
        Assert.IsTrue(RectUtil.AreDisconnected(r1, r4));
        Assert.IsTrue(RectUtil.AreDisconnected(r1, r5));
    }
コード例 #4
0
    public void ShouldReturnFalseWhenRectsAreHalfTouching()
    {
        var r1 = new RectInt(Vector2Int.zero, Vector2Int.one * 2);
        var r2 = new RectInt(Vector2Int.right * 2 + Vector2Int.up, Vector2Int.one * 2);
        var r3 = new RectInt(Vector2Int.left * 2 + Vector2Int.down, Vector2Int.one * 2);
        var r4 = new RectInt(Vector2Int.up * 2 + Vector2Int.right, Vector2Int.one * 2);
        var r5 = new RectInt(Vector2Int.down * 2 + Vector2Int.left, Vector2Int.one * 2);

        Assert.IsFalse(RectUtil.AreDisconnected(r1, r2));
        Assert.IsFalse(RectUtil.AreDisconnected(r1, r3));
        Assert.IsFalse(RectUtil.AreDisconnected(r1, r4));
        Assert.IsFalse(RectUtil.AreDisconnected(r1, r5));
    }