mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-20 15:40:32 +00:00
Filter out unchanged animated objects for navigator update
This commit is contained in:
parent
05b54cbfb8
commit
832ab103cb
@ -490,7 +490,7 @@ namespace MWPhysics
|
||||
mObjects.emplace(ptr.mRef, obj);
|
||||
|
||||
if (obj->isAnimated())
|
||||
mAnimatedObjects.insert(obj.get());
|
||||
mAnimatedObjects.emplace(obj.get(), false);
|
||||
}
|
||||
|
||||
void PhysicsSystem::remove(const MWWorld::Ptr &ptr)
|
||||
@ -739,13 +739,18 @@ namespace MWPhysics
|
||||
|
||||
void PhysicsSystem::stepSimulation(float dt, bool skipSimulation, osg::Timer_t frameStart, unsigned int frameNumber, osg::Stats& stats)
|
||||
{
|
||||
for (Object* animatedObject : mAnimatedObjects)
|
||||
for (auto& [animatedObject, changed] : mAnimatedObjects)
|
||||
{
|
||||
if (animatedObject->animateCollisionShapes())
|
||||
{
|
||||
auto obj = mObjects.find(animatedObject->getPtr().mRef);
|
||||
assert(obj != mObjects.end());
|
||||
mTaskScheduler->updateSingleAabb(obj->second);
|
||||
changed = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
changed = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -300,7 +300,7 @@ namespace MWPhysics
|
||||
using ObjectMap = std::unordered_map<const MWWorld::LiveCellRefBase*, std::shared_ptr<Object>>;
|
||||
ObjectMap mObjects;
|
||||
|
||||
std::set<Object*> mAnimatedObjects; // stores pointers to elements in mObjects
|
||||
std::map<Object*, bool> mAnimatedObjects; // stores pointers to elements in mObjects
|
||||
|
||||
ActorMap mActors;
|
||||
|
||||
|
@ -1525,7 +1525,12 @@ namespace MWWorld
|
||||
|
||||
void World::updateNavigator()
|
||||
{
|
||||
mPhysics->forEachAnimatedObject([&] (const MWPhysics::Object* object) { updateNavigatorObject(*object); });
|
||||
mPhysics->forEachAnimatedObject([&] (const auto& pair)
|
||||
{
|
||||
const auto [object, changed] = pair;
|
||||
if (changed)
|
||||
updateNavigatorObject(*object);
|
||||
});
|
||||
|
||||
for (const auto& door : mDoorStates)
|
||||
if (const auto object = mPhysics->getObject(door.first))
|
||||
|
Loading…
x
Reference in New Issue
Block a user