protected void Fork(ushort numLevels, bool useCache, bool branching) { if (childrenCached == null) { Vector2 childSize = size * 0.5f; children = new PureQuadTreeNode[4]; children[0] = new PureQuadTreeNode(location, childSize, (ushort)(level + 1), this, 0); children[1] = new PureQuadTreeNode(new Vector2(location.X + childSize.X, location.Y), childSize, (ushort)(level + 1), this, 1); children[2] = new PureQuadTreeNode(new Vector2(location.X, location.Y + childSize.Y), childSize, (ushort)(level + 1), this, 2); children[3] = new PureQuadTreeNode(location + childSize, childSize, (ushort)(level + 1), this, 3); } else if (useCache) { children = childrenCached; } if (numLevels > 1) { for (int i = 0; i < 4; i++) { children[i].Fork((ushort)(numLevels - 1), useCache); } } else if (useCache && childrenCached != null) { for (int i = 0; i < 4; i++) { children[i].Chop(useCache); } } depth = numLevels; }
/// <summary> /// Initializes a new instance of the PureQuadTreeNode class. /// </summary> /// <param name="location"></param> /// <param name="size"></param> /// <param name="level"></param> /// <param name="parent"></param> /// <param name="childNum"></param> public PureQuadTreeNode(Vector2 location, Vector2 size, ushort level, PureQuadTreeNode parent, uint childNum) { this.location = location; this.parent = parent; this.size = size; this.level = level; depth = 0; centre = location + (size * 0.5f); if (parent != null) { code = parent.code | (childNum << (level * 2)); } else { code = childNum; } }