|
@@ -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++)
|