void EntityEditor::operationGetThoughtResult(const Atlas::Objects::Operation::RootOperation& op) { //What we receive here has been relayed from the mind of the entity. That means that this op //is potentially unsafe, as it could be of any type (Set, Logout etc.), all depending on what the //mind client decided to send (i.e. someone might want to try to hack). We should therefore treat it //very carefully. if (op->getClassNo() == Atlas::Objects::Operation::ROOT_OPERATION_NO) { //An empty root operation signals a timeout; we never got any answer from the entity. return; } //Since we'll just be iterating over the args we only need to do an extra check that what we got is a //"think" operation. if (op->getParents().empty()) { S_LOG_WARNING("Got think operation without any parent set."); return; } if (op->getParents().front() != "think") { S_LOG_WARNING("Got think operation with wrong type set."); return; } if (!op->getArgs().empty()) { auto thoughts = op->getArgsAsList(); for (auto thought : thoughts) { EventGotThought(thought); } } else { S_LOG_VERBOSE("Got thought op without any thoughts."); } }
void SoundEntity::Entity_Action(const Atlas::Objects::Operation::RootOperation& act) { const std::list<std::string> &p = act->getParents(); std::list<std::string>::const_iterator I = p.begin(); if (I != p.end()) { const std::string& name = *I; playAction(name); } }
void EmberEntity::onAction(const Atlas::Objects::Operation::RootOperation& act) { const std::list<std::string> &p = act->getParents(); std::list<std::string>::const_iterator I = p.begin(); if (I != p.end()) { const std::string& name = *I; std::string message = getName() + " performs a " + name + "."; ConsoleBackend::getSingletonPtr()->pushMessage(message, "info"); S_LOG_VERBOSE("Entity: " << this->getId() << " (" << this->getName() << ") action: " << name); } Entity::onAction(act); }
void EmberEntity::onSoundAction(const Atlas::Objects::Operation::RootOperation & op) { //We'll just catch the call and write something to both the log and the console, and then pass it on. const std::list<std::string> &p = op->getParents(); std::list<std::string>::const_iterator I = p.begin(); if (I != p.end()) { const std::string& name = *I; std::string message = getName() + " emits a " + name + "."; ConsoleBackend::getSingletonPtr()->pushMessage(message, "info"); S_LOG_VERBOSE("Entity: " << this->getId() << " (" << this->getName() << ") sound action: " << name); } Eris::Entity::onSoundAction(op); }