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:
parent
4b846a54f1
commit
52bf3af565
3 changed files with 14 additions and 7 deletions
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in a new issue