1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-01-20 07:53:51 +00:00

make World::PhysicsSystem not depending on World::World

This commit is contained in:
Sebastian Wick 2011-08-02 18:16:39 +02:00
parent 4b846a54f1
commit 52bf3af565
3 changed files with 14 additions and 7 deletions

View file

@ -25,7 +25,7 @@ namespace MWWorld
} }
void PhysicsSystem::doPhysics (float duration, MWWorld::World& world, std::vector< std::pair<const std::string*, Ogre::Vector3> > PhysicsSystem::doPhysics (float duration,
const std::vector<std::pair<std::string, Ogre::Vector3> >& actors) const std::vector<std::pair<std::string, Ogre::Vector3> >& actors)
{ {
// stop changes to world from being reported back to the physics system // stop changes to world from being reported back to the physics system
@ -71,13 +71,15 @@ namespace MWWorld
} }
mEngine->stepSimulation(duration); mEngine->stepSimulation(duration);
std::vector< std::pair<const std::string*, Ogre::Vector3> > response;
for(std::map<std::string,OEngine::Physic::PhysicActor*>::iterator it = mEngine->PhysicActorMap.begin(); it != mEngine->PhysicActorMap.end();it++) for(std::map<std::string,OEngine::Physic::PhysicActor*>::iterator it = mEngine->PhysicActorMap.begin(); it != mEngine->PhysicActorMap.end();it++)
{ {
OEngine::Physic::PhysicActor* act = it->second; btVector3 newPos = it->second->getPosition();
btVector3 newPos = act->getPosition(); Ogre::Vector3 coord(newPos.x(), newPos.y(), newPos.z());
MWWorld::Ptr ptr = world.getPtrViaHandle (it->first);
world.moveObject (ptr, newPos.x(), newPos.y(), newPos.z()); response.push_back(std::pair<const std::string*, Ogre::Vector3>(&it->first, coord));
} }
return response;
} }
void PhysicsSystem::addObject (const std::string& handle, const std::string& mesh, void PhysicsSystem::addObject (const std::string& handle, const std::string& mesh,

View file

@ -14,7 +14,7 @@ namespace MWWorld
PhysicsSystem (OEngine::Render::OgreRenderer &_rend , OEngine::Physic::PhysicEngine* physEng); PhysicsSystem (OEngine::Render::OgreRenderer &_rend , OEngine::Physic::PhysicEngine* physEng);
~PhysicsSystem (); ~PhysicsSystem ();
void doPhysics (float duration, MWWorld::World& world, std::vector< std::pair<const std::string*, Ogre::Vector3> > doPhysics (float duration,
const std::vector<std::pair<std::string, Ogre::Vector3> >& actors); const std::vector<std::pair<std::string, Ogre::Vector3> >& actors);
void addObject (const std::string& handle, const std::string& mesh, void addObject (const std::string& handle, const std::string& mesh,

View file

@ -713,7 +713,12 @@ namespace MWWorld
void World::doPhysics (const std::vector<std::pair<std::string, Ogre::Vector3> >& actors, void World::doPhysics (const std::vector<std::pair<std::string, Ogre::Vector3> >& actors,
float duration) float duration)
{ {
mPhysics->doPhysics (duration, *this, actors); std::vector< std::pair<const std::string*, Ogre::Vector3> > vectors = mPhysics->doPhysics (duration, actors);
std::vector< std::pair<const std::string*, Ogre::Vector3> >::iterator it;
for(it = vectors.begin(); it != vectors.end(); it++) {
MWWorld::Ptr ptr = getPtrViaHandle (*it->first);
moveObject (ptr, it->second.x, it->second.y, it->second.z);
}
} }
bool World::toggleCollisionMode() bool World::toggleCollisionMode()