summaryrefslogtreecommitdiff
path: root/indra/newview/lldriverparam.cpp
diff options
context:
space:
mode:
authorNyx (Neal Orman) <nyx@lindenlab.com>2010-02-04 14:53:18 -0500
committerNyx (Neal Orman) <nyx@lindenlab.com>2010-02-04 14:53:18 -0500
commitb4d61b6e63dd04f8b67edcf32ea513295843157b (patch)
tree172b4bf696d6cf1bb3d395a7b7545388461ef0e8 /indra/newview/lldriverparam.cpp
parent1397781c10b42cfe45e6a7878d6975fc5ac1ac02 (diff)
EXT-4003 Appearance problemw earing City Chic Female - probably param related
cross-wearable params are fun! Values were not being updated properly for parameters that cross multiple wearables. Created a few functions to ensure that these values get updated and made them called from LLAgentWearables::wearableUpdated(). Also prevented cross-wearable params from writing back to the avatar, as they are being driven by another wearable. Code reviewed by Bigpapi
Diffstat (limited to 'indra/newview/lldriverparam.cpp')
-rw-r--r--indra/newview/lldriverparam.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/indra/newview/lldriverparam.cpp b/indra/newview/lldriverparam.cpp
index 3961afe9af..8ebfa471f3 100644
--- a/indra/newview/lldriverparam.cpp
+++ b/indra/newview/lldriverparam.cpp
@@ -39,6 +39,7 @@
#include "llvoavatarself.h"
#include "llagent.h"
#include "llwearable.h"
+#include "llagentwearables.h"
//-----------------------------------------------------------------------------
// LLDriverParamInfo
@@ -528,6 +529,38 @@ void LLDriverParam::resetDrivenParams()
mDriven.reserve(getInfo()->mDrivenInfoList.size());
}
+void LLDriverParam::updateCrossDrivenParams(EWearableType driven_type)
+{
+ bool needs_update = (getWearableType()==driven_type);
+
+ // if the driver has a driven entry for the passed-in wearable type, we need to refresh the value
+ for( entry_list_t::iterator iter = mDriven.begin(); iter != mDriven.end(); iter++ )
+ {
+ LLDrivenEntry* driven = &(*iter);
+ if (driven && driven->mParam && driven->mParam->getCrossWearable() && driven->mParam->getWearableType() == driven_type)
+ {
+ needs_update = true;
+ }
+ }
+
+
+ if (needs_update)
+ {
+ EWearableType driver_type = (EWearableType)getWearableType();
+
+ // If we've gotten here, we've added a new wearable of type "type"
+ // Thus this wearable needs to get updates from the driver wearable.
+ // The call to setVisualParamWeight seems redundant, but is necessary
+ // as the number of driven wearables has changed since the last update. -Nyx
+ LLWearable *wearable = gAgentWearables.getTopWearable(driver_type);
+ if (wearable)
+ {
+ wearable->setVisualParamWeight(mID, wearable->getVisualParamWeight(mID), false);
+ }
+ }
+}
+
+
//-----------------------------------------------------------------------------
// getDrivenWeight()
//-----------------------------------------------------------------------------