mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-30 03:32:36 +00:00
Avoid unnecessary AABB update when actor position has not changed
This commit is contained in:
parent
fb073e5c14
commit
a55604c549
@ -1419,14 +1419,18 @@ namespace MWPhysics
|
|||||||
|
|
||||||
osg::Vec3f position = physicActor->getPosition();
|
osg::Vec3f position = physicActor->getPosition();
|
||||||
float oldHeight = position.z();
|
float oldHeight = position.z();
|
||||||
|
bool positionChanged = false;
|
||||||
for (int i=0; i<numSteps; ++i)
|
for (int i=0; i<numSteps; ++i)
|
||||||
{
|
{
|
||||||
position = MovementSolver::move(position, physicActor->getPtr(), physicActor, iter->second, physicsDt,
|
position = MovementSolver::move(position, physicActor->getPtr(), physicActor, iter->second, physicsDt,
|
||||||
world->isFlying(iter->first),
|
world->isFlying(iter->first),
|
||||||
waterlevel, slowFall, mCollisionWorld, mStandingCollisions);
|
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;
|
float interpolationFactor = mTimeAccum / physicsDt;
|
||||||
osg::Vec3f interpolated = position * interpolationFactor + physicActor->getPreviousPosition() * (1.f - interpolationFactor);
|
osg::Vec3f interpolated = position * interpolationFactor + physicActor->getPreviousPosition() * (1.f - interpolationFactor);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user