sceneobject xform transmission review

This commit is contained in:
AzaezelX 2025-10-23 09:42:47 -05:00
parent 4579f327b4
commit 3ff3a5eef4

View file

@ -905,45 +905,33 @@ U32 SceneObject::packUpdate( NetConnection* conn, U32 mask, BitStream* stream )
if ( stream->writeFlag( mask & FlagMask ) ) if ( stream->writeFlag( mask & FlagMask ) )
stream->writeRangedU32( (U32)mObjectFlags, 0, getObjectFlagMax() ); stream->writeRangedU32( (U32)mObjectFlags, 0, getObjectFlagMax() );
// PATHSHAPE
//Begin attachment
retMask = 0; //retry mask retMask = 0; //retry mask
if (stream->writeFlag(getParent() != NULL)) {
stream->writeAffineTransform(mGraph.objToParent);
}
if (stream->writeFlag(mask & MountedMask)) if (stream->writeFlag(mask & MountedMask))
{ {
// Check to see if we need to write an object ID // Check to see if we need to write an object ID
if (stream->writeFlag(mGraph.parent)) { if (stream->writeFlag(mGraph.parent))
{
S32 t = conn->getGhostIndex(mGraph.parent); S32 t = conn->getGhostIndex(mGraph.parent);
// Check to see if we can actually ghost this... // Check to see if we can actually ghost this...
if (t == -1) { if (stream->writeFlag(t != -1))
// Cant, try again later {
retMask |= MountedMask;
stream->writeFlag(false);
}
else {
// Can, write it. // Can, write it.
stream->writeFlag(true);
stream->writeRangedU32(U32(t), 0, NetConnection::MaxGhostCount); stream->writeRangedU32(U32(t), 0, NetConnection::MaxGhostCount);
stream->writeAffineTransform(mGraph.objToParent); stream->writeAffineTransform(mGraph.objToParent);
//Con::errorf("%d: sent mounted on %d", getId(), mGraph.parent->getId()); //Con::errorf("%d: sent mounted on %d", getId(), mGraph.parent->getId());
} }
} else
}
// End of Attachment
// PATHSHAPE END
if ( mask & MountedMask )
{ {
if ( mMount.object ) // Cant, try again later
retMask |= MountedMask;
}
}
else if (stream->writeFlag(mMount.object))
{ {
S32 gIndex = conn->getGhostIndex(mMount.object); S32 gIndex = conn->getGhostIndex(mMount.object);
if (stream->writeFlag(gIndex != -1)) if (stream->writeFlag(gIndex != -1))
{ {
stream->writeFlag( true );
stream->writeInt(gIndex, NetConnection::GhostIdBitSize); stream->writeInt(gIndex, NetConnection::GhostIdBitSize);
if (stream->writeFlag(mMount.node != -1)) if (stream->writeFlag(mMount.node != -1))
stream->writeInt(mMount.node, NumMountPointBits); stream->writeInt(mMount.node, NumMountPointBits);
@ -953,13 +941,11 @@ U32 SceneObject::packUpdate( NetConnection* conn, U32 mask, BitStream* stream )
// Will have to try again later // Will have to try again later
retMask |= MountedMask; retMask |= MountedMask;
} }
else
// Unmount if this isn't the initial packet
if ( stream->writeFlag( !(mask & InitialUpdateMask) ) )
stream->writeFlag( false );
} }
else else if (stream->writeFlag(getParent() != NULL)) //parent xform sync
stream->writeFlag( false ); {
stream->writeAffineTransform(mGraph.objToParent);
}
return retMask; return retMask;
} }
@ -974,15 +960,7 @@ void SceneObject::unpackUpdate( NetConnection* conn, BitStream* stream )
if ( stream->readFlag() ) if ( stream->readFlag() )
mObjectFlags = stream->readRangedU32( 0, getObjectFlagMax() ); mObjectFlags = stream->readRangedU32( 0, getObjectFlagMax() );
// PATHSHAPE if (stream->readFlag())// MountedMask
// begin of attachment
if (stream->readFlag())
{
MatrixF m;
stream->readAffineTransform(&m);
mGraph.objToParent = m;
}
if (stream->readFlag())
{ {
// Check to see if we need to read an object ID // Check to see if we need to read an object ID
if (stream->readFlag()) if (stream->readFlag())
@ -1001,21 +979,15 @@ void SceneObject::unpackUpdate( NetConnection* conn, BitStream* stream )
} }
attachToParent(newParent, &m); attachToParent(newParent, &m);
//Con::errorf("%d: got mounted on %d", getId(), mParentObject->getId());
} }
} }
else else
{ {
attachToParent(NULL); attachToParent(NULL);
}
}
// End of attachment
// PATHSHAPE END
// MountedMask if (stream->readFlag()) //mounted to an object
if ( stream->readFlag() )
{ {
if ( stream->readFlag() ) if (stream->readFlag()) //object was ghosted
{ {
S32 gIndex = stream->readInt(NetConnection::GhostIdBitSize); S32 gIndex = stream->readInt(NetConnection::GhostIdBitSize);
SceneObject* obj = dynamic_cast<SceneObject*>(conn->resolveGhost(gIndex)); SceneObject* obj = dynamic_cast<SceneObject*>(conn->resolveGhost(gIndex));
@ -1031,10 +1003,19 @@ void SceneObject::unpackUpdate( NetConnection* conn, BitStream* stream )
} }
obj->mountObject(this, node, xfm); obj->mountObject(this, node, xfm);
} }
}
else else
unmount(); unmount();
} }
} }
else if (stream->readFlag()) //parent xform sync
{
MatrixF m;
stream->readAffineTransform(&m);
mGraph.objToParent = m;
}
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------