summaryrefslogtreecommitdiff
path: root/indra/newview/llviewerobject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llviewerobject.cpp')
-rw-r--r--[-rwxr-xr-x]indra/newview/llviewerobject.cpp135
1 files changed, 63 insertions, 72 deletions
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index d81e67bfe2..bfde167f18 100755..100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -100,6 +100,7 @@
#include "lltrans.h"
#include "llsdutil.h"
#include "llmediaentry.h"
+#include "llpathfindingmanager.h"
//#define DEBUG_UPDATE_TYPE
@@ -143,7 +144,10 @@ LLViewerObject *LLViewerObject::createObject(const LLUUID &id, const LLPCode pco
}
else
{
- gAgentAvatarp->updateRegion(regionp);
+ if (isAgentAvatarValid())
+ {
+ gAgentAvatarp->updateRegion(regionp);
+ }
}
res = gAgentAvatarp;
}
@@ -443,7 +447,7 @@ void LLViewerObject::dump() const
/*
llinfos << "Velocity: " << getVelocity() << llendl;
llinfos << "AnyOwner: " << permAnyOwner() << " YouOwner: " << permYouOwner() << " Edit: " << mPermEdit << llendl;
- llinfos << "UsePhysics: " << usePhysics() << " CanSelect " << mbCanSelect << " UserSelected " << mUserSelected << llendl;
+ llinfos << "UsePhysics: " << flagUsePhysics() << " CanSelect " << mbCanSelect << " UserSelected " << mUserSelected << llendl;
llinfos << "AppAngle: " << mAppAngle << llendl;
llinfos << "PixelArea: " << mPixelArea << llendl;
@@ -874,6 +878,13 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
LLMemType mt(LLMemType::MTYPE_OBJECT);
U32 retval = 0x0;
+ // If region is removed from the list it is also deleted.
+ if (!LLWorld::instance().isRegionListed(mRegionp))
+ {
+ llwarns << "Updating object in an invalid region" << llendl;
+ return retval;
+ }
+
// Coordinates of objects on simulators are region-local.
U64 region_handle;
mesgsys->getU64Fast(_PREHASH_RegionData, _PREHASH_RegionHandle, region_handle);
@@ -2055,12 +2066,11 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
}
}
- if (new_rot != mLastRot
+ if (new_rot != getRotation()
|| new_angv != old_angv)
{
- if (new_rot != mLastRot)
+ if (new_rot != getRotation())
{
- mLastRot = new_rot;
setRotation(new_rot);
}
@@ -3219,12 +3229,12 @@ F32 LLViewerObject::getLinksetPhysicsCost()
return mLinksetPhysicsCost;
}
-F32 LLViewerObject::getStreamingCost(S32* bytes, S32* visible_bytes)
+F32 LLViewerObject::getStreamingCost(S32* bytes, S32* visible_bytes, F32* unscaled_value) const
{
return 0.f;
}
-U32 LLViewerObject::getTriangleCount()
+U32 LLViewerObject::getTriangleCount(S32* vcount) const
{
return 0;
}
@@ -3475,7 +3485,8 @@ LLNameValue *LLViewerObject::getNVPair(const std::string& name) const
void LLViewerObject::updatePositionCaches() const
{
- if(mRegionp)
+ // If region is removed from the list it is also deleted.
+ if(mRegionp && LLWorld::instance().isRegionListed(mRegionp))
{
if (!isRoot())
{
@@ -3492,7 +3503,8 @@ void LLViewerObject::updatePositionCaches() const
const LLVector3d LLViewerObject::getPositionGlobal() const
{
- if(mRegionp)
+ // If region is removed from the list it is also deleted.
+ if(mRegionp && LLWorld::instance().isRegionListed(mRegionp))
{
LLVector3d position_global = mRegionp->getPosGlobalFromRegion(getPositionRegion());
@@ -3511,7 +3523,8 @@ const LLVector3d LLViewerObject::getPositionGlobal() const
const LLVector3 &LLViewerObject::getPositionAgent() const
{
- if (mRegionp)
+ // If region is removed from the list it is also deleted.
+ if(mRegionp && LLWorld::instance().isRegionListed(mRegionp))
{
if (mDrawable.notNull() && (!mDrawable->isRoot() && getParent()))
{
@@ -4025,38 +4038,6 @@ void LLViewerObject::sendMaterialUpdate() const
}
-// formerly send_object_rotation
-void LLViewerObject::sendRotationUpdate() const
-{
- LLViewerRegion* regionp = getRegion();
- if(!regionp) return;
- gMessageSystem->newMessageFast(_PREHASH_ObjectRotation);
- gMessageSystem->nextBlockFast(_PREHASH_AgentData);
- gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
- gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- gMessageSystem->nextBlockFast(_PREHASH_ObjectData);
- gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, mLocalID);
- gMessageSystem->addQuatFast(_PREHASH_Rotation, getRotationEdit());
- //llinfos << "Sent rotation " << getRotationEdit() << llendl;
- gMessageSystem->sendReliable( regionp->getHost() );
-}
-
-/* Obsolete, we use MultipleObjectUpdate instead
-//// formerly send_object_position_global
-//void LLViewerObject::sendPositionUpdate() const
-//{
-// gMessageSystem->newMessageFast(_PREHASH_ObjectPosition);
-// gMessageSystem->nextBlockFast(_PREHASH_AgentData);
-// gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
-// gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
-// gMessageSystem->nextBlockFast(_PREHASH_ObjectData);
-// gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, mLocalID );
-// gMessageSystem->addVector3Fast(_PREHASH_Position, getPositionRegion());
-// LLViewerRegion* regionp = getRegion();
-// gMessageSystem->sendReliable(regionp->getHost());
-//}
-*/
-
//formerly send_object_shape(LLViewerObject *object)
void LLViewerObject::sendShapeUpdate()
{
@@ -5123,7 +5104,7 @@ BOOL LLViewerObject::permAnyOwner() const
{
if (isRootEdit())
{
- return ((mFlags & FLAGS_OBJECT_ANY_OWNER) != 0);
+ return flagObjectAnyOwner();
}
else
{
@@ -5145,7 +5126,7 @@ BOOL LLViewerObject::permYouOwner() const
return TRUE;
}
# endif
- return ((mFlags & FLAGS_OBJECT_YOU_OWNER) != 0);
+ return flagObjectYouOwner();
#endif
}
else
@@ -5159,7 +5140,7 @@ BOOL LLViewerObject::permGroupOwner() const
{
if (isRootEdit())
{
- return ((mFlags & FLAGS_OBJECT_GROUP_OWNED) != 0);
+ return flagObjectGroupOwned();
}
else
{
@@ -5182,7 +5163,7 @@ BOOL LLViewerObject::permOwnerModify() const
return TRUE;
}
# endif
- return ((mFlags & FLAGS_OBJECT_OWNER_MODIFY) != 0);
+ return flagObjectOwnerModify();
#endif
}
else
@@ -5206,7 +5187,7 @@ BOOL LLViewerObject::permModify() const
return TRUE;
}
# endif
- return ((mFlags & FLAGS_OBJECT_MODIFY) != 0);
+ return flagObjectModify();
#endif
}
else
@@ -5230,7 +5211,7 @@ BOOL LLViewerObject::permCopy() const
return TRUE;
}
# endif
- return ((mFlags & FLAGS_OBJECT_COPY) != 0);
+ return flagObjectCopy();
#endif
}
else
@@ -5254,7 +5235,7 @@ BOOL LLViewerObject::permMove() const
return TRUE;
}
# endif
- return ((mFlags & FLAGS_OBJECT_MOVE) != 0);
+ return flagObjectMove();
#endif
}
else
@@ -5278,7 +5259,7 @@ BOOL LLViewerObject::permTransfer() const
return TRUE;
}
# endif
- return ((mFlags & FLAGS_OBJECT_TRANSFER) != 0);
+ return flagObjectTransfer();
#endif
}
else
@@ -5321,21 +5302,19 @@ void LLViewerObject::markForUpdate(BOOL priority)
}
}
+bool LLViewerObject::isPermanentEnforced() const
+{
+ return flagObjectPermanent() && !LLPathfindingManager::getInstance()->isAllowAlterPermanent() && !gAgent.isGodlike();
+}
+
bool LLViewerObject::getIncludeInSearch() const
{
- return ((mFlags & FLAGS_INCLUDE_IN_SEARCH) != 0);
+ return flagIncludeInSearch();
}
void LLViewerObject::setIncludeInSearch(bool include_in_search)
{
- if (include_in_search)
- {
- mFlags |= FLAGS_INCLUDE_IN_SEARCH;
- }
- else
- {
- mFlags &= ~FLAGS_INCLUDE_IN_SEARCH;
- }
+ setFlags(FLAGS_INCLUDE_IN_SEARCH, include_in_search);
}
void LLViewerObject::setRegion(LLViewerRegion *regionp)
@@ -5374,8 +5353,8 @@ void LLViewerObject::updateRegion(LLViewerRegion *regionp)
bool LLViewerObject::specialHoverCursor() const
{
- return (mFlags & FLAGS_USE_PHYSICS)
- || (mFlags & FLAGS_HANDLE_TOUCH)
+ return flagUsePhysics()
+ || flagHandleTouch()
|| (mClickAction != 0);
}
@@ -5388,10 +5367,15 @@ void LLViewerObject::updateFlags(BOOL physics_changed)
gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
gMessageSystem->addU32Fast(_PREHASH_ObjectLocalID, getLocalID() );
- gMessageSystem->addBOOLFast(_PREHASH_UsePhysics, usePhysics() );
+ gMessageSystem->addBOOLFast(_PREHASH_UsePhysics, flagUsePhysics() );
gMessageSystem->addBOOL("IsTemporary", flagTemporaryOnRez() );
gMessageSystem->addBOOL("IsPhantom", flagPhantom() );
- gMessageSystem->addBOOL("CastsShadows", flagCastShadows() );
+
+ // stinson 02/28/2012 : This CastsShadows BOOL is no longer used in either the viewer or the simulator
+ // The simulator code does not even unpack this value when the message is received.
+ // This could be potentially hijacked in the future for another use should the urgent need arise.
+ gMessageSystem->addBOOL("CastsShadows", FALSE );
+
if (physics_changed)
{
gMessageSystem->nextBlock("ExtraPhysics");
@@ -5406,6 +5390,19 @@ void LLViewerObject::updateFlags(BOOL physics_changed)
BOOL LLViewerObject::setFlags(U32 flags, BOOL state)
{
+ BOOL setit = setFlagsWithoutUpdate(flags, state);
+
+ // BUG: Sometimes viewer physics and simulator physics get
+ // out of sync. To fix this, always send update to simulator.
+// if (setit)
+ {
+ updateFlags();
+ }
+ return setit;
+}
+
+BOOL LLViewerObject::setFlagsWithoutUpdate(U32 flags, BOOL state)
+{
BOOL setit = FALSE;
if (state)
{
@@ -5423,13 +5420,6 @@ BOOL LLViewerObject::setFlags(U32 flags, BOOL state)
setit = TRUE;
}
}
-
- // BUG: Sometimes viewer physics and simulator physics get
- // out of sync. To fix this, always send update to simulator.
-// if (setit)
- {
- updateFlags();
- }
return setit;
}
@@ -5520,11 +5510,12 @@ void LLViewerObject::dirtyMesh()
{
if (mDrawable)
{
- LLSpatialGroup* group = mDrawable->getSpatialGroup();
+ gPipeline.markRebuild(mDrawable, LLDrawable::REBUILD_ALL);
+ /*LLSpatialGroup* group = mDrawable->getSpatialGroup();
if (group)
{
group->dirtyMesh();
- }
+ }*/
}
}