diff options
| author | prep <prep@lindenlab.com> | 2012-06-14 16:58:11 -0400 | 
|---|---|---|
| committer | prep <prep@lindenlab.com> | 2012-06-14 16:58:11 -0400 | 
| commit | f6153ab73508ad972827950e0276dfd2a8e79bf1 (patch) | |
| tree | a5b57ed0c8556570b3d15f10bbbc285eb43c74c1 | |
| parent | 8973a3db31af2e3ce77fb3c614f15aac65a0ed07 (diff) | |
WIP: path-722. Some agent_state_updates come through (god mode), region crossings, cleanup logic is a TBD, etc..
| -rw-r--r-- | etc/message.xml | 2 | ||||
| -rw-r--r-- | indra/newview/llpathfindingmanager.cpp | 100 | ||||
| -rw-r--r-- | indra/newview/llpathfindingmanager.h | 27 | ||||
| -rw-r--r-- | indra/newview/llpathfindingnavmeshzone.h | 2 | ||||
| -rw-r--r-- | indra/newview/llviewerregion.cpp | 2 | 
5 files changed, 68 insertions, 65 deletions
diff --git a/etc/message.xml b/etc/message.xml index 7dcf99f307..7b133ab205 100644 --- a/etc/message.xml +++ b/etc/message.xml @@ -555,7 +555,7 @@            <boolean>true</boolean>          </map> -        <key>AgentPreferencesUpdate</key> +        <key>AgentStateUpdate</key>          <map>            <key>flavor</key>            <string>llsd</string> diff --git a/indra/newview/llpathfindingmanager.cpp b/indra/newview/llpathfindingmanager.cpp index 7ce34fcfcb..16283282fb 100644 --- a/indra/newview/llpathfindingmanager.cpp +++ b/indra/newview/llpathfindingmanager.cpp @@ -53,6 +53,7 @@  #include "llviewerregion.h"  #include "llweb.h"  #include "llpanelnavmeshrebake.h" +#include "llenvmanager.h"  #define CAP_SERVICE_RETRIEVE_NAVMESH      "RetrieveNavMeshSrc" @@ -66,11 +67,9 @@  #define SIM_MESSAGE_NAVMESH_STATUS_UPDATE "/message/NavMeshStatusUpdate"  #define SIM_MESSAGE_BODY_FIELD            "body" -#ifdef XXX_STINSON_AGENT_STATE_DELETE_ME -#define CAP_SERVICE_AGENT_STATE     "AgentPreferences" -#define ALTER_NAVMESH_OBJECTS_FIELD "alter_navmesh_objects" -#define SIM_MESSAGE_AGENT_STATE_UPDATE    "/message/AgentPreferencesUpdate" -#endif // XXX_STINSON_AGENT_STATE_DELETE_ME +#define CAP_SERVICE_AGENT_STATE				"AgentState" +#define ALTER_NAVMESH_OBJECTS_FIELD			"alter_navmesh_objects" +#define SIM_MESSAGE_AGENT_STATE_UPDATE		"/message/AgentStateUpdate"  //---------------------------------------------------------------------------  // LLNavMeshSimStateChangeNode @@ -84,11 +83,10 @@ public:  LLHTTPRegistration<LLNavMeshSimStateChangeNode> gHTTPRegistrationNavMeshSimStateChangeNode(SIM_MESSAGE_NAVMESH_STATUS_UPDATE); -#ifdef XXX_STINSON_AGENT_STATE_DELETE_ME +  //---------------------------------------------------------------------------  // LLAgentStateChangeNode  //--------------------------------------------------------------------------- -  class LLAgentStateChangeNode : public LLHTTPNode  {  public: @@ -96,7 +94,6 @@ public:  };  LLHTTPRegistration<LLAgentStateChangeNode> gHTTPRegistrationAgentStateChangeNode(SIM_MESSAGE_AGENT_STATE_UPDATE); -#endif // XXX_STINSON_AGENT_STATE_DELETE_ME  //---------------------------------------------------------------------------  // NavMeshStatusResponder @@ -140,7 +137,6 @@ private:  	LLPathfindingNavMeshPtr mNavMeshPtr;  }; -#ifdef XXX_STINSON_AGENT_STATE_DELETE_ME  //---------------------------------------------------------------------------  // AgentStateResponder  //--------------------------------------------------------------------------- @@ -148,7 +144,7 @@ private:  class AgentStateResponder : public LLHTTPClient::Responder  {  public: -	AgentStateResponder(const std::string &pCapabilityURL, LLPathfindingManager::EAgentState pRequestedAgentState = LLPathfindingManager::kAgentStateUnknown); +	AgentStateResponder(const std::string &pCapabilityURL);  	virtual ~AgentStateResponder();  	virtual void result(const LLSD &pContent); @@ -158,9 +154,8 @@ protected:  private:  	std::string                       mCapabilityURL; -	LLPathfindingManager::EAgentState mRequestedAgentState;  }; -#endif // XXX_STINSON_AGENT_STATE_DELETE_ME +  //---------------------------------------------------------------------------  // NavMeshRebakeResponder @@ -286,12 +281,27 @@ private:  LLPathfindingManager::LLPathfindingManager()  	: LLSingleton<LLPathfindingManager>(), -	mNavMeshMap(), mShowNavMeshRebake(false) +	mNavMeshMap(), +	mShowNavMeshRebake(false), +	mCrossingSlot()  { +	if ( !mCrossingSlot.connected() ) +	{ +		mCrossingSlot = LLEnvManagerNew::getInstance()->setRegionChangeCallback(boost::bind(&LLPathfindingManager::onRegionBoundaryCrossed, this)); +	} +} + +void LLPathfindingManager::onRegionBoundaryCrossed() +{  +	displayNavMeshRebakePanel();  }  LLPathfindingManager::~LLPathfindingManager() -{ +{	 +	if (mCrossingSlot.connected()) +	{ +		mCrossingSlot.disconnect(); +	}  }  void LLPathfindingManager::initSystem() @@ -357,12 +367,11 @@ void LLPathfindingManager::requestGetNavMeshForRegion(LLViewerRegion *pRegion)  	}  } -#ifdef XXX_STINSON_AGENT_STATE_DELETE_ME  LLPathfindingManager::agent_state_slot_t LLPathfindingManager::registerAgentStateListener(agent_state_callback_t pAgentStateCallback)  {  	return mAgentStateSignal.connect(pAgentStateCallback);  } -#endif // XXX_STINSON_AGENT_STATE_DELETE_ME +  void LLPathfindingManager::requestGetLinksets(request_id_t pRequestId, object_request_callback_t pLinksetsCallback) const  { @@ -605,39 +614,31 @@ LLPathfindingNavMeshPtr LLPathfindingManager::getNavMeshForRegion(LLViewerRegion  	return getNavMeshForRegion(regionUUID);  } -#ifdef XXX_STINSON_AGENT_STATE_DELETE_ME  void LLPathfindingManager::requestGetAgentState()  { -	std::string agentStateURL = getAgentStateURLForCurrentRegion(); +	std::string agentStateURL = getAgentStateURLForCurrentRegion( getCurrentRegion() ); -	if (agentStateURL.empty()) -	{ -	} -	else +	if ( !agentStateURL.empty() )  	{ -		LLHTTPClient::ResponderPtr responder = new AgentStateResponder(agentStateURL); -		LLHTTPClient::get(agentStateURL, responder); +		LLHTTPClient::ResponderPtr responder = new AgentStateResponder( agentStateURL ); +		LLHTTPClient::get( agentStateURL, responder );  	}  } -void LLPathfindingManager::handleAgentStateResult(const LLSD &pContent, EAgentState pRequestedAgentState) -{ -	llassert(pContent.has(ALTER_NAVMESH_OBJECTS_FIELD)); -	llassert(pContent.get(ALTER_NAVMESH_OBJECTS_FIELD).isBoolean()); -	EAgentState agentState = (pContent.get(ALTER_NAVMESH_OBJECTS_FIELD).asBoolean() ? kAgentStateUnfrozen : kAgentStateFrozen); - -	if ((agentState != pRequestedAgentState)) -	{ -		agentState = kAgentStateError; -		llassert(0); -	} +void LLPathfindingManager::handleAgentStateResult(const LLSD &pContent)  +{	 +	displayNavMeshRebakePanel();  }  void LLPathfindingManager::handleAgentStateError(U32 pStatus, const std::string &pReason, const std::string &pURL)  {  	llwarns << "error with request to URL '" << pURL << "' because " << pReason << " (statusCode:" << pStatus << ")" << llendl;  } -#endif // XXX_STINSON_AGENT_STATE_DELETE_ME + +std::string LLPathfindingManager::getAgentStateURLForCurrentRegion(LLViewerRegion *pRegion) const +{ +	return getCapabilityURLForRegion( pRegion, CAP_SERVICE_AGENT_STATE ); +}  std::string LLPathfindingManager::getNavMeshStatusURLForRegion(LLViewerRegion *pRegion) const @@ -750,21 +751,19 @@ void LLNavMeshSimStateChangeNode::post(ResponsePtr pResponse, const LLSD &pConte  	LLPathfindingManager::getInstance()->handleNavMeshStatusUpdate(navMeshStatus);  } -#ifdef XXX_STINSON_AGENT_STATE_DELETE_ME  //---------------------------------------------------------------------------  // LLAgentStateChangeNode  //---------------------------------------------------------------------------  void LLAgentStateChangeNode::post(ResponsePtr pResponse, const LLSD &pContext, const LLSD &pInput) const  { -#ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE -	llinfos << "STINSON DEBUG: Received AgentPreferencesUpdate: " << pInput << llendl; -#endif // XXX_STINSON_DEBUG_NAVMESH_ZONE -	llassert(pInput.has(SIM_MESSAGE_BODY_FIELD)); -	llassert(pInput.get(SIM_MESSAGE_BODY_FIELD).isMap()); -	LLPathfindingManager::getInstance()->handleAgentStateUpdate(pInput.get(SIM_MESSAGE_BODY_FIELD)); +	LLPathfindingManager::getInstance()->handleAgentStateUpdate(); +} + +void LLPathfindingManager::handleAgentStateUpdate() +{ +	displayNavMeshRebakePanel();  } -#endif // XXX_STINSON_AGENT_STATE_DELETE_ME  //---------------------------------------------------------------------------  // NavMeshStatusResponder @@ -828,15 +827,13 @@ void NavMeshResponder::error(U32 pStatus, const std::string& pReason)  	mNavMeshPtr->handleNavMeshError(pStatus, pReason, mCapabilityURL, mNavMeshVersion);  } -#ifdef XXX_STINSON_AGENT_STATE_DELETE_ME  //---------------------------------------------------------------------------  // AgentStateResponder  //--------------------------------------------------------------------------- -AgentStateResponder::AgentStateResponder(const std::string &pCapabilityURL, LLPathfindingManager::EAgentState pRequestedAgentState) -	: LLHTTPClient::Responder(), -	mCapabilityURL(pCapabilityURL), -	mRequestedAgentState(pRequestedAgentState) +AgentStateResponder::AgentStateResponder(const std::string &pCapabilityURL) +: LLHTTPClient::Responder() +, mCapabilityURL(pCapabilityURL)  {  } @@ -846,14 +843,14 @@ AgentStateResponder::~AgentStateResponder()  void AgentStateResponder::result(const LLSD &pContent)  { -	LLPathfindingManager::getInstance()->handleAgentStateResult(pContent, mRequestedAgentState); +	LLPathfindingManager::getInstance()->handleAgentStateResult(pContent);  }  void AgentStateResponder::error(U32 pStatus, const std::string &pReason)  {  	LLPathfindingManager::getInstance()->handleAgentStateError(pStatus, pReason, mCapabilityURL);  } -#endif // XXX_STINSON_AGENT_STATE_DELETE_ME +  //---------------------------------------------------------------------------  // navmesh rebake responder @@ -877,6 +874,7 @@ void NavMeshRebakeResponder::error(U32 pStatus, const std::string &pReason)  {  	LLPathfindingManager::getInstance()->handleNavMeshRebakeError( pStatus, pReason, mCapabilityURL );  } +  //---------------------------------------------------------------------------  // LinksetsResponder  //--------------------------------------------------------------------------- diff --git a/indra/newview/llpathfindingmanager.h b/indra/newview/llpathfindingmanager.h index b4bfbc7a34..309d7513c6 100644 --- a/indra/newview/llpathfindingmanager.h +++ b/indra/newview/llpathfindingmanager.h @@ -82,19 +82,22 @@ public:  	void requestGetCharacters(request_id_t pRequestId, object_request_callback_t pCharactersCallback) const; -#ifdef XXX_STINSON_AGENT_STATE_DELETE_ME  	friend class LLAgentStateChangeNode;  	friend class AgentStateResponder; -	typedef boost::function<void (EAgentState)>         agent_state_callback_t; -	typedef boost::signals2::signal<void (EAgentState)> agent_state_signal_t; -	typedef boost::signals2::connection                 agent_state_slot_t; +	 +	typedef boost::function< void () >				agent_state_callback_t; +	typedef boost::signals2::signal< void () >		agent_state_signal_t; +	typedef boost::signals2::connection				agent_state_slot_t;	 + +	agent_state_slot_t								mCrossingSlot; +	agent_state_signal_t							mAgentStateSignal;  	agent_state_slot_t registerAgentStateListener(agent_state_callback_t pAgentStateCallback); -#endif // XXX_STINSON_AGENT_STATE_DELETE_ME  	void handleNavMeshRebakeResult( const LLSD &pContent );  	void handleNavMeshRebakeError( U32 pStatus, const std::string &pReason, const std::string &pURL );  	void triggerNavMeshRebuild(); +	void onRegionBoundaryCrossed();  protected: @@ -108,6 +111,8 @@ private:  	void handleNavMeshStatusRequest(const LLPathfindingNavMeshStatus &pNavMeshStatus, LLViewerRegion *pRegion);  	void handleNavMeshStatusUpdate(const LLPathfindingNavMeshStatus &pNavMeshStatus); +	void handleAgentStateUpdate(); +  	LLPathfindingNavMeshPtr getNavMeshForRegion(const LLUUID &pRegionUUID);  	LLPathfindingNavMeshPtr getNavMeshForRegion(LLViewerRegion *pRegion); @@ -116,20 +121,20 @@ private:  	std::string getObjectLinksetsURLForCurrentRegion() const;  	std::string getTerrainLinksetsURLForCurrentRegion() const;  	std::string getCharactersURLForCurrentRegion() const; - -	std::string    getCapabilityURLForCurrentRegion(const std::string &pCapabilityName) const; -	std::string    getCapabilityURLForRegion(LLViewerRegion *pRegion, const std::string &pCapabilityName) const; +	std::string	getAgentStateURLForCurrentRegion(LLViewerRegion *pRegion) const; +	std::string getCapabilityURLForCurrentRegion(const std::string &pCapabilityName) const; +	std::string getCapabilityURLForRegion(LLViewerRegion *pRegion, const std::string &pCapabilityName) const;  	LLViewerRegion *getCurrentRegion() const;  	void displayNavMeshRebakePanel();  	void hideNavMeshRebakePanel();	 -#ifdef XXX_STINSON_AGENT_STATE_DELETE_ME +  	void requestGetAgentState(); -	void handleAgentStateResult(const LLSD &pContent, EAgentState pRequestedAgentState); +	void handleAgentStateResult(const LLSD &pContent );//, EAgentState pRequestedAgentState);  	void handleAgentStateError(U32 pStatus, const std::string &pReason, const std::string &pURL); -#endif // XXX_STINSON_AGENT_STATE_DELETE_ME +  	NavMeshMap mNavMeshMap; diff --git a/indra/newview/llpathfindingnavmeshzone.h b/indra/newview/llpathfindingnavmeshzone.h index 1e92f6b131..679e72c978 100644 --- a/indra/newview/llpathfindingnavmeshzone.h +++ b/indra/newview/llpathfindingnavmeshzone.h @@ -69,7 +69,7 @@ public:  	typedef boost::function<void (ENavMeshZoneRequestStatus)>         navmesh_zone_callback_t;  	typedef boost::signals2::signal<void (ENavMeshZoneRequestStatus)> navmesh_zone_signal_t; -	typedef boost::signals2::connection                                                   navmesh_zone_slot_t; +	typedef boost::signals2::connection                               navmesh_zone_slot_t;  	LLPathfindingNavMeshZone();  	virtual ~LLPathfindingNavMeshZone(); diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index a7617b1028..204cd2a57a 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1490,7 +1490,7 @@ void LLViewerRegion::unpackRegionHandshake()  void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)  { -	capabilityNames.append("AgentPreferences"); +	capabilityNames.append("AgentState");  	capabilityNames.append("AttachmentResources");  	capabilityNames.append("AvatarPickerSearch");  	capabilityNames.append("CharacterProperties");  | 
