1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-02-20 21:09:40 +00:00

Fix actor stepping

This commit is contained in:
Chris Robinson 2013-08-25 11:04:55 -07:00
parent 0463dc0653
commit 3843357cd2

View file

@ -29,7 +29,7 @@ namespace MWWorld
{
static const float sMaxSlope = 60.0f;
static const float sStepSize = 30.0f;
static const float sStepSize = 32.0f;
// Arbitrary number. To prevent infinite loops. They shouldn't happen but it's good to be prepared.
static const int sMaxIterations = 8;
@ -48,16 +48,15 @@ namespace MWWorld
OEngine::Physic::ActorTracer tracer, stepper;
stepper.doTrace(colobj, position, position+Ogre::Vector3(0.0f,0.0f,sStepSize), engine);
if(stepper.mFraction == 0.0f)
if(stepper.mFraction < std::numeric_limits<float>::epsilon())
return false;
tracer.doTrace(colobj, stepper.mEndPos, stepper.mEndPos + velocity*remainingTime, engine);
if(tracer.mFraction < std::numeric_limits<float>::epsilon() ||
(tracer.mFraction < 1.0f && getSlope(tracer.mPlaneNormal) > sMaxSlope))
if(tracer.mFraction < std::numeric_limits<float>::epsilon())
return false;
stepper.doTrace(colobj, tracer.mEndPos, tracer.mEndPos-Ogre::Vector3(0.0f,0.0f,sStepSize), engine);
if(getSlope(stepper.mPlaneNormal) <= sMaxSlope)
if(stepper.mFraction < 1.0f && getSlope(stepper.mPlaneNormal) <= sMaxSlope)
{
// only step down onto semi-horizontal surfaces. don't step down onto the side of a house or a wall.
position = stepper.mEndPos;