diff options
47 files changed, 602 insertions, 820 deletions
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index a1b2a9fc44..645acca4ae 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -159,11 +159,11 @@ bool handleSlowMotionAnimation(const LLSD& newvalue)  {  	if (newvalue.asBoolean())  	{ -		gAgent.getAvatarObject()->setAnimTimeFactor(0.2f); +		gAgentAvatar->setAnimTimeFactor(0.2f);  	}  	else  	{ -		gAgent.getAvatarObject()->setAnimTimeFactor(1.0f); +		gAgentAvatar->setAnimTimeFactor(1.0f);  	}  	return true;  } @@ -207,8 +207,6 @@ LLAgent::LLAgent() :  	mDistanceTraveled(0.F),  	mLastPositionGlobal(LLVector3d::zero), -	mAvatarObject(NULL), -  	mRenderState(0),  	mTypingTimer(), @@ -294,7 +292,6 @@ void LLAgent::init()  //-----------------------------------------------------------------------------  void LLAgent::cleanup()  { -	mAvatarObject = NULL;  	mRegionp = NULL;  } @@ -325,12 +322,12 @@ void LLAgent::onAppFocusGained()  void LLAgent::ageChat()  { -	if (mAvatarObject.notNull()) +	if (isAgentAvatarValid())  	{  		// get amount of time since I last chatted -		F64 elapsed_time = (F64)mAvatarObject->mChatTimer.getElapsedTimeF32(); +		F64 elapsed_time = (F64)gAgentAvatar->mChatTimer.getElapsedTimeF32();  		// add in frame time * 3 (so it ages 4x) -		mAvatarObject->mChatTimer.setAge(elapsed_time + (F64)gFrameDTClamped * (CHAT_AGE_FAST_RATE - 1.0)); +		gAgentAvatar->mChatTimer.setAge(elapsed_time + (F64)gFrameDTClamped * (CHAT_AGE_FAST_RATE - 1.0));  	}  } @@ -517,20 +514,20 @@ BOOL LLAgent::getFlying() const  //-----------------------------------------------------------------------------  void LLAgent::setFlying(BOOL fly)  { -	if (mAvatarObject.notNull()) +	if (isAgentAvatarValid())  	{  		// *HACK: Don't allow to start the flying mode if we got ANIM_AGENT_STANDUP signal  		// because in this case we won't get a signal to start avatar flying animation and  		// it will be walking with flying mode "ON" indication. However we allow to switch  		// the flying mode off if we get ANIM_AGENT_STANDUP signal. See process_avatar_animation().  		// See EXT-2781. -		if(fly && mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_STANDUP) != mAvatarObject->mSignaledAnimations.end()) +		if(fly && gAgentAvatar->mSignaledAnimations.find(ANIM_AGENT_STANDUP) != gAgentAvatar->mSignaledAnimations.end())  		{  			return;  		}  		// don't allow taking off while sitting -		if (fly && mAvatarObject->isSitting()) +		if (fly && gAgentAvatar->isSitting())  		{  			return;  		} @@ -583,9 +580,9 @@ void LLAgent::toggleFlying()  bool LLAgent::enableFlying()  {  	BOOL sitting = FALSE; -	if (gAgent.getAvatarObject()) +	if (isAgentAvatarValid())  	{ -		sitting = gAgent.getAvatarObject()->isSitting(); +		sitting = gAgentAvatar->isSitting();  	}  	return !sitting;  } @@ -755,9 +752,9 @@ void LLAgent::sendReliableMessage()  //-----------------------------------------------------------------------------  LLVector3 LLAgent::getVelocity() const  { -	if (mAvatarObject.notNull()) +	if (isAgentAvatarValid())  	{ -		return mAvatarObject->getVelocity(); +		return gAgentAvatar->getVelocity();  	}  	else  	{ @@ -776,13 +773,13 @@ void LLAgent::setPositionAgent(const LLVector3 &pos_agent)  		llerrs << "setPositionAgent is not a number" << llendl;  	} -	if (mAvatarObject.notNull() && mAvatarObject->getParent()) +	if (isAgentAvatarValid() && gAgentAvatar->getParent())  	{  		LLVector3 pos_agent_sitting;  		LLVector3d pos_agent_d; -		LLViewerObject *parent = (LLViewerObject*)mAvatarObject->getParent(); +		LLViewerObject *parent = (LLViewerObject*)gAgentAvatar->getParent(); -		pos_agent_sitting = mAvatarObject->getPosition() * parent->getRotation() + parent->getPositionAgent(); +		pos_agent_sitting = gAgentAvatar->getPosition() * parent->getRotation() + parent->getPositionAgent();  		pos_agent_d.setVec(pos_agent_sitting);  		mFrameAgent.setOrigin(pos_agent_sitting); @@ -803,9 +800,9 @@ void LLAgent::setPositionAgent(const LLVector3 &pos_agent)  //-----------------------------------------------------------------------------  const LLVector3d &LLAgent::getPositionGlobal() const  { -	if (mAvatarObject.notNull() && !mAvatarObject->mDrawable.isNull()) +	if (isAgentAvatarValid() && !gAgentAvatar->mDrawable.isNull())  	{ -		mPositionGlobal = getPosGlobalFromAgent(mAvatarObject->getRenderPosition()); +		mPositionGlobal = getPosGlobalFromAgent(gAgentAvatar->getRenderPosition());  	}  	else  	{ @@ -820,9 +817,9 @@ const LLVector3d &LLAgent::getPositionGlobal() const  //-----------------------------------------------------------------------------  const LLVector3 &LLAgent::getPositionAgent()  { -	if(mAvatarObject.notNull() && !mAvatarObject->mDrawable.isNull()) +	if (isAgentAvatarValid() && !gAgentAvatar->mDrawable.isNull())  	{ -		mFrameAgent.setOrigin(mAvatarObject->getRenderPosition());	 +		mFrameAgent.setOrigin(gAgentAvatar->getRenderPosition());	  	}  	return mFrameAgent.getOrigin(); @@ -948,21 +945,21 @@ LLVector3 LLAgent::getReferenceUpVector()  {  	// this vector is in the coordinate frame of the avatar's parent object, or the world if none  	LLVector3 up_vector = LLVector3::z_axis; -	if (mAvatarObject.notNull() &&  -		mAvatarObject->getParent() && -		mAvatarObject->mDrawable.notNull()) +	if (isAgentAvatarValid() &&  +		gAgentAvatar->getParent() && +		gAgentAvatar->mDrawable.notNull())  	{  		U32 camera_mode = gAgentCamera.getCameraAnimating() ? gAgentCamera.getLastCameraMode() : gAgentCamera.getCameraMode();  		// and in third person...  		if (camera_mode == CAMERA_MODE_THIRD_PERSON)  		{  			// make the up vector point to the absolute +z axis -			up_vector = up_vector * ~((LLViewerObject*)mAvatarObject->getParent())->getRenderRotation(); +			up_vector = up_vector * ~((LLViewerObject*)gAgentAvatar->getParent())->getRenderRotation();  		}  		else if (camera_mode == CAMERA_MODE_MOUSELOOK)  		{  			// make the up vector point to the avatar's +z axis -			up_vector = up_vector * mAvatarObject->mDrawable->getRotation(); +			up_vector = up_vector * gAgentAvatar->mDrawable->getRotation();  		}  	} @@ -998,7 +995,7 @@ F32 LLAgent::clampPitchToLimits(F32 angle)  	F32 angle_from_skyward = acos( mFrameAgent.getAtAxis() * skyward ); -	if (mAvatarObject.notNull() && mAvatarObject->isSitting()) +	if (isAgentAvatarValid() && gAgentAvatar->isSitting())  	{  		look_down_limit = 130.f * DEG_TO_RAD;  	} @@ -1171,10 +1168,9 @@ void LLAgent::clearAFK()  	// Gods can sometimes get into away state (via gestures)  	// without setting the appropriate control flag. JC -	LLVOAvatar* av = mAvatarObject;  	if (mControlFlags & AGENT_CONTROL_AWAY -		|| (av -			&& (av->mSignaledAnimations.find(ANIM_AGENT_AWAY) != av->mSignaledAnimations.end()))) +		|| (isAgentAvatarValid() +			&& (gAgentAvatar->mSignaledAnimations.find(ANIM_AGENT_AWAY) != gAgentAvatar->mSignaledAnimations.end())))  	{  		sendAnimationRequest(ANIM_AGENT_AWAY, ANIM_REQUEST_STOP);  		clearControlFlags(AGENT_CONTROL_AWAY); @@ -1235,7 +1231,7 @@ BOOL LLAgent::getBusy() const  //-----------------------------------------------------------------------------  void LLAgent::startAutoPilotGlobal(const LLVector3d &target_global, const std::string& behavior_name, const LLQuaternion *target_rotation, void (*finish_callback)(BOOL, void *),  void *callback_data, F32 stop_distance, F32 rot_threshold)  { -	if (!gAgent.getAvatarObject()) +	if (!isAgentAvatarValid())  	{  		return;  	} @@ -1296,7 +1292,7 @@ void LLAgent::startAutoPilotGlobal(const LLVector3d &target_global, const std::s  	LLViewerObject *obj;  	LLWorld::getInstance()->resolveStepHeightGlobal(NULL, target_global, traceEndPt, targetOnGround, groundNorm, &obj); -	F64 target_height = llmax((F64)gAgent.getAvatarObject()->getPelvisToFoot(), target_global.mdV[VZ] - targetOnGround.mdV[VZ]); +	F64 target_height = llmax((F64)gAgentAvatar->getPelvisToFoot(), target_global.mdV[VZ] - targetOnGround.mdV[VZ]);  	// clamp z value of target to minimum height above ground  	mAutoPilotTargetGlobal.mdV[VZ] = targetOnGround.mdV[VZ] + target_height; @@ -1396,12 +1392,9 @@ void LLAgent::autoPilot(F32 *delta_yaw)  			mAutoPilotTargetGlobal = object->getPositionGlobal();  		} -		if (mAvatarObject.isNull()) -		{ -			return; -		} +		if (!isAgentAvatarValid()) return; -		if (mAvatarObject->mInAir) +		if (gAgentAvatar->mInAir)  		{  			setFlying(TRUE);  		} @@ -1477,9 +1470,9 @@ void LLAgent::autoPilot(F32 *delta_yaw)  		// If we're flying, handle autopilot points above or below you.  		if (getFlying() && xy_distance < AUTOPILOT_HEIGHT_ADJUST_DISTANCE)  		{ -			if (mAvatarObject.notNull()) +			if (isAgentAvatarValid())  			{ -				F64 current_height = mAvatarObject->getPositionGlobal().mdV[VZ]; +				F64 current_height = gAgentAvatar->getPositionGlobal().mdV[VZ];  				F32 delta_z = (F32)(mAutoPilotTargetGlobal.mdV[VZ] - current_height);  				F32 slope = delta_z / xy_distance;  				if (slope > 0.45f && delta_z > 6.f) @@ -1560,9 +1553,9 @@ void LLAgent::propagate(const F32 dt)  	pitch(PITCH_RATE * mPitchKey * dt);  	// handle auto-land behavior -	if (mAvatarObject.notNull()) +	if (isAgentAvatarValid())  	{ -		BOOL in_air = mAvatarObject->mInAir; +		BOOL in_air = gAgentAvatar->mInAir;  		LLVector3 land_vel = getVelocity();  		land_vel.mV[VZ] = 0.f; @@ -1615,29 +1608,6 @@ std::ostream& operator<<(std::ostream &s, const LLAgent &agent)  	return s;  } - -// ------------------- Beginning of legacy LLCamera hack ---------------------- -// This section is included for legacy LLCamera support until -// it is no longer needed.  Some legacy code must exist in  -// non-legacy functions, and is labeled with "// legacy" comments. - -//----------------------------------------------------------------------------- -// setAvatarObject() -//----------------------------------------------------------------------------- -void LLAgent::setAvatarObject(LLVOAvatarSelf *avatar)			 -{  -	mAvatarObject = avatar; - -	if (!avatar) -	{ -		llinfos << "Setting LLAgent::mAvatarObject to NULL" << llendl; -		return; -	} -	 -	gAgentCamera.setAvatarObject(avatar); -	gAgentWearables.setAvatarObject(avatar); -} -  // TRUE if your own avatar needs to be rendered.  Usually only  // in third person and build.  //----------------------------------------------------------------------------- @@ -1809,26 +1779,26 @@ void LLAgent::endAnimationUpdateUI()  		}  		// Disable mouselook-specific animations -		if (mAvatarObject.notNull()) +		if (isAgentAvatarValid())  		{ -			if( mAvatarObject->isAnyAnimationSignaled(AGENT_GUN_AIM_ANIMS, NUM_AGENT_GUN_AIM_ANIMS) ) +			if( gAgentAvatar->isAnyAnimationSignaled(AGENT_GUN_AIM_ANIMS, NUM_AGENT_GUN_AIM_ANIMS) )  			{ -				if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_AIM_RIFLE_R) != mAvatarObject->mSignaledAnimations.end()) +				if (gAgentAvatar->mSignaledAnimations.find(ANIM_AGENT_AIM_RIFLE_R) != gAgentAvatar->mSignaledAnimations.end())  				{  					sendAnimationRequest(ANIM_AGENT_AIM_RIFLE_R, ANIM_REQUEST_STOP);  					sendAnimationRequest(ANIM_AGENT_HOLD_RIFLE_R, ANIM_REQUEST_START);  				} -				if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_AIM_HANDGUN_R) != mAvatarObject->mSignaledAnimations.end()) +				if (gAgentAvatar->mSignaledAnimations.find(ANIM_AGENT_AIM_HANDGUN_R) != gAgentAvatar->mSignaledAnimations.end())  				{  					sendAnimationRequest(ANIM_AGENT_AIM_HANDGUN_R, ANIM_REQUEST_STOP);  					sendAnimationRequest(ANIM_AGENT_HOLD_HANDGUN_R, ANIM_REQUEST_START);  				} -				if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_AIM_BAZOOKA_R) != mAvatarObject->mSignaledAnimations.end()) +				if (gAgentAvatar->mSignaledAnimations.find(ANIM_AGENT_AIM_BAZOOKA_R) != gAgentAvatar->mSignaledAnimations.end())  				{  					sendAnimationRequest(ANIM_AGENT_AIM_BAZOOKA_R, ANIM_REQUEST_STOP);  					sendAnimationRequest(ANIM_AGENT_HOLD_BAZOOKA_R, ANIM_REQUEST_START);  				} -				if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_AIM_BOW_L) != mAvatarObject->mSignaledAnimations.end()) +				if (gAgentAvatar->mSignaledAnimations.find(ANIM_AGENT_AIM_BOW_L) != gAgentAvatar->mSignaledAnimations.end())  				{  					sendAnimationRequest(ANIM_AGENT_AIM_BOW_L, ANIM_REQUEST_STOP);  					sendAnimationRequest(ANIM_AGENT_HOLD_BOW_L, ANIM_REQUEST_START); @@ -1847,7 +1817,7 @@ void LLAgent::endAnimationUpdateUI()  			gMorphView->setVisible( FALSE );  		} -		if (mAvatarObject.notNull()) +		if (isAgentAvatarValid())  		{  			if(mCustomAnim)  			{ @@ -1907,43 +1877,43 @@ void LLAgent::endAnimationUpdateUI()  		gConsole->setVisible( TRUE ); -		if (mAvatarObject.notNull()) +		if (isAgentAvatarValid())  		{  			// Trigger mouselook-specific animations -			if( mAvatarObject->isAnyAnimationSignaled(AGENT_GUN_HOLD_ANIMS, NUM_AGENT_GUN_HOLD_ANIMS) ) +			if( gAgentAvatar->isAnyAnimationSignaled(AGENT_GUN_HOLD_ANIMS, NUM_AGENT_GUN_HOLD_ANIMS) )  			{ -				if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_HOLD_RIFLE_R) != mAvatarObject->mSignaledAnimations.end()) +				if (gAgentAvatar->mSignaledAnimations.find(ANIM_AGENT_HOLD_RIFLE_R) != gAgentAvatar->mSignaledAnimations.end())  				{  					sendAnimationRequest(ANIM_AGENT_HOLD_RIFLE_R, ANIM_REQUEST_STOP);  					sendAnimationRequest(ANIM_AGENT_AIM_RIFLE_R, ANIM_REQUEST_START);  				} -				if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_HOLD_HANDGUN_R) != mAvatarObject->mSignaledAnimations.end()) +				if (gAgentAvatar->mSignaledAnimations.find(ANIM_AGENT_HOLD_HANDGUN_R) != gAgentAvatar->mSignaledAnimations.end())  				{  					sendAnimationRequest(ANIM_AGENT_HOLD_HANDGUN_R, ANIM_REQUEST_STOP);  					sendAnimationRequest(ANIM_AGENT_AIM_HANDGUN_R, ANIM_REQUEST_START);  				} -				if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_HOLD_BAZOOKA_R) != mAvatarObject->mSignaledAnimations.end()) +				if (gAgentAvatar->mSignaledAnimations.find(ANIM_AGENT_HOLD_BAZOOKA_R) != gAgentAvatar->mSignaledAnimations.end())  				{  					sendAnimationRequest(ANIM_AGENT_HOLD_BAZOOKA_R, ANIM_REQUEST_STOP);  					sendAnimationRequest(ANIM_AGENT_AIM_BAZOOKA_R, ANIM_REQUEST_START);  				} -				if (mAvatarObject->mSignaledAnimations.find(ANIM_AGENT_HOLD_BOW_L) != mAvatarObject->mSignaledAnimations.end()) +				if (gAgentAvatar->mSignaledAnimations.find(ANIM_AGENT_HOLD_BOW_L) != gAgentAvatar->mSignaledAnimations.end())  				{  					sendAnimationRequest(ANIM_AGENT_HOLD_BOW_L, ANIM_REQUEST_STOP);  					sendAnimationRequest(ANIM_AGENT_AIM_BOW_L, ANIM_REQUEST_START);  				}  			} -			if (mAvatarObject->getParent()) +			if (gAgentAvatar->getParent())  			{  				LLVector3 at_axis = LLViewerCamera::getInstance()->getAtAxis(); -				LLViewerObject* root_object = (LLViewerObject*)mAvatarObject->getRoot(); +				LLViewerObject* root_object = (LLViewerObject*)gAgentAvatar->getRoot();  				if (root_object->flagCameraDecoupled())  				{  					resetAxes(at_axis);  				}  				else  				{ -					resetAxes(at_axis * ~((LLViewerObject*)mAvatarObject->getParent())->getRenderRotation()); +					resetAxes(at_axis * ~((LLViewerObject*)gAgentAvatar->getParent())->getRenderRotation());  				}  			}  		} @@ -1959,15 +1929,15 @@ void LLAgent::endAnimationUpdateUI()  		}  		// freeze avatar -		if (mAvatarObject.notNull()) +		if (isAgentAvatarValid())  		{ -			mPauseRequest = mAvatarObject->requestPause(); +			mPauseRequest = gAgentAvatar->requestPause();  		}  	} -	if (getAvatarObject()) +	if (isAgentAvatarValid())  	{ -		getAvatarObject()->updateAttachmentVisibility(gAgentCamera.getCameraMode()); +		gAgentAvatar->updateAttachmentVisibility(gAgentCamera.getCameraMode());  	}  	gFloaterTools->dirty(); @@ -2043,10 +2013,10 @@ void LLAgent::setStartPosition( U32 location_id )      LLVector3 agent_pos = getPositionAgent(); -    if (mAvatarObject.notNull()) +    if (isAgentAvatarValid())      {          // the z height is at the agent's feet -        agent_pos.mV[VZ] -= 0.5f * mAvatarObject->mBodySize.mV[VZ]; +        agent_pos.mV[VZ] -= 0.5f * gAgentAvatar->mBodySize.mV[VZ];      }      agent_pos.mV[VX] = llclamp( agent_pos.mV[VX], INSET, REGION_WIDTH - INSET ); @@ -2153,7 +2123,7 @@ void LLAgent::onAnimStop(const LLUUID& id)  		setControlFlags(AGENT_CONTROL_FINISH_ANIM);  		// now trigger dusting self off animation -		if (mAvatarObject.notNull() && !mAvatarObject->mBelowWater && rand() % 3 == 0) +		if (isAgentAvatarValid() && !gAgentAvatar->mBelowWater && rand() % 3 == 0)  			sendAnimationRequest( ANIM_AGENT_BRUSH, ANIM_REQUEST_START );  	}  	else if (id == ANIM_AGENT_PRE_JUMP || id == ANIM_AGENT_LAND || id == ANIM_AGENT_MEDIUM_LAND) @@ -2352,9 +2322,9 @@ void LLAgent::buildFullnameAndTitle(std::string& name) const  		name.erase(0, name.length());  	} -	if (mAvatarObject.notNull()) +	if (isAgentAvatarValid())  	{ -		name += mAvatarObject->getFullname(); +		name += gAgentAvatar->getFullname();  	}  } @@ -2500,14 +2470,14 @@ BOOL LLAgent::canJoinGroups() const  LLQuaternion LLAgent::getHeadRotation()  { -	if (mAvatarObject.isNull() || !mAvatarObject->mPelvisp || !mAvatarObject->mHeadp) +	if (!isAgentAvatarValid() || !gAgentAvatar->mPelvisp || !gAgentAvatar->mHeadp)  	{  		return LLQuaternion::DEFAULT;  	}  	if (!gAgentCamera.cameraMouselook())  	{ -		return mAvatarObject->getRotation(); +		return gAgentAvatar->getRotation();  	}  	// We must be in mouselook @@ -2516,9 +2486,9 @@ LLQuaternion LLAgent::getHeadRotation()  	LLVector3 left = up % look_dir;  	LLQuaternion rot(look_dir, left, up); -	if (mAvatarObject->getParent()) +	if (gAgentAvatar->getParent())  	{ -		rot = rot * ~mAvatarObject->getParent()->getRotation(); +		rot = rot * ~gAgentAvatar->getParent()->getRotation();  	}  	return rot; @@ -3141,8 +3111,7 @@ void LLAgent::processAgentCachedTextureResponse(LLMessageSystem *mesgsys, void *  {  	gAgentQueryManager.mNumPendingQueries--; -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp || avatarp->isDead()) +	if (!isAgentAvatarValid() || gAgentAvatar->isDead())  	{  		llwarns << "No avatar for user in cached texture update!" << llendl;  		return; @@ -3175,27 +3144,27 @@ void LLAgent::processAgentCachedTextureResponse(LLMessageSystem *mesgsys, void *  			if (texture_id.notNull())  			{  				//llinfos << "Received cached texture " << (U32)texture_index << ": " << texture_id << llendl; -				avatarp->setCachedBakedTexture(LLVOAvatarDictionary::bakedToLocalTextureIndex((EBakedTextureIndex)texture_index), texture_id); -				//avatarp->setTETexture( LLVOAvatar::sBakedTextureIndices[texture_index], texture_id ); +				gAgentAvatar->setCachedBakedTexture(LLVOAvatarDictionary::bakedToLocalTextureIndex((EBakedTextureIndex)texture_index), texture_id); +				//gAgentAvatar->setTETexture( LLVOAvatar::sBakedTextureIndices[texture_index], texture_id );  				gAgentQueryManager.mActiveCacheQueries[texture_index] = 0;  				num_results++;  			}  			else  			{  				// no cache of this bake. request upload. -				avatarp->requestLayerSetUpload((EBakedTextureIndex)texture_index); +				gAgentAvatar->requestLayerSetUpload((EBakedTextureIndex)texture_index);  			}  		}  	}  	llinfos << "Received cached texture response for " << num_results << " textures." << llendl; -	avatarp->updateMeshTextures(); +	gAgentAvatar->updateMeshTextures();  	if (gAgentQueryManager.mNumPendingQueries == 0)  	{  		// RN: not sure why composites are disabled at this point -		avatarp->setCompositeUpdatesEnabled(TRUE); +		gAgentAvatar->setCompositeUpdatesEnabled(TRUE);  		gAgent.sendAgentSetAppearance();  	}  } @@ -3248,11 +3217,10 @@ BOOL LLAgent::getHomePosGlobal( LLVector3d* pos_global )  void LLAgent::clearVisualParams(void *data)  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (avatarp) +	if (isAgentAvatarValid())  	{ -		avatarp->clearVisualParamWeights(); -		avatarp->updateVisualParams(); +		gAgentAvatar->clearVisualParamWeights(); +		gAgentAvatar->updateVisualParams();  	}  } @@ -3276,16 +3244,15 @@ bool LLAgent::teleportCore(bool is_local)  	// sync with other viewers. Discuss in DEV-14145/VWR-6744 before reenabling.  	// Stop all animation before actual teleporting  -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -        if (avatarp) +        if (isAgentAvatarValid())  	{ -		for ( LLVOAvatar::AnimIterator anim_it= avatarp->mPlayingAnimations.begin(); -		      anim_it != avatarp->mPlayingAnimations.end(); +		for ( LLVOAvatar::AnimIterator anim_it= gAgentAvatar->mPlayingAnimations.begin(); +		      anim_it != gAgentAvatar->mPlayingAnimations.end();  		      ++anim_it)                 { -                       avatarp->stopMotion(anim_it->first); +                       gAgentAvatar->stopMotion(anim_it->first);                 } -               avatarp->processAnimationStateChanges(); +               gAgentAvatar->processAnimationStateChanges();         }  #endif @@ -3478,13 +3445,11 @@ void LLAgent::stopCurrentAnimations()  {  	// This function stops all current overriding animations on this  	// avatar, propagating this change back to the server. - -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (avatarp) +	if (isAgentAvatarValid())  	{  		for ( LLVOAvatar::AnimIterator anim_it = -			      avatarp->mPlayingAnimations.begin(); -		      anim_it != avatarp->mPlayingAnimations.end(); +			      gAgentAvatar->mPlayingAnimations.begin(); +		      anim_it != gAgentAvatar->mPlayingAnimations.end();  		      anim_it++)  		{  			if (anim_it->first == @@ -3497,7 +3462,7 @@ void LLAgent::stopCurrentAnimations()  			else  			{  				// stop this animation locally -				avatarp->stopMotion(anim_it->first, TRUE); +				gAgentAvatar->stopMotion(anim_it->first, TRUE);  				// ...and tell the server to tell everyone.  				sendAnimationRequest(anim_it->first, ANIM_REQUEST_STOP);  			} @@ -3604,7 +3569,7 @@ void LLAgent::requestLeaveGodMode()  //-----------------------------------------------------------------------------  void LLAgent::sendAgentSetAppearance()  { -	if (mAvatarObject.isNull()) return; +	if (!isAgentAvatarValid()) return;  	if (gAgentQueryManager.mNumPendingQueries > 0 && !gAgentCamera.cameraCustomizeAvatar())   	{ @@ -3612,7 +3577,7 @@ void LLAgent::sendAgentSetAppearance()  	} -	llinfos << "TAT: Sent AgentSetAppearance: " << mAvatarObject->getBakedStatusForPrintout() << llendl; +	llinfos << "TAT: Sent AgentSetAppearance: " << gAgentAvatar->getBakedStatusForPrintout() << llendl;  	//dumpAvatarTEs( "sendAgentSetAppearance()" );  	LLMessageSystem* msg = gMessageSystem; @@ -3626,7 +3591,7 @@ void LLAgent::sendAgentSetAppearance()  	// NOTE -- when we start correcting all of the other Havok geometry   	// to compensate for the COLLISION_TOLERANCE ugliness we will have   	// to tweak this number again -	const LLVector3 body_size = mAvatarObject->mBodySize; +	const LLVector3 body_size = gAgentAvatar->mBodySize;  	msg->addVector3Fast(_PREHASH_Size, body_size);	  	// To guard against out of order packets @@ -3636,20 +3601,20 @@ void LLAgent::sendAgentSetAppearance()  	// is texture data current relative to wearables?  	// KLW - TAT this will probably need to check the local queue. -	BOOL textures_current = mAvatarObject->areTexturesCurrent(); +	BOOL textures_current = gAgentAvatar->areTexturesCurrent();  	for(U8 baked_index = 0; baked_index < BAKED_NUM_INDICES; baked_index++ )  	{  		const ETextureIndex texture_index = LLVOAvatarDictionary::bakedToLocalTextureIndex((EBakedTextureIndex)baked_index);  		// if we're not wearing a skirt, we don't need the texture to be baked -		if (texture_index == TEX_SKIRT_BAKED && !mAvatarObject->isWearingWearableType(WT_SKIRT)) +		if (texture_index == TEX_SKIRT_BAKED && !gAgentAvatar->isWearingWearableType(WT_SKIRT))  		{  			continue;  		}  		// IMG_DEFAULT_AVATAR means not baked. 0 index should be ignored for baked textures -		if (!mAvatarObject->isTextureDefined(texture_index, 0)) +		if (!gAgentAvatar->isTextureDefined(texture_index, 0))  		{  			textures_current = FALSE;  			break; @@ -3687,7 +3652,7 @@ void LLAgent::sendAgentSetAppearance()  			msg->addU8Fast(_PREHASH_TextureIndex, (U8)texture_index);  		}  		msg->nextBlockFast(_PREHASH_ObjectData); -		mAvatarObject->sendAppearanceMessage( gMessageSystem ); +		gAgentAvatar->sendAppearanceMessage( gMessageSystem );  	}  	else  	{ @@ -3700,9 +3665,9 @@ void LLAgent::sendAgentSetAppearance()  	S32 transmitted_params = 0; -	for (LLViewerVisualParam* param = (LLViewerVisualParam*)mAvatarObject->getFirstVisualParam(); +	for (LLViewerVisualParam* param = (LLViewerVisualParam*)gAgentAvatar->getFirstVisualParam();  		 param; -		 param = (LLViewerVisualParam*)mAvatarObject->getNextVisualParam()) +		 param = (LLViewerVisualParam*)gAgentAvatar->getNextVisualParam())  	{  		if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE)  		{ diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index 891ce799d2..53b4fea1dc 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -51,7 +51,6 @@ extern const U8 	AGENT_STATE_TYPING;  // Typing indication  extern const U8 	AGENT_STATE_EDITING; // Set when agent has objects selected  class LLChat; -class LLVOAvatarSelf;  class LLViewerRegion;  class LLMotion;  class LLToolset; @@ -109,7 +108,6 @@ public:  	virtual 		~LLAgent();  	void			init();  	void			cleanup(); -	void			setAvatarObject(LLVOAvatarSelf *avatar);  	//--------------------------------------------------------------------  	// Login @@ -173,20 +171,6 @@ private:  /********************************************************************************   **                                                                            ** - **                    GENERAL ACCESSORS - **/ - -public: - 	LLVOAvatarSelf* getAvatarObject() const		{ return mAvatarObject; } -private: -	LLPointer<LLVOAvatarSelf> mAvatarObject; 	// NULL until avatar object sent down from simulator - -/**                    General Accessors - **                                                                            ** - *******************************************************************************/ - -/******************************************************************************** - **                                                                            **   **                    POSITION   **/ diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index b9555e1a37..62f1746f28 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -372,10 +372,9 @@ void LLAgentCamera::unlockView()  {  	if (getFocusOnAvatar())  	{ -		LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); -		if (avatarp) +		if (isAgentAvatarValid())  		{ -			setFocusGlobal(LLVector3d::zero, avatarp->mID); +			setFocusGlobal(LLVector3d::zero, gAgentAvatar->mID);  		}  		setFocusOnAvatar(FALSE, FALSE);	// no animation  	} @@ -1092,30 +1091,25 @@ void LLAgentCamera::updateLookAt(const S32 mouse_x, const S32 mouse_y)  {  	static LLVector3 last_at_axis; -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); +	if (!isAgentAvatarValid()) return; -	if (!avatarp) -	{ -		return; -	} - -	LLQuaternion av_inv_rot = ~avatarp->mRoot.getWorldRotation(); -	LLVector3 root_at = LLVector3::x_axis * avatarp->mRoot.getWorldRotation(); +	LLQuaternion av_inv_rot = ~gAgentAvatar->mRoot.getWorldRotation(); +	LLVector3 root_at = LLVector3::x_axis * gAgentAvatar->mRoot.getWorldRotation();  	if 	((gViewerWindow->getMouseVelocityStat()->getCurrent() < 0.01f) &&  		 (root_at * last_at_axis > 0.95f))  	{ -		LLVector3 vel = avatarp->getVelocity(); +		LLVector3 vel = gAgentAvatar->getVelocity();  		if (vel.magVecSquared() > 4.f)  		{ -			setLookAt(LOOKAT_TARGET_IDLE, avatarp, vel * av_inv_rot); +			setLookAt(LOOKAT_TARGET_IDLE, gAgentAvatar, vel * av_inv_rot);  		}  		else  		{  			// *FIX: rotate mframeagent by sit object's rotation? -			LLQuaternion look_rotation = avatarp->isSitting() ? avatarp->getRenderRotation() : gAgent.getFrameAgent().getQuaternion(); // use camera's current rotation +			LLQuaternion look_rotation = gAgentAvatar->isSitting() ? gAgentAvatar->getRenderRotation() : gAgent.getFrameAgent().getQuaternion(); // use camera's current rotation  			LLVector3 look_offset = LLVector3(2.f, 0.f, 0.f) * look_rotation * av_inv_rot; -			setLookAt(LOOKAT_TARGET_IDLE, avatarp, look_offset); +			setLookAt(LOOKAT_TARGET_IDLE, gAgentAvatar, look_offset);  		}  		last_at_axis = root_at;  		return; @@ -1125,7 +1119,7 @@ void LLAgentCamera::updateLookAt(const S32 mouse_x, const S32 mouse_y)  	if (CAMERA_MODE_CUSTOMIZE_AVATAR == getCameraMode())  	{ -		setLookAt(LOOKAT_TARGET_NONE, avatarp, LLVector3(-2.f, 0.f, 0.f));	 +		setLookAt(LOOKAT_TARGET_NONE, gAgentAvatar, LLVector3(-2.f, 0.f, 0.f));	  	}  	else  	{ @@ -1154,7 +1148,7 @@ void LLAgentCamera::updateLookAt(const S32 mouse_x, const S32 mouse_y)  		headLookAxis = frameCamera.getAtAxis();  		// RN: we use world-space offset for mouselook and freelook  		//headLookAxis = headLookAxis * av_inv_rot; -		setLookAt(lookAtType, avatarp, headLookAxis); +		setLookAt(lookAtType, gAgentAvatar, headLookAxis);  	}  } @@ -1175,15 +1169,13 @@ void LLAgentCamera::updateCamera()  	validateFocusObject(); -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); - -	if (avatarp &&  -		avatarp->isSitting() && +	if (isAgentAvatarValid() &&  +		gAgentAvatar->isSitting() &&  		camera_mode == CAMERA_MODE_MOUSELOOK)  	{  		//Ventrella  		//changed camera_skyward to the new global "mCameraUpVector" -		mCameraUpVector = mCameraUpVector * avatarp->getRenderRotation(); +		mCameraUpVector = mCameraUpVector * gAgentAvatar->getRenderRotation();  		//end Ventrella  	} @@ -1291,7 +1283,7 @@ void LLAgentCamera::updateCamera()  	//Ventrella  	if ( mCameraMode == CAMERA_MODE_FOLLOW )  	{ -		if (avatarp) +		if (isAgentAvatarValid())  		{  			//--------------------------------------------------------------------------------  			// this is where the avatar's position and rotation are given to followCam, and  @@ -1299,13 +1291,13 @@ void LLAgentCamera::updateCamera()  			// (2) focus, and (3) upvector. They can then be queried elsewhere in llAgent.  			//--------------------------------------------------------------------------------  			// *TODO: use combined rotation of frameagent and sit object -			LLQuaternion avatarRotationForFollowCam = avatarp->isSitting() ? avatarp->getRenderRotation() : gAgent.getFrameAgent().getQuaternion(); +			LLQuaternion avatarRotationForFollowCam = gAgentAvatar->isSitting() ? gAgentAvatar->getRenderRotation() : gAgent.getFrameAgent().getQuaternion();  			LLFollowCamParams* current_cam = LLFollowCamMgr::getActiveFollowCamParams();  			if (current_cam)  			{  				mFollowCam.copyParams(*current_cam); -				mFollowCam.setSubjectPositionAndRotation( avatarp->getRenderPosition(), avatarRotationForFollowCam ); +				mFollowCam.setSubjectPositionAndRotation( gAgentAvatar->getRenderPosition(), avatarRotationForFollowCam );  				mFollowCam.update();  				LLViewerJoystick::getInstance()->setCameraNeedsUpdate(true);  			} @@ -1380,9 +1372,9 @@ void LLAgentCamera::updateCamera()  			gAgent.setShowAvatar(TRUE);  		} -		if (avatarp && (mCameraMode != CAMERA_MODE_MOUSELOOK)) +		if (isAgentAvatarValid() && (mCameraMode != CAMERA_MODE_MOUSELOOK))  		{ -			avatarp->updateAttachmentVisibility(mCameraMode); +			gAgentAvatar->updateAttachmentVisibility(mCameraMode);  		}  	}  	else  @@ -1480,40 +1472,40 @@ void LLAgentCamera::updateCamera()  	}  	gAgent.setLastPositionGlobal(global_pos); -	if (LLVOAvatar::sVisibleInFirstPerson && avatarp && !avatarp->isSitting() && cameraMouselook()) +	if (LLVOAvatar::sVisibleInFirstPerson && isAgentAvatarValid() && !gAgentAvatar->isSitting() && cameraMouselook())  	{ -		LLVector3 head_pos = avatarp->mHeadp->getWorldPosition() +  -			LLVector3(0.08f, 0.f, 0.05f) * avatarp->mHeadp->getWorldRotation() +  -			LLVector3(0.1f, 0.f, 0.f) * avatarp->mPelvisp->getWorldRotation(); +		LLVector3 head_pos = gAgentAvatar->mHeadp->getWorldPosition() +  +			LLVector3(0.08f, 0.f, 0.05f) * gAgentAvatar->mHeadp->getWorldRotation() +  +			LLVector3(0.1f, 0.f, 0.f) * gAgentAvatar->mPelvisp->getWorldRotation();  		LLVector3 diff = mCameraPositionAgent - head_pos; -		diff = diff * ~avatarp->mRoot.getWorldRotation(); +		diff = diff * ~gAgentAvatar->mRoot.getWorldRotation(); -		LLJoint* torso_joint = avatarp->mTorsop; -		LLJoint* chest_joint = avatarp->mChestp; +		LLJoint* torso_joint = gAgentAvatar->mTorsop; +		LLJoint* chest_joint = gAgentAvatar->mChestp;  		LLVector3 torso_scale = torso_joint->getScale();  		LLVector3 chest_scale = chest_joint->getScale();  		// shorten avatar skeleton to avoid foot interpenetration -		if (!avatarp->mInAir) +		if (!gAgentAvatar->mInAir)  		{  			LLVector3 chest_offset = LLVector3(0.f, 0.f, chest_joint->getPosition().mV[VZ]) * torso_joint->getWorldRotation();  			F32 z_compensate = llclamp(-diff.mV[VZ], -0.2f, 1.f);  			F32 scale_factor = llclamp(1.f - ((z_compensate * 0.5f) / chest_offset.mV[VZ]), 0.5f, 1.2f);  			torso_joint->setScale(LLVector3(1.f, 1.f, scale_factor)); -			LLJoint* neck_joint = avatarp->mNeckp; +			LLJoint* neck_joint = gAgentAvatar->mNeckp;  			LLVector3 neck_offset = LLVector3(0.f, 0.f, neck_joint->getPosition().mV[VZ]) * chest_joint->getWorldRotation();  			scale_factor = llclamp(1.f - ((z_compensate * 0.5f) / neck_offset.mV[VZ]), 0.5f, 1.2f);  			chest_joint->setScale(LLVector3(1.f, 1.f, scale_factor));  			diff.mV[VZ] = 0.f;  		} -		avatarp->mPelvisp->setPosition(avatarp->mPelvisp->getPosition() + diff); +		gAgentAvatar->mPelvisp->setPosition(gAgentAvatar->mPelvisp->getPosition() + diff); -		avatarp->mRoot.updateWorldMatrixChildren(); +		gAgentAvatar->mRoot.updateWorldMatrixChildren(); -		for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();  -			 iter != avatarp->mAttachmentPoints.end(); ) +		for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatar->mAttachmentPoints.begin();  +			 iter != gAgentAvatar->mAttachmentPoints.end(); )  		{  			LLVOAvatar::attachment_map_t::iterator curiter = iter++;  			LLViewerJointAttachment* attachment = curiter->second; @@ -1605,8 +1597,6 @@ LLVector3d LLAgentCamera::calcFocusPositionTargetGlobal()  		clearFocusObject();  	} -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); -  	// Ventrella  	if (mCameraMode == CAMERA_MODE_FOLLOW && mFocusOnAvatar)  	{ @@ -1617,12 +1607,12 @@ LLVector3d LLAgentCamera::calcFocusPositionTargetGlobal()  	{  		LLVector3d at_axis(1.0, 0.0, 0.0);  		LLQuaternion agent_rot = gAgent.getFrameAgent().getQuaternion(); -		if (avatarp && avatarp->getParent()) +		if (isAgentAvatarValid() && gAgentAvatar->getParent())  		{ -			LLViewerObject* root_object = (LLViewerObject*)avatarp->getRoot(); +			LLViewerObject* root_object = (LLViewerObject*)gAgentAvatar->getRoot();  			if (!root_object->flagCameraDecoupled())  			{ -				agent_rot *= ((LLViewerObject*)(avatarp->getParent()))->getRenderRotation(); +				agent_rot *= ((LLViewerObject*)(gAgentAvatar->getParent()))->getRenderRotation();  			}  		}  		at_axis = at_axis * agent_rot; @@ -1672,7 +1662,7 @@ LLVector3d LLAgentCamera::calcFocusPositionTargetGlobal()  		}  		return mFocusTargetGlobal;  	} -	else if (mSitCameraEnabled && avatarp && avatarp->isSitting() && mSitCameraReferenceObject.notNull()) +	else if (mSitCameraEnabled && isAgentAvatarValid() && gAgentAvatar->isSitting() && mSitCameraReferenceObject.notNull())  	{  		// sit camera  		LLVector3 object_pos = mSitCameraReferenceObject->getRenderPosition(); @@ -1691,12 +1681,10 @@ LLVector3d LLAgentCamera::calcThirdPersonFocusOffset()  {  	// ...offset from avatar  	LLVector3d focus_offset; - -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject();  	LLQuaternion agent_rot = gAgent.getFrameAgent().getQuaternion(); -	if (avatarp && avatarp->getParent()) +	if (isAgentAvatarValid() && gAgentAvatar->getParent())  	{ -		agent_rot *= ((LLViewerObject*)(avatarp->getParent()))->getRenderRotation(); +		agent_rot *= ((LLViewerObject*)(gAgentAvatar->getParent()))->getRenderRotation();  	}  	focus_offset = mFocusOffsetInitial[mCameraPreset] * agent_rot; @@ -1705,12 +1693,10 @@ LLVector3d LLAgentCamera::calcThirdPersonFocusOffset()  void LLAgentCamera::setupSitCamera()  { -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); -  	// agent frame entering this function is in world coordinates -	if (avatarp && avatarp->getParent()) +	if (isAgentAvatarValid() && gAgentAvatar->getParent())  	{ -		LLQuaternion parent_rot = ((LLViewerObject*)avatarp->getParent())->getRenderRotation(); +		LLQuaternion parent_rot = ((LLViewerObject*)gAgentAvatar->getParent())->getRenderRotation();  		// slam agent coordinate frame to proper parent local version  		LLVector3 at_axis = gAgent.getFrameAgent().getAtAxis();  		at_axis.mV[VZ] = 0.f; @@ -1773,13 +1759,11 @@ F32	LLAgentCamera::calcCameraFOVZoomFactor()  //-----------------------------------------------------------------------------  LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)  { -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); -  	// Compute base camera position and look-at points.  	F32			camera_land_height; -	LLVector3d	frame_center_global = !avatarp ?  +	LLVector3d	frame_center_global = !isAgentAvatarValid() ?   		gAgent.getPositionGlobal() : -		gAgent.getPosGlobalFromAgent(avatarp->mRoot.getWorldPosition()); +		gAgent.getPosGlobalFromAgent(gAgentAvatar->mRoot.getWorldPosition());  	BOOL		isConstrained = FALSE;  	LLVector3d	head_offset; @@ -1794,32 +1778,32 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)  	}// End Ventrella  	else if (mCameraMode == CAMERA_MODE_MOUSELOOK)  	{ -		if (!avatarp || avatarp->mDrawable.isNull()) +		if (!isAgentAvatarValid() || gAgentAvatar->mDrawable.isNull())  		{  			llwarns << "Null avatar drawable!" << llendl;  			return LLVector3d::zero;  		}  		head_offset.clearVec(); -		if (avatarp->isSitting() && avatarp->getParent()) +		if (gAgentAvatar->isSitting() && gAgentAvatar->getParent())  		{ -			avatarp->updateHeadOffset(); -			head_offset.mdV[VX] = avatarp->mHeadOffset.mV[VX]; -			head_offset.mdV[VY] = avatarp->mHeadOffset.mV[VY]; -			head_offset.mdV[VZ] = avatarp->mHeadOffset.mV[VZ] + 0.1f; -			const LLMatrix4& mat = ((LLViewerObject*) avatarp->getParent())->getRenderMatrix(); +			gAgentAvatar->updateHeadOffset(); +			head_offset.mdV[VX] = gAgentAvatar->mHeadOffset.mV[VX]; +			head_offset.mdV[VY] = gAgentAvatar->mHeadOffset.mV[VY]; +			head_offset.mdV[VZ] = gAgentAvatar->mHeadOffset.mV[VZ] + 0.1f; +			const LLMatrix4& mat = ((LLViewerObject*) gAgentAvatar->getParent())->getRenderMatrix();  			camera_position_global = gAgent.getPosGlobalFromAgent -								((avatarp->getPosition()+ -								 LLVector3(head_offset)*avatarp->getRotation()) * mat); +								((gAgentAvatar->getPosition()+ +								 LLVector3(head_offset)*gAgentAvatar->getRotation()) * mat);  		}  		else  		{ -			head_offset.mdV[VZ] = avatarp->mHeadOffset.mV[VZ]; -			if (avatarp->isSitting()) +			head_offset.mdV[VZ] = gAgentAvatar->mHeadOffset.mV[VZ]; +			if (gAgentAvatar->isSitting())  			{  				head_offset.mdV[VZ] += 0.1;  			} -			camera_position_global = gAgent.getPosGlobalFromAgent(avatarp->getRenderPosition());//frame_center_global; -			head_offset = head_offset * avatarp->getRenderRotation(); +			camera_position_global = gAgent.getPosGlobalFromAgent(gAgentAvatar->getRenderPosition());//frame_center_global; +			head_offset = head_offset * gAgentAvatar->getRenderRotation();  			camera_position_global = camera_position_global + head_offset;  		}  	} @@ -1829,8 +1813,8 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)  		F32 camera_distance = 0.f;  		if (mSitCameraEnabled  -			&& avatarp  -			&& avatarp->isSitting()  +			&& isAgentAvatarValid()  +			&& gAgentAvatar->isSitting()   			&& mSitCameraReferenceObject.notNull())  		{  			// sit camera @@ -1846,9 +1830,9 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)  			local_camera_offset = mCameraZoomFraction * getCameraOffsetInitial() * gSavedSettings.getF32("CameraOffsetScale");  			// are we sitting down? -			if (avatarp && avatarp->getParent()) +			if (isAgentAvatarValid() && gAgentAvatar->getParent())  			{ -				LLQuaternion parent_rot = ((LLViewerObject*)avatarp->getParent())->getRenderRotation(); +				LLQuaternion parent_rot = ((LLViewerObject*)gAgentAvatar->getParent())->getRenderRotation();  				// slam agent coordinate frame to proper parent local version  				LLVector3 at_axis = gAgent.getFrameAgent().getAtAxis() * parent_rot;  				at_axis.mV[VZ] = 0.f; @@ -1862,7 +1846,7 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)  				local_camera_offset = gAgent.getFrameAgent().rotateToAbsolute( local_camera_offset );  			} -			if (!mCameraCollidePlane.isExactlyZero() && (!avatarp || !avatarp->isSitting())) +			if (!mCameraCollidePlane.isExactlyZero() && (!isAgentAvatarValid() || !gAgentAvatar->isSitting()))  			{  				LLVector3 plane_normal;  				plane_normal.setVec(mCameraCollidePlane.mV); @@ -1915,11 +1899,11 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)  			// set the global camera position  			LLVector3d camera_offset; -			LLVector3 av_pos = !avatarp ? LLVector3::zero : avatarp->getRenderPosition(); +			LLVector3 av_pos = !isAgentAvatarValid() ? LLVector3::zero : gAgentAvatar->getRenderPosition();  			camera_offset.setVec( local_camera_offset );  			camera_position_global = frame_center_global + head_offset + camera_offset; -			if (avatarp) +			if (isAgentAvatarValid())  			{  				LLVector3d camera_lag_d;  				F32 lag_interp = LLCriticalDamp::getInterpolant(CAMERA_LAG_HALF_LIFE); @@ -1927,8 +1911,8 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)  				LLVector3 vel = gAgent.getVelocity();  				// lag by appropriate amount for flying -				F32 time_in_air = avatarp->mTimeInAir.getElapsedTimeF32(); -				if(!mCameraAnimating && avatarp->mInAir && time_in_air > GROUND_TO_AIR_CAMERA_TRANSITION_START_TIME) +				F32 time_in_air = gAgentAvatar->mTimeInAir.getElapsedTimeF32(); +				if(!mCameraAnimating && gAgentAvatar->mInAir && time_in_air > GROUND_TO_AIR_CAMERA_TRANSITION_START_TIME)  				{  					LLVector3 frame_at_axis = gAgent.getFrameAgent().getAtAxis();  					frame_at_axis -= projected_vec(frame_at_axis, gAgent.getReferenceUpVector()); @@ -1940,7 +1924,7 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)  					lag_interp *= u; -					if (gViewerWindow->getLeftMouseDown() && gViewerWindow->getLastPick().mObjectID == avatarp->getID()) +					if (gViewerWindow->getLeftMouseDown() && gViewerWindow->getLastPick().mObjectID == gAgentAvatar->getID())  					{  						// disable camera lag when using mouse-directed steering  						target_lag.clearVec(); @@ -2141,8 +2125,6 @@ void LLAgentCamera::changeCameraToMouselook(BOOL animate)  		return;  	} -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); -  	// visibility changes at end of animation  	gViewerWindow->getWindow()->resetBusyCount(); @@ -2151,10 +2133,10 @@ void LLAgentCamera::changeCameraToMouselook(BOOL animate)  	LLToolMgr::getInstance()->setCurrentToolset(gMouselookToolset); -	if (avatarp) +	if (isAgentAvatarValid())  	{ -		avatarp->stopMotion(ANIM_AGENT_BODY_NOISE); -		avatarp->stopMotion(ANIM_AGENT_BREATHE_ROT); +		gAgentAvatar->stopMotion(ANIM_AGENT_BODY_NOISE); +		gAgentAvatar->stopMotion(ANIM_AGENT_BREATHE_ROT);  	}  	//gViewerWindow->stopGrab(); @@ -2239,12 +2221,11 @@ void LLAgentCamera::changeCameraToFollow(BOOL animate)  			LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset);  		} -		LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); -		if (avatarp) +		if (isAgentAvatarValid())  		{ -			avatarp->mPelvisp->setPosition(LLVector3::zero); -			avatarp->startMotion( ANIM_AGENT_BODY_NOISE ); -			avatarp->startMotion( ANIM_AGENT_BREATHE_ROT ); +			gAgentAvatar->mPelvisp->setPosition(LLVector3::zero); +			gAgentAvatar->startMotion( ANIM_AGENT_BODY_NOISE ); +			gAgentAvatar->startMotion( ANIM_AGENT_BREATHE_ROT );  		}  		// unpause avatar animation @@ -2283,15 +2264,14 @@ void LLAgentCamera::changeCameraToThirdPerson(BOOL animate)  	mCameraZoomFraction = INITIAL_ZOOM_FRACTION; -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); -	if (avatarp) +	if (isAgentAvatarValid())  	{ -		if (!avatarp->isSitting()) +		if (!gAgentAvatar->isSitting())  		{ -			avatarp->mPelvisp->setPosition(LLVector3::zero); +			gAgentAvatar->mPelvisp->setPosition(LLVector3::zero);  		} -		avatarp->startMotion(ANIM_AGENT_BODY_NOISE); -		avatarp->startMotion(ANIM_AGENT_BREATHE_ROT); +		gAgentAvatar->startMotion(ANIM_AGENT_BODY_NOISE); +		gAgentAvatar->startMotion(ANIM_AGENT_BREATHE_ROT);  	}  	LLVector3 at_axis; @@ -2325,9 +2305,9 @@ void LLAgentCamera::changeCameraToThirdPerson(BOOL animate)  	}  	// Remove any pitch from the avatar -	if (avatarp && avatarp->getParent()) +	if (isAgentAvatarValid() && gAgentAvatar->getParent())  	{ -		LLQuaternion obj_rot = ((LLViewerObject*)avatarp->getParent())->getRenderRotation(); +		LLQuaternion obj_rot = ((LLViewerObject*)gAgentAvatar->getParent())->getRenderRotation();  		at_axis = LLViewerCamera::getInstance()->getAtAxis();  		at_axis.mV[VZ] = 0.f;  		at_axis.normalize(); @@ -2399,8 +2379,7 @@ void LLAgentCamera::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL came  		LLVOAvatarSelf::onCustomizeStart();  	} -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); -	if (avatarp) +	if (isAgentAvatarValid())  	{  		if(avatar_animate)  		{ @@ -2412,8 +2391,8 @@ void LLAgentCamera::changeCameraToCustomizeAvatar(BOOL avatar_animate, BOOL came  			gAgent.sendAnimationRequest(ANIM_AGENT_CUSTOMIZE, ANIM_REQUEST_START);  			gAgent.setCustomAnim(TRUE); -			avatarp->startMotion(ANIM_AGENT_CUSTOMIZE); -			LLMotion* turn_motion = avatarp->findMotion(ANIM_AGENT_CUSTOMIZE); +			gAgentAvatar->startMotion(ANIM_AGENT_CUSTOMIZE); +			LLMotion* turn_motion = gAgentAvatar->findMotion(ANIM_AGENT_CUSTOMIZE);  			if (turn_motion)  			{ @@ -2516,16 +2495,15 @@ void LLAgentCamera::setFocusGlobal(const LLVector3d& focus, const LLUUID &object  	setFocusObject(gObjectList.findObject(object_id));  	LLVector3d old_focus = mFocusTargetGlobal;  	LLViewerObject *focus_obj = mFocusObject; -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject();  	// if focus has changed  	if (old_focus != focus)  	{  		if (focus.isExactlyZero())  		{ -			if (avatarp) +			if (isAgentAvatarValid())  			{ -				mFocusTargetGlobal = gAgent.getPosGlobalFromAgent(avatarp->mHeadp->getWorldPosition()); +				mFocusTargetGlobal = gAgent.getPosGlobalFromAgent(gAgentAvatar->mHeadp->getWorldPosition());  			}  			else  			{ @@ -2568,9 +2546,9 @@ void LLAgentCamera::setFocusGlobal(const LLVector3d& focus, const LLUUID &object  	{  		if (focus.isExactlyZero())  		{ -			if (avatarp) +			if (isAgentAvatarValid())  			{ -				mFocusTargetGlobal = gAgent.getPosGlobalFromAgent(avatarp->mHeadp->getWorldPosition()); +				mFocusTargetGlobal = gAgent.getPosGlobalFromAgent(gAgentAvatar->mHeadp->getWorldPosition());  			}  			else  			{ @@ -2707,10 +2685,9 @@ void LLAgentCamera::setFocusOnAvatar(BOOL focus_on_avatar, BOOL animate)  		if (mCameraMode == CAMERA_MODE_THIRD_PERSON)  		{  			LLVector3 at_axis; -			LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); -			if (avatarp && avatarp->getParent()) +			if (isAgentAvatarValid() && gAgentAvatar->getParent())  			{ -				LLQuaternion obj_rot = ((LLViewerObject*)avatarp->getParent())->getRenderRotation(); +				LLQuaternion obj_rot = ((LLViewerObject*)gAgentAvatar->getParent())->getRenderRotation();  				at_axis = LLViewerCamera::getInstance()->getAtAxis();  				at_axis.mV[VZ] = 0.f;  				at_axis.normalize(); @@ -2738,16 +2715,15 @@ void LLAgentCamera::setFocusOnAvatar(BOOL focus_on_avatar, BOOL animate)  BOOL LLAgentCamera::setLookAt(ELookAtType target_type, LLViewerObject *object, LLVector3 position)  { -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject();  	if(object && object->isAttachment())  	{  		LLViewerObject* parent = object;  		while(parent)  		{ -			if (parent == avatarp) +			if (parent == gAgentAvatar)  			{  				// looking at an attachment on ourselves, which we don't want to do -				object = avatarp; +				object = gAgentAvatar;  				position.clearVec();  			}  			parent = (LLViewerObject*)parent->getParent(); @@ -2756,7 +2732,7 @@ BOOL LLAgentCamera::setLookAt(ELookAtType target_type, LLViewerObject *object, L  	if(!mLookAt || mLookAt->isDead())  	{  		mLookAt = (LLHUDEffectLookAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_LOOKAT); -		mLookAt->setSourceObject(avatarp); +		mLookAt->setSourceObject(gAgentAvatar);  	}  	return mLookAt->setLookAt(target_type, object, position); @@ -2779,14 +2755,13 @@ void LLAgentCamera::lookAtLastChat()  		return;  	} -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject();  	LLVector3 delta_pos;  	if (chatter->isAvatar())  	{  		LLVOAvatar *chatter_av = (LLVOAvatar*)chatter; -		if (avatarp && chatter_av->mHeadp) +		if (isAgentAvatarValid() && chatter_av->mHeadp)  		{ -			delta_pos = chatter_av->mHeadp->getWorldPosition() - avatarp->mHeadp->getWorldPosition(); +			delta_pos = chatter_av->mHeadp->getWorldPosition() - gAgentAvatar->mHeadp->getWorldPosition();  		}  		else  		{ @@ -2798,7 +2773,7 @@ void LLAgentCamera::lookAtLastChat()  		changeCameraToThirdPerson(); -		LLVector3 new_camera_pos = avatarp->mHeadp->getWorldPosition(); +		LLVector3 new_camera_pos = gAgentAvatar->mHeadp->getWorldPosition();  		LLVector3 left = delta_pos % LLVector3::z_axis;  		left.normalize();  		LLVector3 up = left % delta_pos; @@ -2827,7 +2802,7 @@ void LLAgentCamera::lookAtLastChat()  		changeCameraToThirdPerson(); -		LLVector3 new_camera_pos = avatarp->mHeadp->getWorldPosition(); +		LLVector3 new_camera_pos = gAgentAvatar->mHeadp->getWorldPosition();  		LLVector3 left = delta_pos % LLVector3::z_axis;  		left.normalize();  		LLVector3 up = left % delta_pos; @@ -2852,8 +2827,7 @@ BOOL LLAgentCamera::setPointAt(EPointAtType target_type, LLViewerObject *object,  	if (!mPointAt || mPointAt->isDead())  	{  		mPointAt = (LLHUDEffectPointAt *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINTAT); -		LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); -		mPointAt->setSourceObject(avatarp); +		mPointAt->setSourceObject(gAgentAvatar);  	}  	return mPointAt->setPointAt(target_type, object, position);  } diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp index 97e956c082..452a11b01e 100644 --- a/indra/newview/llagentui.cpp +++ b/indra/newview/llagentui.cpp @@ -49,12 +49,10 @@  void LLAgentUI::buildName(std::string& name)  {  	name.clear(); - -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (avatarp) +	if (isAgentAvatarValid())  	{ -		LLNameValue *first_nv = avatarp->getNVPair("FirstName"); -		LLNameValue *last_nv = avatarp->getNVPair("LastName"); +		LLNameValue *first_nv = gAgentAvatar->getNVPair("FirstName"); +		LLNameValue *last_nv = gAgentAvatar->getNVPair("LastName");  		if (first_nv && last_nv)  		{  			name = first_nv->printData() + " " + last_nv->printData(); @@ -73,8 +71,8 @@ void LLAgentUI::buildName(std::string& name)  //static  void LLAgentUI::buildFullname(std::string& name)  { -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); -	if (avatarp) name = avatarp->getFullname(); +	if (isAgentAvatarValid()) +		name = gAgentAvatar->getFullname();  }  //static diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index aec8c6e403..91552a7f5b 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -485,8 +485,7 @@ void LLAgentWearables::saveWearable(const EWearableType type, const U32 index, B  			return;  		} -		LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); -		avatarp->wearableUpdated( type, TRUE ); +		gAgentAvatar->wearableUpdated( type, TRUE );  		if (send_update)  		{ @@ -784,8 +783,7 @@ U32 LLAgentWearables::pushWearable(const EWearableType type, LLWearable *wearabl  void LLAgentWearables::wearableUpdated(LLWearable *wearable)  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	avatarp->wearableUpdated(wearable->getType(), TRUE); +	gAgentAvatar->wearableUpdated(wearable->getType(), TRUE);  	wearable->refreshName();  	wearable->setLabelUpdated(); @@ -826,11 +824,10 @@ void LLAgentWearables::popWearable(LLWearable *wearable)  void LLAgentWearables::popWearable(const EWearableType type, U32 index)  {  	LLWearable *wearable = getWearable(type, index); -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject();  	if (wearable)  	{  		mWearableDatas[type].erase(mWearableDatas[type].begin() + index); -		avatarp->wearableUpdated(wearable->getType(), TRUE); +		gAgentAvatar->wearableUpdated(wearable->getType(), TRUE);  		wearable->setLabelUpdated();  	}  } @@ -962,8 +959,7 @@ void LLAgentWearables::processAgentInitialWearablesUpdate(LLMessageSystem* mesgs  	LLUUID agent_id;  	gMessageSystem->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id); -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (avatarp && (agent_id == avatarp->getID())) +	if (isAgentAvatarValid() && (agent_id == gAgentAvatar->getID()))  	{  		gMessageSystem->getU32Fast(_PREHASH_AgentData, _PREHASH_SerialNum, gAgentQueryManager.mUpdateSerialNum); @@ -1055,11 +1051,7 @@ void LLAgentWearables::onInitialWearableAssetArrived(LLWearable* wearable, void*  	const EWearableType type = wear_data->mType;  	U32 index = 0; -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp) -	{ -		return; -	} +	if (!isAgentAvatarValid()) return;  	if (wearable)  	{ @@ -1069,9 +1061,9 @@ void LLAgentWearables::onInitialWearableAssetArrived(LLWearable* wearable, void*  		gAgentWearables.mItemsAwaitingWearableUpdate.erase(wear_data->mItemID);  		// disable composites if initial textures are baked -		avatarp->setupComposites(); +		gAgentAvatar->setupComposites(); -		avatarp->setCompositeUpdatesEnabled(TRUE); +		gAgentAvatar->setCompositeUpdatesEnabled(TRUE);  		gInventory.addChangedMask(LLInventoryObserver::LABEL, wearable->getItemID());  	}  	else @@ -1100,7 +1092,7 @@ void LLAgentWearables::onInitialWearableAssetArrived(LLWearable* wearable, void*  		// If there are any, schedule them to be uploaded as soon as the layer textures they depend on arrive.  		if (gAgentCamera.cameraCustomizeAvatar())  		{ -			avatarp->requestLayerSetUploads(); +			gAgentAvatar->requestLayerSetUploads();  		}  	}  } @@ -1240,13 +1232,9 @@ void LLAgentWearables::createStandardWearables(BOOL female)  	llwarns << "Creating Standard " << (female ? "female" : "male")  			<< " Wearables" << llendl; -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp) -	{ -		return; -	} +	if (!isAgentAvatarValid()) return; -	avatarp->setSex(female ? SEX_FEMALE : SEX_MALE); +	gAgentAvatar->setSex(female ? SEX_FEMALE : SEX_MALE);  	const BOOL create[WT_COUNT] =   		{ @@ -1294,11 +1282,8 @@ void LLAgentWearables::createStandardWearablesDone(S32 type, U32 index)  {  	llinfos << "type " << type << " index " << index << llendl; -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (avatarp) -	{ -		avatarp->updateVisualParams(); -	} +	if (!isAgentAvatarValid()) return; +	gAgentAvatar->updateVisualParams();  }  void LLAgentWearables::createStandardWearablesAllDone() @@ -1313,8 +1298,7 @@ void LLAgentWearables::createStandardWearablesAllDone()  	updateServer();  	// Treat this as the first texture entry message, if none received yet -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	avatarp->onFirstTEMessageReceived(); +	gAgentAvatar->onFirstTEMessageReceived();  }  // MULTI-WEARABLE: Properly handle multiwearables later. @@ -1336,11 +1320,7 @@ void LLAgentWearables::makeNewOutfit(const std::string& new_folder_name,  									 const LLDynamicArray<S32>& attachments_to_include,  									 BOOL rename_clothing)  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp) -	{ -		return; -	} +	if (!isAgentAvatarValid()) return;  	// First, make a folder in the Clothes directory.  	LLUUID folder_id = gInventory.createNewCategory( @@ -1438,7 +1418,7 @@ void LLAgentWearables::makeNewOutfit(const std::string& new_folder_name,  		for (S32 i = 0; i < attachments_to_include.count(); i++)  		{  			S32 attachment_pt = attachments_to_include[i]; -			LLViewerJointAttachment* attachment = get_if_there(avatarp->mAttachmentPoints, attachment_pt, (LLViewerJointAttachment*)NULL); +			LLViewerJointAttachment* attachment = get_if_there(gAgentAvatar->mAttachmentPoints, attachment_pt, (LLViewerJointAttachment*)NULL);  			if (!attachment) continue;  			for (LLViewerJointAttachment::attachedobjs_vec_t::iterator attachment_iter = attachment->mAttachedObjects.begin();  				 attachment_iter != attachment->mAttachedObjects.end(); @@ -1513,11 +1493,7 @@ private:  LLUUID LLAgentWearables::makeNewOutfitLinks(const std::string& new_folder_name)  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp) -	{ -		return LLUUID::null; -	} +	if (!isAgentAvatarValid()) return LLUUID::null;  	// First, make a folder in the My Outfits directory.  	const LLUUID parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS); @@ -1681,7 +1657,6 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it  										 BOOL remove)  {  	llinfos << "setWearableOutfit() start" << llendl; -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject();  	BOOL wearables_to_remove[WT_COUNT];  	wearables_to_remove[WT_SHAPE]		= FALSE; @@ -1785,11 +1760,11 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it  		}  	} -	if (avatarp) +	if (isAgentAvatarValid())  	{ -		avatarp->setCompositeUpdatesEnabled(TRUE); -		avatarp->updateVisualParams(); -		avatarp->invalidateAll(); +		gAgentAvatar->setCompositeUpdatesEnabled(TRUE); +		gAgentAvatar->updateVisualParams(); +		gAgentAvatar->invalidateAll();  	}  	// Start rendering & update the server @@ -2039,12 +2014,7 @@ void LLAgentWearables::userUpdateAttachments(LLInventoryModel::item_array_t& obj  	// already wearing and in request set -> leave alone.  	// not wearing and in request set -> put on. -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp) -	{ -		llwarns << "No avatar found." << llendl; -		return; -	} +	if (!isAgentAvatarValid()) return;  	std::set<LLUUID> requested_item_ids;  	std::set<LLUUID> current_item_ids; @@ -2053,8 +2023,8 @@ void LLAgentWearables::userUpdateAttachments(LLInventoryModel::item_array_t& obj  	// Build up list of objects to be removed and items currently attached.  	llvo_vec_t objects_to_remove; -	for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();  -		 iter != avatarp->mAttachmentPoints.end();) +	for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatar->mAttachmentPoints.begin();  +		 iter != gAgentAvatar->mAttachmentPoints.end();)  	{  		LLVOAvatar::attachment_map_t::iterator curiter = iter++;  		LLViewerJointAttachment* attachment = curiter->second; @@ -2110,12 +2080,7 @@ void LLAgentWearables::userUpdateAttachments(LLInventoryModel::item_array_t& obj  void LLAgentWearables::userRemoveMultipleAttachments(llvo_vec_t& objects_to_remove)  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp) -	{ -		llwarns << "No avatar found." << llendl; -		return; -	} +	if (!isAgentAvatarValid()) return;  	if (objects_to_remove.empty())  		return; @@ -2138,17 +2103,12 @@ void LLAgentWearables::userRemoveMultipleAttachments(llvo_vec_t& objects_to_remo  void LLAgentWearables::userRemoveAllAttachments()  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp) -	{ -		llwarns << "No avatar found." << llendl; -		return; -	} +	if (!isAgentAvatarValid()) return;  	llvo_vec_t objects_to_remove; -	for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();  -		 iter != avatarp->mAttachmentPoints.end();) +	for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatar->mAttachmentPoints.begin();  +		 iter != gAgentAvatar->mAttachmentPoints.end();)  	{  		LLVOAvatar::attachment_map_t::iterator curiter = iter++;  		LLViewerJointAttachment* attachment = curiter->second; @@ -2714,11 +2674,10 @@ void LLInitialWearablesFetch::processWearablesMessage()  		}  		// Add all current attachments to the requested items as well. -		LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -		if (avatarp) +		if (isAgentAvatarValid())  		{ -			for (LLVOAvatar::attachment_map_t::const_iterator iter = avatarp->mAttachmentPoints.begin();  -				 iter != avatarp->mAttachmentPoints.end(); ++iter) +			for (LLVOAvatar::attachment_map_t::const_iterator iter = gAgentAvatar->mAttachmentPoints.begin();  +				 iter != gAgentAvatar->mAttachmentPoints.end(); ++iter)  			{  				LLViewerJointAttachment* attachment = iter->second;  				if (!attachment) continue; diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index b3dfb8f141..ef25faac26 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -469,8 +469,7 @@ void LLWearableHoldingPattern::onAllComplete()  	LLAppearanceManager::instance().updateAgentWearables(this, false);  	// Update attachments to match those requested. -	LLVOAvatar* avatar = gAgent.getAvatarObject(); -	if( avatar ) +	if (isAgentAvatarValid())  	{  		llinfos << "Updating " << mObjItems.count() << " attachments" << llendl;  		LLAgentWearables::userUpdateAttachments(mObjItems); diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index d30d7fd26d..220b84500f 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -79,6 +79,7 @@  #include "lllocationhistory.h"  #include "llfasttimerview.h"  #include "llvoicechannel.h" +#include "llvoavatarself.h"  #include "llsidetray.h" @@ -356,7 +357,7 @@ void request_initial_instant_messages()  	if (!requested  		&& gMessageSystem  		&& LLMuteList::getInstance()->isLoaded() -		&& gAgent.getAvatarObject()) +		&& isAgentAvatarValid())  	{  		// Auto-accepted inventory items may require the avatar object  		// to build a correct name.  Likewise, inventory offers from diff --git a/indra/newview/lldriverparam.cpp b/indra/newview/lldriverparam.cpp index c22c9d3048..75d1c437c3 100644 --- a/indra/newview/lldriverparam.cpp +++ b/indra/newview/lldriverparam.cpp @@ -118,13 +118,12 @@ void LLDriverParamInfo::toStream(std::ostream &out)  	out << std::endl; -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); -	if(avatarp) +	if(isAgentAvatarValid())  	{  		for (entry_info_list_t::iterator iter = mDrivenInfoList.begin(); iter != mDrivenInfoList.end(); iter++)  		{  			LLDrivenEntryInfo driven = *iter; -			LLViewerVisualParam *param = (LLViewerVisualParam*)avatarp->getVisualParam(driven.mDrivenID); +			LLViewerVisualParam *param = (LLViewerVisualParam*)gAgentAvatar->getVisualParam(driven.mDrivenID);  			if (param)  			{  				param->getInfo()->toStream(out); @@ -146,7 +145,7 @@ void LLDriverParamInfo::toStream(std::ostream &out)  			}  			else  			{ -				llwarns << "could not get parameter " << driven.mDrivenID << " from avatar " << avatarp << " for driver parameter " << getID() << llendl; +				llwarns << "could not get parameter " << driven.mDrivenID << " from avatar " << gAgentAvatar << " for driver parameter " << getID() << llendl;  			}  			out << std::endl;  		} @@ -626,14 +625,13 @@ F32 LLDriverParam::getDrivenWeight(const LLDrivenEntry* driven, F32 input_weight  void LLDriverParam::setDrivenWeight(LLDrivenEntry *driven, F32 driven_weight, bool upload_bake)  { -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); -	if(avatarp && +	if(isAgentAvatarValid() &&  	   mWearablep &&   	   driven->mParam->getCrossWearable() &&  	   mWearablep->isOnTop())  	{  		// call setWeight through LLVOAvatarSelf so other wearables can be updated with the correct values -		avatarp->setVisualParamWeight( (LLVisualParam*)driven->mParam, driven_weight, upload_bake ); +		gAgentAvatar->setVisualParamWeight( (LLVisualParam*)driven->mParam, driven_weight, upload_bake );  	}  	else  	{ diff --git a/indra/newview/llgesturemgr.cpp b/indra/newview/llgesturemgr.cpp index 47a9961323..c9a950ed42 100644 --- a/indra/newview/llgesturemgr.cpp +++ b/indra/newview/llgesturemgr.cpp @@ -746,8 +746,7 @@ void LLGestureManager::stepGesture(LLMultiGesture* gesture)  	{  		return;  	} -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp) return; +	if (!isAgentAvatarValid()) return;  	// Of the ones that started playing, have any stopped? @@ -758,8 +757,8 @@ void LLGestureManager::stepGesture(LLMultiGesture* gesture)  	{  		// look in signaled animations (simulator's view of what is  		// currently playing. -		LLVOAvatar::AnimIterator play_it = avatarp->mSignaledAnimations.find(*gest_it); -		if (play_it != avatarp->mSignaledAnimations.end()) +		LLVOAvatar::AnimIterator play_it = gAgentAvatar->mSignaledAnimations.find(*gest_it); +		if (play_it != gAgentAvatar->mSignaledAnimations.end())  		{  			++gest_it;  		} @@ -777,8 +776,8 @@ void LLGestureManager::stepGesture(LLMultiGesture* gesture)  		 gest_it != gesture->mRequestedAnimIDs.end();  		 )  	{ -	 LLVOAvatar::AnimIterator play_it = avatarp->mSignaledAnimations.find(*gest_it); -		if (play_it != avatarp->mSignaledAnimations.end()) +	 LLVOAvatar::AnimIterator play_it = gAgentAvatar->mSignaledAnimations.find(*gest_it); +		if (play_it != gAgentAvatar->mSignaledAnimations.end())  		{  			// Hooray, this animation has started playing!  			// Copy into playing. diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 08734137b6..a62640c813 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1506,11 +1506,7 @@ BOOL LLFolderBridge::isItemRemovable() const  		return FALSE;  	} -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp) -	{ -		return FALSE; -	} +	if (!isAgentAvatarValid()) return FALSE;  	LLInventoryCategory* category = model->getCategory(mUUID);  	if(!category) @@ -1661,8 +1657,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,  	LLInventoryModel* model = getInventoryModel();  	if(!model) return FALSE; -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp) return FALSE; +	if (!isAgentAvatarValid()) return FALSE;  	// cannot drag categories into library  	if(!isAgentInventory()) @@ -3026,8 +3021,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,  		return FALSE;  	} -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp) return FALSE; +	if (!isAgentAvatarValid()) return FALSE;  	LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();  	BOOL accept = FALSE; @@ -4155,8 +4149,7 @@ std::string LLObjectBridge::getLabelSuffix() const  {  	if (get_is_item_worn(mUUID))  	{ -		LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -		std::string attachment_point_name = avatarp->getAttachedPointName(mUUID); +		std::string attachment_point_name = gAgentAvatar->getAttachedPointName(mUUID);  		// e.g. "(worn on ...)" / "(attached to ...)"  		LLStringUtil::format_map_t args; @@ -4175,11 +4168,10 @@ void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attach  	payload["item_id"] = item->getLinkedUUID(); // Wear the base object in case this is a link.  	S32 attach_pt = 0; -	if (gAgent.getAvatarObject() && attachment) +	if (isAgentAvatarValid() && attachment)  	{ -		LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -		for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin(); -			 iter != avatarp->mAttachmentPoints.end(); ++iter) +		for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatar->mAttachmentPoints.begin(); +			 iter != gAgentAvatar->mAttachmentPoints.end(); ++iter)  		{  			if (iter->second == attachment)  			{ @@ -4205,9 +4197,7 @@ void rez_attachment(LLViewerInventoryItem* item, LLViewerJointAttachment* attach  bool confirm_replace_attachment_rez(const LLSD& notification, const LLSD& response)  { -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); - -	if (!avatarp->canAttachMoreObjects()) +	if (!gAgentAvatar->canAttachMoreObjects())  	{  		LLSD args;  		args["MAX_ATTACHMENTS"] = llformat("%d", MAX_AGENT_ATTACHMENTS); @@ -4269,11 +4259,7 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  		LLInventoryItem *item = getItem();  		if(item)  		{ -			LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -			if (!avatarp) -			{ -				return; -			} +			if (!isAgentAvatarValid()) return;  			if( get_is_item_worn( mUUID ) )  			{ @@ -4289,7 +4275,7 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  				// commented out for DEV-32347  				//items.push_back(std::string("Restore to Last Position")); -				if (!avatarp->canAttachMoreObjects()) +				if (!gAgentAvatar->canAttachMoreObjects())  				{  					disabled_items.push_back(std::string("Object Wear"));  					disabled_items.push_back(std::string("Attach To")); @@ -4297,15 +4283,14 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  				}  				LLMenuGL* attach_menu = menu.findChildMenuByName("Attach To", TRUE);  				LLMenuGL* attach_hud_menu = menu.findChildMenuByName("Attach To HUD", TRUE); -				LLVOAvatarSelf* avatarp = gAgent.getAvatarObject();  				if (attach_menu  					&& (attach_menu->getChildCount() == 0)  					&& attach_hud_menu  					&& (attach_hud_menu->getChildCount() == 0) -					&& avatarp) +					&& isAgentAvatarValid())  				{ -					for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin(); -						 iter != avatarp->mAttachmentPoints.end(); ) +					for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatar->mAttachmentPoints.begin(); +						 iter != gAgentAvatar->mAttachmentPoints.end(); )  					{  						LLVOAvatar::attachment_map_t::iterator curiter = iter++;  						LLViewerJointAttachment* attachment = curiter->second; @@ -4355,10 +4340,9 @@ BOOL LLObjectBridge::renameItem(const std::string& new_name)  		model->notifyObservers(); -		LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -		if (avatarp) +		if (isAgentAvatarValid())  		{ -			LLViewerObject* obj = avatarp->getWornAttachment( item->getUUID() ); +			LLViewerObject* obj = gAgentAvatar->getWornAttachment( item->getUUID() );  			if(obj)  			{  				LLSelectMgr::getInstance()->deselectAll(); diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index d3e2a2f555..f1b7806635 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -352,8 +352,7 @@ BOOL get_is_item_worn(const LLUUID& id)  	{  		case LLAssetType::AT_OBJECT:  		{ -			const LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -			if(avatarp && avatarp->isWearingAttachment(item->getLinkedUUID())) +			if (isAgentAvatarValid() && gAgentAvatar->isWearingAttachment(item->getLinkedUUID()))  				return TRUE;  			break;  		} diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 1f9840923c..7c8fb4f9b9 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -3774,7 +3774,6 @@ bool LLInventoryCollectFunctor::itemTransferCommonlyAllowed(LLInventoryItem* ite  		return false;  	bool allowed = false; -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject();  	switch(item->getType())  	{ @@ -3783,7 +3782,7 @@ bool LLInventoryCollectFunctor::itemTransferCommonlyAllowed(LLInventoryItem* ite  		break;  	case LLAssetType::AT_OBJECT: -		if(avatarp && !avatarp->isWearingAttachment(item->getUUID())) +		if (isAgentAvatarValid() && !gAgentAvatar->isWearingAttachment(item->getUUID()))  		{  			allowed = true;  		} diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 2a8306f232..3520c7e0c0 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -871,10 +871,9 @@ bool LLInventoryPanel::attachObject(const LLSD& userdata)  	mFolders->getSelectionList(selected_items);  	std::string joint_name = userdata.asString(); -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject();  	LLViewerJointAttachment* attachmentp = NULL; -	for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();  -		 iter != avatarp->mAttachmentPoints.end(); ) +	for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatar->mAttachmentPoints.begin();  +		 iter != gAgentAvatar->mAttachmentPoints.end(); )  	{  		LLVOAvatar::attachment_map_t::iterator curiter = iter++;  		LLViewerJointAttachment* attachment = curiter->second; diff --git a/indra/newview/llmaniprotate.cpp b/indra/newview/llmaniprotate.cpp index 6dc0a929c8..6747bcb9c9 100644 --- a/indra/newview/llmaniprotate.cpp +++ b/indra/newview/llmaniprotate.cpp @@ -65,6 +65,7 @@  #include "lldrawable.h"  #include "llglheaders.h"  #include "lltrans.h" +#include "llvoavatarself.h"  const F32 RADIUS_PIXELS = 100.f;		// size in screen space  const F32 SQ_RADIUS = RADIUS_PIXELS * RADIUS_PIXELS; @@ -739,7 +740,7 @@ void LLManipRotate::renderSnapGuides()  	LLVector3 test_axis = constraint_axis;  	BOOL constrain_to_ref_object = FALSE; -	if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && gAgent.getAvatarObject()) +	if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && isAgentAvatarValid())  	{  		test_axis = test_axis * ~grid_rotation;  	} @@ -766,7 +767,7 @@ void LLManipRotate::renderSnapGuides()  	}  	LLVector3 projected_snap_axis = world_snap_axis; -	if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && gAgent.getAvatarObject()) +	if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && isAgentAvatarValid())  	{  		projected_snap_axis = projected_snap_axis * grid_rotation;  	} @@ -1282,7 +1283,7 @@ LLQuaternion LLManipRotate::dragConstrained( S32 x, S32 y )  	LLVector3 axis2;  	LLVector3 test_axis = constraint_axis; -	if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && gAgent.getAvatarObject()) +	if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && isAgentAvatarValid())  	{  		test_axis = test_axis * ~grid_rotation;  	} @@ -1306,7 +1307,7 @@ LLQuaternion LLManipRotate::dragConstrained( S32 x, S32 y )  		axis1 = LLVector3::x_axis;  	} -	if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && gAgent.getAvatarObject()) +	if (mObjectSelection->getSelectType() == SELECT_TYPE_ATTACHMENT && isAgentAvatarValid())  	{  		axis1 = axis1 * grid_rotation;  	} diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp index 35c4f7f787..8d77ade253 100644 --- a/indra/newview/llmaniptranslate.cpp +++ b/indra/newview/llmaniptranslate.cpp @@ -714,7 +714,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)  				// in position changes even when the mouse moves  				object->setPosition(new_position_local);  				rebuild(object); -				gAgent.getAvatarObject()->clampAttachmentPositions(); +				gAgentAvatar->clampAttachmentPositions();  				new_position_local = object->getPosition();  				if (selectNode->mIndividualSelection) diff --git a/indra/newview/llmorphview.cpp b/indra/newview/llmorphview.cpp index cb48db15e4..6334d54e33 100644 --- a/indra/newview/llmorphview.cpp +++ b/indra/newview/llmorphview.cpp @@ -89,15 +89,14 @@ void	LLMorphView::initialize()  	mCameraYaw = 0.f;  	mCameraDist = -1.f; -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); -	if (!avatarp || avatarp->isDead()) +	if (!isAgentAvatarValid() || gAgentAvatar->isDead())  	{  		gAgentCamera.changeCameraToDefault();  		return;  	} -	avatarp->stopMotion( ANIM_AGENT_BODY_NOISE ); -	avatarp->mSpecialRenderMode = 3; +	gAgentAvatar->stopMotion( ANIM_AGENT_BODY_NOISE ); +	gAgentAvatar->mSpecialRenderMode = 3;  	// set up camera for close look at avatar  	mOldCameraNearClip = LLViewerCamera::getInstance()->getNear(); @@ -111,11 +110,10 @@ void	LLMorphView::shutdown()  {  	LLVOAvatarSelf::onCustomizeEnd(); -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); -	if (avatarp && !avatarp->isDead()) +	if (isAgentAvatarValid())  	{ -		avatarp->startMotion( ANIM_AGENT_BODY_NOISE ); -		avatarp->mSpecialRenderMode = 0; +		gAgentAvatar->startMotion( ANIM_AGENT_BODY_NOISE ); +		gAgentAvatar->mSpecialRenderMode = 0;  		// reset camera  		LLViewerCamera::getInstance()->setNear(mOldCameraNearClip);  	} @@ -164,15 +162,11 @@ void LLMorphView::updateCamera()  {  	if (!mCameraTargetJoint)  	{ -		setCameraTargetJoint(gAgent.getAvatarObject()->getJoint("mHead")); -	} -	 -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp) -	{ -		return; -	} -	LLJoint* root_joint = avatarp->getRootJoint(); +		setCameraTargetJoint(gAgentAvatar->getJoint("mHead")); +	}	 +	if (!isAgentAvatarValid()) return; + +	LLJoint* root_joint = gAgentAvatar->getRootJoint();  	if( !root_joint )  	{  		return; diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index 58fac14349..b47acefc76 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -42,7 +42,7 @@  #include "llagent.h"  #include "llagentcamera.h" -#include "llvoavatarself.h" // to check gAgent.getAvatarObject()->isSitting() +#include "llvoavatarself.h" // to check gAgentAvatar->isSitting()  #include "llbottomtray.h"  #include "llbutton.h"  #include "llfloaterreg.h" @@ -332,7 +332,7 @@ void LLFloaterMove::setMovementMode(const EMovementMode mode)  	updateButtonsWithMovementMode(mode);  	bool bHideModeButtons = MM_FLY == mode -		|| (gAgent.getAvatarObject() && gAgent.getAvatarObject()->isSitting()); +		|| (isAgentAvatarValid() && gAgentAvatar->isSitting());  	showModeButtons(!bHideModeButtons); @@ -388,9 +388,9 @@ void LLFloaterMove::initMovementMode()  	}  	setMovementMode(initMovementMode); -	if (gAgent.getAvatarObject()) +	if (isAgentAvatarValid())  	{ -		setEnabled(!gAgent.getAvatarObject()->isSitting()); +		setEnabled(!gAgentAvatar->isSitting());  	}  } @@ -491,7 +491,7 @@ void LLFloaterMove::onOpen(const LLSD& key)  		showModeButtons(FALSE);  	} -	if (gAgent.getAvatarObject() && gAgent.getAvatarObject()->isSitting()) +	if (isAgentAvatarValid() && gAgentAvatar->isSitting())  	{  		setSittingMode(TRUE);  		showModeButtons(FALSE); diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp index e7acc68b93..89fd4715fc 100644 --- a/indra/newview/llpaneleditwearable.cpp +++ b/indra/newview/llpaneleditwearable.cpp @@ -602,7 +602,7 @@ LLPanel* LLPanelEditWearable::getPanel(EWearableType type)  void LLPanelEditWearable::getSortedParams(value_map_t &sorted_params, const std::string &edit_group)  {  	LLWearable::visual_param_vec_t param_list; -	ESex avatar_sex = gAgent.getAvatarObject()->getSex(); +	ESex avatar_sex = gAgentAvatar->getSex();  	mWearablePtr->getVisualParams(param_list); diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp index 312bbc0e11..87c7bdbfab 100644 --- a/indra/newview/llpreview.cpp +++ b/indra/newview/llpreview.cpp @@ -179,10 +179,9 @@ void LLPreview::onCommit()  			// update the object itself.  			if( item->getType() == LLAssetType::AT_OBJECT )  			{ -				LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -				if (avatarp) +				if (isAgentAvatarValid())  				{ -					LLViewerObject* obj = avatarp->getWornAttachment( item->getUUID() ); +					LLViewerObject* obj = gAgentAvatar->getWornAttachment( item->getUUID() );  					if( obj )  					{  						LLSelectMgr::getInstance()->deselectAll(); diff --git a/indra/newview/llpreviewanim.cpp b/indra/newview/llpreviewanim.cpp index 49b297f702..9210f5b8b7 100644 --- a/indra/newview/llpreviewanim.cpp +++ b/indra/newview/llpreviewanim.cpp @@ -71,7 +71,7 @@ BOOL LLPreviewAnim::postBuild()  	const LLInventoryItem* item = getItem();  	if(item)  	{ -		gAgent.getAvatarObject()->createMotion(item->getAssetUUID()); // preload the animation +		gAgentAvatar->createMotion(item->getAssetUUID()); // preload the animation  		childSetText("desc", item->getDescription());  	} @@ -110,7 +110,6 @@ void LLPreviewAnim::playAnim( void *userdata )  {  	LLPreviewAnim* self = (LLPreviewAnim*) userdata;  	const LLInventoryItem *item = self->getItem(); -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject();  	if(item)  	{ @@ -126,7 +125,7 @@ void LLPreviewAnim::playAnim( void *userdata )  		{  			self->mPauseRequest = NULL;  			gAgent.sendAnimationRequest(itemID, ANIM_REQUEST_START); -			LLMotion* motion = avatarp->findMotion(itemID); +			LLMotion* motion = gAgentAvatar->findMotion(itemID);  			if (motion)  			{  				motion->setDeactivateCallback(&endAnimCallback, (void *)(new LLHandle<LLFloater>(self->getHandle()))); @@ -134,7 +133,7 @@ void LLPreviewAnim::playAnim( void *userdata )  		}  		else  		{ -			avatarp->stopMotion(itemID); +			gAgentAvatar->stopMotion(itemID);  			gAgent.sendAnimationRequest(itemID, ANIM_REQUEST_STOP);  		}  	} @@ -159,9 +158,8 @@ void LLPreviewAnim::auditionAnim( void *userdata )  		if (self->childGetValue("Anim audition btn").asBoolean() )   		{  			self->mPauseRequest = NULL; -			LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -			gAgent.getAvatarObject()->startMotion(item->getAssetUUID()); -			LLMotion* motion = avatarp->findMotion(itemID); +			gAgentAvatar->startMotion(item->getAssetUUID()); +			LLMotion* motion = gAgentAvatar->findMotion(itemID);  			if (motion)  			{ @@ -170,7 +168,7 @@ void LLPreviewAnim::auditionAnim( void *userdata )  		}  		else  		{ -			gAgent.getAvatarObject()->stopMotion(itemID); +			gAgentAvatar->stopMotion(itemID);  			gAgent.sendAnimationRequest(itemID, ANIM_REQUEST_STOP);  		}  	} @@ -183,11 +181,9 @@ void LLPreviewAnim::onClose(bool app_quitting)  	if(item)  	{ -		gAgent.getAvatarObject()->stopMotion(item->getAssetUUID()); +		gAgentAvatar->stopMotion(item->getAssetUUID());  		gAgent.sendAnimationRequest(item->getAssetUUID(), ANIM_REQUEST_STOP); -					 -		LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -		LLMotion* motion = avatarp->findMotion(item->getAssetUUID()); +		LLMotion* motion = gAgentAvatar->findMotion(item->getAssetUUID());  		if (motion)  		{ diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp index 95e12bf46f..b47b384308 100644 --- a/indra/newview/llscrollingpanelparam.cpp +++ b/indra/newview/llscrollingpanelparam.cpp @@ -209,7 +209,7 @@ void LLScrollingPanelParam::onSliderMoved(LLUICtrl* ctrl, void* userdata)  	if (current_weight != new_weight )  	{  		self->mWearable->setVisualParamWeight( param->getID(), new_weight, FALSE ); -		gAgent.getAvatarObject()->updateVisualParams(); +		gAgentAvatar->updateVisualParams();  	}  } @@ -298,7 +298,7 @@ void LLScrollingPanelParam::onHintHeldDown( LLVisualParamHint* hint )  				&& new_percent < slider->getMaxValue())  			{  				mWearable->setVisualParamWeight( hint->getVisualParam()->getID(), new_weight, FALSE); -				gAgent.getAvatarObject()->updateVisualParams(); +				gAgentAvatar->updateVisualParams();  				slider->setValue( weightToPercent( new_weight ) );  			} @@ -344,8 +344,7 @@ void LLScrollingPanelParam::onHintMaxMouseUp( void* userdata )  	F32 elapsed_time = self->mMouseDownTimer.getElapsedTimeF32(); -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (avatarp) +	if (isAgentAvatarValid())  	{  		LLVisualParamHint* hint = self->mHintMax; diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 69f9a7e6fa..26d1ec1d6c 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -1475,7 +1475,7 @@ void LLSelectMgr::selectionSetImage(const LLUUID& imageid)  				object->sendTEUpdate();  				// 1 particle effect per object				  				LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); -				effectp->setSourceObject(gAgent.getAvatarObject()); +				effectp->setSourceObject(gAgentAvatar);  				effectp->setTargetObject(object);  				effectp->setDuration(LL_HUD_DUR_SHORT);  				effectp->setColor(LLColor4U(gAgent.getEffectColor())); @@ -3619,7 +3619,7 @@ void LLSelectMgr::sendAttach(U8 attachment_point)  {  	LLViewerObject* attach_object = mSelectedObjects->getFirstRootObject(); -	if (!attach_object || !gAgent.getAvatarObject() || mSelectedObjects->mSelectType != SELECT_TYPE_WORLD) +	if (!attach_object || !isAgentAvatarValid() || mSelectedObjects->mSelectType != SELECT_TYPE_WORLD)  	{  		return;  	} @@ -3630,7 +3630,7 @@ void LLSelectMgr::sendAttach(U8 attachment_point)  	BOOL build_mode = LLToolMgr::getInstance()->inEdit();  	// Special case: Attach to default location for this object.  	if (0 == attachment_point || -		get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, (S32)attachment_point, (LLViewerJointAttachment*)NULL)) +		get_if_there(gAgentAvatar->mAttachmentPoints, (S32)attachment_point, (LLViewerJointAttachment*)NULL))  	{  		sendListToRegions(  			"ObjectAttach", @@ -4911,10 +4911,9 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)  	LLGLEnable blend(GL_BLEND);  	LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (avatarp && for_hud) +	if (isAgentAvatarValid() && for_hud)  	{ -		LLBBox hud_bbox = avatarp->getHUDBBox(); +		LLBBox hud_bbox = gAgentAvatar->getHUDBBox();  		F32 cur_zoom = gAgentCamera.mHUDCurZoom; @@ -5023,7 +5022,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)  		}  	} -	if (avatarp && for_hud) +	if (isAgentAvatarValid() && for_hud)  	{  		glMatrixMode(GL_PROJECTION);  		gGL.popMatrix(); @@ -5399,8 +5398,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)  	if (volume)  	{  		F32 silhouette_thickness; -		LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -		if (avatarp && is_hud_object) +		if (isAgentAvatarValid() && is_hud_object)  		{  			silhouette_thickness = LLSelectMgr::sHighlightThickness / gAgentCamera.mHUDCurZoom;  		} @@ -5610,16 +5608,16 @@ void LLSelectMgr::updateSelectionCenter()  	{  		mSelectedObjects->mSelectType = getSelectTypeForObject(object); -		if (mSelectedObjects->mSelectType == SELECT_TYPE_ATTACHMENT && gAgent.getAvatarObject()) +		if (mSelectedObjects->mSelectType == SELECT_TYPE_ATTACHMENT && isAgentAvatarValid())  		{ -			mPauseRequest = gAgent.getAvatarObject()->requestPause(); +			mPauseRequest = gAgentAvatar->requestPause();  		}  		else  		{  			mPauseRequest = NULL;  		} -		if (mSelectedObjects->mSelectType != SELECT_TYPE_HUD && gAgent.getAvatarObject()) +		if (mSelectedObjects->mSelectType != SELECT_TYPE_HUD && isAgentAvatarValid())  		{  			// reset hud ZOOM  			gAgentCamera.mHUDTargetZoom = 1.f; @@ -5642,10 +5640,10 @@ void LLSelectMgr::updateSelectionCenter()  			LLViewerObject* object = node->getObject();  			if (!object)  				continue; -			LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); +			  			LLViewerObject *root = object->getRootEdit();  			if (mSelectedObjects->mSelectType == SELECT_TYPE_WORLD && // not an attachment -				!root->isChild(avatarp) && // not the object you're sitting on +				!root->isChild(gAgentAvatar) && // not the object you're sitting on  				!object->isAvatar()) // not another avatar  			{  				mShowSelection = TRUE; diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index c6fba61886..e65da0022e 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -366,11 +366,10 @@ void LLSidepanelAppearance::fetchInventory()  		}  	} -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (avatarp) +	if (isAgentAvatarValid())  	{ -		for (LLVOAvatar::attachment_map_t::const_iterator iter = avatarp->mAttachmentPoints.begin();  -			 iter != avatarp->mAttachmentPoints.end(); ++iter) +		for (LLVOAvatar::attachment_map_t::const_iterator iter = gAgentAvatar->mAttachmentPoints.begin();  +			 iter != gAgentAvatar->mAttachmentPoints.end(); ++iter)  		{  			LLViewerJointAttachment* attachment = iter->second;  			if (!attachment) continue; diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index edd03dc836..7ed095c68e 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -1861,7 +1861,7 @@ bool idle_startup()  		if (gAgent.isFirstLogin()  			&& !sInitialOutfit.empty()    // registration set up an outfit  			&& !sInitialOutfitGender.empty() // and a gender -			&& gAgent.getAvatarObject()	  // can't wear clothes without object +			&& isAgentAvatarValid()	  // can't wear clothes without object  			&& !gAgent.isGenderChosen() ) // nothing already loading  		{  			// Start loading the wearables, textures, gestures @@ -1869,7 +1869,7 @@ bool idle_startup()  		}  		// wait precache-delay and for agent's avatar or a lot longer. -		if(((timeout_frac > 1.f) && gAgent.getAvatarObject()) +		if(((timeout_frac > 1.f) && isAgentAvatarValid())  		   || (timeout_frac > 3.f))  		{  			LLStartUp::setStartupState( STATE_WEARABLES_WAIT ); @@ -1925,8 +1925,8 @@ bool idle_startup()  		if (gAgent.isFirstLogin())  		{  			// wait for avatar to be completely loaded -			if (gAgent.getAvatarObject() -				&& gAgent.getAvatarObject()->isFullyLoaded()) +			if (isAgentAvatarValid() +				&& gAgentAvatar->isFullyLoaded())  			{  				//llinfos << "avatar fully loaded" << llendl;  				LLStartUp::setStartupState( STATE_CLEANUP ); diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 3052134d4f..add1cea8cc 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -445,11 +445,9 @@ void LLStatusBar::setHealth(S32 health)  	{  		if (mHealth > (health + gSavedSettings.getF32("UISndHealthReductionThreshold")))  		{ -			LLVOAvatar *me; - -			if ((me = gAgent.getAvatarObject())) +			if (isAgentAvatarValid())  			{ -				if (me->getSex() == SEX_FEMALE) +				if (gAgentAvatar->getSex() == SEX_FEMALE)  				{  					make_ui_sound("UISndHealthReductionF");  				} diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp index 21c928282a..6461ec8221 100644 --- a/indra/newview/lltexlayer.cpp +++ b/indra/newview/lltexlayer.cpp @@ -284,8 +284,6 @@ void LLTexLayerSetBuffer::readBackAndUpload()  	llinfos << "Baked " << mTexLayerSet->getBodyRegion() << llendl;  	LLViewerStats::getInstance()->incStat(LLViewerStats::ST_TEX_BAKES); -	llassert( gAgent.getAvatarObject() == mTexLayerSet->getAvatar() ); -  	// We won't need our caches since we're baked now.  (Techically, we won't   	// really be baked until this image is sent to the server and the Avatar  	// Appearance message is received.) @@ -352,7 +350,7 @@ void LLTexLayerSetBuffer::readBackAndUpload()  			{  				// baked_upload_data is owned by the responder and deleted after the request completes  				LLBakedUploadData* baked_upload_data = -					new LLBakedUploadData(gAgent.getAvatarObject(), this->mTexLayerSet, asset_id); +					new LLBakedUploadData(gAgentAvatar, this->mTexLayerSet, asset_id);  				mUploadID = asset_id;  				// upload the image @@ -409,12 +407,10 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid,  {  	LLBakedUploadData* baked_upload_data = (LLBakedUploadData*)userdata; -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -  	if (0 == result && -		avatarp && -		!avatarp->isDead() && -		baked_upload_data->mAvatar == avatarp && // Sanity check: only the user's avatar should be uploading textures. +		isAgentAvatarValid() && +		!gAgentAvatar->isDead() && +		baked_upload_data->mAvatar == gAgentAvatar && // Sanity check: only the user's avatar should be uploading textures.  		baked_upload_data->mTexLayerSet->hasComposite()  		)  	{ @@ -439,11 +435,11 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid,  			if (result >= 0)  			{ -				LLVOAvatarDefines::ETextureIndex baked_te = avatarp->getBakedTE(layerset_buffer->mTexLayerSet); +				LLVOAvatarDefines::ETextureIndex baked_te = gAgentAvatar->getBakedTE(layerset_buffer->mTexLayerSet);  				// Update baked texture info with the new UUID  				U64 now = LLFrameTimer::getTotalTime();		// Record starting time  				llinfos << "Baked texture upload took " << (S32)((now - baked_upload_data->mStartTime) / 1000) << " ms" << llendl; -				avatarp->setNewBakedTexture(baked_te, uuid); +				gAgentAvatar->setNewBakedTexture(baked_te, uuid);  			}  			else  			{	 @@ -457,7 +453,7 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid,  			llinfos << "Received baked texture out of date, ignored." << llendl;  		} -		avatarp->dirtyMesh(); +		gAgentAvatar->dirtyMesh();  	}  	else  	{ diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index 1f6f840c45..f9d0c7c307 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -1174,7 +1174,7 @@ void LLToolDragAndDrop::dropScript(LLViewerObject* hit_obj,  		// VEFFECT: SetScript  		LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); -		effectp->setSourceObject(gAgent.getAvatarObject()); +		effectp->setSourceObject(gAgentAvatar);  		effectp->setTargetObject(hit_obj);  		effectp->setDuration(LL_HUD_DUR_SHORT);  		effectp->setColor(LLColor4U(gAgent.getEffectColor())); @@ -1335,7 +1335,7 @@ void LLToolDragAndDrop::dropObject(LLViewerObject* raycast_target,  	// VEFFECT: DropObject  	LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); -	effectp->setSourceObject(gAgent.getAvatarObject()); +	effectp->setSourceObject(gAgentAvatar);  	effectp->setPositionGlobal(mLastHitPos);  	effectp->setDuration(LL_HUD_DUR_SHORT);  	effectp->setColor(LLColor4U(gAgent.getEffectColor())); @@ -1398,7 +1398,7 @@ void LLToolDragAndDrop::dropInventory(LLViewerObject* hit_obj,  	// VEFFECT: AddToInventory  	LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); -	effectp->setSourceObject(gAgent.getAvatarObject()); +	effectp->setSourceObject(gAgentAvatar);  	effectp->setTargetObject(hit_obj);  	effectp->setDuration(LL_HUD_DUR_SHORT);  	effectp->setColor(LLColor4U(gAgent.getEffectColor())); @@ -1496,7 +1496,7 @@ void LLToolDragAndDrop::commitGiveInventoryItem(const LLUUID& to_agent,  	// VEFFECT: giveInventory  	LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); -	effectp->setSourceObject(gAgent.getAvatarObject()); +	effectp->setSourceObject(gAgentAvatar);  	effectp->setTargetObject(gObjectList.findObject(to_agent));  	effectp->setDuration(LL_HUD_DUR_SHORT);  	effectp->setColor(LLColor4U(gAgent.getEffectColor())); @@ -1547,11 +1547,7 @@ void LLToolDragAndDrop::giveInventoryCategory(const LLUUID& to_agent,  	llinfos << "LLToolDragAndDrop::giveInventoryCategory() - "  			<< cat->getUUID() << llendl; -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp) -	{ -		return; -	} +	if (!isAgentAvatarValid()) return;  	// Test out how many items are being given.  	LLViewerInventoryCategory::cat_array_t cats; @@ -1739,7 +1735,7 @@ void LLToolDragAndDrop::commitGiveInventoryCategory(const LLUUID& to_agent,  		// VEFFECT: giveInventoryCategory  		LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); -		effectp->setSourceObject(gAgent.getAvatarObject()); +		effectp->setSourceObject(gAgentAvatar);  		effectp->setTargetObject(gObjectList.findObject(to_agent));  		effectp->setDuration(LL_HUD_DUR_SHORT);  		effectp->setColor(LLColor4U(gAgent.getEffectColor())); @@ -1765,17 +1761,13 @@ BOOL LLToolDragAndDrop::isInventoryGiveAcceptable(LLInventoryItem* item)  	BOOL copyable = FALSE;  	if (item->getPermissions().allowCopyBy(gAgent.getID())) copyable = TRUE; -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp) -	{ -		return FALSE; -	} +	if (!isAgentAvatarValid()) return FALSE;  	BOOL acceptable = TRUE;  	switch(item->getType())  	{  	case LLAssetType::AT_OBJECT: -		if (avatarp->isWearingAttachment(item->getUUID())) +		if (gAgentAvatar->isWearingAttachment(item->getUUID()))  		{  			acceptable = FALSE;  		} @@ -1812,17 +1804,13 @@ BOOL LLToolDragAndDrop::isInventoryGroupGiveAcceptable(LLInventoryItem* item)  		return FALSE;  	} -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp) -	{ -		return FALSE; -	} +	if (!isAgentAvatarValid()) return FALSE;  	BOOL acceptable = TRUE;  	switch(item->getType())  	{  	case LLAssetType::AT_OBJECT: -		if (avatarp->isWearingAttachment(item->getUUID())) +		if (gAgentAvatar->isWearingAttachment(item->getUUID()))  		{  			acceptable = FALSE;  		} @@ -1857,12 +1845,10 @@ EAcceptance LLToolDragAndDrop::willObjectAcceptInventory(LLViewerObject* obj, LL  	//							  gAgent.getGroupID())  	//			 && (obj->mPermModify || obj->mFlagAllowInventoryAdd));  	BOOL worn = FALSE; -	LLVOAvatarSelf* avatarp = NULL;  	switch(item->getType())  	{  	case LLAssetType::AT_OBJECT: -		avatarp = gAgent.getAvatarObject(); -		if (avatarp && avatarp->isWearingAttachment(item->getUUID())) +		if (isAgentAvatarValid() && gAgentAvatar->isWearingAttachment(item->getUUID()))  		{  				worn = TRUE;  		} @@ -2013,8 +1999,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezAttachmentFromInv(  	}  	// must not be already wearing it -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp || avatarp->isWearingAttachment(item->getUUID())) +	if (!isAgentAvatarValid() || gAgentAvatar->isWearingAttachment(item->getUUID()))  	{  		return ACCEPT_NO;  	} @@ -2055,8 +2040,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnLand(  	locateInventory(item, cat);  	if (!item || !item->isComplete()) return ACCEPT_NO; -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp || avatarp->isWearingAttachment(item->getUUID())) +	if (!isAgentAvatarValid() || gAgentAvatar->isWearingAttachment(item->getUUID()))  	{  		return ACCEPT_NO;  	} @@ -2117,8 +2101,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezObjectOnObject(  	LLViewerInventoryCategory* cat;  	locateInventory(item, cat);  	if (!item || !item->isComplete()) return ACCEPT_NO; -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp || avatarp->isWearingAttachment(item->getUUID())) +	if (!isAgentAvatarValid() || gAgentAvatar->isWearingAttachment(item->getUUID()))  	{  		return ACCEPT_NO;  	} @@ -2267,7 +2250,7 @@ EAcceptance LLToolDragAndDrop::dad3dTextureObject(  		// VEFFECT: SetTexture  		LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); -		effectp->setSourceObject(gAgent.getAvatarObject()); +		effectp->setSourceObject(gAgentAvatar);  		effectp->setTargetObject(obj);  		effectp->setDuration(LL_HUD_DUR_SHORT);  		effectp->setColor(LLColor4U(gAgent.getEffectColor())); @@ -2627,13 +2610,12 @@ EAcceptance LLToolDragAndDrop::dad3dGiveInventoryObject(  		// cannot give away no-transfer objects  		return ACCEPT_NO;  	} -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (avatarp && avatarp->isWearingAttachment(item->getUUID())) +	if (isAgentAvatarValid() && gAgentAvatar->isWearingAttachment(item->getUUID()))  	{  		// You can't give objects that are attached to you  		return ACCEPT_NO;  	} -	if (obj && avatarp) +	if (obj && isAgentAvatarValid())  	{  		if (drop)  		{ diff --git a/indra/newview/lltoolfocus.cpp b/indra/newview/lltoolfocus.cpp index 363df74379..b362d564df 100644 --- a/indra/newview/lltoolfocus.cpp +++ b/indra/newview/lltoolfocus.cpp @@ -173,8 +173,7 @@ void LLToolCamera::pickCallback(const LLPickInfo& pick_info)  		BOOL good_customize_avatar_hit = FALSE;  		if( hit_obj )  		{ -			LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -			if (avatarp &&(hit_obj == avatarp)) +			if (isAgentAvatarValid() && (hit_obj == gAgentAvatar))  			{  				// It's you  				good_customize_avatar_hit = TRUE; @@ -222,8 +221,8 @@ void LLToolCamera::pickCallback(const LLPickInfo& pick_info)  			gAgentCamera.cameraThirdPerson() &&  			gViewerWindow->getLeftMouseDown() &&   			!gSavedSettings.getBOOL("FreezeTime") && -			(hit_obj == gAgent.getAvatarObject() ||  -				(hit_obj && hit_obj->isAttachment() && LLVOAvatar::findAvatarFromAttachment(hit_obj)->isSelf()))) +			(hit_obj == gAgentAvatar ||  +			 (hit_obj && hit_obj->isAttachment() && LLVOAvatar::findAvatarFromAttachment(hit_obj)->isSelf())))  		{  			LLToolCamera::getInstance()->mMouseSteering = TRUE;  		} diff --git a/indra/newview/lltoolgrab.cpp b/indra/newview/lltoolgrab.cpp index 008cf16f2e..982d55914d 100644 --- a/indra/newview/lltoolgrab.cpp +++ b/indra/newview/lltoolgrab.cpp @@ -708,7 +708,7 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask)  	{  		if (!gAgentCamera.cameraMouselook() &&   			!objectp->isHUDAttachment() &&  -			objectp->getRoot() == gAgent.getAvatarObject()->getRoot()) +			objectp->getRoot() == gAgentAvatar->getRoot())  		{  			// force focus to point in space where we were looking previously  			gAgentCamera.setFocusGlobal(gAgentCamera.calcFocusPositionTargetGlobal(), LLUUID::null); diff --git a/indra/newview/lltoolmorph.cpp b/indra/newview/lltoolmorph.cpp index c42c47c486..67d696d7d7 100644 --- a/indra/newview/lltoolmorph.cpp +++ b/indra/newview/lltoolmorph.cpp @@ -139,22 +139,20 @@ void LLVisualParamHint::requestHintUpdates( LLVisualParamHint* exception1, LLVis  BOOL LLVisualParamHint::needsRender()  { -	return mNeedsUpdate && mDelayFrames-- <= 0 && !gAgent.getAvatarObject()->mAppearanceAnimating && mAllowsUpdates; +	return mNeedsUpdate && mDelayFrames-- <= 0 && !gAgentAvatar->mAppearanceAnimating && mAllowsUpdates;  }  void LLVisualParamHint::preRender(BOOL clear_depth)  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -  	mLastParamWeight = mVisualParam->getWeight();  	mVisualParam->setWeight(mVisualParamWeight, FALSE); -	avatarp->setVisualParamWeight(mVisualParam->getID(), mVisualParamWeight, FALSE); -	avatarp->setVisualParamWeight("Blink_Left", 0.f); -	avatarp->setVisualParamWeight("Blink_Right", 0.f); -	avatarp->updateComposites(); -	avatarp->updateVisualParams(); -	avatarp->updateGeometry(avatarp->mDrawable); -	avatarp->updateLOD(); +	gAgentAvatar->setVisualParamWeight(mVisualParam->getID(), mVisualParamWeight, FALSE); +	gAgentAvatar->setVisualParamWeight("Blink_Left", 0.f); +	gAgentAvatar->setVisualParamWeight("Blink_Right", 0.f); +	gAgentAvatar->updateComposites(); +	gAgentAvatar->updateVisualParams(); +	gAgentAvatar->updateGeometry(gAgentAvatar->mDrawable); +	gAgentAvatar->updateLOD();  	LLViewerDynamicTexture::preRender(clear_depth);  } @@ -165,7 +163,6 @@ void LLVisualParamHint::preRender(BOOL clear_depth)  BOOL LLVisualParamHint::render()  {  	LLVisualParamReset::sDirty = TRUE; -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject();  	gGL.pushUIMatrix();  	gGL.loadUIIdentity(); @@ -196,7 +193,7 @@ BOOL LLVisualParamHint::render()  	const std::string& cam_target_mesh_name = mVisualParam->getCameraTargetName();  	if( !cam_target_mesh_name.empty() )  	{ -		cam_target_joint = (LLViewerJointMesh*)avatarp->getJoint( cam_target_mesh_name ); +		cam_target_joint = (LLViewerJointMesh*)gAgentAvatar->getJoint( cam_target_mesh_name );  	}  	if( !cam_target_joint )  	{ @@ -204,11 +201,11 @@ BOOL LLVisualParamHint::render()  	}  	if( !cam_target_joint )  	{ -		cam_target_joint = (LLViewerJointMesh*)avatarp->getJoint("mHead"); +		cam_target_joint = (LLViewerJointMesh*)gAgentAvatar->getJoint("mHead");  	}  	LLQuaternion avatar_rotation; -	LLJoint* root_joint = avatarp->getRootJoint(); +	LLJoint* root_joint = gAgentAvatar->getRootJoint();  	if( root_joint )  	{  		avatar_rotation = root_joint->getWorldRotation(); @@ -236,17 +233,17 @@ BOOL LLVisualParamHint::render()  	LLViewerCamera::getInstance()->setPerspective(FALSE, mOrigin.mX, mOrigin.mY, mFullWidth, mFullHeight, FALSE); -	if (avatarp->mDrawable.notNull()) +	if (gAgentAvatar->mDrawable.notNull())  	{ -		LLDrawPoolAvatar *avatarPoolp = (LLDrawPoolAvatar *)avatarp->mDrawable->getFace(0)->getPool(); +		LLDrawPoolAvatar *avatarPoolp = (LLDrawPoolAvatar *)gAgentAvatar->mDrawable->getFace(0)->getPool();  		LLGLDepthTest gls_depth(GL_TRUE, GL_TRUE);  		gGL.setAlphaRejectSettings(LLRender::CF_ALWAYS);  		gGL.setSceneBlendType(LLRender::BT_REPLACE); -		avatarPoolp->renderAvatars(avatarp);  // renders only one avatar +		avatarPoolp->renderAvatars(gAgentAvatar);  // renders only one avatar  		gGL.setSceneBlendType(LLRender::BT_ALPHA);  		gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);  	} -	avatarp->setVisualParamWeight(mVisualParam->getID(), mLastParamWeight); +	gAgentAvatar->setVisualParamWeight(mVisualParam->getID(), mLastParamWeight);  	mVisualParam->setWeight(mLastParamWeight, FALSE);  	gGL.color4f(1,1,1,1);  	mGLTexturep->setGLTextureCreated(true); @@ -297,10 +294,9 @@ BOOL LLVisualParamReset::render()  {  	if (sDirty)  	{ -		LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -		avatarp->updateComposites(); -		avatarp->updateVisualParams(); -		avatarp->updateGeometry(avatarp->mDrawable); +		gAgentAvatar->updateComposites(); +		gAgentAvatar->updateVisualParams(); +		gAgentAvatar->updateGeometry(gAgentAvatar->mDrawable);  		sDirty = FALSE;  	} diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index c80db89ef0..580b483b6b 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -206,8 +206,7 @@ BOOL LLToolPie::pickLeftMouseDownCallback()  			break;  		case CLICK_ACTION_SIT:  			{ -				LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -				if (avatarp && !avatarp->isSitting()) // agent not already sitting +				if (isAgentAvatarValid() && !gAgentAvatar->isSitting()) // agent not already sitting  				{  					handle_object_sit_or_stand();  					// put focus in world when sitting on an object @@ -331,7 +330,7 @@ BOOL LLToolPie::pickLeftMouseDownCallback()  			}  			object = (LLViewerObject*)object->getParent();  		} -		if (object && object == gAgent.getAvatarObject()) +		if (object && object == gAgentAvatar)  		{  			// we left clicked on avatar, switch to focus mode  			LLToolMgr::getInstance()->setTransientTool(LLToolCamera::getInstance()); @@ -413,8 +412,7 @@ ECursorType cursor_from_object(LLViewerObject* object)  	{  	case CLICK_ACTION_SIT:  		{ -			LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -			if (avatarp && !avatarp->isSitting()) // not already sitting? +			if (isAgentAvatarValid() && !gAgentAvatar->isSitting()) // not already sitting?  			{  				cursor = UI_CURSOR_TOOLSIT;  			} diff --git a/indra/newview/lltoolplacer.cpp b/indra/newview/lltoolplacer.cpp index b10ee590e0..847852f8af 100644 --- a/indra/newview/lltoolplacer.cpp +++ b/indra/newview/lltoolplacer.cpp @@ -62,6 +62,7 @@  #include "llviewerobjectlist.h"  #include "llviewercamera.h"  #include "llviewerstats.h" +#include "llvoavatarself.h"  // linden library headers  #include "llprimitive.h" @@ -433,7 +434,7 @@ BOOL LLToolPlacer::addObject( LLPCode pcode, S32 x, S32 y, U8 use_physics )  	// VEFFECT: AddObject  	LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BEAM, TRUE); -	effectp->setSourceObject((LLViewerObject*)gAgent.getAvatarObject()); +	effectp->setSourceObject((LLViewerObject*)gAgentAvatar);  	effectp->setPositionGlobal(regionp->getPosGlobalFromRegion(ray_end_region));  	effectp->setDuration(LL_HUD_DUR_SHORT);  	effectp->setColor(LLColor4U(gAgent.getEffectColor())); diff --git a/indra/newview/lltoolselect.cpp b/indra/newview/lltoolselect.cpp index 6e0c6663e9..a45bb2a4de 100644 --- a/indra/newview/lltoolselect.cpp +++ b/indra/newview/lltoolselect.cpp @@ -169,8 +169,8 @@ LLObjectSelectionHandle LLToolSelect::handleObjectSelection(const LLPickInfo& pi  		}  		if (!gAgentCamera.getFocusOnAvatar() &&										// if camera not glued to avatar -			LLVOAvatar::findAvatarFromAttachment(object) != gAgent.getAvatarObject() &&	// and it's not one of your attachments -			object != gAgent.getAvatarObject())									// and it's not you +			LLVOAvatar::findAvatarFromAttachment(object) != gAgentAvatar &&	// and it's not one of your attachments +			object != gAgentAvatar)									// and it's not you  		{  			// have avatar turn to face the selected object(s)  			LLVector3d selection_center = LLSelectMgr::getInstance()->getSelectionCenterGlobal(); diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index 7bbe40a486..f0f911b996 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -345,9 +345,9 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)  		const F32 TELEPORT_ARRIVAL_DELAY = 2.f; // Time to preload the world before raising the curtain after we've actually already arrived.  		S32 attach_count = 0; -		if (gAgent.getAvatarObject()) +		if (isAgentAvatarValid())  		{ -			attach_count = gAgent.getAvatarObject()->getAttachmentCount(); +			attach_count = gAgentAvatar->getAttachmentCount();  		}  		F32 teleport_save_time = TELEPORT_EXPIRY + TELEPORT_EXPIRY_PER_ATTACHMENT * attach_count;  		F32 teleport_elapsed = gTeleportDisplayTimer.getElapsedTimeF32(); @@ -1032,11 +1032,10 @@ LLRect get_whole_screen_region()  bool get_hud_matrices(const LLRect& screen_region, glh::matrix4f &proj, glh::matrix4f &model)  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (avatarp && avatarp->hasHUDAttachment()) +	if (isAgentAvatarValid() && gAgentAvatar->hasHUDAttachment())  	{  		F32 zoom_level = gAgentCamera.mHUDCurZoom; -		LLBBox hud_bbox = avatarp->getHUDBBox(); +		LLBBox hud_bbox = gAgentAvatar->getHUDBBox();  		F32 hud_depth = llmax(1.f, hud_bbox.getExtentLocal().mV[VX] * 1.1f);  		proj = gl_ortho(-0.5f * LLViewerCamera::getInstance()->getAspect(), 0.5f * LLViewerCamera::getInstance()->getAspect(), -0.5f, 0.5f, 0.f, hud_depth); @@ -1300,7 +1299,7 @@ void render_ui_2d()  	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);  	// render outline for HUD -	if (gAgent.getAvatarObject() && gAgentCamera.mHUDCurZoom < 0.98f) +	if (isAgentAvatarValid() && gAgentCamera.mHUDCurZoom < 0.98f)  	{  		glPushMatrix();  		S32 half_width = (gViewerWindow->getWorldViewWidthScaled() / 2); diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp index 00046ed3dd..d899c72e0e 100644 --- a/indra/newview/llviewerkeyboard.cpp +++ b/indra/newview/llviewerkeyboard.cpp @@ -869,7 +869,6 @@ S32 LLViewerKeyboard::loadBindings(const std::string& filename)  EKeyboardMode LLViewerKeyboard::getMode()  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject();  	if ( gAgentCamera.cameraMouselook() )  	{  		return MODE_FIRST_PERSON; @@ -878,7 +877,7 @@ EKeyboardMode LLViewerKeyboard::getMode()  	{  		return MODE_EDIT_AVATAR;  	} -	else if (avatarp && avatarp->isSitting()) +	else if (isAgentAvatarValid() && gAgentAvatar->isSitting())  	{  		return MODE_SITTING;  	} diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 2fcd3f1114..49a3ed14dc 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -3025,7 +3025,7 @@ bool LLViewerMediaImpl::isObjectAttachedToAnotherAvatar(LLVOVolume *obj)  		if (NULL != object)  		{  			LLVOAvatar *avatar = object->asAvatar(); -			if (NULL != avatar && avatar != gAgent.getAvatarObject()) +			if ((NULL != avatar) && (avatar != gAgentAvatar))  			{  				result = true;  				break; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index b8a3232c29..f838d1436d 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -2692,11 +2692,10 @@ class LLSelfEnableRemoveAllAttachments : public view_listener_t  	bool handleEvent(const LLSD& userdata)  	{  		bool new_value = false; -		if (gAgent.getAvatarObject()) +		if (isAgentAvatarValid())  		{ -			LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -			for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();  -				 iter != avatarp->mAttachmentPoints.end(); ) +			for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatar->mAttachmentPoints.begin();  +				 iter != gAgentAvatar->mAttachmentPoints.end(); )  			{  				LLVOAvatar::attachment_map_t::iterator curiter = iter++;  				LLViewerJointAttachment* attachment = curiter->second; @@ -2824,9 +2823,9 @@ bool handle_go_to()  	LLViewerParcelMgr::getInstance()->deselectLand(); -	if (gAgent.getAvatarObject() && !gSavedSettings.getBOOL("AutoPilotLocksCamera")) +	if (isAgentAvatarValid() && !gSavedSettings.getBOOL("AutoPilotLocksCamera"))  	{ -		gAgentCamera.setFocusGlobal(gAgentCamera.getFocusTargetGlobal(), gAgent.getAvatarObject()->getID()); +		gAgentCamera.setFocusGlobal(gAgentCamera.getFocusTargetGlobal(), gAgentAvatar->getID());  	}  	else   	{ @@ -3365,7 +3364,7 @@ class LLSelfStandUp : public view_listener_t  bool enable_standup_self()  { -	bool new_value = gAgent.getAvatarObject() && gAgent.getAvatarObject()->isSitting(); +	bool new_value = isAgentAvatarValid() && gAgentAvatar->isSitting();  	return new_value;  } @@ -3694,9 +3693,9 @@ class LLLandSit : public view_listener_t  		LLVector3d posGlobal = LLToolPie::getInstance()->getPick().mPosGlobal;  		LLQuaternion target_rot; -		if (gAgent.getAvatarObject()) +		if (isAgentAvatarValid())  		{ -			target_rot = gAgent.getAvatarObject()->getRotation(); +			target_rot = gAgentAvatar->getRotation();  		}  		else  		{ @@ -4587,13 +4586,9 @@ BOOL sitting_on_selection()  	}  	// Need to determine if avatar is sitting on this object -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp) -	{ -		return FALSE; -	} +	if (!isAgentAvatarValid()) return FALSE; -	return (avatarp->isSitting() && avatarp->getRoot() == root_object); +	return (gAgentAvatar->isSitting() && gAgentAvatar->getRoot() == root_object);  }  class LLToolsSaveToInventory : public view_listener_t @@ -5846,7 +5841,7 @@ private:  			S32 index = userdata.asInteger();  			LLViewerJointAttachment* attachment_point = NULL;  			if (index > 0) -				attachment_point = get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, index, (LLViewerJointAttachment*)NULL); +				attachment_point = get_if_there(gAgentAvatar->mAttachmentPoints, index, (LLViewerJointAttachment*)NULL);  			confirm_replace_attachment(0, attachment_point);  		}  		return true; @@ -5867,8 +5862,8 @@ void near_attach_object(BOOL success, void *user_data)  		U8 attachment_id = 0;  		if (attachment)  		{ -			for (LLVOAvatar::attachment_map_t::const_iterator iter = gAgent.getAvatarObject()->mAttachmentPoints.begin(); -				 iter != gAgent.getAvatarObject()->mAttachmentPoints.end(); ++iter) +			for (LLVOAvatar::attachment_map_t::const_iterator iter = gAgentAvatar->mAttachmentPoints.begin(); +				 iter != gAgentAvatar->mAttachmentPoints.end(); ++iter)  			{  				if (iter->second == attachment)  				{ @@ -5993,7 +5988,7 @@ class LLAttachmentDetachFromPoint : public view_listener_t  {  	bool handleEvent(const LLSD& user_data)  	{ -		const LLViewerJointAttachment *attachment = get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, user_data.asInteger(), (LLViewerJointAttachment*)NULL); +		const LLViewerJointAttachment *attachment = get_if_there(gAgentAvatar->mAttachmentPoints, user_data.asInteger(), (LLViewerJointAttachment*)NULL);  		if (attachment->getNumObjects() > 0)  		{  			gMessageSystem->newMessage("ObjectDetach"); @@ -6021,7 +6016,7 @@ static bool onEnableAttachmentLabel(LLUICtrl* ctrl, const LLSD& data)  	LLMenuItemGL* menu = dynamic_cast<LLMenuItemGL*>(ctrl);  	if (menu)  	{ -		const LLViewerJointAttachment *attachment = get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, data["index"].asInteger(), (LLViewerJointAttachment*)NULL); +		const LLViewerJointAttachment *attachment = get_if_there(gAgentAvatar->mAttachmentPoints, data["index"].asInteger(), (LLViewerJointAttachment*)NULL);  		if (attachment)  		{  			label = data["label"].asString(); @@ -6139,7 +6134,7 @@ class LLAttachmentEnableDrop : public view_listener_t  		if (object && LLSelectMgr::getInstance()->getSelection()->contains(object,SELECT_ALL_TES ))  		{      		S32 attachmentID  = ATTACHMENT_ID_FROM_STATE(object->getState()); -			attachment = get_if_there(gAgent.getAvatarObject()->mAttachmentPoints, attachmentID, (LLViewerJointAttachment*)NULL); +			attachment = get_if_there(gAgentAvatar->mAttachmentPoints, attachmentID, (LLViewerJointAttachment*)NULL);  			if (attachment)  			{ @@ -6271,8 +6266,8 @@ class LLAttachmentPointFilled : public view_listener_t  	bool handleEvent(const LLSD& user_data)  	{  		bool enable = false; -		LLVOAvatar::attachment_map_t::iterator found_it = gAgent.getAvatarObject()->mAttachmentPoints.find(user_data.asInteger()); -		if (found_it != gAgent.getAvatarObject()->mAttachmentPoints.end()) +		LLVOAvatar::attachment_map_t::iterator found_it = gAgentAvatar->mAttachmentPoints.find(user_data.asInteger()); +		if (found_it != gAgentAvatar->mAttachmentPoints.end())  		{  			enable = found_it->second->getNumObjects() > 0;  		} @@ -6489,15 +6484,10 @@ void handle_toggle_pg(void*)  void handle_dump_attachments(void*)  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if(!avatarp) -	{ -		llinfos << "NO AVATAR" << llendl; -		return; -	} +	if(!isAgentAvatarValid()) return; -	for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();  -		 iter != avatarp->mAttachmentPoints.end(); ) +	for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatar->mAttachmentPoints.begin();  +		 iter != gAgentAvatar->mAttachmentPoints.end(); )  	{  		LLVOAvatar::attachment_map_t::iterator curiter = iter++;  		LLViewerJointAttachment* attachment = curiter->second; @@ -6917,7 +6907,7 @@ void reload_vertex_shader(void *)  void handle_dump_avatar_local_textures(void*)  { -	gAgent.getAvatarObject()->dumpLocalTextures(); +	gAgentAvatar->dumpLocalTextures();  }  void handle_dump_timers() @@ -6937,86 +6927,83 @@ void handle_debug_avatar_textures(void*)  void handle_grab_texture(void* data)  {  	ETextureIndex tex_index = (ETextureIndex)((intptr_t)data); -	const LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (avatarp) -	{ -		// MULTI-WEARABLE: change to support an index -		const LLUUID& asset_id = avatarp->grabLocalTexture(tex_index, 0); -		LL_INFOS("texture") << "Adding baked texture " << asset_id << " to inventory." << llendl; -		LLAssetType::EType asset_type = LLAssetType::AT_TEXTURE; -		LLInventoryType::EType inv_type = LLInventoryType::IT_TEXTURE; -		const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(asset_type)); -		if(folder_id.notNull()) -		{ -			std::string name = "Unknown"; -			const LLVOAvatarDictionary::TextureEntry *texture_dict = LLVOAvatarDictionary::getInstance()->getTexture(tex_index); -			if (texture_dict->mIsBakedTexture) -			{ -				EBakedTextureIndex baked_index = texture_dict->mBakedTextureIndex; -				name = "Baked " + LLVOAvatarDictionary::getInstance()->getBakedTexture(baked_index)->mNameCapitalized; -			} -			name += " Texture"; - -			LLUUID item_id; -			item_id.generate(); -			LLPermissions perm; -			perm.init(gAgentID, -					  gAgentID, -					  LLUUID::null, -					  LLUUID::null); -			U32 next_owner_perm = PERM_MOVE | PERM_TRANSFER; -			perm.initMasks(PERM_ALL, -						   PERM_ALL, -						   PERM_NONE, -						   PERM_NONE, -						   next_owner_perm); -			time_t creation_date_now = time_corrected(); -			LLPointer<LLViewerInventoryItem> item -				= new LLViewerInventoryItem(item_id, -											folder_id, -											perm, -											asset_id, -											asset_type, -											inv_type, -											name, -											LLStringUtil::null, -											LLSaleInfo::DEFAULT, -											LLInventoryItem::II_FLAGS_NONE, -											creation_date_now); - -			item->updateServer(TRUE); -			gInventory.updateItem(item); -			gInventory.notifyObservers(); - -			// Show the preview panel for textures to let -			// user know that the image is now in inventory. -			LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(); -			if(active_panel) -			{ -				LLFocusableElement* focus_ctrl = gFocusMgr.getKeyboardFocus(); - -				active_panel->setSelection(item_id, TAKE_FOCUS_NO); -				active_panel->openSelected(); -				//LLFloaterInventory::dumpSelectionInformation((void*)view); -				// restore keyboard focus -				gFocusMgr.setKeyboardFocus(focus_ctrl); -			} -		} -		else -		{ -			llwarns << "Can't find a folder to put it in" << llendl; +	if (!isAgentAvatarValid()) return; + +	// MULTI-WEARABLE: change to support an index +	const LLUUID& asset_id = gAgentAvatar->grabLocalTexture(tex_index, 0); +	LL_INFOS("texture") << "Adding baked texture " << asset_id << " to inventory." << llendl; +	LLAssetType::EType asset_type = LLAssetType::AT_TEXTURE; +	LLInventoryType::EType inv_type = LLInventoryType::IT_TEXTURE; +	const LLUUID folder_id = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(asset_type)); +	if(folder_id.notNull()) +	{ +		std::string name = "Unknown"; +		const LLVOAvatarDictionary::TextureEntry *texture_dict = LLVOAvatarDictionary::getInstance()->getTexture(tex_index); +		if (texture_dict->mIsBakedTexture) +		{ +			EBakedTextureIndex baked_index = texture_dict->mBakedTextureIndex; +			name = "Baked " + LLVOAvatarDictionary::getInstance()->getBakedTexture(baked_index)->mNameCapitalized; +		} +		name += " Texture"; + +		LLUUID item_id; +		item_id.generate(); +		LLPermissions perm; +		perm.init(gAgentID, +				  gAgentID, +				  LLUUID::null, +				  LLUUID::null); +		U32 next_owner_perm = PERM_MOVE | PERM_TRANSFER; +		perm.initMasks(PERM_ALL, +					   PERM_ALL, +					   PERM_NONE, +					   PERM_NONE, +					   next_owner_perm); +		time_t creation_date_now = time_corrected(); +		LLPointer<LLViewerInventoryItem> item +			= new LLViewerInventoryItem(item_id, +										folder_id, +										perm, +										asset_id, +										asset_type, +										inv_type, +										name, +										LLStringUtil::null, +										LLSaleInfo::DEFAULT, +										LLInventoryItem::II_FLAGS_NONE, +										creation_date_now); + +		item->updateServer(TRUE); +		gInventory.updateItem(item); +		gInventory.notifyObservers(); + +		// Show the preview panel for textures to let +		// user know that the image is now in inventory. +		LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(); +		if(active_panel) +		{ +			LLFocusableElement* focus_ctrl = gFocusMgr.getKeyboardFocus(); + +			active_panel->setSelection(item_id, TAKE_FOCUS_NO); +			active_panel->openSelected(); +			//LLFloaterInventory::dumpSelectionInformation((void*)view); +			// restore keyboard focus +			gFocusMgr.setKeyboardFocus(focus_ctrl);  		}  	} +	else +	{ +		llwarns << "Can't find a folder to put it in" << llendl; +	}  }  BOOL enable_grab_texture(void* data)  {  	ETextureIndex index = (ETextureIndex)((intptr_t)data); -	const LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (avatarp) +	if (isAgentAvatarValid())  	{  		// MULTI-WEARABLE: -		return avatarp->canGrabLocalTexture(index,0); +		return gAgentAvatar->canGrabLocalTexture(index,0);  	}  	return FALSE;  } @@ -7227,12 +7214,11 @@ void handle_buy_currency_test(void*)  void handle_rebake_textures(void*)  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp) return; +	if (!isAgentAvatarValid()) return;  	// Slam pending upload count to "unstick" things  	bool slam_for_debug = true; -	avatarp->forceBakeAllTextures(slam_for_debug); +	gAgentAvatar->forceBakeAllTextures(slam_for_debug);  }  void toggle_visibility(void* user_data) diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 1ead7bac10..96bb687bbb 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -3002,9 +3002,9 @@ void process_teleport_finish(LLMessageSystem* msg, void**)  	gAgent.setRegion(regionp);  	gObjectList.shiftObjects(shift_vector); -	if (gAgent.getAvatarObject()) +	if (isAgentAvatarValid())  	{ -		gAgent.getAvatarObject()->clearChatText(); +		gAgentAvatar->clearChatText();  		gAgentCamera.slamLookAt(look_at);  	}  	gAgent.setPositionAgent(pos); @@ -3084,8 +3084,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)  	std::string version_channel;  	msg->getString("SimData", "ChannelVersion", version_channel); -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp) +	if (!isAgentAvatarValid())  	{  		// Could happen if you were immediately god-teleported away on login,  		// maybe other cases.  Continue, but warn. @@ -3139,7 +3138,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)  		// know what you look like.  		gAgent.sendAgentSetAppearance(); -		if (avatarp) +		if (isAgentAvatarValid())  		{  			// Chat the "back" SLURL. (DEV-4907) @@ -3152,9 +3151,9 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)  			LLNotificationsUtil::add("SystemMessageTip", args);  			// Set the new position -			avatarp->setPositionAgent(agent_pos); -			avatarp->clearChat(); -			avatarp->slamPosition(); +			gAgentAvatar->setPositionAgent(agent_pos); +			gAgentAvatar->clearChat(); +			gAgentAvatar->slamPosition();  		}  	}  	else @@ -3214,9 +3213,9 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)  		gAgent.clearBusy();  	} -	if (avatarp) +	if (isAgentAvatarValid())  	{ -		avatarp->mFootPlane.clearVec(); +		gAgentAvatar->mFootPlane.clearVec();  	}  	// send walk-vs-run status @@ -4031,7 +4030,7 @@ void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data)  	//clear animation flags  	avatarp = (LLVOAvatar *)gObjectList.findObject(uuid); -	if (!avatarp) +	if (!isAgentAvatarValid())  	{  		// no agent by this ID...error?  		LL_WARNS("Messaging") << "Received animation state for unknown avatar" << uuid << LL_ENDL; @@ -4165,9 +4164,7 @@ void process_avatar_sit_response(LLMessageSystem *mesgsys, void **user_data)  	BOOL force_mouselook;  	mesgsys->getBOOLFast(_PREHASH_SitTransform, _PREHASH_ForceMouselook, force_mouselook); -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); - -	if (avatarp && dist_vec_squared(camera_eye, camera_at) > 0.0001f) +	if (isAgentAvatarValid() && dist_vec_squared(camera_eye, camera_at) > 0.0001f)  	{  		gAgentCamera.setSitCamera(sitObjectID, camera_eye, camera_at);  	} @@ -4178,7 +4175,7 @@ void process_avatar_sit_response(LLMessageSystem *mesgsys, void **user_data)  	if (object)  	{  		LLVector3 sit_spot = object->getPositionAgent() + (sitPosition * object->getRotation()); -		if (!use_autopilot || (avatarp && avatarp->isSitting() && avatarp->getRoot() == object->getRoot())) +		if (!use_autopilot || isAgentAvatarValid() && gAgentAvatar->isSitting() && gAgentAvatar->getRoot() == object->getRoot())  		{  			//we're already sitting on this object, so don't autopilot  		} diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index abcb7e5452..f3eb75bcd0 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -134,7 +134,15 @@ LLViewerObject *LLViewerObject::createObject(const LLUUID &id, const LLPCode pco  	{  		if (id == gAgentID)  		{ -			res = new LLVOAvatarSelf(id, pcode, regionp); +			if (!gAgentAvatar) +			{ +				gAgentAvatar = new LLVOAvatarSelf(id, pcode, regionp); +			} +			else  +			{ +				gAgentAvatar->updateRegion(regionp); +			} +			res = gAgentAvatar;  		}  		else  		{ @@ -223,7 +231,7 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe  	mClickAction(0),  	mAttachmentItemID(LLUUID::null)  { -	if(!is_global) +	if (!is_global)  	{  		llassert(mRegionp);  	} @@ -235,7 +243,7 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe  	mPositionRegion = LLVector3(0.f, 0.f, 0.f); -	if(!is_global) +	if (!is_global && mRegionp)  	{  		mPositionAgent = mRegionp->getOriginAgent();  	} @@ -377,11 +385,10 @@ void LLViewerObject::markDead()  		if (flagAnimSource())  		{ -			LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -			if (avatarp && !avatarp->isDead()) +			if (isAgentAvatarValid())  			{  				// stop motions associated with this object -				avatarp->stopMotionFromSource(mID); +				gAgentAvatar->stopMotionFromSource(mID);  			}  		} @@ -4920,7 +4927,6 @@ void LLViewerObject::setIncludeInSearch(bool include_in_search)  void LLViewerObject::setRegion(LLViewerRegion *regionp)  { -	llassert(regionp);  	mLatestRecvPacketID = 0;  	mRegionp = regionp; diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index 64a7b2166b..eb966a1535 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -474,7 +474,6 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,  			if (objectp->getRegion() != regionp)  			{    // Object changed region, so update it -				objectp->setRegion(regionp);  				objectp->updateRegion(regionp); // for LLVOAvatar  			}  		} @@ -895,6 +894,13 @@ void LLViewerObjectList::removeDrawable(LLDrawable* drawablep)  BOOL LLViewerObjectList::killObject(LLViewerObject *objectp)  { +	// Don't ever kill gAgentAvatar, just mark it as null region instead. +	if (objectp == gAgentAvatar) +	{ +		objectp->setRegion(NULL); +		return FALSE; +	} +  	// When we're killing objects, all we do is mark them as dead.  	// We clean up the dead objects later. @@ -1210,11 +1216,10 @@ void LLViewerObjectList::generatePickList(LLCamera &camera)  		}  		// add all hud objects to pick list -		LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -		if (avatarp) +		if (isAgentAvatarValid())  		{ -			for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();  -				 iter != avatarp->mAttachmentPoints.end(); ) +			for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatar->mAttachmentPoints.begin();  +				 iter != gAgentAvatar->mAttachmentPoints.end(); )  			{  				LLVOAvatar::attachment_map_t::iterator curiter = iter++;  				LLViewerJointAttachment* attachment = curiter->second; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 6d2bbb27ee..4b6ac07a94 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -365,9 +365,9 @@ public:  			agent_center_text = llformat("AgentCenter  %f %f %f",  										 (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ])); -			if (gAgent.getAvatarObject()) +			if (isAgentAvatarValid())  			{ -				tvector = gAgent.getPosGlobalFromAgent(gAgent.getAvatarObject()->mRoot.getWorldPosition()); +				tvector = gAgent.getPosGlobalFromAgent(gAgentAvatar->mRoot.getWorldPosition());  				agent_root_center_text = llformat("AgentRootCenter %f %f %f",  												  (F32)(tvector.mdV[VX]), (F32)(tvector.mdV[VY]), (F32)(tvector.mdV[VZ]));  			} @@ -3150,7 +3150,7 @@ void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls,  		// setup HUD render  		if (selection->getSelectType() == SELECT_TYPE_HUD && LLSelectMgr::getInstance()->getSelection()->getObjectCount())  		{ -			LLBBox hud_bbox = gAgent.getAvatarObject()->getHUDBBox(); +			LLBBox hud_bbox = gAgentAvatar->getHUDBBox();  			// set up transform to encompass bounding box of HUD  			glMatrixMode(GL_PROJECTION); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index bb69622135..8e9e15352a 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -755,11 +755,6 @@ LLVOAvatar::~LLVOAvatar()  {  	lldebugs << "LLVOAvatar Destructor (0x" << this << ") id:" << mID << llendl; -	if (isSelf()) -	{ -		gAgent.setAvatarObject(NULL); -	} -  	mRoot.removeAllChildren();  	deleteAndClearArray(mSkeleton); @@ -965,15 +960,14 @@ void LLVOAvatar::dumpBakedStatus()  //static  void LLVOAvatar::restoreGL()  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp) return; +	if (!isAgentAvatarValid()) return; -	avatarp->setCompositeUpdatesEnabled(TRUE); -	for (U32 i = 0; i < avatarp->mBakedTextureDatas.size(); i++) +	gAgentAvatar->setCompositeUpdatesEnabled(TRUE); +	for (U32 i = 0; i < gAgentAvatar->mBakedTextureDatas.size(); i++)  	{ -		avatarp->invalidateComposite(avatarp->mBakedTextureDatas[i].mTexLayerSet, FALSE); +		gAgentAvatar->invalidateComposite(gAgentAvatar->mBakedTextureDatas[i].mTexLayerSet, FALSE);  	} -	avatarp->updateMeshTextures(); +	gAgentAvatar->updateMeshTextures();  }  //static @@ -2085,7 +2079,7 @@ U32 LLVOAvatar::processUpdateMessage(LLMessageSystem *mesgsys,  	if(retval & LLViewerObject::INVALID_UPDATE)  	{ -		if(this == gAgent.getAvatarObject()) +		if (isSelf())  		{  			//tell sim to cancel this update  			gAgent.teleportViaLocation(gAgent.getPositionGlobal()); @@ -6859,7 +6853,6 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id )  // static  void LLVOAvatar::dumpArchetypeXML( void* )  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject();  	LLAPRFile outfile;  	outfile.open(gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER,"new archetype.xml"), LL_APR_WB );  	apr_file_t* file = outfile.getFileHandle() ; @@ -6878,7 +6871,7 @@ void LLVOAvatar::dumpArchetypeXML( void* )  		const std::string& wearable_name = LLWearableDictionary::getTypeName((EWearableType)type);  		apr_file_printf( file, "\n\t\t<!-- wearable: %s -->\n", wearable_name.c_str() ); -		for (LLVisualParam* param = avatarp->getFirstVisualParam(); param; param = avatarp->getNextVisualParam()) +		for (LLVisualParam* param = gAgentAvatar->getFirstVisualParam(); param; param = gAgentAvatar->getNextVisualParam())  		{  			LLViewerVisualParam* viewer_param = (LLViewerVisualParam*)param;  			if( (viewer_param->getWearableType() == type) &&  @@ -6894,7 +6887,7 @@ void LLVOAvatar::dumpArchetypeXML( void* )  			if (LLVOAvatarDictionary::getTEWearableType((ETextureIndex)te) == type)  			{  				// MULTIPLE_WEARABLES: extend to multiple wearables? -				LLViewerTexture* te_image = ((LLVOAvatar*)avatarp)->getImage((ETextureIndex)te, 0); +				LLViewerTexture* te_image = ((LLVOAvatar *)(gAgentAvatar))->getImage((ETextureIndex)te, 0);  				if( te_image )  				{  					std::string uuid_str; diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index e3583b4d6b..0183061c0e 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -67,6 +67,14 @@  #include <boost/lexical_cast.hpp> +LLVOAvatarSelf *gAgentAvatar = NULL; +BOOL isAgentAvatarValid() +{ +	return (gAgentAvatar && +			(gAgentAvatar->getRegion() != NULL) && +			(!gAgentAvatar->isDead())); +} +  using namespace LLVOAvatarDefines;  /********************************************************************************* @@ -133,7 +141,6 @@ LLVOAvatarSelf::LLVOAvatarSelf(const LLUUID& id,  	mLastRegionHandle(0),  	mRegionCrossingCount(0)  { -	gAgent.setAvatarObject(this);  	gAgentWearables.setAvatarObject(this);  	lldebugs << "Marking avatar as self " << id << llendl; @@ -513,12 +520,6 @@ BOOL LLVOAvatarSelf::buildMenus()  LLVOAvatarSelf::~LLVOAvatarSelf()  { -	// gAgents pointer might have been set to a different Avatar Self, don't get rid of it if so. -	if (gAgent.getAvatarObject() == this) -	{ -		gAgent.setAvatarObject(NULL); -		gAgentWearables.setAvatarObject(NULL); -	}  	delete mScreenp;  	mScreenp = NULL;  } @@ -611,6 +612,17 @@ BOOL LLVOAvatarSelf::updateCharacter(LLAgent &agent)  }  // virtual +BOOL LLVOAvatarSelf::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) +{ +	if (!isAgentAvatarValid()) +	{ +		return TRUE; +	} +	LLVOAvatar::idleUpdate(agent, world, time); +	return TRUE; +} + +// virtual  LLJoint *LLVOAvatarSelf::getJoint(const std::string &name)  {  	if (mScreenp) @@ -621,7 +633,8 @@ LLJoint *LLVOAvatarSelf::getJoint(const std::string &name)  	return LLVOAvatar::getJoint(name);  } -/*virtual*/ BOOL LLVOAvatarSelf::setVisualParamWeight(LLVisualParam *which_param, F32 weight, BOOL upload_bake ) +// virtual +BOOL LLVOAvatarSelf::setVisualParamWeight(LLVisualParam *which_param, F32 weight, BOOL upload_bake )  {  	if (!which_param)  	{ @@ -631,7 +644,8 @@ LLJoint *LLVOAvatarSelf::getJoint(const std::string &name)  	return setParamWeight(param,weight,upload_bake);  } -/*virtual*/ BOOL LLVOAvatarSelf::setVisualParamWeight(const char* param_name, F32 weight, BOOL upload_bake ) +// virtual +BOOL LLVOAvatarSelf::setVisualParamWeight(const char* param_name, F32 weight, BOOL upload_bake )  {  	if (!param_name)  	{ @@ -641,7 +655,8 @@ LLJoint *LLVOAvatarSelf::getJoint(const std::string &name)  	return setParamWeight(param,weight,upload_bake);  } -/*virtual*/ BOOL LLVOAvatarSelf::setVisualParamWeight(S32 index, F32 weight, BOOL upload_bake ) +// virtual +BOOL LLVOAvatarSelf::setVisualParamWeight(S32 index, F32 weight, BOOL upload_bake )  {  	LLViewerVisualParam *param = (LLViewerVisualParam*) LLCharacter::getVisualParam(index);  	return setParamWeight(param,weight,upload_bake); @@ -1073,7 +1088,7 @@ BOOL LLVOAvatarSelf::detachObject(LLViewerObject *viewer_object)  		// Make sure the inventory is in sync with the avatar.  		// Update COF contents, don't trigger appearance update. -		if (gAgent.getAvatarObject() == NULL) +		if (!isAgentAvatarValid())  		{  			llinfos << "removeItemLinks skipped, avatar is under destruction" << llendl;  		} @@ -1672,7 +1687,7 @@ void LLVOAvatarSelf::onLocalTextureLoaded(BOOL success, LLViewerFetchedTexture *  void LLVOAvatarSelf::dumpTotalLocalTextureByteCount()  {  	S32 gl_bytes = 0; -	gAgent.getAvatarObject()->getLocalTextureByteCount(&gl_bytes); +	gAgentAvatar->getLocalTextureByteCount(&gl_bytes);  	llinfos << "Total Avatar LocTex GL:" << (gl_bytes/1024) << "KB" << llendl;  } @@ -1929,9 +1944,7 @@ void LLVOAvatarSelf::processRebakeAvatarTextures(LLMessageSystem* msg, void**)  {  	LLUUID texture_id;  	msg->getUUID("TextureData", "TextureID", texture_id); - -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (!avatarp) return; +	if (!isAgentAvatarValid()) return;  	// If this is a texture corresponding to one of our baked entries,   	// just rebake that layer set. @@ -1948,13 +1961,13 @@ void LLVOAvatarSelf::processRebakeAvatarTextures(LLMessageSystem* msg, void**)  		const LLVOAvatarDictionary::TextureEntry *texture_dict = iter->second;  		if (texture_dict->mIsBakedTexture)  		{ -			if (texture_id == avatarp->getTEImage(index)->getID()) +			if (texture_id == gAgentAvatar->getTEImage(index)->getID())  			{ -				LLTexLayerSet* layer_set = avatarp->getLayerSet(index); +				LLTexLayerSet* layer_set = gAgentAvatar->getLayerSet(index);  				if (layer_set)  				{  					llinfos << "TAT: rebake - matched entry " << (S32)index << llendl; -					avatarp->invalidateComposite(layer_set, TRUE); +					gAgentAvatar->invalidateComposite(layer_set, TRUE);  					found = TRUE;  					LLViewerStats::getInstance()->incStat(LLViewerStats::ST_TEX_REBAKES);  				} @@ -1965,12 +1978,12 @@ void LLVOAvatarSelf::processRebakeAvatarTextures(LLMessageSystem* msg, void**)  	// If texture not found, rebake all entries.  	if (!found)  	{ -		avatarp->forceBakeAllTextures(); +		gAgentAvatar->forceBakeAllTextures();  	}  	else  	{  		// Not sure if this is necessary, but forceBakeAllTextures() does it. -		avatarp->updateMeshTextures(); +		gAgentAvatar->updateMeshTextures();  	}  } @@ -2050,10 +2063,9 @@ void LLVOAvatarSelf::onCustomizeStart()  // static  void LLVOAvatarSelf::onCustomizeEnd()  { -	LLVOAvatarSelf *avatarp = gAgent.getAvatarObject(); -	if (avatarp) +	if (isAgentAvatarValid())  	{ -		avatarp->invalidateAll(); +		gAgentAvatar->invalidateAll();  	}  } diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index 9514abc5bc..706a02c088 100644 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -55,7 +55,7 @@ public:  	LLVOAvatarSelf(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);  	virtual 				~LLVOAvatarSelf();  	virtual void			markDead(); -	virtual void 		initInstance(); // Called after construction to initialize the class. +	virtual void 			initInstance(); // Called after construction to initialize the class.  protected:  	/*virtual*/ BOOL		loadAvatar();  	BOOL					loadAvatarSelf(); @@ -77,6 +77,7 @@ protected:  	//--------------------------------------------------------------------  public:  	/*virtual*/ void 		updateRegion(LLViewerRegion *regionp); +	/*virtual*/ BOOL   	 	idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);  	//--------------------------------------------------------------------  	// LLCharacter interface and related @@ -333,4 +334,8 @@ public:  }; +extern LLVOAvatarSelf *gAgentAvatar; + +BOOL isAgentAvatarValid(); +  #endif // LL_VO_AVATARSELF_H diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index cc346c2345..710348ac4b 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -5872,12 +5872,10 @@ void LLVoiceClient::enforceTether(void)  void LLVoiceClient::updatePosition(void)  { -	  	if(gVoiceClient)  	{ -		LLVOAvatarSelf *avatarp = gAgent.getAvatarObject();  		LLViewerRegion *region = gAgent.getRegion(); -		if(region && avatarp) +		if(region && isAgentAvatarValid())  		{  			LLMatrix3 rot;  			LLVector3d pos; @@ -5895,9 +5893,9 @@ void LLVoiceClient::updatePosition(void)  					rot);				// rotation matrix  			// Send the current avatar position to the voice code -			rot = avatarp->getRootJoint()->getWorldRotation().getMatrix3(); +			rot = gAgentAvatar->getRootJoint()->getWorldRotation().getMatrix3(); -			pos = avatarp->getPositionGlobal(); +			pos = gAgentAvatar->getPositionGlobal();  			// TODO: Can we get the head offset from outside the LLVOAvatar?  //			pos += LLVector3d(mHeadOffset);  			pos += LLVector3d(0.f, 0.f, 1.f); diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp index c9fe032a24..23a14c07ab 100644 --- a/indra/newview/llwearable.cpp +++ b/indra/newview/llwearable.cpp @@ -62,22 +62,20 @@ class LLOverrideBakedTextureUpdate  public:  	LLOverrideBakedTextureUpdate(bool temp_state)  	{ -		LLVOAvatarSelf* avatarp = gAgent.getAvatarObject();  		U32 num_bakes = (U32) LLVOAvatarDefines::BAKED_NUM_INDICES;  		for( U32 index = 0; index < num_bakes; ++index )  		{ -			composite_enabled[index] = avatarp->isCompositeUpdateEnabled(index); +			composite_enabled[index] = gAgentAvatar->isCompositeUpdateEnabled(index);  		} -		avatarp->setCompositeUpdatesEnabled(temp_state); +		gAgentAvatar->setCompositeUpdatesEnabled(temp_state);  	}  	~LLOverrideBakedTextureUpdate()  	{ -		LLVOAvatarSelf* avatarp = gAgent.getAvatarObject();  		U32 num_bakes = (U32)LLVOAvatarDefines::BAKED_NUM_INDICES;		  		for( U32 index = 0; index < num_bakes; ++index )  		{ -			avatarp->setCompositeUpdatesEnabled(index, composite_enabled[index]); +			gAgentAvatar->setCompositeUpdatesEnabled(index, composite_enabled[index]);  		}  	}  private: @@ -204,10 +202,9 @@ BOOL LLWearable::exportFile(LLFILE* file) const  void LLWearable::createVisualParams()  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	for (LLViewerVisualParam* param = (LLViewerVisualParam*) avatarp->getFirstVisualParam();  +	for (LLViewerVisualParam* param = (LLViewerVisualParam*) gAgentAvatar->getFirstVisualParam();   		 param; -		 param = (LLViewerVisualParam*) avatarp->getNextVisualParam()) +		 param = (LLViewerVisualParam*) gAgentAvatar->getNextVisualParam())  	{  		if (param->getWearableType() == mType)  		{ @@ -227,7 +224,7 @@ void LLWearable::createVisualParams()  		param->resetDrivenParams();  		if(!param->linkDrivenParams(boost::bind(wearable_function,(LLWearable*)this, _1), false))  		{ -			if( !param->linkDrivenParams(boost::bind(avatar_function,avatarp,_1 ), true)) +			if( !param->linkDrivenParams(boost::bind(avatar_function,gAgentAvatar,_1 ), true))  			{  				llwarns << "could not link driven params for wearable " << getName() << " id: " << param->getID() << llendl;  				continue; @@ -463,9 +460,7 @@ BOOL LLWearable::importFile( LLFILE* file )  // since this wearable was created.  BOOL LLWearable::isOldVersion() const  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	llassert(avatarp); -	if(!avatarp) return FALSE; +	if (!isAgentAvatarValid()) return FALSE;  	if( LLWearable::sCurrentDefinitionVersion < mDefinitionVersion )  	{ @@ -479,9 +474,9 @@ BOOL LLWearable::isOldVersion() const  	}  	S32 param_count = 0; -	for( LLViewerVisualParam* param = (LLViewerVisualParam*) avatarp->getFirstVisualParam();  +	for( LLViewerVisualParam* param = (LLViewerVisualParam*) gAgentAvatar->getFirstVisualParam();   		param; -		param = (LLViewerVisualParam*) avatarp->getNextVisualParam() ) +		param = (LLViewerVisualParam*) gAgentAvatar->getNextVisualParam() )  	{  		if( (param->getWearableType() == mType) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) )  		{ @@ -527,13 +522,11 @@ BOOL LLWearable::isOldVersion() const  // only if those values are the same as the defaults.  BOOL LLWearable::isDirty() const  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	llassert(avatarp); -	if(!avatarp) return FALSE; +	if (!isAgentAvatarValid()) return FALSE; -	for( LLViewerVisualParam* param = (LLViewerVisualParam*) avatarp->getFirstVisualParam();  +	for( LLViewerVisualParam* param = (LLViewerVisualParam*) gAgentAvatar->getFirstVisualParam();   		param; -		param = (LLViewerVisualParam*) avatarp->getNextVisualParam() ) +		param = (LLViewerVisualParam*) gAgentAvatar->getNextVisualParam() )  	{  		if( (param->getWearableType() == mType)   			&& (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE )  @@ -594,11 +587,9 @@ BOOL LLWearable::isDirty() const  void LLWearable::setParamsToDefaults()  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	llassert(avatarp); -	if (!avatarp) return; +	if (!isAgentAvatarValid()) return; -	for( LLVisualParam* param = avatarp->getFirstVisualParam(); param; param = avatarp->getNextVisualParam() ) +	for( LLVisualParam* param = gAgentAvatar->getFirstVisualParam(); param; param = gAgentAvatar->getNextVisualParam() )  	{  		if( (((LLViewerVisualParam*)param)->getWearableType() == mType ) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) )  		{ @@ -634,18 +625,12 @@ void LLWearable::setTexturesToDefaults()  // Updates the user's avatar's appearance  void LLWearable::writeToAvatar()  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	llassert(avatarp); -	if (!avatarp) -	{ -		llerrs << "could not get avatar object to write to for wearable " << this->getName() << llendl; -		return; -	} +	if (!isAgentAvatarValid()) return; -	ESex old_sex = avatarp->getSex(); +	ESex old_sex = gAgentAvatar->getSex();  	// Pull params -	for( LLVisualParam* param = avatarp->getFirstVisualParam(); param; param = avatarp->getNextVisualParam() ) +	for( LLVisualParam* param = gAgentAvatar->getFirstVisualParam(); param; param = gAgentAvatar->getNextVisualParam() )  	{  		// cross-wearable parameters are not authoritative, as they are driven by a different wearable. So don't copy the values to the  		// avatar object if cross wearable. Cross wearable params get their values from the avatar, they shouldn't write the other way. @@ -654,7 +639,7 @@ void LLWearable::writeToAvatar()  			S32 param_id = param->getID();  			F32 weight = getVisualParamWeight(param_id); -			avatarp->setVisualParamWeight( param_id, weight, FALSE ); +			gAgentAvatar->setVisualParamWeight( param_id, weight, FALSE );  		}  	} @@ -675,14 +660,14 @@ void LLWearable::writeToAvatar()  			}  			LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture( image_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE );  			// MULTI-WEARABLE: replace hard-coded 0 -			avatarp->setLocalTextureTE(te, image, 0); +			gAgentAvatar->setLocalTextureTE(te, image, 0);  		}  	} -	ESex new_sex = avatarp->getSex(); +	ESex new_sex = gAgentAvatar->getSex();  	if( old_sex != new_sex )  	{ -		avatarp->updateSexDependentLayerSets( FALSE ); +		gAgentAvatar->updateSexDependentLayerSets( FALSE );  	}	  //	if( upload_bake ) @@ -696,12 +681,7 @@ void LLWearable::writeToAvatar()  // static   void LLWearable::removeFromAvatar( EWearableType type, BOOL upload_bake )  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	llassert(avatarp); -	if (!avatarp) -	{ -		return; -	} +	if (!isAgentAvatarValid()) return;  	// You can't just remove body parts.  	if( (type == WT_SHAPE) || @@ -713,12 +693,12 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL upload_bake )  	}  	// Pull params -	for( LLVisualParam* param = avatarp->getFirstVisualParam(); param; param = avatarp->getNextVisualParam() ) +	for( LLVisualParam* param = gAgentAvatar->getFirstVisualParam(); param; param = gAgentAvatar->getNextVisualParam() )  	{  		if( (((LLViewerVisualParam*)param)->getWearableType() == type) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) )  		{  			S32 param_id = param->getID(); -			avatarp->setVisualParamWeight( param_id, param->getDefaultWeight(), upload_bake ); +			gAgentAvatar->setVisualParamWeight( param_id, param->getDefaultWeight(), upload_bake );  		}  	} @@ -727,8 +707,8 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL upload_bake )  		gFloaterCustomize->setWearable(type, NULL, PERM_ALL, TRUE);  	} -	avatarp->updateVisualParams(); -	avatarp->wearableUpdated(type, TRUE); +	gAgentAvatar->updateVisualParams(); +	gAgentAvatar->wearableUpdated(type, TRUE);  //	if( upload_bake )  //	{ @@ -740,12 +720,7 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL upload_bake )  // Definition version is current: removes obsolete enties and creates default values for new ones.  void LLWearable::copyDataFrom(const LLWearable* src)  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	llassert(avatarp); -	if (!avatarp) -	{ -		return; -	} +	if (!isAgentAvatarValid()) return;  	mDefinitionVersion = LLWearable::sCurrentDefinitionVersion; @@ -758,9 +733,9 @@ void LLWearable::copyDataFrom(const LLWearable* src)  	mSavedVisualParamMap.clear();  	// Deep copy of mVisualParamMap (copies only those params that are current, filling in defaults where needed) -	for (LLViewerVisualParam* param = (LLViewerVisualParam*) avatarp->getFirstVisualParam();  +	for (LLViewerVisualParam* param = (LLViewerVisualParam*) gAgentAvatar->getFirstVisualParam();   		param; -		param = (LLViewerVisualParam*) avatarp->getNextVisualParam() ) +		param = (LLViewerVisualParam*) gAgentAvatar->getNextVisualParam() )  	{  		if( (param->getWearableType() == mType) )  		{ @@ -865,14 +840,12 @@ void LLWearable::addVisualParam(LLVisualParam *param)  void LLWearable::setVisualParams()  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -  	for (visual_param_index_map_t::const_iterator iter = mVisualParamIndexMap.begin(); iter != mVisualParamIndexMap.end(); iter++)  	{  		S32 id = iter->first;  		LLVisualParam *wearable_param = iter->second;  		F32 value = wearable_param->getWeight(); -		avatarp->setVisualParamWeight(id, value, FALSE); +		gAgentAvatar->setVisualParamWeight(id, value, FALSE);  	}  } @@ -1013,8 +986,7 @@ BOOL LLWearable::isOnTop() const  void LLWearable::createLayers(S32 te)  { -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	LLTexLayerSet *layer_set = avatarp->getLayerSet((ETextureIndex)te); +	LLTexLayerSet *layer_set = gAgentAvatar->getLayerSet((ETextureIndex)te);  	if (layer_set)  	{  		layer_set->cloneTemplates(mTEMap[te], (ETextureIndex)te, this); @@ -1112,10 +1084,9 @@ void LLWearable::destroyTextures()  void LLWearable::pullCrossWearableValues()  {  	// scan through all of the avatar's visual parameters -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	for (LLViewerVisualParam* param = (LLViewerVisualParam*) avatarp->getFirstVisualParam();  +	for (LLViewerVisualParam* param = (LLViewerVisualParam*) gAgentAvatar->getFirstVisualParam();   		 param; -		 param = (LLViewerVisualParam*) avatarp->getNextVisualParam()) +		 param = (LLViewerVisualParam*) gAgentAvatar->getNextVisualParam())  	{  		if( param )  		{ diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 685be043fc..fda89fae60 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -3856,15 +3856,14 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects, BOOL render  	}  	// pick HUD objects -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); -	if (avatarp && sShowHUDAttachments) +	if (isAgentAvatarValid() && sShowHUDAttachments)  	{  		glh::matrix4f save_proj(glh_get_current_projection());  		glh::matrix4f save_model(glh_get_current_modelview());  		setup_hud_matrices(screen_rect); -		for (LLVOAvatar::attachment_map_t::iterator iter = avatarp->mAttachmentPoints.begin();  -			 iter != avatarp->mAttachmentPoints.end(); ) +		for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatar->mAttachmentPoints.begin();  +			 iter != gAgentAvatar->mAttachmentPoints.end(); )  		{  			LLVOAvatar::attachment_map_t::iterator curiter = iter++;  			LLViewerJointAttachment* attachment = curiter->second; @@ -3964,9 +3963,9 @@ void LLPipeline::rebuildPools()  		max_count--;  	} -	if (gAgent.getAvatarObject()) +	if (isAgentAvatarValid())  	{ -		gAgent.getAvatarObject()->rebuildHUD(); +		gAgentAvatar->rebuildHUD();  	}  } @@ -4598,8 +4597,8 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)  		glLightfv(gllight, GL_SPECULAR, LLColor4::black.mV);  	} -	if (gAgent.getAvatarObject() && -		gAgent.getAvatarObject()->mSpecialRenderMode == 3) +	if (isAgentAvatarValid() && +		gAgentAvatar->mSpecialRenderMode == 3)  	{  		LLColor4  light_color = LLColor4::white;  		light_color.mV[3] = 0.0f; @@ -4708,15 +4707,13 @@ void LLPipeline::enableLightsDynamic()  		glColor4f(0.f, 0.f, 0.f, 1.f); // no local lighting by default  	} -	LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); - -	if (avatarp && getLightingDetail() <= 0) +	if (isAgentAvatarValid() && getLightingDetail() <= 0)  	{ -		if (avatarp->mSpecialRenderMode == 0) // normal +		if (gAgentAvatar->mSpecialRenderMode == 0) // normal  		{  			gPipeline.enableLightsAvatar();  		} -		else if (avatarp->mSpecialRenderMode >= 1)  // anim preview +		else if (gAgentAvatar->mSpecialRenderMode >= 1)  // anim preview  		{  			gPipeline.enableLightsAvatarEdit(LLColor4(0.7f, 0.6f, 0.3f, 1.f));  		} @@ -7101,15 +7098,15 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)  {  	if (LLPipeline::sWaterReflections && assertInitialized() && LLDrawPoolWater::sNeedsReflectionUpdate)  	{ -		LLVOAvatarSelf* avatarp = gAgent.getAvatarObject(); +		BOOL skip_avatar_update = FALSE;  		if (gAgentCamera.getCameraAnimating() || gAgentCamera.getCameraMode() != CAMERA_MODE_MOUSELOOK)  		{ -			avatarp = NULL; +			skip_avatar_update = TRUE;  		} -		if (avatarp) +		if (!skip_avatar_update)  		{ -			avatarp->updateAttachmentVisibility(CAMERA_MODE_THIRD_PERSON); +			gAgentAvatar->updateAttachmentVisibility(CAMERA_MODE_THIRD_PERSON);  		}  		LLVertexBuffer::unbind(); @@ -7333,9 +7330,9 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)  		LLGLState::checkTextureChannels();  		LLGLState::checkClientArrays(); -		if (avatarp) +		if (!skip_avatar_update)  		{ -			avatarp->updateAttachmentVisibility(gAgentCamera.getCameraMode()); +			gAgentAvatar->updateAttachmentVisibility(gAgentCamera.getCameraMode());  		}  	}  }  | 
