Skip to content
Snippets Groups Projects
Commit f578181a authored by Todd Stinson's avatar Todd Stinson
Browse files

PATH-304: Adding functionality to handle the reloading of out-of-date navmeshes.

parent dcf7ed02
No related branches found
No related tags found
No related merge requests found
...@@ -546,8 +546,16 @@ ...@@ -546,8 +546,16 @@
<key>trusted-sender</key> <key>trusted-sender</key>
<boolean>true</boolean> <boolean>true</boolean>
</map> </map>
<!-- UDPDeprecated Messages --> <key>NavmeshStatusUpdate</key>
<map>
<key>flavor</key>
<string>llsd</string>
<key>trusted-sender</key>
<boolean>true</boolean>
</map>
<!-- UDPDeprecated Messages -->
<key>ScriptRunningReply</key> <key>ScriptRunningReply</key>
<map> <map>
<key>flavor</key> <key>flavor</key>
......
...@@ -171,6 +171,7 @@ void LLFloaterPathfindingConsole::onOpen(const LLSD& pKey) ...@@ -171,6 +171,7 @@ void LLFloaterPathfindingConsole::onOpen(const LLSD& pKey)
mNavMeshZoneSlot = mNavMeshZone.registerNavMeshZoneListener(boost::bind(&LLFloaterPathfindingConsole::onNavMeshZoneCB, this, _1)); mNavMeshZoneSlot = mNavMeshZone.registerNavMeshZoneListener(boost::bind(&LLFloaterPathfindingConsole::onNavMeshZoneCB, this, _1));
} }
mIsNavMeshUpdating = false;
mNavMeshZone.initialize(); mNavMeshZone.initialize();
mNavMeshZone.enable(); mNavMeshZone.enable();
...@@ -478,6 +479,7 @@ LLFloaterPathfindingConsole::LLFloaterPathfindingConsole(const LLSD& pSeed) ...@@ -478,6 +479,7 @@ LLFloaterPathfindingConsole::LLFloaterPathfindingConsole(const LLSD& pSeed)
mClearPathButton(NULL), mClearPathButton(NULL),
mNavMeshZoneSlot(), mNavMeshZoneSlot(),
mNavMeshZone(), mNavMeshZone(),
mIsNavMeshUpdating(false),
mAgentStateSlot(), mAgentStateSlot(),
mConsoleState(kConsoleStateUnknown), mConsoleState(kConsoleStateUnknown),
mPathData(), mPathData(),
...@@ -616,10 +618,15 @@ void LLFloaterPathfindingConsole::onNavMeshZoneCB(LLPathfindingNavMeshZone::ENav ...@@ -616,10 +618,15 @@ void LLFloaterPathfindingConsole::onNavMeshZoneCB(LLPathfindingNavMeshZone::ENav
case LLPathfindingNavMeshZone::kNavMeshZoneRequestUnknown : case LLPathfindingNavMeshZone::kNavMeshZoneRequestUnknown :
setConsoleState(kConsoleStateUnknown); setConsoleState(kConsoleStateUnknown);
break; break;
case LLPathfindingNavMeshZone::kNavMeshZoneRequestNeedsUpdate :
mIsNavMeshUpdating = true;
mNavMeshZone.refresh();
break;
case LLPathfindingNavMeshZone::kNavMeshZoneRequestStarted : case LLPathfindingNavMeshZone::kNavMeshZoneRequestStarted :
setConsoleState(kConsoleStateDownloading); setConsoleState(kConsoleStateDownloading);
break; break;
case LLPathfindingNavMeshZone::kNavMeshZoneRequestCompleted : case LLPathfindingNavMeshZone::kNavMeshZoneRequestCompleted :
mIsNavMeshUpdating = false;
setConsoleState(kConsoleStateHasNavMesh); setConsoleState(kConsoleStateHasNavMesh);
break; break;
case LLPathfindingNavMeshZone::kNavMeshZoneRequestNotEnabled : case LLPathfindingNavMeshZone::kNavMeshZoneRequestNotEnabled :
...@@ -689,7 +696,6 @@ void LLFloaterPathfindingConsole::updateControlsOnConsoleState() ...@@ -689,7 +696,6 @@ void LLFloaterPathfindingConsole::updateControlsOnConsoleState()
mHasEndPoint = false; mHasEndPoint = false;
break; break;
case kConsoleStateHasNavMesh : case kConsoleStateHasNavMesh :
case kConsoleStateHasNavMeshDownloading :
mShowNavMeshCheckBox->setEnabled(TRUE); mShowNavMeshCheckBox->setEnabled(TRUE);
mShowNavMeshWalkabilityComboBox->setEnabled(TRUE); mShowNavMeshWalkabilityComboBox->setEnabled(TRUE);
mShowWalkablesCheckBox->setEnabled(TRUE); mShowWalkablesCheckBox->setEnabled(TRUE);
...@@ -731,14 +737,18 @@ void LLFloaterPathfindingConsole::updateStatusOnConsoleState() ...@@ -731,14 +737,18 @@ void LLFloaterPathfindingConsole::updateStatusOnConsoleState()
styleParams.color = warningColor; styleParams.color = warningColor;
break; break;
case kConsoleStateDownloading : case kConsoleStateDownloading :
statusText = getString("navmesh_status_downloading"); if (mIsNavMeshUpdating)
{
statusText = getString("navmesh_status_updating");
}
else
{
statusText = getString("navmesh_status_downloading");
}
break; break;
case kConsoleStateHasNavMesh : case kConsoleStateHasNavMesh :
statusText = getString("navmesh_status_has_navmesh"); statusText = getString("navmesh_status_has_navmesh");
break; break;
case kConsoleStateHasNavMeshDownloading :
statusText = getString("navmesh_status_has_navmesh_downloading");
break;
case kConsoleStateError : case kConsoleStateError :
statusText = getString("navmesh_status_error"); statusText = getString("navmesh_status_error");
styleParams.color = warningColor; styleParams.color = warningColor;
......
...@@ -122,7 +122,6 @@ class LLFloaterPathfindingConsole ...@@ -122,7 +122,6 @@ class LLFloaterPathfindingConsole
kConsoleStateRegionNotEnabled, kConsoleStateRegionNotEnabled,
kConsoleStateDownloading, kConsoleStateDownloading,
kConsoleStateHasNavMesh, kConsoleStateHasNavMesh,
kConsoleStateHasNavMeshDownloading,
kConsoleStateError kConsoleStateError
} EConsoleState; } EConsoleState;
...@@ -179,9 +178,10 @@ class LLFloaterPathfindingConsole ...@@ -179,9 +178,10 @@ class LLFloaterPathfindingConsole
LLTextBase *mPathTestingStatus; LLTextBase *mPathTestingStatus;
LLButton *mClearPathButton; LLButton *mClearPathButton;
LLPathfindingNavMeshZone::navmesh_zone_slot_t mNavMeshZoneSlot; LLPathfindingNavMeshZone::navmesh_zone_slot_t mNavMeshZoneSlot;
LLPathfindingNavMeshZone mNavMeshZone; LLPathfindingNavMeshZone mNavMeshZone;
bool mIsNavMeshUpdating;
LLPathfindingManager::agent_state_slot_t mAgentStateSlot; LLPathfindingManager::agent_state_slot_t mAgentStateSlot;
EConsoleState mConsoleState; EConsoleState mConsoleState;
......
...@@ -26,8 +26,10 @@ ...@@ -26,8 +26,10 @@
*/ */
#include <string> #include <string>
#include <vector>
#include "llviewerprecompiledheaders.h" #include "llviewerprecompiledheaders.h"
#include "llsd.h"
#include "llpathfindingmanager.h" #include "llpathfindingmanager.h"
#include "llsingleton.h" #include "llsingleton.h"
#include "llhttpclient.h" #include "llhttpclient.h"
...@@ -36,6 +38,7 @@ ...@@ -36,6 +38,7 @@
#include "llpathfindingnavmesh.h" #include "llpathfindingnavmesh.h"
#include "llpathfindinglinkset.h" #include "llpathfindinglinkset.h"
#include "llpathfindinglinksetlist.h" #include "llpathfindinglinksetlist.h"
#include "llhttpnode.h"
#include <boost/function.hpp> #include <boost/function.hpp>
#include <boost/signals2.hpp> #include <boost/signals2.hpp>
...@@ -49,6 +52,20 @@ ...@@ -49,6 +52,20 @@
#define CAP_SERVICE_OBJECT_LINKSETS "ObjectNavMeshProperties" #define CAP_SERVICE_OBJECT_LINKSETS "ObjectNavMeshProperties"
#define CAP_SERVICE_TERRAIN_LINKSETS "TerrainNavMeshProperties" #define CAP_SERVICE_TERRAIN_LINKSETS "TerrainNavMeshProperties"
#define SIM_MESSAGE_NAVMESH_STATUS_UPDATE "/message/NavmeshStatusUpdate"
//---------------------------------------------------------------------------
// LLNavMeshSimStateChangeNode
//---------------------------------------------------------------------------
class LLNavMeshSimStateChangeNode : public LLHTTPNode
{
public:
virtual void post(ResponsePtr pResponse, const LLSD &pContext, const LLSD &pInput) const;
};
LLHTTPRegistration<LLNavMeshSimStateChangeNode> gHTTPRegistrationNavMeshSimStateChangeNode(SIM_MESSAGE_NAVMESH_STATUS_UPDATE);
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// NavMeshResponder // NavMeshResponder
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -243,6 +260,12 @@ void LLPathfindingManager::requestGetNavMeshForRegion(LLViewerRegion *pRegion) ...@@ -243,6 +260,12 @@ void LLPathfindingManager::requestGetNavMeshForRegion(LLViewerRegion *pRegion)
} }
} }
void LLPathfindingManager::handleNavMeshUpdate(const LLUUID &pRegionUUID, U32 pNavMeshVersion)
{
LLPathfindingNavMeshPtr navMeshPtr = getNavMeshForRegion(pRegionUUID);
navMeshPtr->handleNavMeshNewVersion(++mNavMeshVersionXXX);
}
LLPathfindingManager::agent_state_slot_t LLPathfindingManager::registerAgentStateListener(agent_state_callback_t pAgentStateCallback) LLPathfindingManager::agent_state_slot_t LLPathfindingManager::registerAgentStateListener(agent_state_callback_t pAgentStateCallback)
{ {
return mAgentStateSignal.connect(pAgentStateCallback); return mAgentStateSignal.connect(pAgentStateCallback);
...@@ -368,21 +391,14 @@ LLPathfindingManager::ELinksetsRequestStatus LLPathfindingManager::requestSetLin ...@@ -368,21 +391,14 @@ LLPathfindingManager::ELinksetsRequestStatus LLPathfindingManager::requestSetLin
return status; return status;
} }
LLPathfindingNavMeshPtr LLPathfindingManager::getNavMeshForRegion(LLViewerRegion *pRegion) LLPathfindingNavMeshPtr LLPathfindingManager::getNavMeshForRegion(const LLUUID &pRegionUUID)
{ {
LLUUID regionUUID;
if (pRegion != NULL)
{
regionUUID = pRegion->getRegionID();
}
LLPathfindingNavMeshPtr navMeshPtr; LLPathfindingNavMeshPtr navMeshPtr;
NavMeshMap::iterator navMeshIter = mNavMeshMap.find(regionUUID); NavMeshMap::iterator navMeshIter = mNavMeshMap.find(pRegionUUID);
if (navMeshIter == mNavMeshMap.end()) if (navMeshIter == mNavMeshMap.end())
{ {
navMeshPtr = LLPathfindingNavMeshPtr(new LLPathfindingNavMesh(regionUUID)); navMeshPtr = LLPathfindingNavMeshPtr(new LLPathfindingNavMesh(pRegionUUID));
mNavMeshMap.insert(std::pair<LLUUID, LLPathfindingNavMeshPtr>(regionUUID, navMeshPtr)); mNavMeshMap.insert(std::pair<LLUUID, LLPathfindingNavMeshPtr>(pRegionUUID, navMeshPtr));
} }
else else
{ {
...@@ -392,6 +408,17 @@ LLPathfindingNavMeshPtr LLPathfindingManager::getNavMeshForRegion(LLViewerRegion ...@@ -392,6 +408,17 @@ LLPathfindingNavMeshPtr LLPathfindingManager::getNavMeshForRegion(LLViewerRegion
return navMeshPtr; return navMeshPtr;
} }
LLPathfindingNavMeshPtr LLPathfindingManager::getNavMeshForRegion(LLViewerRegion *pRegion)
{
LLUUID regionUUID;
if (pRegion != NULL)
{
regionUUID = pRegion->getRegionID();
}
return getNavMeshForRegion(regionUUID);
}
bool LLPathfindingManager::isValidAgentState(EAgentState pAgentState) bool LLPathfindingManager::isValidAgentState(EAgentState pAgentState)
{ {
return ((pAgentState == kAgentStateFrozen) || (pAgentState == kAgentStateUnfrozen)); return ((pAgentState == kAgentStateFrozen) || (pAgentState == kAgentStateUnfrozen));
...@@ -513,6 +540,17 @@ LLViewerRegion *LLPathfindingManager::getCurrentRegion() const ...@@ -513,6 +540,17 @@ LLViewerRegion *LLPathfindingManager::getCurrentRegion() const
return gAgent.getRegion(); return gAgent.getRegion();
} }
//---------------------------------------------------------------------------
// LLNavMeshSimStateChangeNode
//---------------------------------------------------------------------------
void LLNavMeshSimStateChangeNode::post(ResponsePtr pResponse, const LLSD &pContext, const LLSD &pInput) const
{
LLViewerRegion *region = gAgent.getRegion();
U32 navMeshVersion = 0U;
LLPathfindingManager::getInstance()->handleNavMeshUpdate(region->getRegionID(), navMeshVersion);
}
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// NavMeshResponder // NavMeshResponder
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
......
...@@ -80,6 +80,7 @@ class LLPathfindingManager : public LLSingleton<LLPathfindingManager> ...@@ -80,6 +80,7 @@ class LLPathfindingManager : public LLSingleton<LLPathfindingManager>
LLPathfindingNavMesh::navmesh_slot_t registerNavMeshListenerForRegion(LLViewerRegion *pRegion, LLPathfindingNavMesh::navmesh_callback_t pNavMeshCallback); LLPathfindingNavMesh::navmesh_slot_t registerNavMeshListenerForRegion(LLViewerRegion *pRegion, LLPathfindingNavMesh::navmesh_callback_t pNavMeshCallback);
void requestGetNavMeshForRegion(LLViewerRegion *pRegion); void requestGetNavMeshForRegion(LLViewerRegion *pRegion);
void handleNavMeshUpdate(const LLUUID &pRegionUUID, U32 pNavMeshVersion);
agent_state_slot_t registerAgentStateListener(agent_state_callback_t pAgentStateCallback); agent_state_slot_t registerAgentStateListener(agent_state_callback_t pAgentStateCallback);
EAgentState getAgentState(); EAgentState getAgentState();
...@@ -92,6 +93,7 @@ class LLPathfindingManager : public LLSingleton<LLPathfindingManager> ...@@ -92,6 +93,7 @@ class LLPathfindingManager : public LLSingleton<LLPathfindingManager>
protected: protected:
private: private:
LLPathfindingNavMeshPtr getNavMeshForRegion(const LLUUID &pRegionUUID);
LLPathfindingNavMeshPtr getNavMeshForRegion(LLViewerRegion *pRegion); LLPathfindingNavMeshPtr getNavMeshForRegion(LLViewerRegion *pRegion);
static bool isValidAgentState(EAgentState pAgentState); static bool isValidAgentState(EAgentState pAgentState);
......
...@@ -64,6 +64,13 @@ void LLPathfindingNavMesh::handleRefresh() ...@@ -64,6 +64,13 @@ void LLPathfindingNavMesh::handleRefresh()
mNavMeshSignal(mNavMeshRequestStatus, mRegionUUID, mNavMeshVersion, mNavMeshData); mNavMeshSignal(mNavMeshRequestStatus, mRegionUUID, mNavMeshVersion, mNavMeshData);
} }
void LLPathfindingNavMesh::handleNavMeshNewVersion(U32 pNavMeshVersion)
{
mNavMeshData.clear();
mNavMeshVersion = pNavMeshVersion;
setRequestStatus(kNavMeshRequestNeedsUpdate);
}
void LLPathfindingNavMesh::handleNavMeshStart(U32 pNavMeshVersion) void LLPathfindingNavMesh::handleNavMeshStart(U32 pNavMeshVersion)
{ {
mNavMeshVersion = pNavMeshVersion; mNavMeshVersion = pNavMeshVersion;
...@@ -72,7 +79,6 @@ void LLPathfindingNavMesh::handleNavMeshStart(U32 pNavMeshVersion) ...@@ -72,7 +79,6 @@ void LLPathfindingNavMesh::handleNavMeshStart(U32 pNavMeshVersion)
void LLPathfindingNavMesh::handleNavMeshResult(const LLSD &pContent, U32 pNavMeshVersion) void LLPathfindingNavMesh::handleNavMeshResult(const LLSD &pContent, U32 pNavMeshVersion)
{ {
llassert(mNavMeshVersion == pNavMeshVersion);
if (mNavMeshVersion == pNavMeshVersion) if (mNavMeshVersion == pNavMeshVersion)
{ {
if ( pContent.has("navmesh_data") ) if ( pContent.has("navmesh_data") )
...@@ -118,10 +124,9 @@ void LLPathfindingNavMesh::handleNavMeshNotEnabled() ...@@ -118,10 +124,9 @@ void LLPathfindingNavMesh::handleNavMeshNotEnabled()
void LLPathfindingNavMesh::handleNavMeshError(U32 pStatus, const std::string &pReason, const std::string &pURL, U32 pNavMeshVersion) void LLPathfindingNavMesh::handleNavMeshError(U32 pStatus, const std::string &pReason, const std::string &pURL, U32 pNavMeshVersion)
{ {
llwarns << "error with request to URL '" << pURL << "' because " << pReason << " (statusCode:" << pStatus << ")" << llendl; llwarns << "error with request to URL '" << pURL << "' because " << pReason << " (statusCode:" << pStatus << ")" << llendl;
llassert(mNavMeshVersion == pNavMeshVersion);
mNavMeshData.clear();
if (mNavMeshVersion == pNavMeshVersion) if (mNavMeshVersion == pNavMeshVersion)
{ {
mNavMeshData.clear();
setRequestStatus(kNavMeshRequestError); setRequestStatus(kNavMeshRequestError);
} }
} }
......
...@@ -47,6 +47,7 @@ class LLPathfindingNavMesh ...@@ -47,6 +47,7 @@ class LLPathfindingNavMesh
public: public:
typedef enum { typedef enum {
kNavMeshRequestUnknown, kNavMeshRequestUnknown,
kNavMeshRequestNeedsUpdate,
kNavMeshRequestStarted, kNavMeshRequestStarted,
kNavMeshRequestCompleted, kNavMeshRequestCompleted,
kNavMeshRequestNotEnabled, kNavMeshRequestNotEnabled,
...@@ -65,6 +66,7 @@ class LLPathfindingNavMesh ...@@ -65,6 +66,7 @@ class LLPathfindingNavMesh
bool hasNavMeshVersion(U32 pNavMeshVersion) const; bool hasNavMeshVersion(U32 pNavMeshVersion) const;
void handleRefresh(); void handleRefresh();
void handleNavMeshNewVersion(U32 pNavMeshVersion);
void handleNavMeshStart(U32 pNavMeshVersion); void handleNavMeshStart(U32 pNavMeshVersion);
void handleNavMeshResult(const LLSD &pContent, U32 pNavMeshVersion); void handleNavMeshResult(const LLSD &pContent, U32 pNavMeshVersion);
void handleNavMeshNotEnabled(); void handleNavMeshNotEnabled();
......
...@@ -67,6 +67,24 @@ void LLPathfindingNavMeshZone::initialize() ...@@ -67,6 +67,24 @@ void LLPathfindingNavMeshZone::initialize()
{ {
mNavMeshLocationPtrs.clear(); mNavMeshLocationPtrs.clear();
#ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
LLViewerRegion *currentRegion = gAgent.getRegion();
if (currentRegion != NULL)
{
llinfos << "STINSON DEBUG: currentRegion: '" << currentRegion->getName() << "' (" << currentRegion->getRegionID().asString() << ")" << llendl;
std::vector<S32> availableRegions;
currentRegion->getNeighboringRegionsStatus( availableRegions );
std::vector<LLViewerRegion*> neighborRegionsPtrs;
currentRegion->getNeighboringRegions( neighborRegionsPtrs );
for (std::vector<S32>::const_iterator statusIter = availableRegions.begin();
statusIter != availableRegions.end(); ++statusIter)
{
LLViewerRegion *region = neighborRegionsPtrs[statusIter - availableRegions.begin()];
llinfos << "STINSON DEBUG: region #" << *statusIter << ": '" << region->getName() << "' (" << region->getRegionID().asString() << ")" << llendl;
}
}
#endif // XXX_STINSON_DEBUG_NAVMESH_ZONE
NavMeshLocationPtr centerNavMeshPtr(new NavMeshLocation(CENTER_REGION, boost::bind(&LLPathfindingNavMeshZone::handleNavMeshLocation, this))); NavMeshLocationPtr centerNavMeshPtr(new NavMeshLocation(CENTER_REGION, boost::bind(&LLPathfindingNavMeshZone::handleNavMeshLocation, this)));
mNavMeshLocationPtrs.push_back(centerNavMeshPtr); mNavMeshLocationPtrs.push_back(centerNavMeshPtr);
...@@ -122,20 +140,30 @@ void LLPathfindingNavMeshZone::handleNavMeshLocation() ...@@ -122,20 +140,30 @@ void LLPathfindingNavMeshZone::handleNavMeshLocation()
void LLPathfindingNavMeshZone::updateStatus() void LLPathfindingNavMeshZone::updateStatus()
{ {
bool hasRequestUnknown = false; bool hasRequestUnknown = false;
bool hasRequestNeedsUpdate = false;
bool hasRequestStarted = false; bool hasRequestStarted = false;
bool hasRequestCompleted = false; bool hasRequestCompleted = false;
bool hasRequestNotEnabled = false; bool hasRequestNotEnabled = false;
bool hasRequestError = false; bool hasRequestError = false;
#ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
llinfos << "STINSON DEBUG: Navmesh zone update BEGIN" << llendl;
#endif // XXX_STINSON_DEBUG_NAVMESH_ZONE
for (NavMeshLocationPtrs::iterator navMeshLocationPtrIter = mNavMeshLocationPtrs.begin(); for (NavMeshLocationPtrs::iterator navMeshLocationPtrIter = mNavMeshLocationPtrs.begin();
navMeshLocationPtrIter != mNavMeshLocationPtrs.end(); ++navMeshLocationPtrIter) navMeshLocationPtrIter != mNavMeshLocationPtrs.end(); ++navMeshLocationPtrIter)
{ {
NavMeshLocationPtr navMeshLocationPtr = *navMeshLocationPtrIter; NavMeshLocationPtr navMeshLocationPtr = *navMeshLocationPtrIter;
#ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
llinfos << "STINSON DEBUG: region #" << navMeshLocationPtr->getDirection() << ": region(" << navMeshLocationPtr->getRegionUUID().asString() << ") status:" << navMeshLocationPtr->getRequestStatus() << llendl;
#endif // XXX_STINSON_DEBUG_NAVMESH_ZONE
switch (navMeshLocationPtr->getRequestStatus()) switch (navMeshLocationPtr->getRequestStatus())
{ {
case LLPathfindingNavMesh::kNavMeshRequestUnknown : case LLPathfindingNavMesh::kNavMeshRequestUnknown :
hasRequestUnknown = true; hasRequestUnknown = true;
break; break;
case LLPathfindingNavMesh::kNavMeshRequestNeedsUpdate :
hasRequestNeedsUpdate = true;
break;
case LLPathfindingNavMesh::kNavMeshRequestStarted : case LLPathfindingNavMesh::kNavMeshRequestStarted :
hasRequestStarted = true; hasRequestStarted = true;
break; break;
...@@ -156,34 +184,62 @@ void LLPathfindingNavMeshZone::updateStatus() ...@@ -156,34 +184,62 @@ void LLPathfindingNavMeshZone::updateStatus()
} }
ENavMeshZoneRequestStatus zoneRequestStatus = kNavMeshZoneRequestUnknown; ENavMeshZoneRequestStatus zoneRequestStatus = kNavMeshZoneRequestUnknown;
if (hasRequestStarted) if (hasRequestNeedsUpdate)
{
zoneRequestStatus = kNavMeshZoneRequestNeedsUpdate;
#ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
llinfos << "STINSON DEBUG: Navmesh zone update is NEEDS UPDATE" << llendl;
#endif // XXX_STINSON_DEBUG_NAVMESH_ZONE
}
else if (hasRequestStarted)
{ {
zoneRequestStatus = kNavMeshZoneRequestStarted; zoneRequestStatus = kNavMeshZoneRequestStarted;
#ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
llinfos << "STINSON DEBUG: Navmesh zone update is STARTED" << llendl;
#endif // XXX_STINSON_DEBUG_NAVMESH_ZONE
} }
else if (hasRequestError) else if (hasRequestError)
{ {
zoneRequestStatus = kNavMeshZoneRequestError; zoneRequestStatus = kNavMeshZoneRequestError;
#ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
llinfos << "STINSON DEBUG: Navmesh zone update is ERROR" << llendl;
#endif // XXX_STINSON_DEBUG_NAVMESH_ZONE
} }
else if (hasRequestUnknown) else if (hasRequestUnknown)
{ {
zoneRequestStatus = kNavMeshZoneRequestUnknown; zoneRequestStatus = kNavMeshZoneRequestUnknown;
#ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
llinfos << "STINSON DEBUG: Navmesh zone update is UNKNOWN" << llendl;
#endif // XXX_STINSON_DEBUG_NAVMESH_ZONE
} }
else if (hasRequestCompleted) else if (hasRequestCompleted)
{ {
zoneRequestStatus = kNavMeshZoneRequestCompleted; zoneRequestStatus = kNavMeshZoneRequestCompleted;
#ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
llinfos << "STINSON DEBUG: Navmesh zone update is stitching" << llendl;
#endif // XXX_STINSON_DEBUG_NAVMESH_ZONE
llassert(LLPathingLib::getInstance() != NULL); llassert(LLPathingLib::getInstance() != NULL);
if (LLPathingLib::getInstance() != NULL) if (LLPathingLib::getInstance() != NULL)
{ {
LLPathingLib::getInstance()->stitchNavMeshes( gSavedSettings.getBOOL("EnableVBOForNavMeshVisualization") ); LLPathingLib::getInstance()->stitchNavMeshes( gSavedSettings.getBOOL("EnableVBOForNavMeshVisualization") );
} }
#ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
llinfos << "STINSON DEBUG: Navmesh zone update is COMPLETED" << llendl;
#endif // XXX_STINSON_DEBUG_NAVMESH_ZONE
} }
else if (hasRequestNotEnabled) else if (hasRequestNotEnabled)
{ {
zoneRequestStatus = kNavMeshZoneRequestNotEnabled; zoneRequestStatus = kNavMeshZoneRequestNotEnabled;
#ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
llinfos << "STINSON DEBUG: Navmesh zone update is NOT ENABLED" << llendl;
#endif // XXX_STINSON_DEBUG_NAVMESH_ZONE
} }
else else
{ {
zoneRequestStatus = kNavMeshZoneRequestError; zoneRequestStatus = kNavMeshZoneRequestError;
#ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
llinfos << "STINSON DEBUG: Navmesh zone update is BAD ERROR" << llendl;
#endif // XXX_STINSON_DEBUG_NAVMESH_ZONE
llassert(0); llassert(0);
} }
......
...@@ -38,11 +38,14 @@ ...@@ -38,11 +38,14 @@
#include <boost/function.hpp> #include <boost/function.hpp>
#include <boost/signals2.hpp> #include <boost/signals2.hpp>
#define XXX_STINSON_DEBUG_NAVMESH_ZONE
class LLPathfindingNavMeshZone class LLPathfindingNavMeshZone
{ {
public: public:
typedef enum { typedef enum {
kNavMeshZoneRequestUnknown, kNavMeshZoneRequestUnknown,
kNavMeshZoneRequestNeedsUpdate,
kNavMeshZoneRequestStarted, kNavMeshZoneRequestStarted,
kNavMeshZoneRequestCompleted, kNavMeshZoneRequestCompleted,
kNavMeshZoneRequestNotEnabled, kNavMeshZoneRequestNotEnabled,
...@@ -78,6 +81,10 @@ class LLPathfindingNavMeshZone ...@@ -78,6 +81,10 @@ class LLPathfindingNavMeshZone
void disable(); void disable();
LLPathfindingNavMesh::ENavMeshRequestStatus getRequestStatus() const; LLPathfindingNavMesh::ENavMeshRequestStatus getRequestStatus() const;
#ifdef XXX_STINSON_DEBUG_NAVMESH_ZONE
const LLUUID &getRegionUUID() const {return mRegionUUID;};
S32 getDirection() const {return mDirection;};
#endif // XXX_STINSON_DEBUG_NAVMESH_ZONE
protected: protected:
......
...@@ -15,8 +15,8 @@ ...@@ -15,8 +15,8 @@
<floater.string name="navmesh_status_library_not_implemented">Cannot find pathing library implementation.</floater.string> <floater.string name="navmesh_status_library_not_implemented">Cannot find pathing library implementation.</floater.string>
<floater.string name="navmesh_status_region_not_enabled">This region is not enabled for pathfinding.</floater.string> <floater.string name="navmesh_status_region_not_enabled">This region is not enabled for pathfinding.</floater.string>
<floater.string name="navmesh_status_downloading">Downloading the navmesh ...</floater.string> <floater.string name="navmesh_status_downloading">Downloading the navmesh ...</floater.string>
<floater.string name="navmesh_status_updating">The navmesh has changed on the server. Downloading the latest navmesh ...</floater.string>
<floater.string name="navmesh_status_has_navmesh">Navmesh received.</floater.string> <floater.string name="navmesh_status_has_navmesh">Navmesh received.</floater.string>
<floater.string name="navmesh_status_has_navmesh_downloading">Downloading the latest navmesh ...</floater.string>
<floater.string name="navmesh_status_error">Unable to download navmesh successfully.</floater.string> <floater.string name="navmesh_status_error">Unable to download navmesh successfully.</floater.string>
<floater.string name="pathing_choose_start_and_end_points">Please choose start and end points.</floater.string> <floater.string name="pathing_choose_start_and_end_points">Please choose start and end points.</floater.string>
<floater.string name="pathing_choose_start_point">Please choose start point.</floater.string> <floater.string name="pathing_choose_start_point">Please choose start point.</floater.string>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment