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; }
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); }
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; }
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 ); } }