diff options
Diffstat (limited to 'indra/newview/llhudeffectresetskeleton.cpp')
-rw-r--r-- | indra/newview/llhudeffectresetskeleton.cpp | 246 |
1 files changed, 123 insertions, 123 deletions
diff --git a/indra/newview/llhudeffectresetskeleton.cpp b/indra/newview/llhudeffectresetskeleton.cpp index aceb306955..aa5532f0fc 100644 --- a/indra/newview/llhudeffectresetskeleton.cpp +++ b/indra/newview/llhudeffectresetskeleton.cpp @@ -1,25 +1,25 @@ -/** +/** * @file llhudeffectresetskeleton.cpp * @brief LLHUDEffectResetSkeleton class implementation * * $LicenseInfo:firstyear=2024&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2024, Linden Research, Inc. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * + * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -41,8 +41,8 @@ const S32 PKT_SIZE = 17; //----------------------------------------------------------------------------- // LLHUDEffectResetSkeleton() //----------------------------------------------------------------------------- -LLHUDEffectResetSkeleton::LLHUDEffectResetSkeleton(const U8 type) : - LLHUDEffect(type) +LLHUDEffectResetSkeleton::LLHUDEffectResetSkeleton(const U8 type) : + LLHUDEffect(type) { } @@ -58,28 +58,28 @@ LLHUDEffectResetSkeleton::~LLHUDEffectResetSkeleton() //----------------------------------------------------------------------------- void LLHUDEffectResetSkeleton::packData(LLMessageSystem *mesgsys) { - // Pack the default data - LLHUDEffect::packData(mesgsys); - - // Pack the type-specific data. Uses a fun packed binary format. Whee! - U8 packed_data[PKT_SIZE]; - memset(packed_data, 0, PKT_SIZE); - - // pack both target object and position - // position interpreted as offset if target object is non-null - if (mTargetObject) - { - htolememcpy(&(packed_data[TARGET_OBJECT]), mTargetObject->mID.mData, MVT_LLUUID, 16); - } - else - { - htolememcpy(&(packed_data[TARGET_OBJECT]), LLUUID::null.mData, MVT_LLUUID, 16); - } - - U8 resetAnimations = (U8)mResetAnimations; - htolememcpy(&(packed_data[RESET_ANIMATIONS]), &resetAnimations, MVT_U8, 1); - - mesgsys->addBinaryDataFast(_PREHASH_TypeData, packed_data, PKT_SIZE); + // Pack the default data + LLHUDEffect::packData(mesgsys); + + // Pack the type-specific data. Uses a fun packed binary format. Whee! + U8 packed_data[PKT_SIZE]; + memset(packed_data, 0, PKT_SIZE); + + // pack both target object and position + // position interpreted as offset if target object is non-null + if (mTargetObject) + { + htolememcpy(&(packed_data[TARGET_OBJECT]), mTargetObject->mID.mData, MVT_LLUUID, 16); + } + else + { + htolememcpy(&(packed_data[TARGET_OBJECT]), LLUUID::null.mData, MVT_LLUUID, 16); + } + + U8 resetAnimations = (U8)mResetAnimations; + htolememcpy(&(packed_data[RESET_ANIMATIONS]), &resetAnimations, MVT_U8, 1); + + mesgsys->addBinaryDataFast(_PREHASH_TypeData, packed_data, PKT_SIZE); } //----------------------------------------------------------------------------- @@ -87,64 +87,64 @@ void LLHUDEffectResetSkeleton::packData(LLMessageSystem *mesgsys) //----------------------------------------------------------------------------- void LLHUDEffectResetSkeleton::unpackData(LLMessageSystem *mesgsys, S32 blocknum) { - LLVector3d new_target; - U8 packed_data[PKT_SIZE]; - - - LLHUDEffect::unpackData(mesgsys, blocknum); - - LLUUID source_id; - mesgsys->getUUIDFast(_PREHASH_Effect, _PREHASH_AgentID, source_id, blocknum); - - LLViewerObject *objp = gObjectList.findObject(source_id); - if (objp && objp->isAvatar()) - { - setSourceObject(objp); - } - else - { - //LL_WARNS() << "Could not find source avatar for ResetSkeleton effect" << LL_ENDL; - return; - } - - S32 size = mesgsys->getSizeFast(_PREHASH_Effect, blocknum, _PREHASH_TypeData); - if (size != PKT_SIZE) - { - LL_WARNS() << "ResetSkeleton effect with bad size " << size << LL_ENDL; - return; - } - - mesgsys->getBinaryDataFast(_PREHASH_Effect, _PREHASH_TypeData, packed_data, PKT_SIZE, blocknum); - - LLUUID target_id; - htolememcpy(target_id.mData, &(packed_data[TARGET_OBJECT]), MVT_LLUUID, 16); - - // The purpose for having a target ID is if we want to reset animesh, or - // other things in the future. - // I implemented this, but due to issues regarding various permission - // checks, I scrapped it for now. --Chaser Zaks - // See https://github.com/secondlife/viewer/pull/1212 for additional info - - if (target_id.isNull()) - { - target_id = source_id; - } - - objp = gObjectList.findObject(target_id); - - if (objp) - { - setTargetObject(objp); - } - - U8 resetAnimations = 0; - htolememcpy(&resetAnimations, &(packed_data[RESET_ANIMATIONS]), MVT_U8, 1); - - // Pre-emptively assume this is going to be flags in the future. - // It isn't needed now, but this will assure that only bit 1 is set - mResetAnimations = resetAnimations & 1; - - update(); + LLVector3d new_target; + U8 packed_data[PKT_SIZE]; + + + LLHUDEffect::unpackData(mesgsys, blocknum); + + LLUUID source_id; + mesgsys->getUUIDFast(_PREHASH_Effect, _PREHASH_AgentID, source_id, blocknum); + + LLViewerObject *objp = gObjectList.findObject(source_id); + if (objp && objp->isAvatar()) + { + setSourceObject(objp); + } + else + { + //LL_WARNS() << "Could not find source avatar for ResetSkeleton effect" << LL_ENDL; + return; + } + + S32 size = mesgsys->getSizeFast(_PREHASH_Effect, blocknum, _PREHASH_TypeData); + if (size != PKT_SIZE) + { + LL_WARNS() << "ResetSkeleton effect with bad size " << size << LL_ENDL; + return; + } + + mesgsys->getBinaryDataFast(_PREHASH_Effect, _PREHASH_TypeData, packed_data, PKT_SIZE, blocknum); + + LLUUID target_id; + htolememcpy(target_id.mData, &(packed_data[TARGET_OBJECT]), MVT_LLUUID, 16); + + // The purpose for having a target ID is if we want to reset animesh, or + // other things in the future. + // I implemented this, but due to issues regarding various permission + // checks, I scrapped it for now. --Chaser Zaks + // See https://github.com/secondlife/viewer/pull/1212 for additional info + + if (target_id.isNull()) + { + target_id = source_id; + } + + objp = gObjectList.findObject(target_id); + + if (objp) + { + setTargetObject(objp); + } + + U8 resetAnimations = 0; + htolememcpy(&resetAnimations, &(packed_data[RESET_ANIMATIONS]), MVT_U8, 1); + + // Pre-emptively assume this is going to be flags in the future. + // It isn't needed now, but this will assure that only bit 1 is set + mResetAnimations = resetAnimations & 1; + + update(); } //----------------------------------------------------------------------------- @@ -152,7 +152,7 @@ void LLHUDEffectResetSkeleton::unpackData(LLMessageSystem *mesgsys, S32 blocknum //----------------------------------------------------------------------------- void LLHUDEffectResetSkeleton::setTargetObject(LLViewerObject *objp) { - mTargetObject = objp; + mTargetObject = objp; } @@ -161,16 +161,16 @@ void LLHUDEffectResetSkeleton::setTargetObject(LLViewerObject *objp) //----------------------------------------------------------------------------- void LLHUDEffectResetSkeleton::markDead() { - LLHUDEffect::markDead(); + LLHUDEffect::markDead(); } void LLHUDEffectResetSkeleton::setSourceObject(LLViewerObject* objectp) { - // restrict source objects to avatars - if (objectp && objectp->isAvatar()) - { - LLHUDEffect::setSourceObject(objectp); - } + // restrict source objects to avatars + if (objectp && objectp->isAvatar()) + { + LLHUDEffect::setSourceObject(objectp); + } } //----------------------------------------------------------------------------- @@ -178,33 +178,33 @@ void LLHUDEffectResetSkeleton::setSourceObject(LLViewerObject* objectp) //----------------------------------------------------------------------------- void LLHUDEffectResetSkeleton::update() { - // If the target object is dead, set the target object to NULL - if (mTargetObject.isNull() || mTargetObject->isDead()) - { - markDead(); - return; - } - - if (mSourceObject.isNull() || mSourceObject->isDead()) - { - markDead(); - return; - } - - if (mTargetObject->isAvatar()) - { - // Only the owner of a avatar can reset their skeleton like this - if (mSourceObject->getID() == mTargetObject->getID()) - { - LLVOAvatar* avatar = mTargetObject->asAvatar(); - avatar->resetSkeleton(mResetAnimations); - } - } - else - { - LL_WARNS() << mSourceObject->getID() << " attempted to reset skeleton on " - << mTargetObject->getID() << ", but it is not a avatar!" << LL_ENDL; - } - - markDead(); + // If the target object is dead, set the target object to NULL + if (mTargetObject.isNull() || mTargetObject->isDead()) + { + markDead(); + return; + } + + if (mSourceObject.isNull() || mSourceObject->isDead()) + { + markDead(); + return; + } + + if (mTargetObject->isAvatar()) + { + // Only the owner of a avatar can reset their skeleton like this + if (mSourceObject->getID() == mTargetObject->getID()) + { + LLVOAvatar* avatar = mTargetObject->asAvatar(); + avatar->resetSkeleton(mResetAnimations); + } + } + else + { + LL_WARNS() << mSourceObject->getID() << " attempted to reset skeleton on " + << mTargetObject->getID() << ", but it is not a avatar!" << LL_ENDL; + } + + markDead(); } |