mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-14 06:40:40 +00:00
Store animated collision objects in a separate container
This commit is contained in:
parent
36e91617c9
commit
894477849a
@ -549,6 +549,11 @@ namespace MWPhysics
|
||||
return mCollisionObject.get();
|
||||
}
|
||||
|
||||
bool isAnimated() const
|
||||
{
|
||||
return !mShapeInstance->mAnimatedShapes.empty();
|
||||
}
|
||||
|
||||
void animateCollisionShapes(btCollisionWorld* collisionWorld)
|
||||
{
|
||||
if (mShapeInstance->mAnimatedShapes.empty())
|
||||
@ -1015,6 +1020,9 @@ namespace MWPhysics
|
||||
Object *obj = new Object(ptr, shapeInstance);
|
||||
mObjects.insert(std::make_pair(ptr, obj));
|
||||
|
||||
if (obj->isAnimated())
|
||||
mAnimatedObjects.insert(obj);
|
||||
|
||||
mCollisionWorld->addCollisionObject(obj->getCollisionObject(), CollisionType_World,
|
||||
CollisionType_Actor|CollisionType_HeightMap|CollisionType_Projectile);
|
||||
}
|
||||
@ -1025,6 +1033,9 @@ namespace MWPhysics
|
||||
if (found != mObjects.end())
|
||||
{
|
||||
mCollisionWorld->removeCollisionObject(found->second->getCollisionObject());
|
||||
|
||||
mAnimatedObjects.erase(found->second);
|
||||
|
||||
delete found->second;
|
||||
mObjects.erase(found);
|
||||
}
|
||||
@ -1251,8 +1262,8 @@ namespace MWPhysics
|
||||
|
||||
void PhysicsSystem::stepSimulation(float dt)
|
||||
{
|
||||
for (ObjectMap::iterator it = mObjects.begin(); it != mObjects.end(); ++it)
|
||||
it->second->animateCollisionShapes(mCollisionWorld);
|
||||
for (std::set<Object*>::iterator it = mAnimatedObjects.begin(); it != mAnimatedObjects.end(); ++it)
|
||||
(*it)->animateCollisionShapes(mCollisionWorld);
|
||||
|
||||
CProfileManager::Reset();
|
||||
CProfileManager::Increment_Frame_Counter();
|
||||
|
@ -3,6 +3,7 @@
|
||||
|
||||
#include <memory>
|
||||
#include <map>
|
||||
#include <set>
|
||||
|
||||
#include <osg/Quat>
|
||||
#include <osg/ref_ptr>
|
||||
@ -166,6 +167,8 @@ namespace MWPhysics
|
||||
typedef std::map<MWWorld::Ptr, Object*> ObjectMap;
|
||||
ObjectMap mObjects;
|
||||
|
||||
std::set<Object*> mAnimatedObjects; // stores pointers to elements in mObjects
|
||||
|
||||
typedef std::map<MWWorld::Ptr, Actor*> ActorMap;
|
||||
ActorMap mActors;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user