public OctreeNode BuildOctreeUpwards(Dictionary <Vector3, OctreeNode> seamNodes, Vector3 chunkMin) { Dictionary <Vector3, OctreeNode> parentNodes = new Dictionary <Vector3, OctreeNode> (); foreach (KeyValuePair <Vector3, OctreeNode> n in seamNodes) { if (n.Value.size == Chunk.size * 2) { return(n.Value); } int parentSize = 2 * n.Value.size; Vector3 deltaPos = n.Value.min - chunkMin; Vector3 offset = new Vector3(deltaPos.x % parentSize, deltaPos.y % parentSize, deltaPos.z % parentSize); Vector3 minoffs = offset / n.Value.size; Vector3 parentPos = n.Value.min - offset; OctreeNode parentNode; if (!parentNodes.TryGetValue(parentPos, out parentNode)) { parentNode = new OctreeNode(NodeType.INTERNAL, parentPos, parentSize); parentNode.AddChild(n.Value, minoffs); parentNodes.Add(parentPos, parentNode); } else { parentNode.AddChild(n.Value, minoffs); } } return(BuildOctreeUpwards(parentNodes, chunkMin)); }
public void TestReaddingOfChildNodeAfterRemovalByReference() { Node node = new OctreeNode(this.sceneManager); Node childNode = node.CreateChild(Name); node.RemoveChild(childNode); node.AddChild(childNode); }