Anonymous avatar Anonymous committed dba4f7e

clicking on sky or on own avatar to steer now works

Comments (0)

Files changed (2)

indra/newview/lltoolpie.cpp

 	mPick = gViewerWindow->pickImmediate(x, y, TRUE);
 	mPick.mKeyMask = mask;
 
-	mDragPick = mPick;
 	mMouseButtonDown = true;
 	mAbortClickToWalk = false;
 	
 
 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);
 	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);
 {
 	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);

indra/newview/lltoolpie.h

 	LLUUID				mMediaMouseCaptureID;
 	LLPickInfo			mPick;
 	LLPickInfo			mHoverPick;
-	LLPickInfo			mDragPick;
+	LLPickInfo			mSteerPick;
 	LLPointer<LLViewerObject> mClickActionObject;
 	U8					mClickAction;
 	LLSafeHandle<LLObjectSelection> mLeftClickSelection;
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.