From 32ba4e06e2d0b77b665591c33bb6599443f504fd Mon Sep 17 00:00:00 2001 From: Skoader Date: Fri, 26 Oct 2012 10:48:30 +1100 Subject: [PATCH] Fix controlled flight bug fControlledFlight state should be handled outside of the physics step. --- .../plAvatar/plPhysicalControllerCore.cpp | 23 +++++++++++-------- .../plAvatar/plPhysicalControllerCore.h | 4 +++- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.cpp b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.cpp index 304bd46d..60ac3f14 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.cpp +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.cpp @@ -503,15 +503,6 @@ void plWalkingStrategy::Update(hsScalar delSecs) fImpactVelocity = (hsVector3)fController->GetLocalRotation().Rotate(&fImpactVelocity); fClearImpact = false; } - - if (fControlledFlight != 0) - { - if (IsOnGround()) - fControlledFlightTime = fTimeInAir; - - if (fControlledFlightTime > kControlledFlightThreshold) - EnableControlledFlight(false); - } } void plWalkingStrategy::AddContactNormals(hsVector3& vec) @@ -535,6 +526,20 @@ void plWalkingStrategy::Reset(bool newAge) } } +void plWalkingStrategy::RecalcVelocity(double timeNow, hsScalar elapsed, hsBool useAnim) +{ + if (fControlledFlight != 0) + { + if (IsOnGround()) + fControlledFlightTime = fTimeInAir; + + if (fControlledFlightTime > kControlledFlightThreshold) + EnableControlledFlight(false); + } + + plAnimatedMovementStrategy::RecalcVelocity(timeNow, elapsed, useAnim); +} + bool plWalkingStrategy::EnableControlledFlight(bool status) { if (status) diff --git a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.h b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.h index 8f56ddc2..4fd2806e 100644 --- a/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.h +++ b/MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/PubUtilLib/plAvatar/plPhysicalControllerCore.h @@ -214,7 +214,7 @@ public: plAnimatedMovementStrategy(plAGApplicator* rootApp, plPhysicalControllerCore* controller); virtual ~plAnimatedMovementStrategy() { } - void RecalcVelocity(double timeNow, hsScalar elapsed, hsBool useAnim = true); + virtual void RecalcVelocity(double timeNow, hsScalar elapsed, hsBool useAnim = true); void SetTurnStrength(hsScalar val) { fTurnStr = val; } hsScalar GetTurnStrength() const { return fTurnStr; } @@ -240,6 +240,8 @@ public: virtual void AddContactNormals(hsVector3& vec); virtual void Reset(bool newAge); + virtual void RecalcVelocity(double timeNow, hsScalar elapsed, hsBool useAnim = true); + bool HitGroundInThisAge() const { return fHitGroundInThisAge; } bool IsOnGround() const { return fTimeInAir < kAirTimeThreshold || fFalseGround; }