Store movement vectors as they get returned

This commit is contained in:
Chris Robinson 2013-02-05 06:59:01 -08:00
parent 4bd1e63ac1
commit 1c604445ba
2 changed files with 12 additions and 11 deletions

View file

@ -258,19 +258,15 @@ namespace MWMechanics
if(!paused) if(!paused)
{ {
PtrControllerMap::iterator player(mActors.end()); mMovement.reserve(mActors.size());
for(PtrControllerMap::iterator iter(mActors.begin());iter != mActors.end();++iter) for(PtrControllerMap::iterator iter(mActors.begin());iter != mActors.end();++iter)
{ {
if(iter->first.getRefData().getHandle() == "player") Ogre::Vector3 movement = iter->second.update(duration);
{ mMovement.push_back(std::make_pair(iter->first, movement));
/* Make sure player updates last (in case a cell transition occurs) */
player = iter;
continue;
}
iter->second.update(duration);
} }
if(player != mActors.end())
player->second.update(duration); mMovement.clear();
} }
} }

View file

@ -25,9 +25,14 @@ namespace MWMechanics
{ {
typedef std::map<MWWorld::Ptr,CharacterController> PtrControllerMap; typedef std::map<MWWorld::Ptr,CharacterController> PtrControllerMap;
PtrControllerMap mActors; PtrControllerMap mActors;
float mDuration;
typedef std::vector<std::pair<MWWorld::Ptr,Ogre::Vector3> > PtrMovementList;
PtrMovementList mMovement;
std::map<std::string, int> mDeathCount; std::map<std::string, int> mDeathCount;
float mDuration;
void updateNpc (const MWWorld::Ptr& ptr, float duration, bool paused); void updateNpc (const MWWorld::Ptr& ptr, float duration, bool paused);
void adjustMagicEffects (const MWWorld::Ptr& creature); void adjustMagicEffects (const MWWorld::Ptr& creature);