Browse Source

Fix avatar clothing bounds test.

Bounds type needs be checked after refreshing the bsp tree.
Skoader 13 years ago committed by Adam Johnson
parent
commit
2290aab5a8
  1. 33
      Sources/Plasma/PubUtilLib/plAvatar/plAvatarClothing.cpp

33
Sources/Plasma/PubUtilLib/plAvatar/plAvatarClothing.cpp

@ -1232,24 +1232,21 @@ hsBool plClothingOutfit::MsgReceive(plMessage* msg)
if (fAvatar && fGroup != plClothingMgr::kClothingBaseNoOptions)
{
plDrawable *spans = fAvatar->FindDrawable();
const hsBounds3Ext &bnds = spans->GetWorldBounds();
if (bnds.GetType() == kBoundsNormal)
{
// This is a bit hacky... The drawable code has just run through and updated
// each span's bounds (see plDrawableSpans::IUpdateMatrixPaletteBoundsHack())
// but not the world bounds for the entire drawable. So we tell the space tree
// to refresh. However, the pageTreeMgr would then get confused because the
// space tree is no longer dirty (see plPageTreeMgr::IRefreshTree()),
// causing the avatar to only draw if the origin is in view.
// So we just force it dirty, and everyone's happy.
spans->GetSpaceTree()->Refresh();
spans->GetSpaceTree()->MakeDirty();
// Where were we? Oh yeah... if this avatar is in view it needs a texture. Tell
// the pipeline.
if (preMsg->Pipeline()->TestVisibleWorld(spans->GetSpaceTree()->GetWorldBounds()))
preMsg->Pipeline()->SubmitClothingOutfit(this);
}
// This is a bit hacky... The drawable code has just run through and updated
// each span's bounds (see plDrawableSpans::IUpdateMatrixPaletteBoundsHack())
// but not the world bounds for the entire drawable. So we tell the space tree
// to refresh. However, the pageTreeMgr would then get confused because the
// space tree is no longer dirty (see plPageTreeMgr::IRefreshTree()),
// causing the avatar to only draw if the origin is in view.
// So we just force it dirty, and everyone's happy.
spans->GetSpaceTree()->Refresh();
spans->GetSpaceTree()->MakeDirty();
// Where were we? Oh yeah... if this avatar is in view it needs a texture. Tell
// the pipeline.
const hsBounds3Ext &bnds = spans->GetSpaceTree()->GetWorldBounds();
if ((bnds.GetType() == kBoundsNormal) && preMsg->Pipeline()->TestVisibleWorld(bnds))
preMsg->Pipeline()->SubmitClothingOutfit(this);
}
}

Loading…
Cancel
Save