summaryrefslogtreecommitdiff
path: root/indra/newview/llwearable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llwearable.cpp')
-rw-r--r--indra/newview/llwearable.cpp107
1 files changed, 70 insertions, 37 deletions
diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp
index 3185ee45bf..ced0b64896 100644
--- a/indra/newview/llwearable.cpp
+++ b/indra/newview/llwearable.cpp
@@ -38,6 +38,7 @@
#include "lllocaltextureobject.h"
#include "llviewertexturelist.h"
#include "llinventorymodel.h"
+#include "llinventoryobserver.h"
#include "llviewerregion.h"
#include "llvoavatar.h"
#include "llvoavatarself.h"
@@ -225,7 +226,13 @@ BOOL LLWearable::importFile( LLFILE* file )
return FALSE;
}
- if( mDefinitionVersion > LLWearable::sCurrentDefinitionVersion )
+
+ // Temoprary hack to allow wearables with definition version 24 to still load.
+ // This should only affect lindens and NDA'd testers who have saved wearables in 2.0
+ // the extra check for version == 24 can be removed before release, once internal testers
+ // have loaded these wearables again. See hack pt 2 at bottom of function to ensure that
+ // these wearables get re-saved with version definition 22.
+ if( mDefinitionVersion > LLWearable::sCurrentDefinitionVersion && mDefinitionVersion != 24 )
{
llwarns << "Wearable asset has newer version (" << mDefinitionVersion << ") than XML (" << LLWearable::sCurrentDefinitionVersion << ")" << llendl;
return FALSE;
@@ -414,6 +421,18 @@ BOOL LLWearable::importFile( LLFILE* file )
// copy all saved param values to working params
revertValues();
+ // Hack pt 2. If the wearable we just loaded has definition version 24,
+ // then force a re-save of this wearable after slamming the version number to 22.
+ // This number was incorrectly incremented for internal builds before release, and
+ // this fix will ensure that the affected wearables are re-saved with the right version number.
+ // the versions themselves are compatible. This code can be removed before release.
+ if( mDefinitionVersion == 24 )
+ {
+ mDefinitionVersion = 22;
+ U32 index = gAgentWearables.getWearableIndex(this);
+ gAgentWearables.saveWearable(mType,index,TRUE);
+ }
+
return TRUE;
}
@@ -602,7 +621,7 @@ void LLWearable::setTexturesToDefaults()
}
// Updates the user's avatar's appearance
-void LLWearable::writeToAvatar( BOOL set_by_user, BOOL update_customize_floater )
+void LLWearable::writeToAvatar()
{
LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
llassert( avatar );
@@ -622,24 +641,10 @@ void LLWearable::writeToAvatar( BOOL set_by_user, BOOL update_customize_floater
S32 param_id = param->getID();
F32 weight = getVisualParamWeight(param_id);
- // only animate with user-originated changes
- if (set_by_user)
- {
- param->setAnimationTarget(weight, set_by_user);
- }
- else
- {
- avatar->setVisualParamWeight( param_id, weight, set_by_user );
- }
+ avatar->setVisualParamWeight( param_id, weight, FALSE );
}
}
- // only interpolate with user-originated changes
- if (set_by_user)
- {
- avatar->startAppearanceAnimation(TRUE, TRUE);
- }
-
// Pull texture entries
for( S32 te = 0; te < TEX_NUM_INDICES; te++ )
{
@@ -657,24 +662,17 @@ void LLWearable::writeToAvatar( BOOL set_by_user, BOOL update_customize_floater
}
LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture( image_id, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE );
// MULTI-WEARABLE: replace hard-coded 0
- avatar->setLocalTextureTE(te, image, set_by_user, 0);
+ avatar->setLocalTextureTE(te, image, 0);
}
}
-
- if( gFloaterCustomize && update_customize_floater )
- {
- gFloaterCustomize->setWearable(mType, 0);
- gFloaterCustomize->setCurrentWearableType( mType );
- }
-
ESex new_sex = avatar->getSex();
if( old_sex != new_sex )
{
- avatar->updateSexDependentLayerSets( set_by_user );
+ avatar->updateSexDependentLayerSets( FALSE );
}
-// if( set_by_user )
+// if( upload_bake )
// {
// gAgent.sendAgentSetAppearance();
// }
@@ -683,7 +681,7 @@ void LLWearable::writeToAvatar( BOOL set_by_user, BOOL update_customize_floater
// Updates the user's avatar's appearance, replacing this wearables' parameters and textures with default values.
// static
-void LLWearable::removeFromAvatar( EWearableType type, BOOL set_by_user )
+void LLWearable::removeFromAvatar( EWearableType type, BOOL upload_bake )
{
LLVOAvatarSelf* avatar = gAgent.getAvatarObject();
llassert( avatar );
@@ -707,7 +705,7 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL set_by_user )
if( (((LLViewerVisualParam*)param)->getWearableType() == type) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) )
{
S32 param_id = param->getID();
- avatar->setVisualParamWeight( param_id, param->getDefaultWeight(), set_by_user );
+ avatar->setVisualParamWeight( param_id, param->getDefaultWeight(), upload_bake );
}
}
@@ -719,7 +717,7 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL set_by_user )
avatar->updateVisualParams();
avatar->wearableUpdated(type);
-// if( set_by_user )
+// if( upload_bake )
// {
// gAgent.sendAgentSetAppearance();
// }
@@ -852,6 +850,7 @@ void LLWearable::addVisualParam(LLVisualParam *param)
}
param->setIsDummy(FALSE);
mVisualParamIndexMap[param->getID()] = param;
+ mSavedVisualParamMap[param->getID()] = param->getDefaultWeight();
}
void LLWearable::setVisualParams()
@@ -868,12 +867,12 @@ void LLWearable::setVisualParams()
}
-void LLWearable::setVisualParamWeight(S32 param_index, F32 value, BOOL set_by_user)
+void LLWearable::setVisualParamWeight(S32 param_index, F32 value, BOOL upload_bake)
{
if( is_in_map(mVisualParamIndexMap, param_index ) )
{
LLVisualParam *wearable_param = mVisualParamIndexMap[param_index];
- wearable_param->setWeight(value, set_by_user);
+ wearable_param->setWeight(value, upload_bake);
}
else
{
@@ -914,14 +913,14 @@ void LLWearable::getVisualParams(visual_param_vec_t &list)
}
}
-void LLWearable::animateParams(F32 delta, BOOL set_by_user)
+void LLWearable::animateParams(F32 delta, BOOL upload_bake)
{
for(visual_param_index_map_t::iterator iter = mVisualParamIndexMap.begin();
iter != mVisualParamIndexMap.end();
++iter)
{
LLVisualParam *param = (LLVisualParam*) iter->second;
- param->animate(delta, set_by_user);
+ param->animate(delta, upload_bake);
}
}
@@ -939,14 +938,14 @@ LLColor4 LLWearable::getClothesColor(S32 te) const
return color;
}
-void LLWearable::setClothesColor( S32 te, const LLColor4& new_color, BOOL set_by_user )
+void LLWearable::setClothesColor( S32 te, const LLColor4& new_color, BOOL upload_bake )
{
U32 param_name[3];
if( LLVOAvatar::teToColorParams( (LLVOAvatarDefines::ETextureIndex)te, param_name ) )
{
for( U8 index = 0; index < 3; index++ )
{
- setVisualParamWeight(param_name[index], new_color.mV[index], set_by_user);
+ setVisualParamWeight(param_name[index], new_color.mV[index], upload_bake);
}
}
}
@@ -954,11 +953,39 @@ void LLWearable::setClothesColor( S32 te, const LLColor4& new_color, BOOL set_by
void LLWearable::revertValues()
{
//update saved settings so wearable is no longer dirty
+ // non-driver params first
for (param_map_t::const_iterator iter = mSavedVisualParamMap.begin(); iter != mSavedVisualParamMap.end(); iter++)
{
S32 id = iter->first;
F32 value = iter->second;
- setVisualParamWeight(id, value, TRUE);
+ LLVisualParam *param = getVisualParam(id);
+ if(param && !dynamic_cast<LLDriverParam*>(param) )
+ {
+ setVisualParamWeight(id, value, TRUE);
+ }
+ }
+
+ //then driver params
+ for (param_map_t::const_iterator iter = mSavedVisualParamMap.begin(); iter != mSavedVisualParamMap.end(); iter++)
+ {
+ S32 id = iter->first;
+ F32 value = iter->second;
+ LLVisualParam *param = getVisualParam(id);
+ if(param && dynamic_cast<LLDriverParam*>(param) )
+ {
+ setVisualParamWeight(id, value, TRUE);
+ }
+ }
+
+ // make sure that saved values are sane
+ for (param_map_t::const_iterator iter = mSavedVisualParamMap.begin(); iter != mSavedVisualParamMap.end(); iter++)
+ {
+ S32 id = iter->first;
+ LLVisualParam *param = getVisualParam(id);
+ if( param )
+ {
+ mSavedVisualParamMap[id] = param->getWeight();
+ }
}
syncImages(mSavedTEMap, mTEMap);
@@ -1072,6 +1099,12 @@ void LLWearable::destroyTextures()
mSavedTEMap.clear();
}
+
+void LLWearable::setLabelUpdated() const
+{
+ gInventory.addChangedMask(LLInventoryObserver::LABEL, getItemID());
+}
+
struct LLWearableSaveData
{
EWearableType mType;