void ConnectedAdapter::setAttributes(Eris::Entity* entity, Atlas::Message::MapType& elements) { try { Atlas::Objects::Entity::Anonymous what; what->setId(entity->getId()); //We'll use this flag to make sure that nothing gets sent in the case that the only thing changed was immutable attributes (like "pos"). bool areAttributesToSend = false; for (Atlas::Message::MapType::iterator I = elements.begin(); I != elements.end(); ++I) { //The "pos" attribute is immutable and cannot be altered by a "set" op. Instead we must use a "move" op. if (I->first == "pos") { place(entity, entity->getLocation(), WFMath::Point<3>(I->second)); } else { what->setAttr(I->first, I->second); areAttributesToSend = true; } } if (areAttributesToSend) { Atlas::Objects::Operation::Set setOp; setOp->setFrom(mAvatar.getEntity()->getId()); //setOp->setTo(entity->getId()); setOp->setArgs1(what); S_LOG_INFO("Setting attributes of entity with id " << entity->getId() << ", named " << entity->getName()); mConnection.send(setOp); } } catch (const std::exception& ex) { S_LOG_WARNING("Got error on setting attributes on entity." << ex); } }
void DetachedEntity::setFromMessage(const Atlas::Message::MapType& attrs) { beginUpdate(); Atlas::Message::MapType::const_iterator A; /* attrs.erase("loc"); attrs.erase("id"); attrs.erase("contains"); if (!allowMove) filterMoveAttrs(attrs); */ for (A = attrs.begin(); A != attrs.end(); ++A) { if (A->first == "loc" || A->first == "id" || A->first == "contains") continue; // see if the value in the sight matches the exsiting value Eris::Entity::AttrMap::iterator I = m_attrs.find(A->first); if ((I != m_attrs.end()) && (I->second == A->second)) continue; setAttr(A->first, A->second); } endUpdate(); }
void setFromMessage(const Atlas::Message::MapType& attrs) { beginUpdate(); Atlas::Message::MapType::const_iterator A; for (A = attrs.begin(); A != attrs.end(); ++A) { if (A->first == "loc" || A->first == "id" || A->first == "contains") continue; Eris::Entity::AttrMap::iterator I = m_attrs.find(A->first); if ((I != m_attrs.end()) && (I->second == A->second)) continue; setAttr(A->first, A->second); } endUpdate(); }