2
3
mirror of https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git synced 2025-07-14 10:37:41 -04: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-12-01 22:09:53 -05:00
committed by Adam Johnson
parent b5aaecc48d
commit 47efb94aa8

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
{