mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-04 06:56:39 +00:00 
			
		
		
		
	Trigger navmesh update when any navigator object has been updated
Set World::mShouldUpdateNavigator to true when this happens. Previously assignment to true was missing for object rotation and moving.
This commit is contained in:
		
							parent
							
								
									6d3cc0d281
								
							
						
					
					
						commit
						c7c0d11cab
					
				
					 2 changed files with 12 additions and 14 deletions
				
			
		| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue