diff options
| -rw-r--r-- | etc/message.xml | 7 | ||||
| -rw-r--r-- | indra/newview/llpanelobject.cpp | 34 | ||||
| -rw-r--r-- | indra/newview/llpanelobject.h | 6 | ||||
| -rw-r--r-- | indra/newview/llselectmgr.cpp | 23 | ||||
| -rw-r--r-- | indra/newview/llselectmgr.h | 1 | ||||
| -rw-r--r-- | indra/newview/llviewerobject.cpp | 60 | ||||
| -rw-r--r-- | indra/newview/llviewerobject.h | 6 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_tools.xml | 33 | ||||
| -rw-r--r-- | scripts/messages/message_template.msg | 4 | 
9 files changed, 172 insertions, 2 deletions
| diff --git a/etc/message.xml b/etc/message.xml index c17ae3656d..7283d903b9 100644 --- a/etc/message.xml +++ b/etc/message.xml @@ -572,6 +572,13 @@  					<boolean>false</boolean>  				</map> +				<key>ObjectPhysicsProperties</key> +				<map> +					<key>flavor</key> +					<string>llsd</string> +					<key>trusted-sender</key> +					<boolean>true</boolean> +				</map>  		  </map>    	  	<key>capBans</key> diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index 30221da12a..991e97b767 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -137,6 +137,10 @@ BOOL	LLPanelObject::postBuild()  	// Phantom checkbox  	mCheckPhantom = getChild<LLCheckBoxCtrl>("Phantom Checkbox Ctrl");  	childSetCommitCallback("Phantom Checkbox Ctrl",onCommitPhantom,this); + +	// PhysicsRep combobox +	mComboPhysicsRep = getChild<LLComboBox>("Physics Rep Combo Ctrl"); +	childSetCommitCallback("Physics Rep Combo Ctrl", onCommitPhysicsRep,this);  	// Position  	mLabelPosition = getChild<LLTextBox>("label position"); @@ -320,6 +324,7 @@ LLPanelObject::LLPanelObject()  	mIsPhysical(FALSE),  	mIsTemporary(FALSE),  	mIsPhantom(FALSE), +	mPhysicsRep(0),  	mCastShadows(TRUE),  	mSelectedType(MI_BOX),  	mSculptTextureRevert(LLUUID::null), @@ -527,6 +532,10 @@ void LLPanelObject::getState( )  	mCheckPhantom->set( mIsPhantom );  	mCheckPhantom->setEnabled( roots_selected>0 && editable && !is_flexible ); +	mPhysicsRep = objectp->getPhysicsRep(); +	mComboPhysicsRep->setCurrentByIndex(mPhysicsRep); +	mComboPhysicsRep->setEnabled(editable); +  #if 0 // 1.9.2  	mCastShadows = root_objectp->flagCastShadows();  	mCheckCastShadows->set( mCastShadows ); @@ -1232,6 +1241,22 @@ void LLPanelObject::sendIsPhantom()  	}  } +void LLPanelObject::sendPhysicsRep() +{ +	U8 value = (U8)mComboPhysicsRep->getCurrentIndex(); +	if (mPhysicsRep != value) +	{ +		LLSelectMgr::getInstance()->selectionUpdatePhysicsRep(value); +		mPhysicsRep = value; +		 +		llinfos << "update physicsrep sent" << llendl; +	} +	else +	{ +		llinfos << "update physicstep not changed" << llendl; +	} +} +  void LLPanelObject::sendCastShadows()  {  	BOOL value = mCheckCastShadows->get(); @@ -1905,6 +1930,8 @@ void LLPanelObject::clearCtrls()  	mCheckTemporary	->setEnabled( FALSE );  	mCheckPhantom	->set(FALSE);  	mCheckPhantom	->setEnabled( FALSE ); +	mComboPhysicsRep->setCurrentByIndex(0); +	mComboPhysicsRep->setEnabled(FALSE);  #if 0 // 1.9.2  	mCheckCastShadows->set(FALSE);  	mCheckCastShadows->setEnabled( FALSE ); @@ -2000,6 +2027,13 @@ void LLPanelObject::onCommitPhantom( LLUICtrl* ctrl, void* userdata )  }  // static +void LLPanelObject::onCommitPhysicsRep(LLUICtrl* ctrl, void* userdata ) +{ +	LLPanelObject* self = (LLPanelObject*) userdata; +	self->sendPhysicsRep(); +} + +// static  void LLPanelObject::onCommitCastShadows( LLUICtrl* ctrl, void* userdata )  {  	LLPanelObject* self = (LLPanelObject*) userdata; diff --git a/indra/newview/llpanelobject.h b/indra/newview/llpanelobject.h index 58d9fe9b76..fbc0902141 100644 --- a/indra/newview/llpanelobject.h +++ b/indra/newview/llpanelobject.h @@ -71,6 +71,7 @@ public:  	static void 	onCommitPhysics(		LLUICtrl* ctrl, void* userdata);  	static void 	onCommitTemporary(		LLUICtrl* ctrl, void* userdata);  	static void 	onCommitPhantom(		LLUICtrl* ctrl, void* userdata); +	static void     onCommitPhysicsRep(     LLUICtrl* ctrl, void* userdata);  	static void 	onCommitCastShadows(	LLUICtrl* ctrl, void* userdata);  	static void 	onCommitParametric(LLUICtrl* ctrl, void* userdata); @@ -93,6 +94,7 @@ protected:  	void			sendIsPhysical();  	void			sendIsTemporary();  	void			sendIsPhantom(); +	void            sendPhysicsRep();  	void			sendCastShadows();  	void            sendSculpt(); @@ -165,8 +167,9 @@ protected:  	LLCheckBoxCtrl	*mCheckPhysics;  	LLCheckBoxCtrl	*mCheckTemporary;  	LLCheckBoxCtrl	*mCheckPhantom; +	LLComboBox      *mComboPhysicsRep;  	LLCheckBoxCtrl	*mCheckCastShadows; - +	  	LLTextureCtrl   *mCtrlSculptTexture;  	LLTextBox       *mLabelSculptType;  	LLComboBox      *mCtrlSculptType; @@ -177,6 +180,7 @@ protected:  	BOOL			mIsPhysical;			// to avoid sending "physical" when not changed  	BOOL			mIsTemporary;			// to avoid sending "temporary" when not changed  	BOOL			mIsPhantom;				// to avoid sending "phantom" when not changed +	U8              mPhysicsRep;			// to avoid sending "physics rep spec" when not changed  	BOOL			mCastShadows;			// to avoid sending "cast shadows" when not changed  	S32				mSelectedType;			// So we know what selected type we last were diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index d03a492cd1..d15017e0a1 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -3931,6 +3931,28 @@ void LLSelectMgr::selectionUpdateCastShadows(BOOL cast_shadows)  	getSelection()->applyToObjects(&func);	  } +struct LLSelectMgrApplyPhysicsRep : public LLSelectedObjectFunctor +{ +	LLSelectMgrApplyPhysicsRep(U8 value) : mValue(value) {} +	U8 mValue; +	virtual bool apply(LLViewerObject* object) +	{ +		if ( object->permModify() ) 	// preemptive permissions check +		{ +			object->setPhysicsRep( mValue ); +			object->updateFlags(); +		} +		return true; +	} +}; + + +void LLSelectMgr::selectionUpdatePhysicsRep(U8 rep) +{ +	llwarns << "physics rep ->" << (U32)rep << llendl; +	LLSelectMgrApplyPhysicsRep func(rep); +	getSelection()->applyToObjects(&func);	 +}  //----------------------------------------------------------------------  // Helpful packing functions for sendObjectMessage() @@ -4620,7 +4642,6 @@ void LLSelectMgr::processForceObjectSelect(LLMessageSystem* msg, void**)  	LLSelectMgr::getInstance()->highlightObjectAndFamily(objects);  } -  extern LLGLdouble	gGLModelView[16];  void LLSelectMgr::updateSilhouettes() diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h index d315f40ff3..27e0c5dfa9 100644 --- a/indra/newview/llselectmgr.h +++ b/indra/newview/llselectmgr.h @@ -483,6 +483,7 @@ public:  	void selectionUpdatePhysics(BOOL use_physics);  	void selectionUpdateTemporary(BOOL is_temporary);  	void selectionUpdatePhantom(BOOL is_ghost); +	void selectionUpdatePhysicsRep(U8 rep);  	void selectionUpdateCastShadows(BOOL cast_shadows);  	void selectionDump(); diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index bb7933c10e..f18fee3ede 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -199,6 +199,7 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe  	mGLName(0),  	mbCanSelect(TRUE),  	mFlags(0), +	mPhysicsRep(0),  	mDrawable(),  	mCreateSelected(FALSE),  	mRenderMedia(FALSE), @@ -4961,7 +4962,14 @@ void LLViewerObject::updateFlags()  	gMessageSystem->addBOOL("IsTemporary", flagTemporaryOnRez() );  	gMessageSystem->addBOOL("IsPhantom", flagPhantom() );  	gMessageSystem->addBOOL("CastsShadows", flagCastShadows() ); +	gMessageSystem->nextBlock("ExtraPhysics"); +	gMessageSystem->addU8("PhysicsRep", getPhysicsRep() );  	gMessageSystem->sendReliable( regionp->getHost() ); + +	if (getPhysicsRep() != 0) +	{ +		llwarns << "sent non default physics rep" << llendl; +	}  }  BOOL LLViewerObject::setFlags(U32 flags, BOOL state) @@ -4993,6 +5001,12 @@ BOOL LLViewerObject::setFlags(U32 flags, BOOL state)  	return setit;  } +void LLViewerObject::setPhysicsRep(U8 rep) +{ +	mPhysicsRep = rep; +	updateFlags(); +} +  void LLViewerObject::applyAngularVelocity(F32 dt)  {  	//do target omega here @@ -5203,4 +5217,50 @@ void LLViewerObject::resetChildrenPosition(const LLVector3& offset, BOOL simplif  	return ;  } +#include "../llcommon/llsdserialize.h" +class ObjectPhysicsProperties : public LLHTTPNode +{ +public: +	virtual void post( +		ResponsePtr responder, +		const LLSD& context, +		const LLSD& input) const +	{ +		LLSD objectData = input["body"]["ObjectData"]; +		S32 numEntries = objectData.size(); +		 +		for ( S32 i = 0; i < numEntries; i++ ) +		{ +			U32 localID = objectData[i]["LocalID"].asInteger(); + +			std::ostringstream string; +			LLSDSerialize::serialize( input, string, LLSDSerialize::LLSD_XML, LLSDFormatter::OPTIONS_PRETTY); +			llinfos << string.str() << llendl; + +			// Iterate through nodes at end, since it can be on both the regular AND hover list
 +			struct f : public LLSelectedNodeFunctor
 +			{
 +				U32 mID;
 +				f(const U32& id) : mID(id) {}
 +				virtual bool apply(LLSelectNode* node)
 +				{
 +					return (node->getObject() && node->getObject()->mLocalID == mID );
 +				}
 +			} func(localID); + +			LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstNode(&func); + +			U8 physicsRepSpec = (U8)objectData[i]["PhysicsRepSpec"].asInteger(); + +			if (node) +			{ +				node->getObject()->setPhysicsRep(physicsRepSpec); +			}	 +		} +		 +	}; +}; + +LLHTTPRegistration<ObjectPhysicsProperties> +	gHTTPRegistrationObjectPhysicsProperties("/message/ObjectPhysicsProperties"); diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index be83fb7ef8..49709d643a 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -459,6 +459,8 @@ public:  	inline BOOL		flagCameraDecoupled() const		{ return ((mFlags & FLAGS_CAMERA_DECOUPLED) != 0); }  	inline BOOL		flagObjectMove() const			{ return ((mFlags & FLAGS_OBJECT_MOVE) != 0); } +	inline U8       getPhysicsRep() const           { return mPhysicsRep; } +	  	bool getIncludeInSearch() const;  	void setIncludeInSearch(bool include_in_search); @@ -474,6 +476,7 @@ public:  	void updateFlags();  	BOOL setFlags(U32 flag, BOOL state); +	void setPhysicsRep(U8 rep);  	virtual void dump() const;  	static U32		getNumZombieObjects()			{ return sNumZombieObjects; } @@ -553,6 +556,9 @@ public:  	// Grabbed from UPDATE_FLAGS  	U32				mFlags; +	// Sent to sim in UPDATE_FLAGS, received in ObjectPhysicsProperties +	U8              mPhysicsRep; +  	// Pipeline classes  	LLPointer<LLDrawable> mDrawable; diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index cc9e72cfb5..3bb8e9c055 100644 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -1418,6 +1418,39 @@ even though the user gets a free copy.               text_enabled_color="1 1 1 1"               top_pad="3"               width="87" /> +            <text +             type="string" +             length="1" +             follows="left|top" +             height="10" +             layout="topleft" +             left_delta="0" +             name="label physicsrep" +             top_pad="10" +             width="121"> +                Physics Rep: +            </text> +			<combo_box +			   height="23" +			   layout="topleft" +			   follows="left|top" +			   name="Physics Rep Combo Ctrl" +			   tool_tip="Choose the physics representation" +			   left_pad="0" +			   width="108"> +			  <combo_box.item +				 label="Default" +				 name="Default" +				 value="Default" /> +			  <combo_box.item +				 label="No Shape" +				 name="No Shape" +				 value="No Shape" /> +			  <combo_box.item +				 label="Convex Hull" +				 name="Convex Hull" +				 value="Convex Hull" /> +			</combo_box>   <!--           <text               type="string" diff --git a/scripts/messages/message_template.msg b/scripts/messages/message_template.msg index d4f791c202..7813bfba83 100644 --- a/scripts/messages/message_template.msg +++ b/scripts/messages/message_template.msg @@ -2061,6 +2061,10 @@ version 2.0  		{	IsPhantom		BOOL	}  		{	CastsShadows	BOOL	}  	} +    { +		ExtraPhysics        Variable +		{   PhysicsRep      U8      } +	}  } | 
