221 lines
8.3 KiB
C++
221 lines
8.3 KiB
C++
/**
|
|
* @file llfloaterpathfindingconsole.h
|
|
* @brief "Pathfinding console" floater, allowing for viewing and testing of the pathfinding navmesh through Havok AI utilities.
|
|
* @author Stinson@lindenlab.com
|
|
*
|
|
* $LicenseInfo:firstyear=2012&license=viewerlgpl$
|
|
* Second Life Viewer Source Code
|
|
* Copyright (C) 2012, Linden Research, Inc.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation;
|
|
* version 2.1 of the License only.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*
|
|
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
|
* $/LicenseInfo$
|
|
*/
|
|
#ifndef LL_LLFLOATERPATHFINDINGCONSOLE_H
|
|
#define LL_LLFLOATERPATHFINDINGCONSOLE_H
|
|
|
|
#include <vector>
|
|
|
|
#include <boost/signals2.hpp>
|
|
|
|
#include "llfloater.h"
|
|
#include "llhandle.h"
|
|
#include "llpathfindingnavmeshzone.h"
|
|
#include "llpathfindingpathtool.h"
|
|
#include "llpathinglib.h"
|
|
#include "v4color.h"
|
|
|
|
class LLButton;
|
|
class LLCheckBoxCtrl;
|
|
class LLComboBox;
|
|
class LLControlVariable;
|
|
class LLPanel;
|
|
class LLSD;
|
|
class LLSliderCtrl;
|
|
class LLTabContainer;
|
|
class LLTextBase;
|
|
class LLToolset;
|
|
|
|
class LLFloaterPathfindingConsole
|
|
: public LLFloater
|
|
{
|
|
friend class LLFloaterReg;
|
|
|
|
public:
|
|
virtual BOOL postBuild();
|
|
virtual void onOpen(const LLSD& pKey);
|
|
virtual void onClose(bool pIsAppQuitting);
|
|
|
|
static LLHandle<LLFloaterPathfindingConsole> getInstanceHandle();
|
|
|
|
BOOL isRenderNavMesh() const;
|
|
void setRenderNavMesh(BOOL pIsRenderNavMesh);
|
|
|
|
BOOL isRenderWalkables() const;
|
|
void setRenderWalkables(BOOL pIsRenderWalkables);
|
|
|
|
BOOL isRenderStaticObstacles() const;
|
|
void setRenderStaticObstacles(BOOL pIsRenderStaticObstacles);
|
|
|
|
BOOL isRenderMaterialVolumes() const;
|
|
void setRenderMaterialVolumes(BOOL pIsRenderMaterialVolumes);
|
|
|
|
BOOL isRenderExclusionVolumes() const;
|
|
void setRenderExclusionVolumes(BOOL pIsRenderExclusionVolumes);
|
|
|
|
BOOL isRenderWorld() const;
|
|
void setRenderWorld(BOOL pIsRenderWorld);
|
|
|
|
BOOL isRenderWorldMovablesOnly() const;
|
|
void setRenderWorldMovablesOnly(BOOL pIsRenderWorldMovablesOnly);
|
|
|
|
BOOL isRenderWaterPlane() const;
|
|
void setRenderWaterPlane(BOOL pIsRenderWaterPlane);
|
|
|
|
BOOL isRenderXRay() const;
|
|
void setRenderXRay(BOOL pIsRenderXRay);
|
|
|
|
BOOL isRenderAnyShapes() const;
|
|
U32 getRenderShapeFlags();
|
|
|
|
LLPathingLib::LLPLCharacterType getRenderHeatmapType() const;
|
|
void setRenderHeatmapType(LLPathingLib::LLPLCharacterType pRenderHeatmapType);
|
|
void onRegionBoundaryCross();
|
|
protected:
|
|
|
|
private:
|
|
typedef enum
|
|
{
|
|
kConsoleStateUnknown,
|
|
kConsoleStateLibraryNotImplemented,
|
|
kConsoleStateRegionNotEnabled,
|
|
kConsoleStateRegionLoading,
|
|
kConsoleStateCheckingVersion,
|
|
kConsoleStateDownloading,
|
|
kConsoleStateHasNavMesh,
|
|
kConsoleStateError
|
|
} EConsoleState;
|
|
|
|
// Does its own instance management, so clients not allowed
|
|
// to allocate or destroy.
|
|
LLFloaterPathfindingConsole(const LLSD& pSeed);
|
|
virtual ~LLFloaterPathfindingConsole();
|
|
|
|
void onTabSwitch();
|
|
void onShowWorldSet();
|
|
void onShowWorldMovablesOnlySet();
|
|
void onShowNavMeshSet();
|
|
void onShowWalkabilitySet();
|
|
void onCharacterWidthSet();
|
|
void onCharacterTypeSwitch();
|
|
void onClearPathClicked();
|
|
|
|
void handleNavMeshZoneStatus(LLPathfindingNavMeshZone::ENavMeshZoneRequestStatus pNavMeshZoneRequestStatus);
|
|
|
|
void onPathEvent();
|
|
|
|
void setDefaultInputs();
|
|
void setConsoleState(EConsoleState pConsoleState);
|
|
void setWorldRenderState();
|
|
void setNavMeshRenderState();
|
|
void updateRenderablesObjects();
|
|
|
|
void updateControlsOnConsoleState();
|
|
void updateViewerStatusOnConsoleState();
|
|
void updateSimulatorStatusOnConsoleState();
|
|
|
|
void initializeNavMeshZoneForCurrentRegion();
|
|
|
|
void switchIntoTestPathMode();
|
|
void switchOutOfTestPathMode();
|
|
void updateCharacterWidth();
|
|
void updateCharacterType();
|
|
void clearPath();
|
|
void updatePathTestStatus();
|
|
|
|
void registerSavedSettingsListeners();
|
|
void deregisterSavedSettingsListeners();
|
|
void handleRetrieveNeighborChange(LLControlVariable *pControl, const LLSD &pNewValue);
|
|
void handleNavMeshColorChange(LLControlVariable *pControl, const LLSD &pNewValue);
|
|
void fillInColorsForNavMeshVisualization();
|
|
void cleanupRenderableRestoreItems();
|
|
|
|
LLRootHandle<LLFloaterPathfindingConsole> mSelfHandle;
|
|
LLTabContainer *mViewTestTabContainer;
|
|
LLPanel *mViewTab;
|
|
LLTextBase *mShowLabel;
|
|
LLCheckBoxCtrl *mShowWorldCheckBox;
|
|
LLCheckBoxCtrl *mShowWorldMovablesOnlyCheckBox;
|
|
LLCheckBoxCtrl *mShowNavMeshCheckBox;
|
|
LLTextBase *mShowNavMeshWalkabilityLabel;
|
|
LLComboBox *mShowNavMeshWalkabilityComboBox;
|
|
LLCheckBoxCtrl *mShowWalkablesCheckBox;
|
|
LLCheckBoxCtrl *mShowStaticObstaclesCheckBox;
|
|
LLCheckBoxCtrl *mShowMaterialVolumesCheckBox;
|
|
LLCheckBoxCtrl *mShowExclusionVolumesCheckBox;
|
|
LLCheckBoxCtrl *mShowRenderWaterPlaneCheckBox;
|
|
LLCheckBoxCtrl *mShowXRayCheckBox;
|
|
LLTextBase *mPathfindingViewerStatus;
|
|
LLTextBase *mPathfindingSimulatorStatus;
|
|
LLPanel *mTestTab;
|
|
LLTextBase *mCtrlClickLabel;
|
|
LLTextBase *mShiftClickLabel;
|
|
LLTextBase *mCharacterWidthLabel;
|
|
LLTextBase *mCharacterWidthUnitLabel;
|
|
LLSliderCtrl *mCharacterWidthSlider;
|
|
LLTextBase *mCharacterTypeLabel;
|
|
LLComboBox *mCharacterTypeComboBox;
|
|
LLTextBase *mPathTestingStatus;
|
|
LLButton *mClearPathButton;
|
|
|
|
LLColor4 mErrorColor;
|
|
LLColor4 mWarningColor;
|
|
|
|
LLPathfindingNavMeshZone::navmesh_zone_slot_t mNavMeshZoneSlot;
|
|
LLPathfindingNavMeshZone mNavMeshZone;
|
|
bool mIsNavMeshUpdating;
|
|
|
|
boost::signals2::connection mRegionBoundarySlot;
|
|
boost::signals2::connection mTeleportFailedSlot;
|
|
LLPathfindingPathTool::path_event_slot_t mPathEventSlot;
|
|
|
|
LLToolset *mPathfindingToolset;
|
|
LLToolset *mSavedToolset;
|
|
|
|
boost::signals2::connection mSavedSettingRetrieveNeighborSlot;
|
|
boost::signals2::connection mSavedSettingWalkableSlot;
|
|
boost::signals2::connection mSavedSettingStaticObstacleSlot;
|
|
boost::signals2::connection mSavedSettingMaterialVolumeSlot;
|
|
boost::signals2::connection mSavedSettingExclusionVolumeSlot;
|
|
boost::signals2::connection mSavedSettingInteriorEdgeSlot;
|
|
boost::signals2::connection mSavedSettingExteriorEdgeSlot;
|
|
boost::signals2::connection mSavedSettingHeatmapMinSlot;
|
|
boost::signals2::connection mSavedSettingHeatmapMaxSlot;
|
|
boost::signals2::connection mSavedSettingNavMeshFaceSlot;
|
|
boost::signals2::connection mSavedSettingTestPathValidEndSlot;
|
|
boost::signals2::connection mSavedSettingTestPathInvalidEndSlot;
|
|
boost::signals2::connection mSavedSettingTestPathSlot;
|
|
boost::signals2::connection mSavedSettingWaterSlot;
|
|
|
|
EConsoleState mConsoleState;
|
|
|
|
std::vector<U32> mRenderableRestoreList;
|
|
|
|
static LLHandle<LLFloaterPathfindingConsole> sInstanceHandle;
|
|
};
|
|
|
|
#endif // LL_LLFLOATERPATHFINDINGCONSOLE_H
|