2
3
mirror of https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git synced 2025-07-14 10:37:41 -04:00

Fix controlled flight bug

fControlledFlight state should be handled outside of the physics step.
This commit is contained in:
Skoader
2012-12-01 22:40:26 -05:00
committed by Adam Johnson
parent 47efb94aa8
commit 2f25e04909
2 changed files with 17 additions and 10 deletions

View File

@ -503,15 +503,6 @@ void plWalkingStrategy::Update(float 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, float elapsed, bool 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)

View File

@ -214,7 +214,7 @@ public:
plAnimatedMovementStrategy(plAGApplicator* rootApp, plPhysicalControllerCore* controller);
virtual ~plAnimatedMovementStrategy() { }
void RecalcVelocity(double timeNow, float elapsed, bool useAnim = true);
virtual void RecalcVelocity(double timeNow, float elapsed, bool useAnim = true);
void SetTurnStrength(float val) { fTurnStr = val; }
float GetTurnStrength() const { return fTurnStr; }
@ -240,6 +240,8 @@ public:
virtual void AddContactNormals(hsVector3& vec);
virtual void Reset(bool newAge);
virtual void RecalcVelocity(double timeNow, float elapsed, bool useAnim = true);
bool HitGroundInThisAge() const { return fHitGroundInThisAge; }
bool IsOnGround() const { return fTimeInAir < kAirTimeThreshold || fFalseGround; }