Beispiel #1
0
    int EntityManager::deserializeEntity(Packet& packet)
    {
        // **************************************
        // Create the entity

        int ID = getNewEntityID();
        mEntityCount++;

        packet >> mUniqueIDs[ID];

        // Tell the observers that this entity has been created.
        for (auto observer : mObservers)
            observer->onEntityCreated(createEntityRef(ID));

        // **************************************
        // Deserialize the entity's components

        ComponentType componentCount;
        packet >> componentCount;

        for (std::size_t i = 0; i < static_cast<std::size_t>(componentCount); i++)
        {
            ComponentType type;
            packet >> type;

            addComponentToEntity(ID, type);
            mComponents[type][ID]->deserialize(packet, *this);
        }

        return ID;
    }
Beispiel #2
0
    void FancyMeshSystem::handleDataLoading( Ra::Engine::Entity* entity, const std::string& rootFolder, 
                                             const std::map<std::string, Ra::Core::Any>& data )
    {
        LOG(logDEBUG) << "FancyMeshSystem : loading " << data.size() << " data items...";

        // Find mesh
        std::string filename;
        auto meshData = data.find("mesh");
        if ( meshData != data.end() )
        {
            filename = rootFolder + "/" + meshData->second.as<std::string>();
        }

        DataVector componentsData = FancyMeshLoader::loadFile( filename );

        if (componentsData.empty())
        {
            // Something wrong happened while trying to load the file
            return;
        }

        if (componentsData.size() > 1)
        {
            LOG(logWARNING) << "Too much objects have been loaded, some data will be ignored.";
        }

        FancyComponentData componentData = componentsData[0];

        FancyMeshComponent* component = static_cast<FancyMeshComponent*>(addComponentToEntity(entity));
        component->handleMeshLoading(componentData);
    }
Beispiel #3
0
 FancyMeshComponent* FancyMeshSystem::addFancyMeshToEntity( Ra::Engine::Entity* entity,
                                                            const Ra::Core::TriangleMesh& mesh )
 {
     FancyMeshComponent* comp = static_cast<FancyMeshComponent*>( addComponentToEntity( entity ) );
     comp->addMeshRenderObject( mesh, "Mesh RenderObject" );
     return comp;
 }
Beispiel #4
0
    void FancyMeshSystem::handleFileLoading( const std::string& filename )
    {
        DataVector componentsData = FancyMeshLoader::loadFile( filename );

        for ( uint i = 0; i < componentsData.size(); ++i )
        {
            FancyComponentData data = componentsData[i];

            // Retrieve entity if exist, create it otherwise
            Ra::Engine::Entity* e = m_engine->getEntityManager()->getOrCreateEntity( data.name );
            e->setTransform( data.transform );

            FancyMeshComponent* component =
                static_cast<FancyMeshComponent*>( addComponentToEntity( e ) );

            component->handleMeshLoading( data );
        }
    }