SL-17990 Give user a popup warning when they attach a rigged mesh object to an HUD

meow-7.2.2
Mnikolenko Productengine 2022-08-19 20:19:23 +03:00
parent 6717f4a609
commit 43a9b3e4e4
5 changed files with 35 additions and 5 deletions

View File

@ -316,7 +316,8 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe
mLastUpdateType(OUT_UNKNOWN),
mLastUpdateCached(FALSE),
mCachedMuteListUpdateTime(0),
mCachedOwnerInMuteList(false)
mCachedOwnerInMuteList(false),
mRiggedAttachedWarned(false)
{
if (!is_global)
{

View File

@ -702,6 +702,8 @@ public:
// Replace textures with web pages on this object while drawing
BOOL mRenderMedia;
bool mRiggedAttachedWarned;
// In bits
S32 mBestUpdatePrecision;

View File

@ -10665,7 +10665,7 @@ void LLVOAvatar::updateVisualComplexity()
// with an avatar. This will be either an attached object or an animated
// object.
void LLVOAvatar::accountRenderComplexityForObject(
const LLViewerObject *attached_object,
LLViewerObject *attached_object,
const F32 max_attachment_complexity,
LLVOVolume::texture_cost_t& textures,
U32& cost,
@ -10737,7 +10737,7 @@ void LLVOAvatar::accountRenderComplexityForObject(
&& attached_object->mDrawable)
{
textures.clear();
BOOL is_rigged_mesh = attached_object->isRiggedMesh();
mAttachmentSurfaceArea += attached_object->recursiveGetScaledSurfaceArea();
const LLVOVolume* volume = attached_object->mDrawable->getVOVolume();
@ -10758,6 +10758,7 @@ void LLVOAvatar::accountRenderComplexityForObject(
iter != child_list.end(); ++iter)
{
LLViewerObject* childp = *iter;
is_rigged_mesh |= childp->isRiggedMesh();
const LLVOVolume* chld_volume = dynamic_cast<LLVOVolume*>(childp);
if (chld_volume)
{
@ -10766,6 +10767,16 @@ void LLVOAvatar::accountRenderComplexityForObject(
hud_object_complexity.objectsCount++;
}
}
if (is_rigged_mesh && !attached_object->mRiggedAttachedWarned)
{
LLSD args;
LLViewerInventoryItem* itemp = gInventory.getItem(attached_object->getAttachmentItemID());
args["NAME"] = itemp ? itemp->getName() : LLTrans::getString("Unknown");
args["POINT"] = LLTrans::getString(getTargetAttachmentPoint(attached_object)->getName());
LLNotificationsUtil::add("RiggedMeshAttachedToHUD", args);
attached_object->mRiggedAttachedWarned = true;
}
hud_object_complexity.texturesCount += textures.size();
@ -10870,7 +10881,7 @@ void LLVOAvatar::calculateUpdateRenderComplexity()
attachment_iter != attachment->mAttachedObjects.end();
++attachment_iter)
{
const LLViewerObject* attached_object = attachment_iter->get();
LLViewerObject* attached_object = attachment_iter->get();
accountRenderComplexityForObject(attached_object, max_attachment_complexity,
textures, cost, hud_complexity_list);
}

View File

@ -293,7 +293,7 @@ public:
void addNameTagLine(const std::string& line, const LLColor4& color, S32 style, const LLFontGL* font, const bool use_ellipses = false);
void idleUpdateRenderComplexity();
void idleUpdateDebugInfo();
void accountRenderComplexityForObject(const LLViewerObject *attached_object,
void accountRenderComplexityForObject(LLViewerObject *attached_object,
const F32 max_attachment_complexity,
LLVOVolume::texture_cost_t& textures,
U32& cost,

View File

@ -11876,4 +11876,20 @@ Unpacking: [UNPACK_TIME]s [USIZE]KB
yestext="OK"/>
</notification>
<notification
icon="alertmodal.tga"
name="RiggedMeshAttachedToHUD"
type="alertmodal">
An object "[NAME]" attached to HUD point "[POINT]" contains rigged mesh.
Rigged mesh objects are designed for attachment to the avatar. You will see this object but no one else will.
If you want others to see this object, remove it and re-attach it to an avatar attachment point.
<tag>confirm</tag>
<usetemplate
ignoretext="Warn me when rigged mesh is attached to HUD point."
name="okignore"
yestext="OK"/>
</notification>
</notifications>