Exemple #1
0
/// Add a layer to this world.
///
/// @param[in] pLayer  Layer to add.
///
/// @return  True if the layer was added successfully, false if not.
///
/// @see RemoveLayer()
bool World::AddLayer( Layer* pLayer )
{
    // Make sure a valid layer not already attached to a world was specified.
    HELIUM_ASSERT( pLayer );
    if( !pLayer )
    {
        HELIUM_TRACE( TRACE_ERROR, TXT( "World::AddLayer(): Null layer specified.\n" ) );

        return false;
    }

    World* pExistingWorld = pLayer->GetWorld();
    HELIUM_ASSERT( !pExistingWorld );
    if( pExistingWorld )
    {
        HELIUM_TRACE(
            TRACE_ERROR,
            TXT( "World::AddLayer(): Layer \"%s\" is already bound to world \"%s\".\n" ),
            *pLayer->GetPath().ToString(),
            *pExistingWorld->GetPath().ToString() );

        return false;
    }

    // Add the layer to our layer list and set it referencing back to this world.
    size_t layerIndex = m_layers.Push( LayerPtr( pLayer ) );
    HELIUM_ASSERT( IsValid( layerIndex ) );
    pLayer->SetWorldInfo( this, layerIndex );

    // Attach all entities in the layer.
    size_t entityCount = pLayer->GetEntityCount();
    for( size_t entityIndex = 0; entityIndex < entityCount; ++entityIndex )
    {
        Entity* pEntity = pLayer->GetEntity( entityIndex );
        HELIUM_ASSERT( pEntity );
        pEntity->Attach();
    }

    return true;
}