From 278b617290dfe46285b20c879a87689679f89838 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Liru=20F=C3=A6rs?= Date: Mon, 14 Oct 2019 21:53:01 -0400 Subject: [PATCH] [BOM] Add Universal wearables functionality --- indra/newview/character/aux_base.tga | Bin 0 -> 10284 bytes indra/newview/character/avatar_lad.xml | 1015 ++++++++++++++++- indra/newview/character/checkerboard.tga | Bin 0 -> 16428 bytes indra/newview/character/invisible_head.tga | Bin 0 -> 140793 bytes indra/newview/llagentwearables.cpp | 43 +- indra/newview/llpaneleditwearable.cpp | 33 +- indra/newview/llviewerinventory.cpp | 1 + indra/newview/llviewerregion.cpp | 8 +- indra/newview/llviewerregion.h | 7 +- indra/newview/llviewerwearable.cpp | 61 +- .../default/xui/en-us/floater_customize.xml | 178 +++ .../default/xui/en-us/floater_inventory.xml | 3 + .../default/xui/en-us/menu_inventory.xml | 3 + .../skins/default/xui/en-us/strings.xml | 60 +- 14 files changed, 1289 insertions(+), 123 deletions(-) create mode 100644 indra/newview/character/aux_base.tga create mode 100644 indra/newview/character/checkerboard.tga create mode 100644 indra/newview/character/invisible_head.tga diff --git a/indra/newview/character/aux_base.tga b/indra/newview/character/aux_base.tga new file mode 100644 index 0000000000000000000000000000000000000000..dbcaaaf2b192d7dcc184e46e83c8815a26cd80ea GIT binary patch literal 10284 zcmeI&%L#x$38Aqh!HLK2dYgd`*(2}wvo5|WUFBqSjTe71 literal 0 HcmV?d00001 diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml index dea786773..47422d038 100644 --- a/indra/newview/character/avatar_lad.xml +++ b/indra/newview/character/avatar_lad.xml @@ -6885,7 +6885,7 @@ + pos="-0.01 0.01 -0.02"/> @@ -8949,6 +8949,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10024,6 +10085,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10198,6 +10319,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12410,9 +12708,451 @@ domain="0" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -15926,8 +16666,278 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/character/checkerboard.tga b/indra/newview/character/checkerboard.tga new file mode 100644 index 0000000000000000000000000000000000000000..1950d7403dfdad67395b79e2ef4cecd57304794e GIT binary patch literal 16428 zcmeI)!3l#v5Czb|lVB~e3j+(1K-6G&TdJOtCjJvFVE%uz>&dFA{?AauSpDi=88DD) zK=Y~1o16X1{qOsSfnWp9K=&X6xdw74r(X9ANWc~_kZT}!a_V)@fCOv-1GxrrC#PQb z3`oEhFpz5?cXH}=&wvDM0Ry=Pawn%=_Y6qD7BG-&Aa`==bI%Um~@hu07Q literal 0 HcmV?d00001 diff --git a/indra/newview/character/invisible_head.tga b/indra/newview/character/invisible_head.tga new file mode 100644 index 0000000000000000000000000000000000000000..2673a237d51d5398417930c64a7cfb55a6e0de20 GIT binary patch literal 140793 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 literal 0 HcmV?d00001 diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index de298c752..30a86d723 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -80,6 +80,24 @@ using namespace LLAvatarAppearanceDefines; /////////////////////////////////////////////////////////////////////////////// +void set_default_permissions(LLViewerInventoryItem* item) +{ + llassert(item); + LLPermissions perm = item->getPermissions(); + if (perm.getMaskNextOwner() != LLFloaterPerms::getNextOwnerPerms("Wearables") + || perm.getMaskEveryone() != LLFloaterPerms::getEveryonePerms("Wearables") + || perm.getMaskGroup() != LLFloaterPerms::getGroupPerms("Wearables")) + { + perm.setMaskNext(LLFloaterPerms::getNextOwnerPerms("Wearables")); + perm.setMaskEveryone(LLFloaterPerms::getEveryonePerms("Wearables")); + perm.setMaskGroup(LLFloaterPerms::getGroupPerms("Wearables")); + + item->setPermissions(perm); + + item->updateServer(FALSE); + } +} + // Callback to wear and start editing an item that has just been created. void wear_and_edit_cb(const LLUUID& inv_item) { @@ -88,13 +106,9 @@ void wear_and_edit_cb(const LLUUID& inv_item) LLViewerInventoryItem* item = gInventory.getItem(inv_item); if (!item) return; - LLPermissions perm = item->getPermissions(); - perm.setMaskNext(LLFloaterPerms::getNextOwnerPerms("Wearables")); - perm.setMaskEveryone(LLFloaterPerms::getEveryonePerms("Wearables")); - perm.setMaskGroup(LLFloaterPerms::getGroupPerms("Wearables")); - item->setPermissions(perm); + set_default_permissions(item); - item->updateServer(FALSE); + // item was just created, update even if permissions did not changed gInventory.updateItem(item); gInventory.notifyObservers(); @@ -112,13 +126,8 @@ void wear_cb(const LLUUID& inv_item) LLViewerInventoryItem* item = gInventory.getItem(inv_item); if (item) { - LLPermissions perm = item->getPermissions(); - perm.setMaskNext(LLFloaterPerms::getNextOwnerPerms("Wearables")); - perm.setMaskEveryone(LLFloaterPerms::getEveryonePerms("Wearables")); - perm.setMaskGroup(LLFloaterPerms::getGroupPerms("Wearables")); - item->setPermissions(perm); + set_default_permissions(item); - item->updateServer(FALSE); gInventory.updateItem(item); gInventory.notifyObservers(); } @@ -184,7 +193,7 @@ void LLAgentWearables::dump() struct LLAgentDumper { LLAgentDumper(std::string name): - mName(name) + mName(std::move(name)) { LL_INFOS() << LL_ENDL; LL_INFOS() << "LLAgentDumper " << mName << LL_ENDL; @@ -259,7 +268,7 @@ LLAgentWearables::AddWearableToAgentInventoryCallback::AddWearableToAgentInvento mIndex(index), mWearable(wearable), mTodo(todo), - mCB(cb), + mCB(std::move(cb)), mDescription(description) { LL_INFOS() << "constructor" << LL_ENDL; @@ -1647,6 +1656,12 @@ void LLAgentWearables::createWearable(LLWearableType::EType type, bool wear, con { if (type == LLWearableType::WT_INVALID || type == LLWearableType::WT_NONE) return; + if (type == LLWearableType::WT_UNIVERSAL && !gAgent.getRegion()->bakesOnMeshEnabled()) + { + LL_WARNS("Inventory") << "Can't create WT_UNIVERSAL type " << LL_ENDL; + return; + } + LLViewerWearable* wearable = LLWearableList::instance().createNewWearable(type, gAgentAvatarp); LLAssetType::EType asset_type = wearable->getAssetType(); LLInventoryType::EType inv_type = LLInventoryType::IT_WEARABLE; diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp index d5f2c7a29..cc5de6817 100644 --- a/indra/newview/llpaneleditwearable.cpp +++ b/indra/newview/llpaneleditwearable.cpp @@ -103,6 +103,7 @@ enum ESubpart SUBPART_SKIRT, SUBPART_ALPHA, SUBPART_TATTOO, + SUBPART_UNIVERSAL, SUBPART_PHYSICS_BREASTS_UPDOWN, SUBPART_PHYSICS_BREASTS_INOUT, SUBPART_PHYSICS_BREASTS_LEFTRIGHT, @@ -245,6 +246,7 @@ LLEditWearableDictionary::Wearables::Wearables() addEntry(LLWearableType::WT_SKIRT, new WearableEntry(LLWearableType::WT_SKIRT,"edit_skirt_title",1,1,1, TEX_SKIRT, TEX_SKIRT, SUBPART_SKIRT)); addEntry(LLWearableType::WT_ALPHA, new WearableEntry(LLWearableType::WT_ALPHA,"edit_alpha_title",0,5,1, TEX_LOWER_ALPHA, TEX_UPPER_ALPHA, TEX_HEAD_ALPHA, TEX_EYES_ALPHA, TEX_HAIR_ALPHA, SUBPART_ALPHA)); addEntry(LLWearableType::WT_TATTOO, new WearableEntry(LLWearableType::WT_TATTOO,"edit_tattoo_title",1,3,1, TEX_HEAD_TATTOO, TEX_LOWER_TATTOO, TEX_UPPER_TATTOO, TEX_HEAD_TATTOO, SUBPART_TATTOO)); + addEntry(LLWearableType::WT_UNIVERSAL, new WearableEntry(LLWearableType::WT_UNIVERSAL, "edit_universal_title", 1, 11, 1, TEX_HEAD_UNIVERSAL_TATTOO, TEX_HEAD_UNIVERSAL_TATTOO, TEX_UPPER_UNIVERSAL_TATTOO, TEX_LOWER_UNIVERSAL_TATTOO, TEX_SKIRT_TATTOO, TEX_HAIR_TATTOO, TEX_EYES_TATTOO, TEX_LEFT_ARM_TATTOO, TEX_LEFT_LEG_TATTOO, TEX_AUX1_TATTOO, TEX_AUX2_TATTOO, TEX_AUX3_TATTOO, SUBPART_UNIVERSAL)); addEntry(LLWearableType::WT_PHYSICS, new WearableEntry(LLWearableType::WT_PHYSICS,"edit_physics_title",0,0,7, SUBPART_PHYSICS_BREASTS_UPDOWN, SUBPART_PHYSICS_BREASTS_INOUT, SUBPART_PHYSICS_BREASTS_LEFTRIGHT, SUBPART_PHYSICS_BELLY_UPDOWN, SUBPART_PHYSICS_BUTT_UPDOWN, SUBPART_PHYSICS_BUTT_LEFTRIGHT, SUBPART_PHYSICS_ADVANCED)); } @@ -315,6 +317,8 @@ LLEditWearableDictionary::Subparts::Subparts() addEntry(SUBPART_UNDERPANTS, new SubpartEntry(SUBPART_UNDERPANTS, "mPelvis", "underpants",LLStringUtil::null, LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f), SEX_BOTH)); addEntry(SUBPART_ALPHA, new SubpartEntry(SUBPART_ALPHA, "mPelvis", "alpha",LLStringUtil::null, LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f), SEX_BOTH)); addEntry(SUBPART_TATTOO, new SubpartEntry(SUBPART_TATTOO, "mPelvis", "tattoo", LLStringUtil::null, LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f),SEX_BOTH)); + addEntry(SUBPART_UNIVERSAL, new SubpartEntry(SUBPART_UNIVERSAL, "mPelvis", "universal", LLStringUtil::null, LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f), SEX_BOTH)); + addEntry(SUBPART_PHYSICS_BREASTS_UPDOWN, new SubpartEntry(SUBPART_PHYSICS_BREASTS_UPDOWN, "mTorso", "physics_breasts_updown", "Breast Bounce", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-0.8f, 0.15f, 0.38),SEX_FEMALE)); addEntry(SUBPART_PHYSICS_BREASTS_INOUT, new SubpartEntry(SUBPART_PHYSICS_BREASTS_INOUT, "mTorso", "physics_breasts_inout", "Breast Cleavage", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-0.8f, 0.15f, 0.38f),SEX_FEMALE)); addEntry(SUBPART_PHYSICS_BREASTS_LEFTRIGHT, new SubpartEntry(SUBPART_PHYSICS_BREASTS_LEFTRIGHT, "mTorso", "physics_breasts_leftright", "Breast Sway", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-0.8f, 0.15f, 0.38f),SEX_FEMALE)); @@ -354,6 +358,7 @@ LLEditWearableDictionary::ColorSwatchCtrls::ColorSwatchCtrls() addEntry ( TEX_UPPER_UNDERSHIRT, new PickerControlEntry (TEX_UPPER_UNDERSHIRT, "Color/Tint" )); addEntry ( TEX_LOWER_UNDERPANTS, new PickerControlEntry (TEX_LOWER_UNDERPANTS, "Color/Tint" )); addEntry ( TEX_HEAD_TATTOO, new PickerControlEntry(TEX_HEAD_TATTOO, "Color/Tint" )); + addEntry (TEX_HEAD_UNIVERSAL_TATTOO, new PickerControlEntry(TEX_HEAD_UNIVERSAL_TATTOO, "Color/Tint")); } LLEditWearableDictionary::TextureCtrls::TextureCtrls() @@ -381,6 +386,17 @@ LLEditWearableDictionary::TextureCtrls::TextureCtrls() addEntry ( TEX_LOWER_TATTOO, new PickerControlEntry (TEX_LOWER_TATTOO, "Lower Tattoo", LLUUID::null, TRUE )); addEntry ( TEX_UPPER_TATTOO, new PickerControlEntry (TEX_UPPER_TATTOO, "Upper Tattoo", LLUUID::null, TRUE )); addEntry ( TEX_HEAD_TATTOO, new PickerControlEntry (TEX_HEAD_TATTOO, "Head Tattoo", LLUUID::null, TRUE )); + addEntry ( TEX_LOWER_UNIVERSAL_TATTOO, new PickerControlEntry( TEX_LOWER_UNIVERSAL_TATTOO, "Lower Universal Tattoo", LLUUID::null, TRUE)); + addEntry ( TEX_UPPER_UNIVERSAL_TATTOO, new PickerControlEntry( TEX_UPPER_UNIVERSAL_TATTOO, "Upper Universal Tattoo", LLUUID::null, TRUE)); + addEntry ( TEX_HEAD_UNIVERSAL_TATTOO, new PickerControlEntry( TEX_HEAD_UNIVERSAL_TATTOO, "Head Universal Tattoo", LLUUID::null, TRUE)); + addEntry ( TEX_SKIRT_TATTOO, new PickerControlEntry(TEX_SKIRT_TATTOO, "Skirt Tattoo", LLUUID::null, TRUE)); + addEntry ( TEX_HAIR_TATTOO, new PickerControlEntry(TEX_HAIR_TATTOO, "Hair Tattoo", LLUUID::null, TRUE)); + addEntry ( TEX_EYES_TATTOO, new PickerControlEntry(TEX_EYES_TATTOO, "Eyes Tattoo", LLUUID::null, TRUE)); + addEntry (TEX_LEFT_ARM_TATTOO, new PickerControlEntry(TEX_LEFT_ARM_TATTOO, "Left Arm Tattoo", LLUUID::null, TRUE)); + addEntry (TEX_LEFT_LEG_TATTOO, new PickerControlEntry(TEX_LEFT_LEG_TATTOO, "Left Leg Tattoo", LLUUID::null, TRUE)); + addEntry (TEX_AUX1_TATTOO, new PickerControlEntry(TEX_AUX1_TATTOO, "Aux1 Tattoo", LLUUID::null, TRUE)); + addEntry (TEX_AUX2_TATTOO, new PickerControlEntry(TEX_AUX2_TATTOO, "Aux2 Tattoo", LLUUID::null, TRUE)); + addEntry (TEX_AUX3_TATTOO, new PickerControlEntry(TEX_AUX3_TATTOO, "Aux3 Tattoo", LLUUID::null, TRUE)); } LLEditWearableDictionary::PickerControlEntry::PickerControlEntry(ETextureIndex tex_index, @@ -407,9 +423,9 @@ get_pickers_indexes(const LLEditWearableDictionary::WearableEntry *wearable_entr // Specializations of this template function return picker control entry for particular control type. template const LLEditWearableDictionary::PickerControlEntry* -get_picker_entry (const ETextureIndex index) { return NULL; } +get_picker_entry (const ETextureIndex index) { return nullptr; } -typedef boost::function function_t; +typedef std::function function_t; typedef struct PickerControlEntryNamePredicate { @@ -473,16 +489,13 @@ find_picker_ctrl_entry_if(LLWearableType::EType type, const Predicate pred) if (!wearable_entry) { LL_WARNS() << "could not get wearable dictionary entry for wearable of type: " << type << LL_ENDL; - return NULL; + return nullptr; } const texture_vec_t& indexes = get_pickers_indexes(wearable_entry); - for (texture_vec_t::const_iterator - iter = indexes.begin(), - iter_end = indexes.end(); - iter != iter_end; ++iter) + for (auto te : indexes) { - const ETextureIndex te = *iter; - const LLEditWearableDictionary::PickerControlEntry* entry = get_picker_entry(te); + const LLEditWearableDictionary::PickerControlEntry* entry + = get_picker_entry(te); if (!entry) { LL_WARNS() << "could not get picker dictionary entry (" << te << ") for wearable of type: " << type << LL_ENDL; @@ -493,7 +506,7 @@ find_picker_ctrl_entry_if(LLWearableType::EType type, const Predicate pred) return entry; } } - return NULL; + return nullptr; } template diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index e9b544df4..f5e9c666c 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -115,6 +115,7 @@ public: mInventoryItemsDict["New Skirt"] = LLTrans::getString("New Skirt"); mInventoryItemsDict["New Alpha"] = LLTrans::getString("New Alpha"); mInventoryItemsDict["New Tattoo"] = LLTrans::getString("New Tattoo"); + mInventoryItemsDict["New Universal"] = LLTrans::getString("New Universal"); mInventoryItemsDict["New Physics"] = LLTrans::getString("New Physics"); mInventoryItemsDict["Invalid Wearable"] = LLTrans::getString("Invalid Wearable"); diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 53047ceee..cda753441 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1543,7 +1543,7 @@ bool LLViewerRegion::simulatorFeaturesReceived() const return mSimulatorFeaturesReceived; } -void LLViewerRegion::getSimulatorFeatures(LLSD& sim_features) +void LLViewerRegion::getSimulatorFeatures(LLSD& sim_features) const { sim_features = mSimulatorFeatures; } @@ -2367,6 +2367,12 @@ bool LLViewerRegion::meshUploadEnabled() const } } +bool LLViewerRegion::bakesOnMeshEnabled() const +{ + return (mSimulatorFeatures.has("BakesOnMeshEnabled") && + mSimulatorFeatures["BakesOnMeshEnabled"].asBoolean()); +} + bool LLViewerRegion::meshRezEnabled() const { if (!capabilitiesReceived()) diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index d02ab5a53..fc23d6cd0 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -327,13 +327,15 @@ public: bool meshRezEnabled() const; bool meshUploadEnabled() const; + bool bakesOnMeshEnabled() const; + // has region received its simulator features list? Requires an additional query after caps received. void requestSimulatorFeatures(); void setSimulatorFeaturesReceived(bool); bool simulatorFeaturesReceived() const; boost::signals2::connection setSimulatorFeaturesReceivedCallback(const caps_received_signal_t::slot_type& cb); - void getSimulatorFeatures(LLSD& info); + void getSimulatorFeatures(LLSD& info) const; void setSimulatorFeatures(const LLSD& info); @@ -372,7 +374,8 @@ public: friend std::ostream& operator<<(std::ostream &s, const LLViewerRegion ®ion); /// implements LLCapabilityProvider - virtual std::string getDescription() const; + virtual std::string getDescription() const override; + std::string getViewerAssetUrl() const { return mViewerAssetUrl; } LLSpatialPartition* getSpatialPartition(U32 type); diff --git a/indra/newview/llviewerwearable.cpp b/indra/newview/llviewerwearable.cpp index 16cff6ba1..1297ca9de 100644 --- a/indra/newview/llviewerwearable.cpp +++ b/indra/newview/llviewerwearable.cpp @@ -130,7 +130,7 @@ LLWearable::EImportResult LLViewerWearable::importStream( std::istream& input_st LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture( textureid ); if(gSavedSettings.getBOOL("DebugAvatarLocalTexLoadedTime")) { - image->setLoadedCallback(LLVOAvatarSelf::debugOnTimingLocalTexLoaded,0,TRUE,FALSE, new LLVOAvatarSelf::LLAvatarTexData(textureid, (LLAvatarAppearanceDefines::ETextureIndex)te), NULL); + image->setLoadedCallback(LLVOAvatarSelf::debugOnTimingLocalTexLoaded,0,TRUE,FALSE, new LLVOAvatarSelf::LLAvatarTexData(textureid, (LLAvatarAppearanceDefines::ETextureIndex)te), nullptr); } } @@ -235,7 +235,6 @@ BOOL LLViewerWearable::isDirty() const U8 a = F32_to_U8( saved_weight, param->getMinWeight(), param->getMaxWeight() ); U8 b = F32_to_U8( current_weight, param->getMinWeight(), param->getMaxWeight() ); - if( a != b ) { //LL_WARNS() << "param ID " << param->getID() << " was changed." << LL_ENDL; @@ -317,8 +316,8 @@ void LLViewerWearable::setTexturesToDefaults() const LLUUID LLViewerWearable::getDefaultTextureImageID(ETextureIndex index) const { const LLAvatarAppearanceDictionary::TextureEntry *texture_dict = LLAvatarAppearanceDictionary::getInstance()->getTexture(index); - const std::string &default_image_name = texture_dict->mDefaultImageName; - if (default_image_name == "") + const std::string &default_image_name = texture_dict ? texture_dict->mDefaultImageName : ""; + if (default_image_name.empty()) { return IMG_DEFAULT_AVATAR; } @@ -336,15 +335,9 @@ void LLViewerWearable::writeToAvatar(LLAvatarAppearance *avatarp) if (!avatarp || !avatarp->isSelf() || !avatarp->isValid()) return; LLVOAvatarSelf* viewer_avatar = static_cast(avatarp); -#if 0 - // FIXME DRANO - kludgy way to avoid overwriting avatar state from wearables. - // Ideally would avoid calling this func in the first place. - if (viewer_avatar->isUsingServerBakes() && - !viewer_avatar->isUsingLocalAppearance()) - { - return; - } -#endif + if (!avatarp || !viewer_avatar) return; + + if (!viewer_avatar->isValid()) return; ESex old_sex = avatarp->getSex(); @@ -456,7 +449,7 @@ void LLViewerWearable::copyDataFrom(const LLViewerWearable* src) { te_map_t::const_iterator iter = src->mTEMap.find(te); LLUUID image_id; - LLViewerFetchedTexture *image = NULL; + LLViewerFetchedTexture *image = nullptr; if(iter != src->mTEMap.end()) { image = dynamic_cast (src->getLocalTextureObject(te)->getImage()); @@ -489,13 +482,6 @@ void LLViewerWearable::setItemID(const LLUUID& item_id) void LLViewerWearable::revertValues() { -#if 0 - // DRANO avoid overwrite when not in local appearance - if (isAgentAvatarValid() && gAgentAvatarp->isUsingServerBakes() && !gAgentAvatarp->isUsingLocalAppearance()) - { - return; - } -#endif LLWearable::revertValues(); @@ -611,28 +597,29 @@ void LLViewerWearable::saveNewAsset() const // save it out to database if( gAssetStorage ) { - /* - std::string url = gAgent.getRegion()->getCapability("NewAgentInventory"); +#if 0 + const std::string url = gAgent.getRegion()->getCapability("NewFileAgentInventory"); if (!url.empty()) { LL_INFOS() << "Update Agent Inventory via capability" << LL_ENDL; LLSD body; - body["folder_id"] = gInventory.findCategoryUUIDForType(LLFolderType::assetToFolderType(getAssetType())); + body["folder_id"] = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(getAssetType())); body["asset_type"] = LLAssetType::lookup(getAssetType()); body["inventory_type"] = LLInventoryType::lookup(LLInventoryType::IT_WEARABLE); body["name"] = getName(); body["description"] = getDescription(); - LLHTTPClient::post(url, body, new LLNewAgentInventoryResponder(body, filename)); + LLHTTPClient::post(url, body, new LLNewAgentInventoryResponder(body, filename, + getAssetType())); } else +#endif // 0 { - } - */ - LLWearableSaveData* data = new LLWearableSaveData; - data->mType = mType; - gAssetStorage->storeAssetData(filename, mTransactionID, getAssetType(), + LLWearableSaveData* data = new LLWearableSaveData; + data->mType = mType; + gAssetStorage->storeAssetData(filename, mTransactionID, getAssetType(), &LLViewerWearable::onSaveNewAssetComplete, (void*)data); + } } } @@ -673,21 +660,19 @@ std::ostream& operator<<(std::ostream &s, const LLViewerWearable &w) //w.mSaleInfo s << " Params:" << "\n"; - for (LLViewerWearable::visual_param_index_map_t::const_iterator iter = w.mVisualParamIndexMap.begin(); - iter != w.mVisualParamIndexMap.end(); ++iter) + for (const auto& iter : w.mVisualParamIndexMap) { - S32 param_id = iter->first; - LLVisualParam *wearable_param = iter->second; + S32 param_id = iter.first; + LLVisualParam *wearable_param = iter.second; F32 param_weight = wearable_param->getWeight(); s << " " << param_id << " " << param_weight << "\n"; } s << " Textures:" << "\n"; - for (LLViewerWearable::te_map_t::const_iterator iter = w.mTEMap.begin(); - iter != w.mTEMap.end(); ++iter) + for (const auto& iter : w.mTEMap) { - S32 te = iter->first; - const LLUUID& image_id = iter->second->getID(); + S32 te = iter.first; + const LLUUID& image_id = iter.second->getID(); s << " " << te << " " << image_id << "\n"; } return s; diff --git a/indra/newview/skins/default/xui/en-us/floater_customize.xml b/indra/newview/skins/default/xui/en-us/floater_customize.xml index 76961e8f8..7d5e7d652 100644 --- a/indra/newview/skins/default/xui/en-us/floater_customize.xml +++ b/indra/newview/skins/default/xui/en-us/floater_customize.xml @@ -1348,6 +1348,184 @@ one from scratch and wear it.