Browse Source

Disabled avatar updates

Only update disabled avatars between steps if in a subworld and then don't interpolate their position.
avatar-physics
Skoader 12 years ago
parent
commit
d02cde1703
  1. 17
      MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.cpp

17
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.cpp

@ -194,6 +194,8 @@ void plPhysicalControllerCore::IUpdateNonPhysical(hsScalar alpha)
plSceneObject* so = plSceneObject::ConvertNoRef(fOwner->ObjectIsLoaded());
const hsMatrix44& l2w = so->GetCoordinateInterface()->GetLocalToWorld();
if (CompareMatrices(fLastGlobalLoc, l2w, 0.0001f))
{
if (fEnabled)
{
hsVector3 displacement = (hsVector3)(fLocalPosition - fLastLocalPosition);
hsPoint3 interpLocalPos = fLastLocalPosition + (displacement * alpha);
@ -210,6 +212,21 @@ void plPhysicalControllerCore::IUpdateNonPhysical(hsScalar alpha)
ISendCorrectionMessages();
}
else
{
// Update global location if in a subworld
const plCoordinateInterface* subworldCI = GetSubworldCI();
if (subworldCI)
{
hsMatrix44 l2s = fPrevSubworldW2L * fLastGlobalLoc;
const hsMatrix44& subL2W = subworldCI->GetLocalToWorld();
fLastGlobalLoc = subL2W * l2s;
fPrevSubworldW2L = subworldCI->GetWorldToLocal();
ISendCorrectionMessages();
}
}
}
}
void plPhysicalControllerCore::ISendCorrectionMessages(bool dirtySynch)

Loading…
Cancel
Save