int WFObject::load(char *filename) { fstream objFile; objFile.open(filename); if(objFile.is_open()) { char line[255]; // Parse object file line by line while(objFile.good()) { objFile.getline(line, 255); parseLine(line); } objFile.close(); } else { cout << "Could not open WFObject file '" << filename << "'\n"; return false; } modelRepresentation(); return true; }
void EmberEntityLoader::removeEmberEntity(EmberEntity* entity) { if (!entity) { S_LOG_WARNING("Tried to remove a null ref entity from the paged geometry."); return; } #if EMBERENTITYLOADER_USEBATCH EntityLookup::iterator I = mEntityLookup.find(entity); if (I != mEntityLookup.end()) { EntityStore::iterator J = mEntities.find(I->second.first); if (J != mEntities.end()) { EntityColumn& column(J->second); EntityColumn::iterator K = column.find(I->second.second); if (K != column.end()) { EntityMap& entityMap(K->second); EntityMap::iterator L = entityMap.find(entity->getId()); if (L != entityMap.end()) { L->second.movedConnection.disconnect(); L->second.beingDeletedConnection.disconnect(); entityMap.erase(L); mEntityLookup.erase(I); } } } } #else EntityMap::iterator I = mEntities.find(entity->getId()); if (I != mEntities.end()) { ModelRepresentationInstance& instance(I->second); Model::ModelRepresentation* modelRepresentation(instance.modelRepresentation); instance.movedConnection.disconnect(); instance.beingDeletedConnection.disconnect(); //Reset the rendering distance to the one set by the model def. modelRepresentation->getModel().setRenderingDistance(modelRepresentation->getModel().getDefinition()->getRenderingDistance()); mEntities.erase(I); } #endif WFMath::Point<3> pos = entity->getViewPosition(); if (pos.isValid()) { //Rebuild geometry if necessary. mGeom.reloadGeometryPage(Convert::toOgre(pos)); } }
void EmberEntityLoader::loadPage(::Forests::PageInfo & page) { static Ogre::ColourValue colour(1, 1, 1, 1); #if EMBERENTITYLOADER_USEBATCH const int batchX = static_cast<int>(Ogre::Math::Floor(page.bounds.left/ mBatchSize)); const int batchY = static_cast<int>(Ogre::Math::Floor(page.bounds.top / mBatchSize)); EntityMap& entities(mEntities[batchX][batchY]); #else EntityMap& entities(mEntities); #endif for (EntityMap::iterator I = entities.begin(); I != entities.end(); ++I) { ModelRepresentationInstance& instance(I->second); Model::ModelRepresentation* modelRepresentation(instance.modelRepresentation); EmberEntity& emberEntity = modelRepresentation->getEntity(); if (emberEntity.isVisible()) { WFMath::Point<3> viewPos = emberEntity.getViewPosition(); if (viewPos.isValid()) { Ogre::Vector3 pos(Convert::toOgre(viewPos)); Model::Model& model(modelRepresentation->getModel()); Ogre::Node* node = model.getParentNode(); if (node) { const Ogre::Vector3& pos = node->_getDerivedPosition(); if (pos.x > page.bounds.left && pos.x < page.bounds.right && pos.z > page.bounds.top && pos.z < page.bounds.bottom) { for (Model::Model::SubModelSet::const_iterator J = model.getSubmodels().begin(); J != model.getSubmodels().end(); ++J) { // if (!(*J)->getEntity()->getParentSceneNode()) { // model->getParentSceneNode()->attachObject((*J)->getEntity()); // } // if ((*J)->getEntity()->isVisible()) { addEntity((*J)->getEntity(), pos, node->_getDerivedOrientation(), modelRepresentation->getScale(), colour); // (*J)->getEntity()->setVisible(false); // } } } } } } } }