public CoordInfo(CoordInfo fatherRange, QuadTreeAreaType childNodeType)
        {
            Center = fatherRange.Center;
            Range  = fatherRange.Range / 2;

            Init(childNodeType);
        }
        public QuadTreeNode InsertChild(QuadTreeAreaType childNodeType)
        {
            if (IsLeaf)
            {
                return(null);
            }

            CoordInfo childCoordRange = new CoordInfo(m_CoordRange, childNodeType);
            uint      childLayer      = m_Layer + 1;

            QuadTreeNode childNode;

            if (childLayer < QuadTreeConfig.MaxLayer)
            {
                childNode = new QuadTreeNode(childNodeType, childCoordRange, childLayer);
            }
            else
            {
                childNode = new QuadTreeLeafNode(childNodeType, childCoordRange);
            }

            m_Childs[(int)childNodeType] = childNode;

            return(childNode);
        }
Exemplo n.º 3
0
        public QuadTree(Vector3 center, int terrainSize)
        {
            CoordInfo rootCoordInfo = new CoordInfo()
            {
                Center = center,
                Range  = new Vector2(terrainSize, terrainSize)
            };

            m_Root = new QuadTreeRootNode(rootCoordInfo);

            BuildTree(m_Root);
        }
        public QuadTreeNode(QuadTreeAreaType areaType, CoordInfo coordRange, uint layer, bool leaf = false)
        {
            if (!leaf)
            {
                m_Childs = new List <QuadTreeNode>(QuadTreeConfig.ChildCount);
                for (int i = 0; i < QuadTreeConfig.ChildCount; i++)
                {
                    m_Childs.Add(null);
                }
            }

            m_AreaType   = areaType;
            m_CoordRange = coordRange;
            m_Layer      = layer;
        }
Exemplo n.º 5
0
 public QuadTreeRootNode(CoordInfo coordRange)
     : base(QuadTreeAreaType.None, coordRange, QuadTreeConfig.RootLayer)
 {
 }
Exemplo n.º 6
0
 public QuadTreeLeafNode(QuadTreeAreaType areaType, CoordInfo coordRange)
     : base(areaType, coordRange, QuadTreeConfig.MaxLayer, true)
 {
     m_GameObjects = new List <GameObject>();
 }