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); }
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; }
public QuadTreeRootNode(CoordInfo coordRange) : base(QuadTreeAreaType.None, coordRange, QuadTreeConfig.RootLayer) { }
public QuadTreeLeafNode(QuadTreeAreaType areaType, CoordInfo coordRange) : base(areaType, coordRange, QuadTreeConfig.MaxLayer, true) { m_GameObjects = new List <GameObject>(); }