summaryrefslogtreecommitdiff
path: root/indra/newview/llappearancemgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llappearancemgr.cpp')
-rw-r--r--indra/newview/llappearancemgr.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 5845477554..8aa28e1b09 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -2084,15 +2084,23 @@ void LLAppearanceMgr::purgeBaseOutfitLink(const LLUUID& category, LLPointer<LLIn
// Keep the last N wearables of each type. For viewer 2.0, N is 1 for
// both body parts and clothing items.
void LLAppearanceMgr::filterWearableItems(
- LLInventoryModel::item_array_t& items, S32 max_per_type, S32 max_total)
+ LLInventoryModel::item_array_t& items, S32 max_per_type, S32 max_total, bool skip_bodyparts)
{
// Restrict by max total items first.
if ((max_total > 0) && (items.size() > max_total))
{
- LLInventoryModel::item_array_t items_to_keep;
- for (S32 i=0; i<max_total; i++)
+ LLInventoryModel::item_array_t items_to_keep; size_t non_body_kept = 0;
+ for (const auto& item : items)
{
- items_to_keep.push_back(items[i]);
+ if (skip_bodyparts && item.get() && item.get()->getType() == LLAssetType::AT_BODYPART)
+ {
+ items_to_keep.push_back(item);
+ }
+ else if (non_body_kept < max_total)
+ {
+ items_to_keep.push_back(item);
+ non_body_kept++;
+ }
}
items = items_to_keep;
}
@@ -2581,7 +2589,7 @@ void LLAppearanceMgr::updateAppearanceFromCOF(bool enforce_item_restrictions,
removeDuplicateItems(wear_items);
removeDuplicateItems(obj_items);
removeDuplicateItems(gest_items);
- filterWearableItems(wear_items, 0, LLAgentWearables::MAX_CLOTHING_LAYERS);
+ filterWearableItems(wear_items, 0, LLAgentWearables::MAX_CLOTHING_LAYERS, true);
dumpItemArray(wear_items,"asset_dump: wear_item");
dumpItemArray(obj_items,"asset_dump: obj_item");