diff options
| -rw-r--r-- | .hgtags | 1 | ||||
| -rw-r--r-- | indra/newview/llfloaterpathfindingconsole.h | 4 | ||||
| -rwxr-xr-x | indra/newview/llfloaterpreference.cpp | 19 | ||||
| -rw-r--r-- | indra/newview/llviewerobject.cpp | 20 | ||||
| -rw-r--r-- | indra/newview/llviewerobject.h | 1 | 
5 files changed, 36 insertions, 9 deletions
| @@ -352,3 +352,4 @@ a8b3eca451a9eaab59987efb0ab1c4217e3f2dcc DRTVWR-182  1f27cdfdc54246484f8afbbe42ce48e954175cbd 3.4.0-beta1  81f6b745ef27f5915fd07f988fdec9944f2bb73e DRTVWR-186  cc953f00956be52cc64c30637bbeec310eea603f DRTVWR-181 +9ee9387789701d597130f879d9011a4958753862 DRTVWR-189 diff --git a/indra/newview/llfloaterpathfindingconsole.h b/indra/newview/llfloaterpathfindingconsole.h index 4b2f7672e4..e999e57741 100644 --- a/indra/newview/llfloaterpathfindingconsole.h +++ b/indra/newview/llfloaterpathfindingconsole.h @@ -93,7 +93,7 @@ public:  	LLPathingLib::LLPLCharacterType getRenderHeatmapType() const;  	void                            setRenderHeatmapType(LLPathingLib::LLPLCharacterType pRenderHeatmapType); - +	void onRegionBoundaryCross();  protected:  private: @@ -124,7 +124,7 @@ private:  	void onClearPathClicked();  	void handleNavMeshZoneStatus(LLPathfindingNavMeshZone::ENavMeshZoneRequestStatus pNavMeshZoneRequestStatus); -	void onRegionBoundaryCross(); +	  	void onPathEvent();  	void setDefaultInputs(); diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 60556147a9..5752f839ce 100755 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -77,7 +77,7 @@  #include "llviewerthrottle.h"  #include "llvotree.h"  #include "llvosky.h" - +#include "llfloaterpathfindingconsole.h"  // linden library includes  #include "llavatarnamecache.h"  #include "llerror.h" @@ -632,6 +632,13 @@ void LLFloaterPreference::cancel()  	{  		advanced_proxy_settings->cancel();  	} +	//Need to reload the navmesh if the pathing console is up +	LLHandle<LLFloaterPathfindingConsole> pathfindingConsoleHandle = LLFloaterPathfindingConsole::getInstanceHandle(); +	if ( !pathfindingConsoleHandle.isDead() ) +	{ +		LLFloaterPathfindingConsole* pPathfindingConsole = pathfindingConsoleHandle.get(); +		pPathfindingConsole->onRegionBoundaryCross(); +	}  }  void LLFloaterPreference::onOpen(const LLSD& key) @@ -779,7 +786,15 @@ void LLFloaterPreference::onBtnOK()  		llinfos << "Can't close preferences!" << llendl;  	} -	LLPanelLogin::updateLocationSelectorsVisibility(); +	LLPanelLogin::updateLocationSelectorsVisibility();	 +	//Need to reload the navmesh if the pathing console is up +	LLHandle<LLFloaterPathfindingConsole> pathfindingConsoleHandle = LLFloaterPathfindingConsole::getInstanceHandle(); +	if ( !pathfindingConsoleHandle.isDead() ) +	{ +		LLFloaterPathfindingConsole* pPathfindingConsole = pathfindingConsoleHandle.get(); +		pPathfindingConsole->onRegionBoundaryCross(); +	} +	  }  // static  diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 78fa585a41..4ad0547379 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -236,6 +236,7 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe  	mNumFaces(0),  	mTimeDilation(1.f),  	mRotTime(0.f), +	mAngularVelocityRot(),  	mState(0),  	mMedia(NULL),  	mClickAction(0), @@ -265,6 +266,7 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe  	{  		mPositionAgent = mRegionp->getOriginAgent();  	} +	resetRot();  	LLViewerObject::sNumObjects++;  } @@ -2039,14 +2041,14 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  	if (new_rot != getRotation()  		|| new_angv != old_angv)  	{ -		if (new_rot != getRotation()) +		if (new_angv != old_angv)  		{ -			setRotation(new_rot); +			resetRot();  		} -		 + +		// Set the rotation of the object followed by adjusting for the accumulated angular velocity (llSetTargetOmega) +		setRotation(new_rot * mAngularVelocityRot);  		setChanged(ROTATED | SILHOUETTE); -		 -		resetRot();  	} @@ -5425,8 +5427,13 @@ void LLViewerObject::applyAngularVelocity(F32 dt)  		ang_vel *= 1.f/omega; +		// calculate the delta increment based on the object's angular velocity  		dQ.setQuat(angle, ang_vel); + +		// accumulate the angular velocity rotations to re-apply in the case of an object update +		mAngularVelocityRot *= dQ; +		// Just apply the delta increment to the current rotation  		setRotation(getRotation()*dQ);  		setChanged(MOVED | SILHOUETTE);  	} @@ -5435,6 +5442,9 @@ void LLViewerObject::applyAngularVelocity(F32 dt)  void LLViewerObject::resetRot()  {  	mRotTime = 0.0f; + +	// Reset the accumulated angular velocity rotation +	mAngularVelocityRot.loadIdentity();   }  U32 LLViewerObject::getPartitionType() const diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index 6addb383d4..e60c8a8d52 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -721,6 +721,7 @@ protected:  	F32				mTimeDilation;				// Time dilation sent with the object.  	F32				mRotTime;					// Amount (in seconds) that object has rotated according to angular velocity (llSetTargetOmega) +	LLQuaternion	mAngularVelocityRot;		// accumulated rotation from the angular velocity computations  	U8				mState;	// legacy  	LLViewerObjectMedia* mMedia;	// NULL if no media associated | 
