コード例 #1
0
ファイル: Entity.cpp プロジェクト: chenwenbin928/tamy
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 );
    }
}
コード例 #2
0
ファイル: BaseNode.cpp プロジェクト: BlackYoup/medusa
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();
}
コード例 #3
0
ファイル: BaseNode.cpp プロジェクト: BlackYoup/medusa
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();
	}
}
コード例 #4
0
ファイル: BaseNode.cpp プロジェクト: BlackYoup/medusa
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();
	}
}