Пример #1
0
        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;
        }
Пример #2
0
        /// <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;
            }
        }