//----------------------------------------------------------------------------- // addObject() //----------------------------------------------------------------------------- BOOL LLViewerJointAttachment::addObject(LLViewerObject* object) { if (mAttachedObject) { llwarns << "Attempted to attach object where an attachment already exists!" << llendl; if (mAttachedObject == object) { llinfos << "(same object re-attached)" << llendl; removeObject(mAttachedObject); // Pass through anyway to let setupDrawable() // re-connect object to the joint correctly } else { llinfos << "(objects differ, removing existing object)" << llendl; // Rather hacky, but no-one can think of something // better to do for this case. gObjectList.killObject(mAttachedObject); // Proceed with new object attachment } } mAttachedObject = object; LLUUID item_id; // Find the inventory item ID of the attached object LLNameValue* item_id_nv = object->getNVPair("AttachItemID"); if( item_id_nv ) { const char* s = item_id_nv->getString(); if( s ) { item_id.set( s ); lldebugs << "getNVPair( AttachItemID ) = " << item_id << llendl; } } mItemID = item_id; LLDrawable* drawablep = object->mDrawable; if (drawablep) { //if object is active, make it static if(drawablep->isActive()) { drawablep->makeStatic(FALSE) ; } setupDrawable(drawablep); } if (mIsHUDAttachment) { if (object->mText.notNull()) { object->mText->setOnHUDAttachment(TRUE); } LLViewerObject::const_child_list_t& child_list = object->getChildren(); for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); iter != child_list.end(); iter++) { LLViewerObject* childp = *iter; if (childp && childp->mText.notNull()) { childp->mText->setOnHUDAttachment(TRUE); } } } calcLOD(); mUpdateXform = TRUE; return TRUE; }