|
@@ -520,10 +520,15 @@ void TSStatic::reSkin()
|
|
|
|
|
|
void TSStatic::processTick( const Move *move )
|
|
void TSStatic::processTick( const Move *move )
|
|
{
|
|
{
|
|
- AssertFatal( mPlayAmbient && mAmbientThread, "TSSTatic::adanceTime called with nothing to play." );
|
|
|
|
-
|
|
|
|
- if ( isServerObject() )
|
|
|
|
|
|
+ if ( isServerObject() && mPlayAmbient && mAmbientThread )
|
|
mShapeInstance->advanceTime( TickSec, mAmbientThread );
|
|
mShapeInstance->advanceTime( TickSec, mAmbientThread );
|
|
|
|
+
|
|
|
|
+ if ( isMounted() )
|
|
|
|
+ {
|
|
|
|
+ MatrixF mat( true );
|
|
|
|
+ mMount.object->getMountTransform(mMount.node, mMount.xfm, &mat );
|
|
|
|
+ setTransform( mat );
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
void TSStatic::interpolateTick( F32 delta )
|
|
void TSStatic::interpolateTick( F32 delta )
|
|
@@ -532,14 +537,20 @@ void TSStatic::interpolateTick( F32 delta )
|
|
|
|
|
|
void TSStatic::advanceTime( F32 dt )
|
|
void TSStatic::advanceTime( F32 dt )
|
|
{
|
|
{
|
|
- AssertFatal( mPlayAmbient && mAmbientThread, "TSSTatic::advanceTime called with nothing to play." );
|
|
|
|
-
|
|
|
|
- mShapeInstance->advanceTime( dt, mAmbientThread );
|
|
|
|
|
|
+ if ( mPlayAmbient && mAmbientThread )
|
|
|
|
+ mShapeInstance->advanceTime( dt, mAmbientThread );
|
|
|
|
+
|
|
|
|
+ if ( isMounted() )
|
|
|
|
+ {
|
|
|
|
+ MatrixF mat( true );
|
|
|
|
+ mMount.object->getRenderMountTransform( dt, mMount.node, mMount.xfm, &mat );
|
|
|
|
+ setRenderTransform( mat );
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
void TSStatic::_updateShouldTick()
|
|
void TSStatic::_updateShouldTick()
|
|
{
|
|
{
|
|
- bool shouldTick = mPlayAmbient && mAmbientThread;
|
|
|
|
|
|
+ bool shouldTick = (mPlayAmbient && mAmbientThread) || isMounted();
|
|
|
|
|
|
if ( isTicking() != shouldTick )
|
|
if ( isTicking() != shouldTick )
|
|
setProcessTick( shouldTick );
|
|
setProcessTick( shouldTick );
|
|
@@ -708,12 +719,15 @@ void TSStatic::onScaleChanged()
|
|
else
|
|
else
|
|
_updatePhysics();
|
|
_updatePhysics();
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ setMaskBits( ScaleMask );
|
|
}
|
|
}
|
|
|
|
|
|
void TSStatic::setTransform(const MatrixF & mat)
|
|
void TSStatic::setTransform(const MatrixF & mat)
|
|
{
|
|
{
|
|
Parent::setTransform(mat);
|
|
Parent::setTransform(mat);
|
|
- setMaskBits( TransformMask );
|
|
|
|
|
|
+ if ( !isMounted() )
|
|
|
|
+ setMaskBits( TransformMask );
|
|
|
|
|
|
if ( mPhysicsRep )
|
|
if ( mPhysicsRep )
|
|
mPhysicsRep->setTransform( mat );
|
|
mPhysicsRep->setTransform( mat );
|
|
@@ -734,9 +748,15 @@ U32 TSStatic::packUpdate(NetConnection *con, U32 mask, BitStream *stream)
|
|
{
|
|
{
|
|
U32 retMask = Parent::packUpdate(con, mask, stream);
|
|
U32 retMask = Parent::packUpdate(con, mask, stream);
|
|
|
|
|
|
- mathWrite( *stream, getTransform() );
|
|
|
|
- mathWrite( *stream, getScale() );
|
|
|
|
- stream->writeString( mShapeName );
|
|
|
|
|
|
+ if ( stream->writeFlag( mask & TransformMask ) )
|
|
|
|
+ mathWrite( *stream, getTransform() );
|
|
|
|
+
|
|
|
|
+ if ( stream->writeFlag( mask & ScaleMask ) )
|
|
|
|
+ {
|
|
|
|
+ // Only write one bit if the scale is one.
|
|
|
|
+ if ( stream->writeFlag( mObjScale != Point3F::One ) )
|
|
|
|
+ mathWrite( *stream, mObjScale );
|
|
|
|
+ }
|
|
|
|
|
|
if ( stream->writeFlag( mask & UpdateCollisionMask ) )
|
|
if ( stream->writeFlag( mask & UpdateCollisionMask ) )
|
|
stream->write( (U32)mCollisionType );
|
|
stream->write( (U32)mCollisionType );
|
|
@@ -744,17 +764,20 @@ U32 TSStatic::packUpdate(NetConnection *con, U32 mask, BitStream *stream)
|
|
if ( stream->writeFlag( mask & SkinMask ) )
|
|
if ( stream->writeFlag( mask & SkinMask ) )
|
|
con->packNetStringHandleU( stream, mSkinNameHandle );
|
|
con->packNetStringHandleU( stream, mSkinNameHandle );
|
|
|
|
|
|
- stream->write( (U32)mDecalType );
|
|
|
|
|
|
+ if ( stream->writeFlag( mask & AdvancedStaticOptionsMask ) )
|
|
|
|
+ {
|
|
|
|
+ stream->writeString( mShapeName );
|
|
|
|
+ stream->write( (U32)mDecalType );
|
|
|
|
|
|
- stream->writeFlag( mAllowPlayerStep );
|
|
|
|
- stream->writeFlag( mMeshCulling );
|
|
|
|
- stream->writeFlag( mUseOriginSort );
|
|
|
|
|
|
+ stream->writeFlag( mAllowPlayerStep );
|
|
|
|
+ stream->writeFlag( mMeshCulling );
|
|
|
|
+ stream->writeFlag( mUseOriginSort );
|
|
|
|
|
|
- stream->write( mRenderNormalScalar );
|
|
|
|
|
|
+ stream->write( mRenderNormalScalar );
|
|
|
|
|
|
- stream->write( mForceDetail );
|
|
|
|
|
|
+ stream->write( mForceDetail );
|
|
|
|
|
|
- stream->writeFlag( mPlayAmbient );
|
|
|
|
|
|
+ stream->writeFlag( mPlayAmbient );
|
|
|
|
|
|
if ( stream->writeFlag(mUseAlphaFade) )
|
|
if ( stream->writeFlag(mUseAlphaFade) )
|
|
{
|
|
{
|
|
@@ -777,14 +800,25 @@ void TSStatic::unpackUpdate(NetConnection *con, BitStream *stream)
|
|
{
|
|
{
|
|
Parent::unpackUpdate(con, stream);
|
|
Parent::unpackUpdate(con, stream);
|
|
|
|
|
|
- MatrixF mat;
|
|
|
|
- Point3F scale;
|
|
|
|
- mathRead( *stream, &mat );
|
|
|
|
- mathRead( *stream, &scale );
|
|
|
|
- setScale( scale);
|
|
|
|
- setTransform(mat);
|
|
|
|
|
|
+ if ( stream->readFlag() ) // TransformMask
|
|
|
|
+ {
|
|
|
|
+ MatrixF mat;
|
|
|
|
+ mathRead( *stream, &mat );
|
|
|
|
+ setTransform(mat);
|
|
|
|
+ setRenderTransform(mat);
|
|
|
|
+ }
|
|
|
|
|
|
- mShapeName = stream->readSTString();
|
|
|
|
|
|
+ if ( stream->readFlag() ) // ScaleMask
|
|
|
|
+ {
|
|
|
|
+ if ( stream->readFlag() )
|
|
|
|
+ {
|
|
|
|
+ VectorF scale;
|
|
|
|
+ mathRead( *stream, &scale );
|
|
|
|
+ setScale( scale );
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ setScale( Point3F::One );
|
|
|
|
+ }
|
|
|
|
|
|
if ( stream->readFlag() ) // UpdateCollisionMask
|
|
if ( stream->readFlag() ) // UpdateCollisionMask
|
|
{
|
|
{
|
|
@@ -812,17 +846,19 @@ void TSStatic::unpackUpdate(NetConnection *con, BitStream *stream)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- stream->read( (U32*)&mDecalType );
|
|
|
|
|
|
+ if ( stream->readFlag() ) // AdvancedStaticOptionsMask
|
|
|
|
+ {
|
|
|
|
+ mShapeName = stream->readSTString();
|
|
|
|
|
|
- mAllowPlayerStep = stream->readFlag();
|
|
|
|
- mMeshCulling = stream->readFlag();
|
|
|
|
- mUseOriginSort = stream->readFlag();
|
|
|
|
|
|
+ stream->read( (U32*)&mDecalType );
|
|
|
|
|
|
- stream->read( &mRenderNormalScalar );
|
|
|
|
|
|
+ mAllowPlayerStep = stream->readFlag();
|
|
|
|
+ mMeshCulling = stream->readFlag();
|
|
|
|
+ mUseOriginSort = stream->readFlag();
|
|
|
|
|
|
- stream->read( &mForceDetail );
|
|
|
|
|
|
+ stream->read( &mRenderNormalScalar );
|
|
|
|
|
|
- mPlayAmbient = stream->readFlag();
|
|
|
|
|
|
+ stream->read( &mForceDetail );
|
|
|
|
|
|
mUseAlphaFade = stream->readFlag();
|
|
mUseAlphaFade = stream->readFlag();
|
|
if (mUseAlphaFade)
|
|
if (mUseAlphaFade)
|
|
@@ -1160,6 +1196,19 @@ void TSStaticPolysoupConvex::getFeatures(const MatrixF& mat,const VectorF& n, Co
|
|
// All done!
|
|
// All done!
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void TSStatic::onMount( SceneObject *obj, S32 node )
|
|
|
|
+{
|
|
|
|
+ Parent::onMount(obj, node);
|
|
|
|
+ _updateShouldTick();
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void TSStatic::onUnmount( SceneObject *obj, S32 node )
|
|
|
|
+{
|
|
|
|
+ Parent::onUnmount( obj, node );
|
|
|
|
+ setMaskBits( TransformMask );
|
|
|
|
+ _updateShouldTick();
|
|
|
|
+}
|
|
|
|
+
|
|
//------------------------------------------------------------------------
|
|
//------------------------------------------------------------------------
|
|
//These functions are duplicated in tsStatic and shapeBase.
|
|
//These functions are duplicated in tsStatic and shapeBase.
|
|
//They each function a little differently; but achieve the same purpose of gathering
|
|
//They each function a little differently; but achieve the same purpose of gathering
|