Merge pull request #1581 from Azaezel/alpha41/netpipeNarrowing

Alpha41/netpipe narrowing
This commit is contained in:
Brian Roberts 2025-10-23 14:47:40 -05:00 committed by GitHub
commit ca2c502269
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 83 additions and 97 deletions

View file

@ -942,8 +942,9 @@ U32 TSStatic::packUpdate(NetConnection* con, U32 mask, BitStream* stream)
if (stream->writeFlag(mask & UpdateCollisionMask)) if (stream->writeFlag(mask & UpdateCollisionMask))
{ {
stream->write(mCollisionLOD); if (stream->writeFlag(mCollisionLOD>0))
stream->write((U32)mCollisionType); stream->writeInt(mCollisionLOD,12);
stream->writeInt(mCollisionType,4);
} }
if (stream->writeFlag(mask & SkinMask)) if (stream->writeFlag(mask & SkinMask))
con->packNetStringHandleU(stream, mSkinNameHandle); con->packNetStringHandleU(stream, mSkinNameHandle);
@ -952,7 +953,7 @@ U32 TSStatic::packUpdate(NetConnection* con, U32 mask, BitStream* stream)
{ {
PACK_ASSET_REFACTOR(con, Shape); PACK_ASSET_REFACTOR(con, Shape);
stream->write((U32)mDecalType); stream->writeInt(mDecalType,4);
stream->writeFlag(mAllowPlayerStep); stream->writeFlag(mAllowPlayerStep);
stream->writeFlag(mMeshCulling); stream->writeFlag(mMeshCulling);
@ -998,17 +999,18 @@ U32 TSStatic::packUpdate(NetConnection* con, U32 mask, BitStream* stream)
if (stream->writeFlag(mask & MaterialMask)) if (stream->writeFlag(mask & MaterialMask))
{ {
stream->writeInt(mChangingMaterials.size(), 16); if (stream->writeFlag(mChangingMaterials.size() > 0))
for (U32 i = 0; i < mChangingMaterials.size(); i++)
{ {
stream->writeInt(mChangingMaterials[i].slot, 16); stream->writeInt(mChangingMaterials.size(), 16);
NetStringHandle matNameStr = mChangingMaterials[i].assetId.c_str(); for (U32 i = 0; i < mChangingMaterials.size(); i++)
con->packNetStringHandleU(stream, matNameStr); {
stream->writeInt(mChangingMaterials[i].slot, 16);
NetStringHandle matNameStr = mChangingMaterials[i].assetId.c_str();
con->packNetStringHandleU(stream, matNameStr);
}
} }
//mChangingMaterials.clear();
} }
return retMask; return retMask;
@ -1042,8 +1044,9 @@ void TSStatic::unpackUpdate(NetConnection* con, BitStream* stream)
{ {
U32 collisionType = CollisionMesh; U32 collisionType = CollisionMesh;
stream->read(&mCollisionLOD); if (stream->readFlag())
stream->read(&collisionType); mCollisionLOD = stream->readInt(12);
collisionType = stream->readInt(4);
// Handle it if we have changed CollisionType's // Handle it if we have changed CollisionType's
if ((MeshType)collisionType != mCollisionType) if ((MeshType)collisionType != mCollisionType)
@ -1069,7 +1072,7 @@ void TSStatic::unpackUpdate(NetConnection* con, BitStream* stream)
{ {
UNPACK_ASSET_REFACTOR(con, Shape); UNPACK_ASSET_REFACTOR(con, Shape);
stream->read((U32*)&mDecalType); mDecalType = (MeshType)stream->readInt(4);
mAllowPlayerStep = stream->readFlag(); mAllowPlayerStep = stream->readFlag();
mMeshCulling = stream->readFlag(); mMeshCulling = stream->readFlag();
@ -1124,20 +1127,22 @@ void TSStatic::unpackUpdate(NetConnection* con, BitStream* stream)
if (stream->readFlag()) if (stream->readFlag())
{ {
mChangingMaterials.clear(); mChangingMaterials.clear();
U32 materialCount = stream->readInt(16); if (stream->readFlag())
for (U32 i = 0; i < materialCount; i++)
{ {
matMap newMatMap; U32 materialCount = stream->readInt(16);
newMatMap.slot = stream->readInt(16);
newMatMap.assetId = String(con->unpackNetStringHandleU(stream).getString());
//do the lookup, now for (U32 i = 0; i < materialCount; i++)
newMatMap.matAsset = AssetDatabase.acquireAsset<MaterialAsset>(newMatMap.assetId); {
matMap newMatMap;
newMatMap.slot = stream->readInt(16);
newMatMap.assetId = String(con->unpackNetStringHandleU(stream).getString());
mChangingMaterials.push_back(newMatMap); //do the lookup, now
newMatMap.matAsset = AssetDatabase.acquireAsset<MaterialAsset>(newMatMap.assetId);
mChangingMaterials.push_back(newMatMap);
}
} }
updateMaterials(); updateMaterials();
} }

View file

@ -905,61 +905,47 @@ 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 )
{
S32 gIndex = conn->getGhostIndex( mMount.object );
if ( stream->writeFlag( gIndex != -1 ) )
{ {
stream->writeFlag( true ); // Cant, try again later
stream->writeInt( gIndex, NetConnection::GhostIdBitSize ); retMask |= MountedMask;
if ( stream->writeFlag( mMount.node != -1 ) ) }
stream->writeInt( mMount.node, NumMountPointBits ); }
mathWrite( *stream, mMount.xfm ); else if (stream->writeFlag(mMount.object))
{
S32 gIndex = conn->getGhostIndex(mMount.object);
if (stream->writeFlag(gIndex != -1))
{
stream->writeInt(gIndex, NetConnection::GhostIdBitSize);
if (stream->writeFlag(mMount.node != -1))
stream->writeInt(mMount.node, NumMountPointBits);
mathWrite(*stream, mMount.xfm);
} }
else else
// 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())
@ -990,7 +968,7 @@ void SceneObject::unpackUpdate( NetConnection* conn, BitStream* stream )
// Check to see if we can actually ghost this... // Check to see if we can actually ghost this...
if (stream->readFlag()) if (stream->readFlag())
{ {
GameBase *newParent = static_cast<GameBase*>(conn->resolveGhost(stream->readRangedU32(0, NetConnection::MaxGhostCount))); GameBase* newParent = static_cast<GameBase*>(conn->resolveGhost(stream->readRangedU32(0, NetConnection::MaxGhostCount)));
MatrixF m; MatrixF m;
stream->readAffineTransform(&m); stream->readAffineTransform(&m);
@ -1001,39 +979,42 @@ 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() )
{
S32 gIndex = stream->readInt( NetConnection::GhostIdBitSize );
SceneObject* obj = dynamic_cast<SceneObject*>( conn->resolveGhost( gIndex ) );
S32 node = -1;
if ( stream->readFlag() ) // node != -1
node = stream->readInt( NumMountPointBits );
MatrixF xfm;
mathRead( *stream, &xfm );
if ( !obj )
{ {
conn->setLastError( "Invalid packet from server." ); if (stream->readFlag()) //object was ghosted
return; {
S32 gIndex = stream->readInt(NetConnection::GhostIdBitSize);
SceneObject* obj = dynamic_cast<SceneObject*>(conn->resolveGhost(gIndex));
S32 node = -1;
if (stream->readFlag()) // node != -1
node = stream->readInt(NumMountPointBits);
MatrixF xfm;
mathRead(*stream, &xfm);
if (!obj)
{
conn->setLastError("Invalid packet from server.");
return;
}
obj->mountObject(this, node, xfm);
}
} }
obj->mountObject( this, node, xfm ); else
unmount();
} }
else
unmount();
} }
else if (stream->readFlag()) //parent xform sync
{
MatrixF m;
stream->readAffineTransform(&m);
mGraph.objToParent = m;
}
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------