public void Clone(DynamicTree <Physics2D.FixtureProxy> dynamicTree) { this._raycastStack.Clear(); var raycastEnum = dynamicTree._raycastStack.GetEnumerator(); while (raycastEnum.MoveNext()) { this._raycastStack.Add(raycastEnum.Current); } this._queryStack.Clear(); var queryEnum = dynamicTree._queryStack.GetEnumerator(); while (queryEnum.MoveNext()) { this._queryStack.Add(queryEnum.Current); } this._freeList = dynamicTree._freeList; this._nodeCapacity = dynamicTree._nodeCapacity; this._nodeCount = dynamicTree._nodeCount; this._root = dynamicTree._root; for (index = 0, length = _nodes.Count; index < length; index++) { WorldClone2D.poolTreeFixtureProxy.GiveBack(_nodes[index]); } this._nodes.Clear(); for (index = 0, length = dynamicTree._nodes.Length; index < length; index++) { TreeNode <Physics2D.FixtureProxy> tn = dynamicTree._nodes[index]; TreeNode <Physics2D.FixtureProxy> cloneTn = WorldClone2D.poolTreeFixtureProxy.GetNew(); cloneTn.AABB = tn.AABB; cloneTn.Child1 = tn.Child1; cloneTn.Child2 = tn.Child2; cloneTn.Height = tn.Height; cloneTn.ParentOrNext = tn.ParentOrNext; cloneTn.UserData = tn.UserData; this._nodes.Add(cloneTn); } }
public void Restore(DynamicTree <Physics2D.FixtureProxy> dynamicTree) { dynamicTree._raycastStack.Clear(); for (index = 0, length = _raycastStack.Count; index < length; index++) { dynamicTree._raycastStack.Push(_raycastStack[index]); } dynamicTree._queryStack.Clear(); for (index = 0, length = _queryStack.Count; index < length; index++) { dynamicTree._queryStack.Push(_queryStack[index]); } dynamicTree._freeList = this._freeList; dynamicTree._nodeCapacity = this._nodeCapacity; dynamicTree._nodeCount = this._nodeCount; dynamicTree._root = this._root; dynamicTree._nodes = new TreeNode <FixtureProxy> [this._nodes.Count]; for (index = 0, length = this._nodes.Count; index < length; index++) { TreeNode <FixtureProxy> cloneTn = this._nodes[index]; TreeNode <FixtureProxy> newTn = WorldClone2D.poolTreeFixtureProxy.GetNew(); newTn.AABB = cloneTn.AABB; newTn.Child1 = cloneTn.Child1; newTn.Child2 = cloneTn.Child2; newTn.Height = cloneTn.Height; newTn.ParentOrNext = cloneTn.ParentOrNext; newTn.UserData = cloneTn.UserData; dynamicTree._nodes[index] = newTn; } }