diff --git a/Engine/source/T3D/tsStatic.cpp b/Engine/source/T3D/tsStatic.cpp index c02cd5220..3182eeada 100644 --- a/Engine/source/T3D/tsStatic.cpp +++ b/Engine/source/T3D/tsStatic.cpp @@ -137,6 +137,7 @@ TSStatic::TSStatic() mAlphaFade = 1.0f; mPhysicsRep = NULL; + mCollisionLOD = 0; mCollisionType = CollisionMesh; mDecalType = CollisionMesh; @@ -238,7 +239,8 @@ void TSStatic::initPersistFields() endGroup("Reflection"); addGroup("Collision"); - + addField("collisionLOD", TypeS32, Offset(mCollisionLOD, TSStatic), + "The level of detail to use for 'Visible Mesh' collision queries."); addField("collisionType", TypeTSMeshType, Offset(mCollisionType, TSStatic), "The type of mesh data to use for collision queries."); addField("decalType", TypeTSMeshType, Offset(mDecalType, TSStatic), @@ -531,20 +533,20 @@ void TSStatic::prepCollision() if (mCollisionType == CollisionMesh || mCollisionType == VisibleMesh) { - mShape->findColDetails(mCollisionType == VisibleMesh, &mCollisionDetails, &mLOSDetails); + mShape->findColDetails(mCollisionType == VisibleMesh, &mCollisionDetails, &mLOSDetails, mCollisionLOD); if (mDecalType == mCollisionType) { mDecalDetailsPtr = &mCollisionDetails; } else if (mDecalType == CollisionMesh || mDecalType == VisibleMesh) { - mShape->findColDetails(mDecalType == VisibleMesh, &mDecalDetails, 0); + mShape->findColDetails(mDecalType == VisibleMesh, &mDecalDetails, 0, mCollisionLOD); mDecalDetailsPtr = &mDecalDetails; } } else if (mDecalType == CollisionMesh || mDecalType == VisibleMesh) { - mShape->findColDetails(mDecalType == VisibleMesh, &mDecalDetails, 0); + mShape->findColDetails(mDecalType == VisibleMesh, &mDecalDetails, 0, mCollisionLOD); mDecalDetailsPtr = &mDecalDetails; } @@ -947,8 +949,10 @@ U32 TSStatic::packUpdate(NetConnection* con, U32 mask, BitStream* stream) } if (stream->writeFlag(mask & UpdateCollisionMask)) + { + stream->write(mCollisionLOD); stream->write((U32)mCollisionType); - + } if (stream->writeFlag(mask & SkinMask)) con->packNetStringHandleU(stream, mSkinNameHandle); @@ -1045,6 +1049,7 @@ void TSStatic::unpackUpdate(NetConnection* con, BitStream* stream) { U32 collisionType = CollisionMesh; + stream->read(&mCollisionLOD); stream->read(&collisionType); // Handle it if we have changed CollisionType's @@ -1255,7 +1260,7 @@ bool TSStatic::buildPolyList(PolyListContext context, AbstractPolyList* polyList else if (meshType == Bounds) polyList->addBox(mObjBox); else if (meshType == VisibleMesh) - mShapeInstance->buildPolyList(polyList, 0); + mShapeInstance->buildPolyListOpcode(0, polyList, box); else if (context == PLC_Decal && mDecalDetailsPtr != 0) { for (U32 i = 0; i < mDecalDetailsPtr->size(); i++) diff --git a/Engine/source/T3D/tsStatic.h b/Engine/source/T3D/tsStatic.h index d0c9f6c46..fef5ed0bb 100644 --- a/Engine/source/T3D/tsStatic.h +++ b/Engine/source/T3D/tsStatic.h @@ -205,6 +205,7 @@ protected: TSThread* mAmbientThread; F32 mAnimOffset; F32 mAnimSpeed; + S16 mCollisionLOD; /// The type of mesh data to return for collision queries. MeshType mCollisionType;