Example #1
0
/// @name Serializer::SerializeObjectReference()
void GameObjectLoader::Linker::SerializeObjectReference( const GameObjectType* pType, GameObjectPtr& rspObject )
{
    HELIUM_ASSERT( pType );

    uint32_t linkIndex = rspObject.GetLinkIndex();
    rspObject.ClearLinkIndex();

    if( IsInvalid( linkIndex ) )
    {
        return;
    }

    if( linkIndex >= m_linkEntryCount )
    {
        HELIUM_TRACE(
            TRACE_ERROR,
            TXT( "GameObjectLoader: Invalid link index %" ) TPRIu32 TXT( " encountered.  Setting null reference.\n" ),
            linkIndex );

        m_bError = true;

        return;
    }

    GameObject* pObject = m_pLinkEntries[ linkIndex ].spObject;
    if( pObject )
    {
        if( !pObject->IsClass( pType ) )
        {
            HELIUM_TRACE(
                TRACE_ERROR,
                TXT( "GameObjectLoader: GameObject reference \"%s\" is not of the correct type (\"%s\").\n" ),
                *pObject->GetPath().ToString(),
                *pType->GetName() );

            m_bError = true;
        }
        else
        {
            rspObject = pObject;
        }
    }
}