public void Hierarchy_WithHierarchy_AddingIncrementally_MaintainsConsistency() { var go = m_Objects.CreateGameObject("root"); IncrementalHierarchyFunctions.Build(new [] { go }, out m_Hierarchy, Allocator.Temp); AssertSize(1); AssertConsistency(go); var c1 = m_Objects.CreateGameObject("c1"); c1.transform.SetParent(go.transform); IncrementalHierarchyFunctions.TryAddSingle(m_Hierarchy, c1); AssertSize(2); AssertConsistency(go); var c2 = m_Objects.CreateGameObject("c2"); c2.transform.SetParent(go.transform); IncrementalHierarchyFunctions.TryAddSingle(m_Hierarchy, c2); AssertSize(3); AssertConsistency(go); var c3 = m_Objects.CreateGameObject("c3"); c3.transform.SetParent(go.transform); IncrementalHierarchyFunctions.TryAddSingle(m_Hierarchy, c3); AssertSize(4); AssertConsistency(go); }
public void Hierarchy_WithHierarchy_Remove1By1_MaintainsConsistency() { var go = m_Objects.CreateGameObject("root"); var c1 = m_Objects.CreateGameObject("c1"); c1.transform.SetParent(go.transform); var c2 = m_Objects.CreateGameObject("c2"); c2.transform.SetParent(go.transform); var c3 = m_Objects.CreateGameObject("c3"); c3.transform.SetParent(go.transform); IncrementalHierarchyFunctions.Build(new [] { go }, out m_Hierarchy, Allocator.Temp); AssertSize(4); AssertConsistency(go); IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray <int>(new [] { c2.GetInstanceID() }, Allocator.Temp)); Object.DestroyImmediate(c2); AssertSize(3); AssertConsistency(go); IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray <int>(new [] { c1.GetInstanceID() }, Allocator.Temp)); Object.DestroyImmediate(c1); AssertSize(2); AssertConsistency(go); IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray <int>(new [] { c3.GetInstanceID() }, Allocator.Temp)); Object.DestroyImmediate(c3); AssertSize(1); AssertConsistency(go); IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray <int>(new [] { go.GetInstanceID() }, Allocator.Temp)); Object.DestroyImmediate(go); AssertSize(0); }
public void Hierarchy_WithSingleGameObject_IsEmptyAfterDelete() { var go = m_Objects.CreateGameObject("root"); IncrementalHierarchyFunctions.Build(new [] { go }, out m_Hierarchy, Allocator.Temp); AssertSize(1); AssertConsistency(go); IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray <int>(new [] { go.GetInstanceID() }, Allocator.Temp)); AssertSize(0); }
public void Hierarchy_WithHierarchy_DeleteRemovesFullHierarchy() { var go = m_Objects.CreateGameObject("root"); m_Objects.CreateGameObject("c1").transform.SetParent(go.transform); m_Objects.CreateGameObject("c2").transform.SetParent(go.transform); m_Objects.CreateGameObject("c3").transform.SetParent(go.transform); IncrementalHierarchyFunctions.Build(new [] { go }, out m_Hierarchy, Allocator.Temp); AssertSize(4); AssertConsistency(go); IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray <int>(new [] { go.GetInstanceID() }, Allocator.Temp)); AssertSize(0); }
public void Hierarchy_WithHierarchy_BuildIsConsistent() { var go = m_Objects.CreateGameObject("root"); var c1 = m_Objects.CreateGameObject("c1"); c1.transform.SetParent(go.transform); var c2 = m_Objects.CreateGameObject("c2"); c2.transform.SetParent(go.transform); var c3 = m_Objects.CreateGameObject("c3"); c3.transform.SetParent(go.transform); IncrementalHierarchyFunctions.Build(new [] { go }, out m_Hierarchy, Allocator.Temp); AssertSize(4); AssertConsistency(go); }
public void Hierarchy_WithHierarchy_DeleteOutOfOrder_MaintainsConsistency() { var root1 = m_Objects.CreateGameObject("root1"); var c1 = m_Objects.CreateGameObject("c1"); c1.transform.SetParent(root1.transform); var c2 = m_Objects.CreateGameObject("c2"); c2.transform.SetParent(c1.transform); IncrementalHierarchyFunctions.Build(new [] { root1 }, out m_Hierarchy, Allocator.Temp); AssertSize(3); AssertConsistency(root1); IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray <int>(new [] { c2.GetInstanceID(), c1.GetInstanceID() }, Allocator.Temp)); Object.DestroyImmediate(c1); AssertSize(1); AssertConsistency(root1); }
public void Hierarchy_WithHierarchy_DeleteSeparateHierarchy_MaintainsConsistency() { var root1 = m_Objects.CreateGameObject("root1"); m_Objects.CreateGameObject("c1").transform.SetParent(root1.transform); var root2 = m_Objects.CreateGameObject("root2"); m_Objects.CreateGameObject("c2").transform.SetParent(root2.transform); IncrementalHierarchyFunctions.Build(new [] { root1, root2 }, out m_Hierarchy, Allocator.Temp); AssertSize(4); AssertConsistency(root1); AssertConsistency(root2); IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray <int>(new [] { root1.GetInstanceID() }, Allocator.Temp)); Object.DestroyImmediate(root1); AssertSize(2); AssertConsistency(root2); IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray <int>(new [] { root2.GetInstanceID() }, Allocator.Temp)); AssertSize(0); }
public void Hierarchy_CollectChildIndices_WithHierarchy() { var go = new GameObject("root"); new GameObject("c1").transform.SetParent(go.transform); var c2 = new GameObject("c2"); c2.transform.SetParent(go.transform); new GameObject("c3").transform.SetParent(go.transform); new GameObject("c21").transform.SetParent(c2.transform); new GameObject("c22").transform.SetParent(c2.transform); IncrementalHierarchyFunctions.Build(new [] { go }, out m_Hierarchy, Allocator.TempJob); var changedIds = new NativeList <int>(1, Allocator.TempJob); changedIds.Add(go.GetInstanceID()); var visitedIndices = new NativeHashMap <int, bool>(6, Allocator.TempJob); try { m_Hierarchy.AsReadOnly().CollectHierarchyInstanceIdsAndIndicesAsync(changedIds, visitedIndices).Complete(); Assert.AreEqual(6, changedIds.Length); Assert.AreEqual(6, visitedIndices.Count()); foreach (var id in GetInstanceIds(go)) { Assert.IsTrue(changedIds.Contains(id)); var index = m_Hierarchy.IndexByInstanceId[id]; bool success = visitedIndices.TryGetValue(index, out bool isInOriginalList); Assert.IsTrue(success); Assert.AreEqual(id == go.GetInstanceID(), isInOriginalList); } } finally { changedIds.Dispose(); visitedIndices.Dispose(); GameObject.DestroyImmediate(go); } }
public void Hierarchy_WithHierarchy_ChangingParents_MaintainsConsistency() { var go = m_Objects.CreateGameObject("root"); var c1 = m_Objects.CreateGameObject("c1"); c1.transform.SetParent(go.transform); var c2 = m_Objects.CreateGameObject("c2"); c2.transform.SetParent(go.transform); var c3 = m_Objects.CreateGameObject("c3"); c3.transform.SetParent(go.transform); IncrementalHierarchyFunctions.Build(new [] { go }, out m_Hierarchy, Allocator.Temp); AssertSize(4); AssertConsistency(go); var parentChanges = new NativeHashMap <int, int>(0, Allocator.Temp); c3.transform.SetParent(c2.transform); parentChanges.Add(c3.GetInstanceID(), c2.GetInstanceID()); var success = new NativeList <IncrementalConversionChanges.ParentChange>(Allocator.Temp); IncrementalHierarchyFunctions.ChangeParents(m_Hierarchy, parentChanges.GetKeyValueArrays(Allocator.Temp), default, success);