1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-03-17 10:21:11 +00:00

Merge branch 'fix_navmesh_update' into 'master'

Fix navmesh update on opening/closing door

See merge request OpenMW/openmw!995
This commit is contained in:
psi29a 2021-07-05 07:30:32 +00:00
commit 9123db3a59
2 changed files with 12 additions and 14 deletions

View File

@ -1224,7 +1224,7 @@ namespace MWWorld
if (movePhysics) if (movePhysics)
{ {
if (const auto object = mPhysics->getObject(ptr)) if (const auto object = mPhysics->getObject(ptr))
updateNavigatorObject(object); updateNavigatorObject(*object);
} }
} }
@ -1283,7 +1283,7 @@ namespace MWWorld
if (mPhysics->getActor(ptr)) if (mPhysics->getActor(ptr))
mNavigator->addAgent(getPathfindingHalfExtents(ptr)); mNavigator->addAgent(getPathfindingHalfExtents(ptr));
else if (const auto object = mPhysics->getObject(ptr)) else if (const auto object = mPhysics->getObject(ptr))
mShouldUpdateNavigator = updateNavigatorObject(object) || mShouldUpdateNavigator; updateNavigatorObject(*object);
} }
void World::rotateObjectImp(const Ptr& ptr, const osg::Vec3f& rot, MWBase::RotationFlags flags) void World::rotateObjectImp(const Ptr& ptr, const osg::Vec3f& rot, MWBase::RotationFlags flags)
@ -1332,7 +1332,7 @@ namespace MWWorld
mWorldScene->updateObjectRotation(ptr, order); mWorldScene->updateObjectRotation(ptr, order);
if (const auto object = mPhysics->getObject(ptr)) if (const auto object = mPhysics->getObject(ptr))
updateNavigatorObject(object); updateNavigatorObject(*object);
} }
} }
@ -1424,7 +1424,7 @@ namespace MWWorld
mPhysics->updateRotation(ptr, rotate); mPhysics->updateRotation(ptr, rotate);
if (const auto object = mPhysics->getObject(ptr)) if (const auto object = mPhysics->getObject(ptr))
updateNavigatorObject(object); updateNavigatorObject(*object);
} }
} }
@ -1544,14 +1544,11 @@ namespace MWWorld
void World::updateNavigator() void World::updateNavigator()
{ {
mPhysics->forEachAnimatedObject([&] (const MWPhysics::Object* object) mPhysics->forEachAnimatedObject([&] (const MWPhysics::Object* object) { updateNavigatorObject(*object); });
{
mShouldUpdateNavigator = updateNavigatorObject(object) || mShouldUpdateNavigator;
});
for (const auto& door : mDoorStates) for (const auto& door : mDoorStates)
if (const auto object = mPhysics->getObject(door.first)) if (const auto object = mPhysics->getObject(door.first))
mShouldUpdateNavigator = updateNavigatorObject(object) || mShouldUpdateNavigator; updateNavigatorObject(*object);
if (mShouldUpdateNavigator) if (mShouldUpdateNavigator)
{ {
@ -1560,13 +1557,14 @@ namespace MWWorld
} }
} }
bool World::updateNavigatorObject(const MWPhysics::Object* object) void World::updateNavigatorObject(const MWPhysics::Object& object)
{ {
const DetourNavigator::ObjectShapes shapes { const DetourNavigator::ObjectShapes shapes {
*object->getShapeInstance()->getCollisionShape(), *object.getShapeInstance()->getCollisionShape(),
object->getShapeInstance()->getAvoidCollisionShape() object.getShapeInstance()->getAvoidCollisionShape()
}; };
return mNavigator->updateObject(DetourNavigator::ObjectId(object), shapes, object->getTransform()); mShouldUpdateNavigator = mNavigator->updateObject(DetourNavigator::ObjectId(&object), shapes, object.getTransform())
|| mShouldUpdateNavigator;
} }
const MWPhysics::RayCastingInterface* World::getRayCasting() const const MWPhysics::RayCastingInterface* World::getRayCasting() const

View File

@ -156,7 +156,7 @@ namespace MWWorld
void updateNavigator(); void updateNavigator();
bool updateNavigatorObject(const MWPhysics::Object* object); void updateNavigatorObject(const MWPhysics::Object& object);
void ensureNeededRecords(); void ensureNeededRecords();