/// <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); }
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)); }
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)); }
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)); }