PATH-292: First pass at implementing the new design of the linksets floater.

master
Todd Stinson 2012-02-16 14:55:21 -08:00
parent 70f8225a30
commit e156e9ed03
7 changed files with 878 additions and 696 deletions

View File

@ -116,9 +116,7 @@ LLFilteredPathfindingLinksets::LLFilteredPathfindingLinksets()
mIsFiltersDirty(false),
mNameFilter(),
mDescriptionFilter(),
mIsWalkableFilter(true),
mIsObstacleFilter(true),
mIsIgnoredFilter(true)
mLinksetUseFilter(LLPathfindingLinkset::kUnknown)
{
}
@ -128,9 +126,7 @@ LLFilteredPathfindingLinksets::LLFilteredPathfindingLinksets(const LLSD& pLinkse
mIsFiltersDirty(false),
mNameFilter(),
mDescriptionFilter(),
mIsWalkableFilter(true),
mIsObstacleFilter(true),
mIsIgnoredFilter(true)
mLinksetUseFilter(LLPathfindingLinkset::kUnknown)
{
setPathfindingLinksets(pLinksetItems);
}
@ -141,9 +137,7 @@ LLFilteredPathfindingLinksets::LLFilteredPathfindingLinksets(const LLFilteredPat
mIsFiltersDirty(pOther.mIsFiltersDirty),
mNameFilter(pOther.mNameFilter),
mDescriptionFilter(pOther.mDescriptionFilter),
mIsWalkableFilter(pOther.mIsWalkableFilter),
mIsObstacleFilter(pOther.mIsObstacleFilter),
mIsIgnoredFilter(pOther.mIsIgnoredFilter)
mLinksetUseFilter(pOther.mLinksetUseFilter)
{
}
@ -219,7 +213,8 @@ const LLFilteredPathfindingLinksets::PathfindingLinksetMap& LLFilteredPathfindin
BOOL LLFilteredPathfindingLinksets::isFiltersActive() const
{
return (mNameFilter.isActive() || mDescriptionFilter.isActive() || !mIsWalkableFilter || !mIsObstacleFilter || !mIsIgnoredFilter);
return (mNameFilter.isActive() || mDescriptionFilter.isActive() ||
(mLinksetUseFilter != LLPathfindingLinkset::kUnknown));
}
void LLFilteredPathfindingLinksets::setNameFilter(const std::string& pNameFilter)
@ -242,46 +237,22 @@ const std::string& LLFilteredPathfindingLinksets::getDescriptionFilter() const
return mDescriptionFilter.get();
}
void LLFilteredPathfindingLinksets::setWalkableFilter(BOOL pWalkableFilter)
void LLFilteredPathfindingLinksets::setLinksetUseFilter(LLPathfindingLinkset::ELinksetUse pLinksetUse)
{
mIsFiltersDirty = (mIsFiltersDirty || (mIsWalkableFilter == pWalkableFilter));
mIsWalkableFilter = pWalkableFilter;
mIsFiltersDirty = (mIsFiltersDirty || (mLinksetUseFilter == pLinksetUse));
mLinksetUseFilter = pLinksetUse;
}
BOOL LLFilteredPathfindingLinksets::isWalkableFilter() const
LLPathfindingLinkset::ELinksetUse LLFilteredPathfindingLinksets::getLinksetUseFilter() const
{
return mIsWalkableFilter;
}
void LLFilteredPathfindingLinksets::setObstacleFilter(BOOL pObstacleFilter)
{
mIsFiltersDirty = (mIsFiltersDirty || (mIsObstacleFilter == pObstacleFilter));
mIsObstacleFilter = pObstacleFilter;
}
BOOL LLFilteredPathfindingLinksets::isObstacleFilter() const
{
return mIsObstacleFilter;
}
void LLFilteredPathfindingLinksets::setIgnoredFilter(BOOL pIgnoredFilter)
{
mIsFiltersDirty = (mIsFiltersDirty || (mIsIgnoredFilter == pIgnoredFilter));
mIsIgnoredFilter = pIgnoredFilter;
}
BOOL LLFilteredPathfindingLinksets::isIgnoredFilter() const
{
return mIsIgnoredFilter;
return mLinksetUseFilter;
}
void LLFilteredPathfindingLinksets::clearFilters()
{
mNameFilter.clear();
mDescriptionFilter.clear();
mIsWalkableFilter = true;
mIsObstacleFilter = true;
mIsIgnoredFilter = true;
mLinksetUseFilter = LLPathfindingLinkset::kUnknown;
mIsFiltersDirty = false;
}
@ -305,9 +276,7 @@ void LLFilteredPathfindingLinksets::applyFilters()
BOOL LLFilteredPathfindingLinksets::doesMatchFilters(const LLPathfindingLinkset& pLinkset) const
{
return (((mIsWalkableFilter && (pLinkset.getPathState() == LLPathfindingLinkset::kWalkable)) ||
(mIsObstacleFilter && (pLinkset.getPathState() == LLPathfindingLinkset::kObstacle)) ||
(mIsIgnoredFilter && (pLinkset.getPathState() == LLPathfindingLinkset::kIgnored))) &&
(!mNameFilter.isActive() || mNameFilter.doesMatch(pLinkset.getName())) &&
(!mDescriptionFilter.isActive() || mDescriptionFilter.doesMatch(pLinkset.getDescription())));
return (((mLinksetUseFilter == LLPathfindingLinkset::kUnknown) || (mLinksetUseFilter == pLinkset.getLinksetUse())) &&
(!mNameFilter.isActive() || mNameFilter.doesMatch(pLinkset.getName())) &&
(!mDescriptionFilter.isActive() || mDescriptionFilter.doesMatch(pLinkset.getDescription())));
}

View File

@ -30,9 +30,9 @@
#include <string>
#include <map>
#include "llpathfindinglinkset.h"
class LLSD;
class LLPathfindingLinkset;
class FilterString
{
@ -80,14 +80,8 @@ public:
void setDescriptionFilter(const std::string& pDescriptionFilter);
const std::string& getDescriptionFilter() const;
void setWalkableFilter(BOOL pWalkableFilter);
BOOL isWalkableFilter() const;
void setObstacleFilter(BOOL pObstacleFilter);
BOOL isObstacleFilter() const;
void setIgnoredFilter(BOOL pIgnoredFilter);
BOOL isIgnoredFilter() const;
void setLinksetUseFilter(LLPathfindingLinkset::ELinksetUse pLinksetUse);
LLPathfindingLinkset::ELinksetUse getLinksetUseFilter() const;
void clearFilters();
@ -97,12 +91,10 @@ private:
PathfindingLinksetMap mAllLinksets;
PathfindingLinksetMap mFilteredLinksets;
bool mIsFiltersDirty;
FilterString mNameFilter;
FilterString mDescriptionFilter;
BOOL mIsWalkableFilter;
BOOL mIsObstacleFilter;
BOOL mIsIgnoredFilter;
bool mIsFiltersDirty;
FilterString mNameFilter;
FilterString mDescriptionFilter;
LLPathfindingLinkset::ELinksetUse mLinksetUseFilter;
void applyFilters();
BOOL doesMatchFilters(const LLPathfindingLinkset& pLinkset) const;

View File

@ -27,30 +27,33 @@
#include "llviewerprecompiledheaders.h"
#include "llfloater.h"
#include "llfloaterreg.h"
#include "llfloaterpathfindinglinksets.h"
#include "llsd.h"
#include "lluuid.h"
#include "v3math.h"
#include "lltextvalidate.h"
#include "llagent.h"
#include "llhandle.h"
#include "llfloaterreg.h"
#include "lltextbase.h"
#include "lllineeditor.h"
#include "llscrolllistitem.h"
#include "llscrolllistctrl.h"
#include "llcheckboxctrl.h"
#include "llradiogroup.h"
#include "llcombobox.h"
#include "llbutton.h"
#include "llresmgr.h"
#include "llviewerregion.h"
#include "llhttpclient.h"
#include "lluuid.h"
#include "llpathfindinglinkset.h"
#include "llfilteredpathfindinglinksets.h"
#define XUI_PATH_STATE_WALKABLE 1
#define XUI_PATH_STATE_OBSTACLE 2
#define XUI_PATH_STATE_IGNORED 3
#define XUI_LINKSET_USE_NONE 0
#define XUI_LINKSET_USE_WALKABLE 1
#define XUI_LINKSET_USE_STATIC_OBSTACLE 2
#define XUI_LINKSET_USE_DYNAMIC_OBSTACLE 3
#define XUI_LINKSET_USE_MATERIAL_VOLUME 4
#define XUI_LINKSET_USE_EXCLUSION_VOLUME 5
#define XUI_LINKSET_USE_DYNAMIC_PHANTOM 6
//---------------------------------------------------------------------------
// NavMeshDataGetResponder
@ -100,11 +103,24 @@ private:
BOOL LLFloaterPathfindingLinksets::postBuild()
{
childSetAction("apply_filters", boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this));
childSetAction("apply_filters", boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this));
childSetAction("clear_filters", boost::bind(&LLFloaterPathfindingLinksets::onClearFiltersClicked, this));
childSetAction("refresh_linksets_list", boost::bind(&LLFloaterPathfindingLinksets::onRefreshLinksetsClicked, this));
childSetAction("select_all_linksets", boost::bind(&LLFloaterPathfindingLinksets::onSelectAllLinksetsClicked, this));
childSetAction("select_none_linksets", boost::bind(&LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked, this));
mFilterByName = findChild<LLLineEditor>("filter_by_name");
llassert(mFilterByName != NULL);
mFilterByName->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this));
mFilterByName->setSelectAllonFocusReceived(true);
mFilterByName->setCommitOnFocusLost(true);
mFilterByDescription = findChild<LLLineEditor>("filter_by_description");
llassert(mFilterByDescription != NULL);
mFilterByDescription->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this));
mFilterByDescription->setSelectAllonFocusReceived(true);
mFilterByDescription->setCommitOnFocusLost(true);
mFilterByLinksetUse = findChild<LLComboBox>("filter_by_linkset_use");
llassert(mFilterByLinksetUse != NULL);
mFilterByLinksetUse->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyAllFilters, this));
mLinksetsScrollList = findChild<LLScrollListCtrl>("pathfinding_linksets");
llassert(mLinksetsScrollList != NULL);
@ -115,41 +131,40 @@ BOOL LLFloaterPathfindingLinksets::postBuild()
mLinksetsStatus = findChild<LLTextBase>("linksets_status");
llassert(mLinksetsStatus != NULL);
mFilterByName = findChild<LLLineEditor>("filter_by_name");
llassert(mFilterByName != NULL);
mFilterByName->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this));
mFilterByName->setSelectAllonFocusReceived(true);
mFilterByName->setCommitOnFocusLost(true);
mRefreshListButton = findChild<LLButton>("refresh_linksets_list");
llassert(mRefreshListButton != NULL);
mRefreshListButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onRefreshLinksetsClicked, this));
mFilterByDescription = findChild<LLLineEditor>("filter_by_description");
llassert(mFilterByDescription != NULL);
mFilterByDescription->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this));
mFilterByDescription->setSelectAllonFocusReceived(true);
mFilterByDescription->setCommitOnFocusLost(true);
mSelectAllButton = findChild<LLButton>("select_all_linksets");
llassert(mSelectAllButton != NULL);
mSelectAllButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onSelectAllLinksetsClicked, this));
mFilterByWalkable = findChild<LLCheckBoxCtrl>("filter_by_walkable");
llassert(mFilterByWalkable != NULL);
mFilterByWalkable->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this));
mSelectNoneButton = findChild<LLButton>("select_none_linksets");
llassert(mSelectNoneButton != NULL);
mSelectNoneButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked, this));
mFilterByObstacle = findChild<LLCheckBoxCtrl>("filter_by_obstacle");
llassert(mFilterByObstacle != NULL);
mFilterByObstacle->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this));
mTakeButton = findChild<LLButton>("take_linksets");
llassert(mTakeButton != NULL);
mTakeButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onTakeClicked, this));
mFilterByIgnored = findChild<LLCheckBoxCtrl>("filter_by_ignored");
llassert(mFilterByIgnored != NULL);
mFilterByIgnored->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyFiltersClicked, this));
mTakeCopyButton = findChild<LLButton>("take_copy_linksets");
llassert(mTakeCopyButton != NULL);
mTakeCopyButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onTakeCopyClicked, this));
mEditPathState = findChild<LLRadioGroup>("edit_path_state");
llassert(mEditPathState != NULL);
mReturnButton = findChild<LLButton>("return_linksets");
llassert(mReturnButton != NULL);
mReturnButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onReturnClicked, this));
mEditPathStateWalkable = findChild<LLUICtrl>("edit_pathing_state_walkable");
llassert(mEditPathStateWalkable != NULL);
mDeleteButton = findChild<LLButton>("delete_linksets");
llassert(mDeleteButton != NULL);
mDeleteButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onDeleteClicked, this));
mEditPathStateObstacle = findChild<LLUICtrl>("edit_pathing_state_obstacle");
llassert(mEditPathStateObstacle != NULL);
mTeleportButton = findChild<LLButton>("teleport_me_to_linkset");
llassert(mTeleportButton != NULL);
mTeleportButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onTeleportClicked, this));
mEditPathStateIgnored = findChild<LLUICtrl>("edit_pathing_state_ignored");
llassert(mEditPathStateIgnored != NULL);
mEditLinksetUse = findChild<LLComboBox>("edit_linkset_use");
llassert(mEditLinksetUse != NULL);
mLabelWalkabilityCoefficients = findChild<LLTextBase>("walkability_coefficients_label");
llassert(mLabelWalkabilityCoefficients != NULL);
@ -157,37 +172,34 @@ BOOL LLFloaterPathfindingLinksets::postBuild()
mLabelEditA = findChild<LLTextBase>("edit_a_label");
llassert(mLabelEditA != NULL);
mLabelEditB = findChild<LLTextBase>("edit_b_label");
llassert(mLabelEditB != NULL);
mLabelEditC = findChild<LLTextBase>("edit_c_label");
llassert(mLabelEditC != NULL);
mLabelEditD = findChild<LLTextBase>("edit_d_label");
llassert(mLabelEditD != NULL);
mEditA = findChild<LLLineEditor>("edit_a_value");
llassert(mEditA != NULL);
mEditA->setPrevalidate(LLTextValidate::validatePositiveS32);
mLabelEditB = findChild<LLTextBase>("edit_b_label");
llassert(mLabelEditB != NULL);
mEditB = findChild<LLLineEditor>("edit_b_value");
llassert(mEditB != NULL);
mEditB->setPrevalidate(LLTextValidate::validatePositiveS32);
mLabelEditC = findChild<LLTextBase>("edit_c_label");
llassert(mLabelEditC != NULL);
mEditC = findChild<LLLineEditor>("edit_c_value");
llassert(mEditC != NULL);
mEditC->setPrevalidate(LLTextValidate::validatePositiveS32);
mLabelEditD = findChild<LLTextBase>("edit_d_label");
llassert(mLabelEditD != NULL);
mEditD = findChild<LLLineEditor>("edit_d_value");
llassert(mEditD != NULL);
mEditD->setPrevalidate(LLTextValidate::validatePositiveS32);
mEditPhantom = findChild<LLCheckBoxCtrl>("edit_phantom_value");
llassert(mEditPhantom != NULL);
mApplyEdits = findChild<LLButton>("apply_edit_values");
llassert(mApplyEdits != NULL);
mApplyEdits->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyChangesClicked, this));
mApplyEditsButton = findChild<LLButton>("apply_edit_values");
llassert(mApplyEditsButton != NULL);
mApplyEditsButton->setCommitCallback(boost::bind(&LLFloaterPathfindingLinksets::onApplyChangesClicked, this));
setEnableEditFields(false);
setMessagingState(kMessagingInitial);
@ -235,30 +247,31 @@ BOOL LLFloaterPathfindingLinksets::isMessagingInProgress() const
LLFloaterPathfindingLinksets::LLFloaterPathfindingLinksets(const LLSD& pSeed)
: LLFloater(pSeed),
mSelfHandle(),
mPathfindingLinksets(),
mMessagingState(kMessagingInitial),
mLinksetsScrollList(NULL),
mLinksetsStatus(NULL),
mFilterByName(NULL),
mFilterByDescription(NULL),
mFilterByWalkable(NULL),
mFilterByObstacle(NULL),
mFilterByIgnored(NULL),
mEditPathState(NULL),
mEditPathStateWalkable(NULL),
mEditPathStateObstacle(NULL),
mEditPathStateIgnored(NULL),
mFilterByLinksetUse(NULL),
mLinksetsScrollList(NULL),
mLinksetsStatus(NULL),
mRefreshListButton(NULL),
mSelectAllButton(NULL),
mTakeButton(NULL),
mTakeCopyButton(NULL),
mReturnButton(NULL),
mDeleteButton(NULL),
mTeleportButton(NULL),
mEditLinksetUse(NULL),
mLabelWalkabilityCoefficients(NULL),
mLabelEditA(NULL),
mLabelEditB(NULL),
mLabelEditC(NULL),
mLabelEditD(NULL),
mEditA(NULL),
mLabelEditB(NULL),
mEditB(NULL),
mLabelEditC(NULL),
mEditC(NULL),
mLabelEditD(NULL),
mEditD(NULL),
mEditPhantom(NULL),
mApplyEdits(NULL)
mApplyEditsButton(NULL),
mPathfindingLinksets(),
mMessagingState(kMessagingInitial)
{
mSelfHandle.bind(this);
}
@ -378,7 +391,7 @@ void LLFloaterPathfindingLinksets::setMessagingState(EMessagingState pMessagingS
updateEditFields();
}
void LLFloaterPathfindingLinksets::onApplyFiltersClicked()
void LLFloaterPathfindingLinksets::onApplyAllFilters()
{
applyFilters();
}
@ -409,6 +422,31 @@ void LLFloaterPathfindingLinksets::onSelectNoneLinksetsClicked()
selectNoneLinksets();
}
void LLFloaterPathfindingLinksets::onTakeClicked()
{
llwarns << "functionality not yet implemented for " << mTakeButton->getName() << llendl;
}
void LLFloaterPathfindingLinksets::onTakeCopyClicked()
{
llwarns << "functionality not yet implemented for " << mTakeCopyButton->getName() << llendl;
}
void LLFloaterPathfindingLinksets::onReturnClicked()
{
llwarns << "functionality not yet implemented for " << mReturnButton->getName() << llendl;
}
void LLFloaterPathfindingLinksets::onDeleteClicked()
{
llwarns << "functionality not yet implemented for " << mDeleteButton->getName() << llendl;
}
void LLFloaterPathfindingLinksets::onTeleportClicked()
{
llwarns << "functionality not yet implemented for " << mTeleportButton->getName() << llendl;
}
void LLFloaterPathfindingLinksets::onApplyChangesClicked()
{
applyEditFields();
@ -418,9 +456,7 @@ void LLFloaterPathfindingLinksets::applyFilters()
{
mPathfindingLinksets.setNameFilter(mFilterByName->getText());
mPathfindingLinksets.setDescriptionFilter(mFilterByDescription->getText());
mPathfindingLinksets.setWalkableFilter(mFilterByWalkable->get());
mPathfindingLinksets.setObstacleFilter(mFilterByObstacle->get());
mPathfindingLinksets.setIgnoredFilter(mFilterByIgnored->get());
mPathfindingLinksets.setLinksetUseFilter(getFilterLinksetUse());
updateLinksetsList();
}
@ -429,9 +465,7 @@ void LLFloaterPathfindingLinksets::clearFilters()
mPathfindingLinksets.clearFilters();
mFilterByName->setText(LLStringExplicit(mPathfindingLinksets.getNameFilter()));
mFilterByDescription->setText(LLStringExplicit(mPathfindingLinksets.getDescriptionFilter()));
mFilterByWalkable->set(mPathfindingLinksets.isWalkableFilter());
mFilterByObstacle->set(mPathfindingLinksets.isObstacleFilter());
mFilterByIgnored->set(mPathfindingLinksets.isIgnoredFilter());
setFilterLinksetUse(mPathfindingLinksets.getLinksetUseFilter());
updateLinksetsList();
}
@ -480,45 +514,51 @@ void LLFloaterPathfindingLinksets::updateLinksetsList()
columns[3]["value"] = llformat("%1.0f m", dist_vec(avatarPosition, linkset.getLocation()));
columns[3]["font"] = "SANSSERIF";
columns[4]["column"] = "path_state";
switch (linkset.getPathState())
columns[4]["column"] = "linkset_use";
switch (linkset.getLinksetUse())
{
case LLPathfindingLinkset::kWalkable :
columns[4]["value"] = getString("linkset_path_state_walkable");
columns[4]["value"] = getString("linkset_use_walkable");
break;
case LLPathfindingLinkset::kObstacle :
columns[4]["value"] = getString("linkset_path_state_obstacle");
case LLPathfindingLinkset::kStaticObstacle :
columns[4]["value"] = getString("linkset_use_static_obstacle");
break;
case LLPathfindingLinkset::kIgnored :
columns[4]["value"] = getString("linkset_path_state_ignored");
case LLPathfindingLinkset::kDynamicObstacle :
columns[4]["value"] = getString("linkset_use_dynamic_obstacle");
break;
case LLPathfindingLinkset::kMaterialVolume :
columns[4]["value"] = getString("linkset_use_material_volume");
break;
case LLPathfindingLinkset::kExclusionVolume :
columns[4]["value"] = getString("linkset_use_exclusion_volume");
break;
case LLPathfindingLinkset::kDynamicPhantom :
columns[4]["value"] = getString("linkset_use_dynamic_phantom");
break;
case LLPathfindingLinkset::kUnknown :
default :
columns[4]["value"] = getString("linkset_path_state_ignored");
columns[4]["value"] = getString("linkset_use_dynamic_obstacle");
llassert(0);
break;
}
columns[4]["font"] = "SANSSERIF";
columns[5]["column"] = "is_phantom";
columns[5]["value"] = getString(linkset.isPhantom() ? "linkset_is_phantom" : "linkset_is_not_phantom");
columns[5]["column"] = "a_percent";
columns[5]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientA());
columns[5]["font"] = "SANSSERIF";
columns[6]["column"] = "a_percent";
columns[6]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientA());
columns[6]["column"] = "b_percent";
columns[6]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientB());
columns[6]["font"] = "SANSSERIF";
columns[7]["column"] = "b_percent";
columns[7]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientB());
columns[7]["column"] = "c_percent";
columns[7]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientC());
columns[7]["font"] = "SANSSERIF";
columns[8]["column"] = "c_percent";
columns[8]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientC());
columns[8]["column"] = "d_percent";
columns[8]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientD());
columns[8]["font"] = "SANSSERIF";
columns[9]["column"] = "d_percent";
columns[9]["value"] = llformat("%3d", linkset.getWalkabilityCoefficientD());
columns[9]["font"] = "SANSSERIF";
LLSD element;
element["id"] = linkset.getUUID().asString();
element["column"] = columns;
@ -623,12 +663,11 @@ void LLFloaterPathfindingLinksets::updateEditFields()
std::vector<LLScrollListItem*> selectedItems = mLinksetsScrollList->getAllSelected();
if (selectedItems.empty())
{
mEditPathState->clear();
mEditLinksetUse->clear();
mEditA->clear();
mEditB->clear();
mEditC->clear();
mEditD->clear();
mEditPhantom->clear();
setEnableEditFields(false);
}
@ -640,12 +679,11 @@ void LLFloaterPathfindingLinksets::updateEditFields()
LLFilteredPathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetsMap.find(firstItem->getUUID().asString());
const LLPathfindingLinkset &linkset(linksetIter->second);
setPathState(linkset.getPathState());
setEditLinksetUse(linkset.getLinksetUse());
mEditA->setValue(LLSD(linkset.getWalkabilityCoefficientA()));
mEditB->setValue(LLSD(linkset.getWalkabilityCoefficientB()));
mEditC->setValue(LLSD(linkset.getWalkabilityCoefficientC()));
mEditD->setValue(LLSD(linkset.getWalkabilityCoefficientD()));
mEditPhantom->set(linkset.isPhantom());
setEnableEditFields(true);
}
@ -656,7 +694,7 @@ void LLFloaterPathfindingLinksets::applyEditFields()
std::vector<LLScrollListItem*> selectedItems = mLinksetsScrollList->getAllSelected();
if (!selectedItems.empty())
{
LLPathfindingLinkset::EPathState pathState = getPathState();
LLPathfindingLinkset::ELinksetUse pathState = getEditLinksetUse();
const std::string &aString = mEditA->getText();
const std::string &bString = mEditB->getText();
const std::string &cString = mEditC->getText();
@ -665,7 +703,6 @@ void LLFloaterPathfindingLinksets::applyEditFields()
S32 bValue = static_cast<S32>(atoi(bString.c_str()));
S32 cValue = static_cast<S32>(atoi(cString.c_str()));
S32 dValue = static_cast<S32>(atoi(dString.c_str()));
BOOL isPhantom = mEditPhantom->getValue();
const LLFilteredPathfindingLinksets::PathfindingLinksetMap &linksetsMap = mPathfindingLinksets.getAllLinksets();
@ -679,7 +716,7 @@ void LLFloaterPathfindingLinksets::applyEditFields()
const LLFilteredPathfindingLinksets::PathfindingLinksetMap::const_iterator linksetIter = linksetsMap.find(uuid.asString());
const LLPathfindingLinkset &linkset = linksetIter->second;
LLSD itemData = linkset.encodeAlteredFields(pathState, aValue, bValue, cValue, dValue, isPhantom);
LLSD itemData = linkset.encodeAlteredFields(pathState, aValue, bValue, cValue, dValue);
if (!itemData.isUndefined())
{
@ -700,10 +737,7 @@ void LLFloaterPathfindingLinksets::applyEditFields()
void LLFloaterPathfindingLinksets::setEnableEditFields(BOOL pEnabled)
{
mEditPathState->setEnabled(pEnabled);
mEditPathStateWalkable->setEnabled(pEnabled);
mEditPathStateObstacle->setEnabled(pEnabled);
mEditPathStateIgnored->setEnabled(pEnabled);
mEditLinksetUse->setEnabled(pEnabled);
mLabelWalkabilityCoefficients->setEnabled(pEnabled);
mLabelEditA->setEnabled(pEnabled);
mLabelEditB->setEnabled(pEnabled);
@ -713,56 +747,99 @@ void LLFloaterPathfindingLinksets::setEnableEditFields(BOOL pEnabled)
mEditB->setEnabled(pEnabled);
mEditC->setEnabled(pEnabled);
mEditD->setEnabled(pEnabled);
mEditPhantom->setEnabled(pEnabled);
mApplyEdits->setEnabled(pEnabled);
mApplyEditsButton->setEnabled(pEnabled);
}
LLPathfindingLinkset::EPathState LLFloaterPathfindingLinksets::getPathState() const
LLPathfindingLinkset::ELinksetUse LLFloaterPathfindingLinksets::getFilterLinksetUse() const
{
LLPathfindingLinkset::EPathState pathState;
return convertToLinksetUse(mFilterByLinksetUse->getValue());
}
void LLFloaterPathfindingLinksets::setFilterLinksetUse(LLPathfindingLinkset::ELinksetUse pLinksetUse)
{
mFilterByLinksetUse->setValue(convertToXuiValue(pLinksetUse));
}
LLPathfindingLinkset::ELinksetUse LLFloaterPathfindingLinksets::getEditLinksetUse() const
{
return convertToLinksetUse(mEditLinksetUse->getValue());
}
void LLFloaterPathfindingLinksets::setEditLinksetUse(LLPathfindingLinkset::ELinksetUse pLinksetUse)
{
mEditLinksetUse->setValue(convertToXuiValue(pLinksetUse));
}
LLPathfindingLinkset::ELinksetUse LLFloaterPathfindingLinksets::convertToLinksetUse(LLSD pXuiValue) const
{
LLPathfindingLinkset::ELinksetUse linkUse;
switch (mEditPathState->getValue().asInteger())
switch (pXuiValue.asInteger())
{
case XUI_PATH_STATE_WALKABLE :
pathState = LLPathfindingLinkset::kWalkable;
case XUI_LINKSET_USE_NONE :
linkUse = LLPathfindingLinkset::kUnknown;
break;
case XUI_PATH_STATE_OBSTACLE :
pathState = LLPathfindingLinkset::kObstacle;
case XUI_LINKSET_USE_WALKABLE :
linkUse = LLPathfindingLinkset::kWalkable;
break;
case XUI_PATH_STATE_IGNORED :
pathState = LLPathfindingLinkset::kIgnored;
case XUI_LINKSET_USE_STATIC_OBSTACLE :
linkUse = LLPathfindingLinkset::kStaticObstacle;
break;
case XUI_LINKSET_USE_DYNAMIC_OBSTACLE :
linkUse = LLPathfindingLinkset::kDynamicObstacle;
break;
case XUI_LINKSET_USE_MATERIAL_VOLUME :
linkUse = LLPathfindingLinkset::kMaterialVolume;
break;
case XUI_LINKSET_USE_EXCLUSION_VOLUME :
linkUse = LLPathfindingLinkset::kExclusionVolume;
break;
case XUI_LINKSET_USE_DYNAMIC_PHANTOM :
linkUse = LLPathfindingLinkset::kDynamicPhantom;
break;
default :
pathState = LLPathfindingLinkset::kIgnored;
linkUse = LLPathfindingLinkset::kUnknown;
llassert(0);
break;
}
return pathState;
return linkUse;
}
void LLFloaterPathfindingLinksets::setPathState(LLPathfindingLinkset::EPathState pPathState)
LLSD LLFloaterPathfindingLinksets::convertToXuiValue(LLPathfindingLinkset::ELinksetUse pLinksetUse) const
{
LLSD radioGroupValue;
LLSD xuiValue;
switch (pPathState)
switch (pLinksetUse)
{
case LLPathfindingLinkset::kUnknown :
xuiValue = XUI_LINKSET_USE_NONE;
break;
case LLPathfindingLinkset::kWalkable :
radioGroupValue = XUI_PATH_STATE_WALKABLE;
xuiValue = XUI_LINKSET_USE_WALKABLE;
break;
case LLPathfindingLinkset::kObstacle :
radioGroupValue = XUI_PATH_STATE_OBSTACLE;
case LLPathfindingLinkset::kStaticObstacle :
xuiValue = XUI_LINKSET_USE_STATIC_OBSTACLE;
break;
case LLPathfindingLinkset::kIgnored :
radioGroupValue = XUI_PATH_STATE_IGNORED;
case LLPathfindingLinkset::kDynamicObstacle :
xuiValue = XUI_LINKSET_USE_DYNAMIC_OBSTACLE;
break;
case LLPathfindingLinkset::kMaterialVolume :
xuiValue = XUI_LINKSET_USE_MATERIAL_VOLUME;
break;
case LLPathfindingLinkset::kExclusionVolume :
xuiValue = XUI_LINKSET_USE_EXCLUSION_VOLUME;
break;
case LLPathfindingLinkset::kDynamicPhantom :
xuiValue = XUI_LINKSET_USE_DYNAMIC_PHANTOM;
break;
default :
radioGroupValue = XUI_PATH_STATE_IGNORED;
xuiValue = XUI_LINKSET_USE_NONE;
llassert(0);
break;
}
mEditPathState->setValue(radioGroupValue);
return xuiValue;
}
//---------------------------------------------------------------------------

View File

@ -38,8 +38,7 @@ class LLSD;
class LLTextBase;
class LLScrollListCtrl;
class LLLineEditor;
class LLCheckBoxCtrl;
class LLRadioGroup;
class LLComboBox;
class LLButton;
class LLFloaterPathfindingLinksets
@ -78,30 +77,32 @@ protected:
private:
LLRootHandle<LLFloaterPathfindingLinksets> mSelfHandle;
LLFilteredPathfindingLinksets mPathfindingLinksets;
EMessagingState mMessagingState;
LLScrollListCtrl *mLinksetsScrollList;
LLTextBase *mLinksetsStatus;
LLLineEditor *mFilterByName;
LLLineEditor *mFilterByDescription;
LLCheckBoxCtrl *mFilterByWalkable;
LLCheckBoxCtrl *mFilterByObstacle;
LLCheckBoxCtrl *mFilterByIgnored;
LLRadioGroup *mEditPathState;
LLUICtrl *mEditPathStateWalkable;
LLUICtrl *mEditPathStateObstacle;
LLUICtrl *mEditPathStateIgnored;
LLComboBox *mFilterByLinksetUse;
LLScrollListCtrl *mLinksetsScrollList;
LLTextBase *mLinksetsStatus;
LLButton *mRefreshListButton;
LLButton *mSelectAllButton;
LLButton *mSelectNoneButton;
LLButton *mTakeButton;
LLButton *mTakeCopyButton;
LLButton *mReturnButton;
LLButton *mDeleteButton;
LLButton *mTeleportButton;
LLComboBox *mEditLinksetUse;
LLTextBase *mLabelWalkabilityCoefficients;
LLTextBase *mLabelEditA;
LLTextBase *mLabelEditB;
LLTextBase *mLabelEditC;
LLTextBase *mLabelEditD;
LLLineEditor *mEditA;
LLTextBase *mLabelEditB;
LLLineEditor *mEditB;
LLTextBase *mLabelEditC;
LLLineEditor *mEditC;
LLTextBase *mLabelEditD;
LLLineEditor *mEditD;
LLCheckBoxCtrl *mEditPhantom;
LLButton *mApplyEdits;
LLButton *mApplyEditsButton;
LLFilteredPathfindingLinksets mPathfindingLinksets;
EMessagingState mMessagingState;
// Does its own instance management, so clients not allowed
// to allocate or destroy.
@ -120,12 +121,17 @@ private:
void setMessagingState(EMessagingState pMessagingState);
void onApplyFiltersClicked();
void onApplyAllFilters();
void onClearFiltersClicked();
void onLinksetsSelectionChange();
void onRefreshLinksetsClicked();
void onSelectAllLinksetsClicked();
void onSelectNoneLinksetsClicked();
void onTakeClicked();
void onTakeCopyClicked();
void onReturnClicked();
void onDeleteClicked();
void onTeleportClicked();
void onApplyChangesClicked();
void applyFilters();
@ -141,8 +147,14 @@ private:
void applyEditFields();
void setEnableEditFields(BOOL pEnabled);
LLPathfindingLinkset::EPathState getPathState() const;
void setPathState(LLPathfindingLinkset::EPathState pPathState);
LLPathfindingLinkset::ELinksetUse getFilterLinksetUse() const;
void setFilterLinksetUse(LLPathfindingLinkset::ELinksetUse pLinksetUse);
LLPathfindingLinkset::ELinksetUse getEditLinksetUse() const;
void setEditLinksetUse(LLPathfindingLinkset::ELinksetUse pLinksetUse);
LLPathfindingLinkset::ELinksetUse convertToLinksetUse(LLSD pXuiValue) const;
LLSD convertToXuiValue(LLPathfindingLinkset::ELinksetUse pLinksetUse) const;
};
#endif // LL_LLFLOATERPATHFINDINGLINKSETS_H

View File

@ -56,8 +56,7 @@ LLPathfindingLinkset::LLPathfindingLinkset(const std::string &pUUID, const LLSD&
mDescription(),
mLandImpact(0U),
mLocation(),
mPathState(kIgnored),
mIsPhantom(false),
mLinksetUse(kUnknown),
#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
mIsWalkabilityCoefficientsF32(false),
#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
@ -79,6 +78,10 @@ LLPathfindingLinkset::LLPathfindingLinkset(const std::string &pUUID, const LLSD&
llassert(pLinksetItem.get(LINKSET_LAND_IMPACT_FIELD).asInteger() >= 0);
mLandImpact = pLinksetItem.get(LINKSET_LAND_IMPACT_FIELD).asInteger();
llassert(pLinksetItem.has(LINKSET_PHANTOM_FIELD));
llassert(pLinksetItem.get(LINKSET_PHANTOM_FIELD).isBoolean());
bool isPhantom = pLinksetItem.get(LINKSET_PHANTOM_FIELD).asBoolean();
llassert(pLinksetItem.has(LINKSET_PERMANENT_FIELD));
llassert(pLinksetItem.get(LINKSET_PERMANENT_FIELD).isBoolean());
bool isPermanent = pLinksetItem.get(LINKSET_PERMANENT_FIELD).asBoolean();
@ -87,11 +90,7 @@ LLPathfindingLinkset::LLPathfindingLinkset(const std::string &pUUID, const LLSD&
llassert(pLinksetItem.get(LINKSET_WALKABLE_FIELD).isBoolean());
bool isWalkable = pLinksetItem.get(LINKSET_WALKABLE_FIELD).asBoolean();
mPathState = getPathState(isPermanent, isWalkable);
llassert(pLinksetItem.has(LINKSET_PHANTOM_FIELD));
llassert(pLinksetItem.get(LINKSET_PHANTOM_FIELD).isBoolean());
mIsPhantom = pLinksetItem.get(LINKSET_PHANTOM_FIELD).asBoolean();
mLinksetUse = getLinksetUse(isPhantom, isPermanent, isWalkable);
llassert(pLinksetItem.has(LINKSET_WALKABILITY_A_FIELD));
#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
@ -175,8 +174,7 @@ LLPathfindingLinkset::LLPathfindingLinkset(const LLPathfindingLinkset& pOther)
mDescription(pOther.mDescription),
mLandImpact(pOther.mLandImpact),
mLocation(pOther.mLocation),
mPathState(pOther.mPathState),
mIsPhantom(pOther.mIsPhantom),
mLinksetUse(pOther.mLinksetUse),
#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
mIsWalkabilityCoefficientsF32(pOther.mIsWalkabilityCoefficientsF32),
#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
@ -198,8 +196,7 @@ LLPathfindingLinkset& LLPathfindingLinkset::operator =(const LLPathfindingLinkse
mDescription = pOther.mDescription;
mLandImpact = pOther.mLandImpact;
mLocation = pOther.mLocation;
mPathState = pOther.mPathState;
mIsPhantom = pOther.mIsPhantom;
mLinksetUse = pOther.mLinksetUse;
#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
mIsWalkabilityCoefficientsF32 = pOther.mIsWalkabilityCoefficientsF32;
#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
@ -211,56 +208,6 @@ LLPathfindingLinkset& LLPathfindingLinkset::operator =(const LLPathfindingLinkse
return *this;
}
LLPathfindingLinkset::EPathState LLPathfindingLinkset::getPathState(bool pIsPermanent, bool pIsWalkable)
{
return (pIsPermanent ? (pIsWalkable ? kWalkable : kObstacle) : kIgnored);
}
BOOL LLPathfindingLinkset::isPermanent(EPathState pPathState)
{
BOOL retVal;
switch (pPathState)
{
case kWalkable :
case kObstacle :
retVal = true;
break;
case kIgnored :
retVal = false;
break;
default :
retVal = false;
llassert(0);
break;
}
return retVal;
}
BOOL LLPathfindingLinkset::isWalkable(EPathState pPathState)
{
BOOL retVal;
switch (pPathState)
{
case kWalkable :
retVal = true;
break;
case kObstacle :
case kIgnored :
retVal = false;
break;
default :
retVal = false;
llassert(0);
break;
}
return retVal;
}
void LLPathfindingLinkset::setWalkabilityCoefficientA(S32 pA)
{
mWalkabilityCoefficientA = llclamp(pA, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE);
@ -281,14 +228,16 @@ void LLPathfindingLinkset::setWalkabilityCoefficientD(S32 pD)
mWalkabilityCoefficientD = llclamp(pD, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE);
}
LLSD LLPathfindingLinkset::encodeAlteredFields(EPathState pPathState, S32 pA, S32 pB, S32 pC, S32 pD, BOOL pIsPhantom) const
LLSD LLPathfindingLinkset::encodeAlteredFields(ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) const
{
LLSD itemData;
if (mPathState != pPathState)
if (mLinksetUse != pLinksetUse)
{
itemData[LINKSET_PERMANENT_FIELD] = static_cast<bool>(LLPathfindingLinkset::isPermanent(pPathState));
itemData[LINKSET_WALKABLE_FIELD] = static_cast<bool>(LLPathfindingLinkset::isWalkable(pPathState));
llassert(pLinksetUse != kUnknown);
itemData[LINKSET_PHANTOM_FIELD] = static_cast<bool>(LLPathfindingLinkset::isPhantom(pLinksetUse));
itemData[LINKSET_PERMANENT_FIELD] = static_cast<bool>(LLPathfindingLinkset::isPermanent(pLinksetUse));
itemData[LINKSET_WALKABLE_FIELD] = static_cast<bool>(LLPathfindingLinkset::isWalkable(pLinksetUse));
}
#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
if (mIsWalkabilityCoefficientsF32)
@ -347,10 +296,90 @@ LLSD LLPathfindingLinkset::encodeAlteredFields(EPathState pPathState, S32 pA, S3
itemData[LINKSET_WALKABILITY_D_FIELD] = llclamp(pD, MIN_WALKABILITY_VALUE, MAX_WALKABILITY_VALUE);
}
#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
if (mIsPhantom != pIsPhantom)
{
itemData[LINKSET_PHANTOM_FIELD] = static_cast<bool>(pIsPhantom);
}
return itemData;
}
LLPathfindingLinkset::ELinksetUse LLPathfindingLinkset::getLinksetUse(bool pIsPhantom, bool pIsPermanent, bool pIsWalkable)
{
return (pIsPhantom ? (pIsPermanent ? (pIsWalkable ? kMaterialVolume : kExclusionVolume) : kDynamicPhantom) :
(pIsPermanent ? (pIsWalkable ? kWalkable : kStaticObstacle) : kDynamicObstacle));
}
BOOL LLPathfindingLinkset::isPhantom(ELinksetUse pLinksetUse)
{
BOOL retVal;
switch (pLinksetUse)
{
case kWalkable :
case kStaticObstacle :
case kDynamicObstacle :
retVal = false;
break;
case kMaterialVolume :
case kExclusionVolume :
case kDynamicPhantom :
retVal = true;
break;
case kUnknown :
default :
retVal = false;
llassert(0);
break;
}
return retVal;
}
BOOL LLPathfindingLinkset::isPermanent(ELinksetUse pLinksetUse)
{
BOOL retVal;
switch (pLinksetUse)
{
case kWalkable :
case kStaticObstacle :
case kMaterialVolume :
case kExclusionVolume :
retVal = true;
break;
case kDynamicObstacle :
case kDynamicPhantom :
retVal = false;
break;
case kUnknown :
default :
retVal = false;
llassert(0);
break;
}
return retVal;
}
BOOL LLPathfindingLinkset::isWalkable(ELinksetUse pLinksetUse)
{
BOOL retVal;
switch (pLinksetUse)
{
case kWalkable :
case kMaterialVolume :
retVal = true;
break;
case kStaticObstacle :
case kDynamicObstacle :
case kExclusionVolume :
case kDynamicPhantom :
retVal = false;
break;
case kUnknown :
default :
retVal = false;
llassert(0);
break;
}
return retVal;
}

View File

@ -42,10 +42,14 @@ class LLPathfindingLinkset
public:
typedef enum
{
kUnknown,
kWalkable,
kObstacle,
kIgnored
} EPathState;
kStaticObstacle,
kDynamicObstacle,
kMaterialVolume,
kExclusionVolume,
kDynamicPhantom
} ELinksetUse;
LLPathfindingLinkset(const std::string &pUUID, const LLSD &pLinksetItem);
LLPathfindingLinkset(const LLPathfindingLinkset& pOther);
@ -53,21 +57,14 @@ public:
LLPathfindingLinkset& operator = (const LLPathfindingLinkset& pOther);
inline const LLUUID& getUUID() const {return mUUID;};
inline const std::string& getName() const {return mName;};
inline const std::string& getDescription() const {return mDescription;};
inline U32 getLandImpact() const {return mLandImpact;};
inline const LLVector3& getLocation() const {return mLocation;};
inline const LLUUID& getUUID() const {return mUUID;};
inline const std::string& getName() const {return mName;};
inline const std::string& getDescription() const {return mDescription;};
inline U32 getLandImpact() const {return mLandImpact;};
inline const LLVector3& getLocation() const {return mLocation;};
inline EPathState getPathState() const {return mPathState;};
inline void setPathState(EPathState pPathState) {mPathState = pPathState;};
static EPathState getPathState(bool pIsPermanent, bool pIsWalkable);
static BOOL isPermanent(EPathState pPathState);
static BOOL isWalkable(EPathState pPathState);
inline BOOL isPhantom() const {return mIsPhantom;};
inline void setPhantom(BOOL pIsPhantom) {mIsPhantom = pIsPhantom;};
inline ELinksetUse getLinksetUse() const {return mLinksetUse;};
inline void setLinksetUse(ELinksetUse pLinksetUse) {mLinksetUse = pLinksetUse;};
inline S32 getWalkabilityCoefficientA() const {return mWalkabilityCoefficientA;};
void setWalkabilityCoefficientA(S32 pA);
@ -81,28 +78,32 @@ public:
inline S32 getWalkabilityCoefficientD() const {return mWalkabilityCoefficientD;};
void setWalkabilityCoefficientD(S32 pD);
LLSD encodeAlteredFields(EPathState pPathState, S32 pA, S32 pB, S32 pC, S32 pD, BOOL pIsPhantom) const;
LLSD encodeAlteredFields(ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) const;
protected:
private:
static ELinksetUse getLinksetUse(bool pIsPhantom, bool pIsPermanent, bool pIsWalkable);
static BOOL isPhantom(ELinksetUse pLinksetUse);
static BOOL isPermanent(ELinksetUse pLinksetUse);
static BOOL isWalkable(ELinksetUse pLinksetUse);
static const S32 MIN_WALKABILITY_VALUE;
static const S32 MAX_WALKABILITY_VALUE;
LLUUID mUUID;
std::string mName;
std::string mDescription;
U32 mLandImpact;
LLVector3 mLocation;
EPathState mPathState;
BOOL mIsPhantom;
LLUUID mUUID;
std::string mName;
std::string mDescription;
U32 mLandImpact;
LLVector3 mLocation;
ELinksetUse mLinksetUse;
#ifdef XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
BOOL mIsWalkabilityCoefficientsF32;
BOOL mIsWalkabilityCoefficientsF32;
#endif // XXX_STINSON_WALKABILITY_COEFFICIENTS_TYPE_CHANGE
S32 mWalkabilityCoefficientA;
S32 mWalkabilityCoefficientB;
S32 mWalkabilityCoefficientC;
S32 mWalkabilityCoefficientD;
S32 mWalkabilityCoefficientA;
S32 mWalkabilityCoefficientB;
S32 mWalkabilityCoefficientC;
S32 mWalkabilityCoefficientD;
};
#endif // LL_LLPATHFINDINGLINKSET_H

View File

@ -3,9 +3,9 @@
open_positioning="cascading"
can_resize="true"
can_tear_off="false"
height="330"
height="382"
width="950"
min_height="330"
min_height="382"
min_width="950"
layout="topleft"
name="floater_pathfinding_linksets"
@ -27,401 +27,503 @@
<floater.string name="linksets_messaging_complete_none_found">No pathfinding linksets</floater.string>
<floater.string name="linksets_messaging_complete_available">[NUM_SELECTED] linksets selected out of [NUM_TOTAL]</floater.string>
<floater.string name="linksets_messaging_service_not_available">Required capability is not available in current region</floater.string>
<floater.string name="linkset_path_state_walkable">Walkable</floater.string>
<floater.string name="linkset_path_state_obstacle">Obstacle</floater.string>
<floater.string name="linkset_path_state_ignored">Ignored</floater.string>
<floater.string name="linkset_is_phantom">Phantom</floater.string>
<floater.string name="linkset_is_not_phantom">--</floater.string>
<text
height="13"
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
length="1"
follows="left|top"
<floater.string name="linkset_use_walkable">Walkable</floater.string>
<floater.string name="linkset_use_static_obstacle">Static obstacle</floater.string>
<floater.string name="linkset_use_dynamic_obstacle">Dynamic obstacle</floater.string>
<floater.string name="linkset_use_material_volume">Material volume</floater.string>
<floater.string name="linkset_use_exclusion_volume">Exclusion volume</floater.string>
<floater.string name="linkset_use_dynamic_phantom">Dynamic phantom</floater.string>
<panel
border="false"
bevel_style="none"
follows="left|top|right|bottom"
layout="topleft"
left="20"
top="16"
width="67">
Filter by:
</text>
<text
height="13"
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
length="1"
follows="left|top"
layout="topleft"
left="87"
top="16"
width="62">
Name
</text>
<line_editor
border_style="line"
border_thickness="1"
follows="left|top"
height="20"
layout="topleft"
left_delta="62"
top="11"
max_length_bytes="10"
name="filter_by_name"
width="105" />
<text
height="13"
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
length="1"
follows="left|top"
layout="topleft"
left="273"
top="16"
width="88">
Description
</text>
<line_editor
border_style="line"
border_thickness="1"
follows="left|top"
height="20"
layout="topleft"
left_delta="88"
top="11"
max_length_bytes="10"
name="filter_by_description"
width="106" />
<check_box
height="19"
follows="left|top"
initial_value="true"
label="Walkable"
layout="topleft"
left="481"
top="14"
name="filter_by_walkable"
width="90" />
<check_box
height="19"
follows="left|top"
initial_value="true"
label="Obstacle"
layout="topleft"
left="577"
top="14"
name="filter_by_obstacle"
width="90" />
<check_box
height="19"
follows="left|top"
initial_value="true"
label="Ignored"
layout="topleft"
left="674"
top="14"
name="filter_by_ignored"
width="90" />
<button
follows="right|top"
height="21"
label="Apply"
layout="topleft"
name="apply_filters"
top="11"
left="769"
width="73"/>
<button
follows="right|top"
height="21"
label="Clear"
layout="topleft"
name="clear_filters"
top="11"
left="851"
width="73"/>
<scroll_list
column_padding="0"
draw_heading="true"
follows="all"
height="135"
layout="topleft"
left="18"
top="48"
multi_select="true"
name="pathfinding_linksets"
width="910">
<scroll_list.columns
label="Name (root prim)"
name="name"
dynamic_width="true" />
<scroll_list.columns
label="Description (root prim)"
name="description"
width="212" />
<scroll_list.columns
label="Land impact"
name="land_impact"
width="95" />
<scroll_list.columns
label="Dist from you"
name="dist_from_you"
width="97" />
<scroll_list.columns
label="State"
name="path_state"
width="74" />
<scroll_list.columns
label="Phantom"
name="is_phantom"
width="74" />
<scroll_list.columns
label="A %"
name="a_percent"
width="41" />
<scroll_list.columns
label="B %"
name="b_percent"
width="41" />
<scroll_list.columns
label="C %"
name="c_percent"
width="41" />
<scroll_list.columns
label="D %"
name="d_percent"
width="41" />
</scroll_list>
<text
height="13"
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
length="1"
follows="left|bottom"
layout="topleft"
name="linksets_status"
top="200"
width="500">
Linksets:
</text>
<button
follows="right|bottom"
height="21"
label="Refresh list"
layout="topleft"
name="refresh_linksets_list"
top="200"
left="568"
width="115"/>
<button
follows="right|bottom"
height="21"
label="Select all"
layout="topleft"
name="select_all_linksets"
top="200"
left="690"
width="115"/>
<button
follows="right|bottom"
height="21"
label="Select none"
layout="topleft"
name="select_none_linksets"
top="200"
left="812"
width="115"/>
height="226"
width="950">
<text
height="13"
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
length="1"
follows="left|top"
layout="topleft"
left="20"
top_pad="14"
width="67">
Filter by:
</text>
<text
height="13"
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
length="1"
follows="left|top"
layout="topleft"
left_pad="0"
width="62">
Name
</text>
<line_editor
border_style="line"
border_thickness="1"
follows="left|top"
height="20"
layout="topleft"
left_pad="0"
top_pad="-18"
max_length_bytes="10"
name="filter_by_name"
width="105" />
<text
height="13"
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
length="1"
follows="left|top"
layout="topleft"
left_pad="22"
top_pad="-15"
width="88">
Description
</text>
<line_editor
border_style="line"
border_thickness="1"
follows="left|top"
height="20"
layout="topleft"
left_pad="0"
top_pad="-17"
max_length_bytes="10"
name="filter_by_description"
width="145" />
<combo_box
height="20"
layout="topleft"
follows="left|top"
name="filter_by_linkset_use"
left_pad="32"
top_pad="-20"
width="199">
<combo_box.item
label="Filter by linkset use..."
name="filter_by_linkset_use_none"
value="0" />
<combo_box.item
label="Walkable"
name="filter_by_linkset_use_walkable"
value="1" />
<combo_box.item
label="Static obstacle"
name="filter_by_linkset_use_static_obstacle"
value="2" />
<combo_box.item
label="Dynamic obstacle"
name="filter_by_linkset_use_dynamic_obstacle"
value="3" />
<combo_box.item
label="Material volume"
name="filter_by_linkset_use_material_volume"
value="4" />
<combo_box.item
label="Exclusion volume"
name="filter_by_linkset_use_exclusion_volume"
value="5" />
<combo_box.item
label="Dynamic phantom"
name="filter_by_linkset_use_dynamic_phantom"
value="6" />
</combo_box>
<button
follows="right|top"
height="21"
label="Apply"
layout="topleft"
name="apply_filters"
top_pad="-21"
left_pad="31"
width="73"/>
<button
follows="right|top"
height="21"
label="Clear"
layout="topleft"
name="clear_filters"
top_pad="-21"
left_pad="8"
width="73"/>
<scroll_list
column_padding="0"
draw_heading="true"
follows="all"
height="135"
layout="topleft"
left="18"
top_pad="15"
multi_select="true"
name="pathfinding_linksets"
width="910">
<scroll_list.columns
label="Name (root prim)"
name="name"
dynamic_width="true" />
<scroll_list.columns
label="Description (root prim)"
name="description"
width="192" />
<scroll_list.columns
label="Land impact"
name="land_impact"
width="88" />
<scroll_list.columns
label="Dist from you"
name="dist_from_you"
width="97" />
<scroll_list.columns
label="Linkset use"
name="linkset_use"
width="210" />
<scroll_list.columns
label="A %"
name="a_percent"
width="41" />
<scroll_list.columns
label="B %"
name="b_percent"
width="41" />
<scroll_list.columns
label="C %"
name="c_percent"
width="41" />
<scroll_list.columns
label="D %"
name="d_percent"
width="41" />
</scroll_list>
<text
height="13"
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
length="1"
follows="left|bottom"
layout="topleft"
name="linksets_status"
top_pad="17"
width="549">
Linksets:
</text>
<button
follows="right|bottom"
height="21"
label="Refresh list"
layout="topleft"
name="refresh_linksets_list"
top_pad="-16"
left_pad="0"
width="115"/>
<button
follows="right|bottom"
height="21"
label="Select all"
layout="topleft"
name="select_all_linksets"
top_pad="-21"
left_pad="8"
width="115"/>
<button
follows="right|bottom"
height="21"
label="Select none"
layout="topleft"
name="select_none_linksets"
top_pad="-21"
left_pad="8"
width="115"/>
</panel>
<view_border
bevel_style="none"
follows="left|bottom|right"
height="0"
layout="topleft"
name="horiz_separator"
top="230"
left="20"
top_pad="0"
left="18"
width="912"/>
<text
height="13"
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
length="1"
follows="left|bottom"
<panel
border="false"
bevel_style="none"
follows="left|right|bottom"
layout="topleft"
top_pad="12"
width="910">
Select row(s) to edit attributes of linkset(s). If a linkset is deleted or returned to inventory, attributes assigned to it will be lost.
</text>
<radio_group
follows="left|bottom"
height="55"
value="1"
layout="topleft"
left_delta="0"
name="edit_path_state"
top_delta="21"
width="138">
<radio_item
label="Walkable"
layout="topleft"
left="0"
height="67"
width="950">
<text
height="13"
name="edit_pathing_state_walkable"
value="1"/>
<radio_item
label="Obstacle"
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
length="1"
left="18"
follows="left|bottom|right"
layout="topleft"
height="13"
name="edit_pathing_state_obstacle"
value="2"/>
<radio_item
label="Ignored"
top_pad="8"
width="912">
Actions on selected linksets (If a linkset is removed from the world, its attributes will be lost):
</text>
<button
follows="left|bottom"
height="21"
label="Take"
layout="topleft"
name="take_linksets"
top_pad="12"
left="18"
width="95"/>
<button
follows="left|bottom"
height="21"
label="Take copy"
layout="topleft"
name="take_copy_linksets"
top_pad="-21"
left_pad="6"
width="95"/>
<button
follows="left|bottom"
height="21"
label="Return"
layout="topleft"
name="return_linksets"
top_pad="-21"
left_pad="6"
width="95"/>
<button
follows="left|bottom"
height="21"
label="Delete"
layout="topleft"
name="delete_linksets"
top_pad="-21"
left_pad="6"
width="95"/>
<button
follows="left|bottom"
height="21"
label="Teleport me to it"
layout="topleft"
name="teleport_me_to_linkset"
top_pad="-21"
left_pad="6"
width="160"/>
</panel>
<view_border
bevel_style="none"
follows="left|bottom|right"
height="0"
layout="topleft"
name="horiz_separator"
top_pad="0"
left="18"
width="912"/>
<panel
border="false"
bevel_style="none"
follows="left|right|bottom"
layout="topleft"
left="0"
height="75"
width="950">
<text
height="13"
name="edit_pathing_state_ignored"
value="3"/>
</radio_group>
<text
height="13"
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
text_readonly_color="LabelDisabledColor"
name="walkability_coefficients_label"
length="1"
follows="left|bottom"
layout="topleft"
left="159"
top="271"
width="200">
Walkability coefficients
</text>
<text
height="13"
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
text_readonly_color="LabelDisabledColor"
name="edit_a_label"
length="1"
follows="left|bottom"
layout="topleft"
top_pad="12"
width="90">
A
</text>
<line_editor
border_style="line"
border_thickness="1"
follows="left|bottom"
height="20"
layout="topleft"
left_delta="14"
max_length_chars="3"
name="edit_a_value"
width="45" />
<text
height="13"
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
text_readonly_color="LabelDisabledColor"
name="edit_b_label"
length="1"
follows="left|bottom"
layout="topleft"
left="248"
top_pad="-13"
width="90">
B
</text>
<line_editor
border_style="line"
border_thickness="1"
follows="left|bottom"
height="20"
layout="topleft"
left_delta="14"
max_length_chars="3"
name="edit_b_value"
width="45" />
<text
height="13"
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
text_readonly_color="LabelDisabledColor"
name="edit_c_label"
length="1"
follows="left|bottom"
layout="topleft"
left="337"
top_pad="-13"
width="90">
C
</text>
<line_editor
border_style="line"
border_thickness="1"
follows="left|bottom"
height="20"
layout="topleft"
left_delta="14"
max_length_chars="3"
name="edit_c_value"
width="45" />
<text
height="13"
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
text_readonly_color="LabelDisabledColor"
name="edit_d_label"
length="1"
follows="left|bottom"
layout="topleft"
left="426"
top_pad="-13"
width="90">
D
</text>
<line_editor
border_style="line"
border_thickness="1"
follows="left|bottom"
height="20"
layout="topleft"
left_delta="14"
max_length_chars="3"
name="edit_d_value"
width="45" />
<check_box
follows="left|bottom"
height="19"
label="Phantom"
layout="topleft"
name="edit_phantom_value"
top="271"
left="559"
width="90" />
<button
follows="right|bottom"
height="21"
label="Apply changes"
layout="topleft"
name="apply_edit_values"
top="270"
left="735"
width="134"/>
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
length="1"
follows="left|bottom"
layout="topleft"
left="18"
top_pad="8"
width="912">
Edit attributes of selected linksets
</text>
<combo_box
height="20"
layout="topleft"
follows="left|top"
name="edit_linkset_use"
left="18"
top_pad="17"
width="199">
<combo_box.item
label="Choose linkset use..."
name="edit_linkset_use_none"
value="0" />
<combo_box.item
label="Walkable"
name="edit_linkset_use_walkable"
value="1" />
<combo_box.item
label="Static obstacle"
name="edit_linkset_use_static_obstacle"
value="2" />
<combo_box.item
label="Dynamic obstacle"
name="edit_linkset_use_dynamic_obstacle"
value="3" />
<combo_box.item
label="Material volume"
name="edit_linkset_use_material_volume"
value="4" />
<combo_box.item
label="Exclusion volume"
name="edit_linkset_use_exclusion_volume"
value="5" />
<combo_box.item
label="Dynamic phantom"
name="edit_linkset_use_dynamic_phantom"
value="6" />
</combo_box>
<text
height="13"
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
text_readonly_color="LabelDisabledColor"
name="walkability_coefficients_label"
length="1"
follows="left|bottom"
layout="topleft"
left_pad="36"
top_pad="-17"
width="110">
Walkability:
</text>
<text
height="13"
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
text_readonly_color="LabelDisabledColor"
name="edit_a_label"
length="1"
follows="left|bottom"
layout="topleft"
left_pad="0"
width="18">
A
</text>
<line_editor
border_style="line"
border_thickness="1"
follows="left|bottom"
height="21"
layout="topleft"
left_pad="0"
top_pad="-19"
max_length_chars="3"
name="edit_a_value"
width="45" />
<text
height="13"
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
text_readonly_color="LabelDisabledColor"
name="edit_b_label"
length="1"
follows="left|bottom"
layout="topleft"
left_pad="44"
top_pad="-15"
width="18">
B
</text>
<line_editor
border_style="line"
border_thickness="1"
follows="left|bottom"
height="21"
layout="topleft"
left_pad="0"
top_pad="-19"
max_length_chars="3"
name="edit_b_value"
width="45" />
<text
height="13"
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
text_readonly_color="LabelDisabledColor"
name="edit_c_label"
length="1"
follows="left|bottom"
layout="topleft"
left_pad="44"
top_pad="-15"
width="18">
C
</text>
<line_editor
border_style="line"
border_thickness="1"
follows="left|bottom"
height="21"
layout="topleft"
left_pad="0"
top_pad="-19"
max_length_chars="3"
name="edit_c_value"
width="45" />
<text
height="13"
word_wrap="false"
use_ellipses="false"
type="string"
text_color="LabelTextColor"
text_readonly_color="LabelDisabledColor"
name="edit_d_label"
length="1"
follows="left|bottom"
layout="topleft"
left_pad="44"
top_pad="-15"
width="18">
D
</text>
<line_editor
border_style="line"
border_thickness="1"
follows="left|bottom"
height="21"
layout="topleft"
left_pad="0"
top_pad="-19"
max_length_chars="3"
name="edit_d_value"
width="45" />
<button
follows="right|bottom"
height="21"
label="Apply changes"
layout="topleft"
name="apply_edit_values"
top_pad="-21"
left_pad="40"
width="140"/>
</panel>
</floater>