Merge remote-tracking branch 'siana/master'

This commit is contained in:
Aleric Inglewood
2012-02-18 02:23:26 +01:00
8 changed files with 153 additions and 69 deletions

View File

@@ -2265,25 +2265,78 @@ class LLObjectDerender : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
LLViewerObject* slct = LLSelectMgr::getInstance()->getSelection()->getFirstObject();
LLViewerObject* slct = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
if(!slct)return true;
LLUUID id = slct->getID();
LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();
LLUUID root_key;
LLSelectNode* node = selection->getFirstRootNode();
if(node)root_key = node->getObject()->getID();
if(root_key.notNull())
//delivers null in linked parts if used as getFirstRootNode()
LLSelectNode* node = selection->getFirstRootNode(NULL,TRUE);
/*this works for derendering entire object if child is selected
LLSelectNode* node = selection->getFirstNode();
//Delivers node even when linked parts, but only first node
LLViewerObject* obj = node->getObject();
LLViewerObject* parent = (LLViewerObject*)obj->getParent();*/
if(node)
{
id = root_key;
//LLSelectMgr::getInstance()->removeObjectFromSelections(root_key);
root_key = node->getObject()->getID();
llinfos << "Derender node has key " << root_key << llendl;
}
LLSelectMgr::getInstance()->removeObjectFromSelections(id);
// ...don't kill the avatar
//if (!(id == gAgentID))
// <dogmode> Kill 'em all
if (true)
else
{
llinfos << "Derender node is null " << llendl;
}
LLViewerRegion* cur_region = gAgent.getRegion();
std::string entry_name;
if(slct->isAvatar()){
LLNameValue* firstname = slct->getNVPair("FirstName");
LLNameValue* lastname = slct->getNVPair("LastName");
entry_name = llformat("Derendered: (AV) %s %s",firstname->getString(),lastname->getString());
}
else{
if(root_key.isNull())
{
return true;
}
id = root_key;
if(!node->mName.empty())
{
if(cur_region)
entry_name = llformat("Derendered: %s in region %s",node->mName.c_str(),cur_region->getName().c_str());
else
entry_name = llformat("Derendered: %s",node->mName.c_str());
}
else
{
if(cur_region)
entry_name = llformat("Derendered: (unkown object) in region %s",cur_region->getName().c_str());
else
entry_name = "Derendered: (unkown object)";
}
}
LLSD indata;
indata["entry_type"] = 6; //AT_TEXTURE
indata["entry_name"] = entry_name;
indata["entry_agent"] = gAgent.getID();
// ...don't kill the avatar
if (!(id == gAgentID))
{
LLFloaterBlacklist::addEntry(id,indata);
LLSelectMgr::getInstance()->deselectAll();
LLViewerObject *objectp = gObjectList.findObject(id);
if (objectp)
{