diff --git a/Sources/Plasma/PubUtilLib/plAvatar/plAvCallbackAction.cpp b/Sources/Plasma/PubUtilLib/plAvatar/plAvCallbackAction.cpp index 235c3450..f784ace5 100644 --- a/Sources/Plasma/PubUtilLib/plAvatar/plAvCallbackAction.cpp +++ b/Sources/Plasma/PubUtilLib/plAvatar/plAvCallbackAction.cpp @@ -137,6 +137,8 @@ void plWalkingController::RecalcVelocity(double timeNow, double timePrev, hsBool // always (0,0,0) outside of the controller update proc fImpactTime = fWalkingStrategy->GetAirTime(); fImpactVelocity = fController->GetAchievedLinearVelocity(); + // convert orientation from subworld to avatar-local coordinates + fImpactVelocity = (hsVector3)fController->GetLocalRotation().Rotate(&fImpactVelocity); fClearImpact = false; } else diff --git a/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.h b/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.h index 00f6ce31..44ba1ba8 100644 --- a/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.h +++ b/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.h @@ -147,6 +147,7 @@ public: virtual void CheckAndHandleAnyStateChanges(); virtual void UpdateSubstepNonPhysical(); virtual const hsPoint3& GetLocalPosition()=0; + const hsQuat& GetLocalRotation() { return fLocalRotation; } virtual void MoveActorToSim(); virtual void OverrideAchievedVelocity(hsVector3 newAchievedVel)