//virtual void LLViewerOctreeGroup::unbound() { if (isDirty()) { return; } setState(DIRTY); //all the parent nodes need to rebound this child if (mOctreeNode) { OctreeNode* parent = (OctreeNode*) mOctreeNode->getParent(); while (parent != NULL) { LLViewerOctreeGroup* group = (LLViewerOctreeGroup*) parent->getListener(0); if (!group || group->isDirty()) { return; } group->setState(DIRTY); parent = (OctreeNode*) parent->getParent(); } } }
void OctreeNode::updateObjectPosition(Object3D* object){ OctreeNode* actualNode = object->getOctreeNode(); actualNode->objects.remove(object); if(actualNode->objectsInBranch()==0){ actualNode->clearChildren(); } if (actualNode->objectFits(object)){ actualNode->addObject(object); return; } OctreeNode* parent =actualNode->getParent(); if(parent == NULL){ actualNode->objects.push_back(object); return; } object->setOctreeNode(parent); updateObjectPosition(object); }