forked from teamnwah/openmw-tes3coop
Avoid unnecessary AABB update when actor position has not changed
This commit is contained in:
parent
fb073e5c14
commit
a55604c549
1 changed files with 6 additions and 2 deletions
|
@ -1419,14 +1419,18 @@ namespace MWPhysics
|
|||
|
||||
osg::Vec3f position = physicActor->getPosition();
|
||||
float oldHeight = position.z();
|
||||
bool positionChanged = false;
|
||||
for (int i=0; i<numSteps; ++i)
|
||||
{
|
||||
position = MovementSolver::move(position, physicActor->getPtr(), physicActor, iter->second, physicsDt,
|
||||
world->isFlying(iter->first),
|
||||
waterlevel, slowFall, mCollisionWorld, mStandingCollisions);
|
||||
physicActor->setPosition(position);
|
||||
if (position != physicActor->getPosition())
|
||||
positionChanged = true;
|
||||
physicActor->setPosition(position); // always set even if unchanged to make sure interpolation is correct
|
||||
}
|
||||
mCollisionWorld->updateSingleAabb(physicActor->getCollisionObject());
|
||||
if (positionChanged)
|
||||
mCollisionWorld->updateSingleAabb(physicActor->getCollisionObject());
|
||||
|
||||
float interpolationFactor = mTimeAccum / physicsDt;
|
||||
osg::Vec3f interpolated = position * interpolationFactor + physicActor->getPreviousPosition() * (1.f - interpolationFactor);
|
||||
|
|
Loading…
Reference in a new issue