diff options
| author | Richard Linden <none@none> | 2011-03-14 13:18:15 -0700 | 
|---|---|---|
| committer | Richard Linden <none@none> | 2011-03-14 13:18:15 -0700 | 
| commit | c650b9cf8202ffc63d58bbcbf05f7eddf9ae6c3c (patch) | |
| tree | bb263cd02d0c5fcd095fe4c293275189e628a62f /indra | |
| parent | 96296eede9313d8a0636599e9b06dd501aba083c (diff) | |
clicking on sky or on own avatar to steer now works
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/lltoolpie.cpp | 31 | ||||
| -rw-r--r-- | indra/newview/lltoolpie.h | 2 | 
2 files changed, 29 insertions, 4 deletions
| diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 65c9f2b8f6..c0b5c8de70 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -111,7 +111,6 @@ BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask)  	mPick = gViewerWindow->pickImmediate(x, y, TRUE);  	mPick.mKeyMask = mask; -	mDragPick = mPick;  	mMouseButtonDown = true;  	mAbortClickToWalk = false; @@ -1714,6 +1713,32 @@ bool intersect_ray_with_sphere( const LLVector3& ray_pt, const LLVector3& ray_di  void LLToolPie::startCameraSteering()  { +	mSteerPick = mPick; + +	LLPointer<LLViewerObject> pick_object = mSteerPick.getObject(); +	// handle special cases of steering picks +	if (pick_object) +	{ +		LLViewerObject* avatar_object = pick_object; +
 +		// get pointer to avatar
 +		while (avatar_object && !avatar_object->isAvatar())
 +		{
 +			avatar_object = (LLViewerObject*)avatar_object->getParent();
 +		}
 + +		if (avatar_object && ((LLVOAvatar*)avatar_object)->isSelf()) +		{ +			// project pick point a few meters in front of avatar +			mSteerPick.mPosGlobal = gAgent.getPositionGlobal() + LLVector3d(LLViewerCamera::instance().getAtAxis()) * 3.0; +		} +	} +	else if (!mSteerPick.isValid()) +	{ +		mSteerPick.mPosGlobal = gAgent.getPosGlobalFromAgent( +			LLViewerCamera::instance().getOrigin() + gViewerWindow->mouseDirectionGlobal(mSteerPick.mMousePt.mX, mSteerPick.mMousePt.mY) * 100.f); +	} +  	mMouseOutsideSlop = true;  	mAbortClickToWalk = true;  	setMouseCapture(TRUE); @@ -1721,7 +1746,7 @@ void LLToolPie::startCameraSteering()  	mMouseSteerX = mMouseDownX;  	mMouseSteerY = mMouseDownY;  	const LLVector3 camera_to_rotation_center	= gAgent.getFrameAgent().getOrigin() - LLViewerCamera::instance().getOrigin(); -	const LLVector3 rotation_center_to_pick		= gAgent.getPosAgentFromGlobal(mDragPick.mPosGlobal) - gAgent.getFrameAgent().getOrigin(); +	const LLVector3 rotation_center_to_pick		= gAgent.getPosAgentFromGlobal(mSteerPick.mPosGlobal) - gAgent.getFrameAgent().getOrigin();  	mClockwise = camera_to_rotation_center * rotation_center_to_pick < 0.f;  	mMouseSteerGrabPoint= (LLHUDEffectBlob *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BLOB, FALSE); @@ -1734,7 +1759,7 @@ void LLToolPie::steerCameraWithMouse(S32 x, S32 y)  {  	const F32 MIN_ROTATION_RADIUS_FRACTION = 0.2f; -	const LLVector3 pick_pos = gAgent.getPosAgentFromGlobal(mDragPick.mPosGlobal); +	const LLVector3 pick_pos = gAgent.getPosAgentFromGlobal(mSteerPick.mPosGlobal);  	const LLVector3 rotation_center = gAgent.getFrameAgent().getOrigin();  	// FIXME: get this to work with camera tilt (i.e. sitting on a rotating object)  	const LLVector3 rotation_up_axis(LLVector3::z_axis); diff --git a/indra/newview/lltoolpie.h b/indra/newview/lltoolpie.h index dca661d26d..01e74a20d7 100644 --- a/indra/newview/lltoolpie.h +++ b/indra/newview/lltoolpie.h @@ -108,7 +108,7 @@ private:  	LLUUID				mMediaMouseCaptureID;  	LLPickInfo			mPick;  	LLPickInfo			mHoverPick; -	LLPickInfo			mDragPick; +	LLPickInfo			mSteerPick;  	LLPointer<LLViewerObject> mClickActionObject;  	U8					mClickAction;  	LLSafeHandle<LLObjectSelection> mLeftClickSelection; | 
