void Entity::remove( Entity& entity, bool release ) { // send proper notifications onChildDetached( entity ); entity.onDetached( *this ); // remove the record of the entity from the children collections // and from all affiliated models if ( m_hostModel != NULL ) { m_hostModel->remove( entity ); } entity.m_parent = NULL; // remove the entity from the managed entities list Children::iterator it = std::find( m_managedChildren.begin(), m_managedChildren.end(), &entity ); if ( it != m_managedChildren.end() ) { m_managedChildren.erase( it ); if ( release == true ) { delete &entity; } } // remove the entity from the runtime entities list it = std::find( m_children.begin(), m_children.end(), &entity ); if ( it != m_children.end() ) { m_children.erase( it ); } }
void BaseNode::detachAllNodes() { updateVersion(); for(size_t i=0;i<m_Children.size();i++) { BaseNode * pChild = m_Children[ i ]; if (! pChild ) continue; // inform the child it is being detached pChild->onDetaching(); // inform ourselves onDetach( pChild ); // set the parent pointer to NULL pChild->m_pParent = NULL; } m_Children.clear(); // notify this object that a child object has been detached onChildDetached(); }
void BaseNode::detachNodeSwap( int nChild ) { if ( nChild >= 0 && nChild < (int)m_Children.size() ) { updateVersion(); BaseNode * pChild = m_Children[ nChild ]; if ( pChild != NULL ) { // inform the child it is being detached pChild->onDetaching(); // inform ourselves onDetach( pChild ); // null the parent pointer and remove from the child list pChild->m_pParent = NULL; } removeSwapIndex( m_Children, nChild ); // notify this object that a child object has been detached onChildDetached(); } }
void BaseNode::detachNode( int child ) { ASSERT( this != NULL ); if ( child >= 0 && child < (int)m_Children.size() ) { updateVersion(); BaseNode * pChild = m_Children[ child ]; if ( pChild != NULL ) { // inform the child it is being detached pChild->onDetaching(); // inform ourselves onDetach( pChild ); // null the parent pointer and remove from the child list pChild->m_pParent = NULL; } m_Children.erase( m_Children.begin() + child ); // notify this object that a child object has been detached onChildDetached(); } }