Browse Source

Merge pull request #1581 from Azaezel/alpha41/netpipeNarrowing

Alpha41/netpipe narrowing
Brian Roberts 2 months ago
parent
commit
ca2c502269
2 changed files with 80 additions and 94 deletions
  1. 29 24
      Engine/source/T3D/tsStatic.cpp
  2. 51 70
      Engine/source/scene/sceneObject.cpp

+ 29 - 24
Engine/source/T3D/tsStatic.cpp

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

+ 51 - 70
Engine/source/scene/sceneObject.cpp

@@ -905,62 +905,48 @@ U32 SceneObject::packUpdate( NetConnection* conn, U32 mask, BitStream* stream )
    if ( stream->writeFlag( mask & FlagMask ) )
       stream->writeRangedU32( (U32)mObjectFlags, 0, getObjectFlagMax() );
 
-   // PATHSHAPE
-   //Begin attachment
    retMask = 0; //retry mask
-
-   if (stream->writeFlag(getParent() != NULL))   {
-      stream->writeAffineTransform(mGraph.objToParent);
-   }
    if (stream->writeFlag(mask & MountedMask))
    {
       // 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);
          // Check to see if we can actually ghost this...         
-         if (t == -1)         {
-            // Cant, try again later            
-            retMask |= MountedMask;
-            stream->writeFlag(false);
-         }
-         else {
-            // Can, write it.            
-            stream->writeFlag(true);
+         if (stream->writeFlag(t != -1))
+         {
+            // Can, write it.
             stream->writeRangedU32(U32(t), 0, NetConnection::MaxGhostCount);
             stream->writeAffineTransform(mGraph.objToParent);
             //Con::errorf("%d: sent mounted on %d", getId(), mGraph.parent->getId());         
          }
+         else
+         {
+            // Cant, try again later            
+            retMask |= MountedMask;
+         }
       }
-   }
-   // End of Attachment   
-   // PATHSHAPE END
-
-   if ( mask & MountedMask ) 
-   {                  
-      if ( mMount.object ) 
+      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 );
-            if ( stream->writeFlag( mMount.node != -1 ) )
-               stream->writeInt( mMount.node, NumMountPointBits );
-            mathWrite( *stream, mMount.xfm );
+            stream->writeInt(gIndex, NetConnection::GhostIdBitSize);
+            if (stream->writeFlag(mMount.node != -1))
+               stream->writeInt(mMount.node, NumMountPointBits);
+            mathWrite(*stream, mMount.xfm);
          }
          else
             // Will have to try again later
             retMask |= MountedMask;
       }
-      else
-         // Unmount if this isn't the initial packet
-         if ( stream->writeFlag( !(mask & InitialUpdateMask) ) )
-            stream->writeFlag( false );
    }
-   else
-      stream->writeFlag( false );
-   
+   else if (stream->writeFlag(getParent() != NULL)) //parent xform sync
+   {
+      stream->writeAffineTransform(mGraph.objToParent);
+   }
+
    return retMask;
 }
 
@@ -974,15 +960,7 @@ void SceneObject::unpackUpdate( NetConnection* conn, BitStream* stream )
    if ( stream->readFlag() )      
       mObjectFlags = stream->readRangedU32( 0, getObjectFlagMax() );
 
-   // PATHSHAPE  
-   // begin of attachment
-   if (stream->readFlag())
-   {
-      MatrixF m;
-      stream->readAffineTransform(&m);
-      mGraph.objToParent = m;
-   }
-   if (stream->readFlag())
+   if (stream->readFlag())// MountedMask
    {
       // Check to see if we need to read an object ID      
       if (stream->readFlag())
@@ -990,7 +968,7 @@ void SceneObject::unpackUpdate( NetConnection* conn, BitStream* stream )
          // Check to see if we can actually ghost this...         
          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;
             stream->readAffineTransform(&m);
 
@@ -1000,40 +978,43 @@ void SceneObject::unpackUpdate( NetConnection* conn, BitStream* stream )
                processAfter(newParent);
             }
 
-            attachToParent(newParent, &m);
-            //Con::errorf("%d: got mounted on %d", getId(), mParentObject->getId());         
+            attachToParent(newParent, &m);    
          }
       }
       else
       {
          attachToParent(NULL);
-      }
-   }
-   // End of attachment
-   // PATHSHAPE END
 
-   // MountedMask
-   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 )
+         if (stream->readFlag()) //mounted to an object
          {
-            conn->setLastError( "Invalid packet from server." );
-            return;
+            if (stream->readFlag()) //object was ghosted
+            {
+               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;
+   }
+
 }
 
 //-----------------------------------------------------------------------------