From 3d0f01ff03ca5034644e375f6a1962315ef7b337 Mon Sep 17 00:00:00 2001 From: Christian Walther Date: Wed, 18 Apr 2012 20:51:14 +0200 Subject: [PATCH] Convert the impact velocity to avatar-local coordinates, because that's what {Running|Ground}Impact::PreCondition() expects. Fixes landing animations depending on what direction relative to the age you jump rather than whether you land forward or straight down. --- Sources/Plasma/PubUtilLib/plAvatar/plAvCallbackAction.cpp | 2 ++ Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.h | 1 + 2 files changed, 3 insertions(+) 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)