MojErr ContainerManager::InfoToJson(MojObject& rep) const { MojObject containers(MojObject::TypeArray); std::for_each(m_containers.begin(), m_containers.end(), boost::bind(&ResourceContainer::PushJson, boost::bind(&ContainerMap::value_type::second, _1), boost::ref(containers))); MojErr err = rep.put(_T("containers"), containers); MojErrCheck(err); MojObject entityMap(MojObject::TypeArray); for (EntityContainerMap::const_iterator iter = m_entityContainers.begin(); iter != m_entityContainers.end(); ++iter) { MojObject mapping(MojObject::TypeObject); MojString containerName; err = containerName.assign(iter->second->GetName().c_str()); MojErrCheck(err); err = mapping.put(iter->first->GetName().c_str(), containerName); MojErrCheck(err); err = entityMap.push(mapping); MojErrCheck(err); } err = rep.put(_T("entityMap"), entityMap); MojErrCheck(err); return MojErrNone; }
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::EmberEntity_Moved(EmberEntity* entity) { EntityMap* entityMap(getStoreForEntity(entity)); if (entityMap) { EntityMap::iterator I = entityMap->find(entity->getId()); if (I != entityMap->end()) { ModelRepresentationInstance& instance(I->second); if (!instance.lastPosition.isNaN()) { mGeom.reloadGeometryPage(instance.lastPosition); } WFMath::Point<3> viewPos = entity->getViewPosition(); if (viewPos.isValid()) { mGeom.reloadGeometryPage(Convert::toOgre(viewPos)); instance.lastPosition = Convert::toOgre(viewPos); } } } }
EmberEntityLoader::EntityMap* EmberEntityLoader::getStoreForEntity(EmberEntity* entity) { #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); return &entityMap; } } } return 0; #else return &mEntities; #endif }