1
0
mirror of https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git synced 2025-07-19 19:59:09 +00:00

Fix warping an avatar triggers all detectors along the path

When explicitly moving an avatar over the given threshold, teleport the underlying
actor most of the way before moving the controller.
This commit is contained in:
Skoader
2012-10-23 13:45:21 +11:00
parent 87b8dfae09
commit b5296d614f

View File

@ -334,6 +334,7 @@ void plPXPhysicalControllerCore::SetGlobalLoc(const hsMatrix44& l2w)
fLastGlobalLoc = l2w;
// Update our local position and rotation
hsPoint3 prevPosition = fLocalPosition;
const plCoordinateInterface* subworldCI = GetSubworldCI();
if (subworldCI)
{
@ -360,8 +361,20 @@ void plPXPhysicalControllerCore::SetGlobalLoc(const hsMatrix44& l2w)
// Update the physical position
if (fKinematicCCT)
{
NxExtendedVec3 pos(fLocalPosition.fX, fLocalPosition.fY, fLocalPosition.fZ + kCCTZOffset);
fController->setPosition(pos);
hsVector3 disp(&fLocalPosition, &prevPosition);
if (disp.Magnitude() > 2.f)
{
// Teleport the underlying actor most of the way
disp.Normalize();
disp *= 0.001f;
hsPoint3 teleportPos = fLocalPosition - disp;
NxVec3 pos(teleportPos.fX, teleportPos.fY, teleportPos.fZ + kPhysZOffset);
fActor->setGlobalPosition(pos);
}
NxExtendedVec3 extPos(fLocalPosition.fX, fLocalPosition.fY, fLocalPosition.fZ + kCCTZOffset);
fController->setPosition(extPos);
}
else
{