From 9123f4f2afdc7738087dadf59ee5ddee342ea9e8 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Fri, 18 Jan 2013 16:21:29 -0800 Subject: [PATCH] Return the movement vector from runAnimation --- apps/openmw/mwrender/activatoranimation.cpp | 7 ------- apps/openmw/mwrender/activatoranimation.hpp | 2 -- apps/openmw/mwrender/animation.cpp | 14 +++++++++----- apps/openmw/mwrender/animation.hpp | 4 ++-- apps/openmw/mwrender/creatureanimation.cpp | 12 ++---------- apps/openmw/mwrender/creatureanimation.hpp | 2 -- apps/openmw/mwrender/npcanimation.cpp | 4 ++-- apps/openmw/mwrender/npcanimation.hpp | 2 +- 8 files changed, 16 insertions(+), 31 deletions(-) diff --git a/apps/openmw/mwrender/activatoranimation.cpp b/apps/openmw/mwrender/activatoranimation.cpp index 18ae31865..f951307b6 100644 --- a/apps/openmw/mwrender/activatoranimation.cpp +++ b/apps/openmw/mwrender/activatoranimation.cpp @@ -54,11 +54,4 @@ ActivatorAnimation::ActivatorAnimation(const MWWorld::Ptr &ptr) } } -void ActivatorAnimation::runAnimation(float timepassed) -{ - // Placeholder - - Animation::runAnimation(timepassed); -} - } diff --git a/apps/openmw/mwrender/activatoranimation.hpp b/apps/openmw/mwrender/activatoranimation.hpp index f3d8d86c8..f3ea38f44 100644 --- a/apps/openmw/mwrender/activatoranimation.hpp +++ b/apps/openmw/mwrender/activatoranimation.hpp @@ -15,8 +15,6 @@ namespace MWRender public: ActivatorAnimation(const MWWorld::Ptr& ptr); virtual ~ActivatorAnimation(); - - virtual void runAnimation(float timepassed); }; } diff --git a/apps/openmw/mwrender/animation.cpp b/apps/openmw/mwrender/animation.cpp index cfc72de37..f9fa6e14c 100644 --- a/apps/openmw/mwrender/animation.cpp +++ b/apps/openmw/mwrender/animation.cpp @@ -125,16 +125,17 @@ void Animation::setAccumulation(const Ogre::Vector3 &accum) } -void Animation::updatePosition(float time) +Ogre::Vector3 Animation::updatePosition(float time) { mAnimState->setTimePosition(time); + Ogre::Vector3 posdiff = Ogre::Vector3::ZERO; if(mNonAccumRoot) { /* Update the animation and get the non-accumulation root's difference from the * last update. */ mEntityList.mSkelBase->getSkeleton()->setAnimationState(*mAnimState->getParent()); - Ogre::Vector3 posdiff = (mNonAccumRoot->getPosition() - mLastPosition) * mAccumulate; + posdiff = (mNonAccumRoot->getPosition() - mLastPosition) * mAccumulate; /* Translate the accumulation root back to compensate for the move. */ mAccumRoot->translate(-posdiff); @@ -150,6 +151,7 @@ void Animation::updatePosition(float time) world->moveObject(mPtr, newpos.x, newpos.y, newpos.z); } } + return posdiff; } void Animation::resetPosition(float time) @@ -212,14 +214,15 @@ void Animation::play(const std::string &groupname, const std::string &start) } } -void Animation::runAnimation(float timepassed) +Ogre::Vector3 Animation::runAnimation(float timepassed) { + Ogre::Vector3 movement = Ogre::Vector3::ZERO; while(mAnimState && timepassed > 0.0f) { float targetTime = mAnimState->getTimePosition() + timepassed; if(mNextKey == mCurrentKeys->end() || mNextKey->first > targetTime) { - updatePosition(targetTime); + movement += updatePosition(targetTime); break; } @@ -227,12 +230,13 @@ void Animation::runAnimation(float timepassed) const std::string &evt = mNextKey->second; mNextKey++; - updatePosition(time); + movement += updatePosition(time); timepassed = targetTime - time; if(mController) mController->markerEvent(time, evt); } + return movement; } } diff --git a/apps/openmw/mwrender/animation.hpp b/apps/openmw/mwrender/animation.hpp index 32d51775a..dfa2950f3 100644 --- a/apps/openmw/mwrender/animation.hpp +++ b/apps/openmw/mwrender/animation.hpp @@ -34,7 +34,7 @@ protected: /* Updates the animation to the specified time, and moves the mPtr object * based on the change since the last update or reset. */ - void updatePosition(float time); + Ogre::Vector3 updatePosition(float time); /* Updates the animation to the specified time, without moving the mPtr * object. */ void resetPosition(float time); @@ -56,7 +56,7 @@ public: void setAccumulation(const Ogre::Vector3 &accum); void play(const std::string &groupname, const std::string &start); - virtual void runAnimation(float timepassed); + virtual Ogre::Vector3 runAnimation(float timepassed); }; } diff --git a/apps/openmw/mwrender/creatureanimation.cpp b/apps/openmw/mwrender/creatureanimation.cpp index caa040d95..34b09c0d0 100644 --- a/apps/openmw/mwrender/creatureanimation.cpp +++ b/apps/openmw/mwrender/creatureanimation.cpp @@ -8,9 +8,8 @@ #include "../mwbase/world.hpp" -using namespace Ogre; -using namespace NifOgre; -namespace MWRender{ +namespace MWRender +{ CreatureAnimation::~CreatureAnimation() { @@ -55,11 +54,4 @@ CreatureAnimation::CreatureAnimation(const MWWorld::Ptr &ptr) } } -void CreatureAnimation::runAnimation(float timepassed) -{ - // Placeholder - - Animation::runAnimation(timepassed); -} - } diff --git a/apps/openmw/mwrender/creatureanimation.hpp b/apps/openmw/mwrender/creatureanimation.hpp index 5456f857f..0c277d198 100644 --- a/apps/openmw/mwrender/creatureanimation.hpp +++ b/apps/openmw/mwrender/creatureanimation.hpp @@ -15,8 +15,6 @@ namespace MWRender public: CreatureAnimation(const MWWorld::Ptr& ptr); virtual ~CreatureAnimation(); - - virtual void runAnimation(float timepassed); }; } diff --git a/apps/openmw/mwrender/npcanimation.cpp b/apps/openmw/mwrender/npcanimation.cpp index f309ee899..432a2f526 100644 --- a/apps/openmw/mwrender/npcanimation.cpp +++ b/apps/openmw/mwrender/npcanimation.cpp @@ -308,7 +308,7 @@ NifOgre::EntityList NpcAnimation::insertBoundedPart(const std::string &mesh, int return entities; } -void NpcAnimation::runAnimation(float timepassed) +Ogre::Vector3 NpcAnimation::runAnimation(float timepassed) { if(mTimeToChange > .2) { @@ -317,7 +317,7 @@ void NpcAnimation::runAnimation(float timepassed) } mTimeToChange += timepassed; - Animation::runAnimation(timepassed); + return Animation::runAnimation(timepassed); } void NpcAnimation::removeEntities(NifOgre::EntityList &entities) diff --git a/apps/openmw/mwrender/npcanimation.hpp b/apps/openmw/mwrender/npcanimation.hpp index 161091317..a4e87e722 100644 --- a/apps/openmw/mwrender/npcanimation.hpp +++ b/apps/openmw/mwrender/npcanimation.hpp @@ -98,7 +98,7 @@ public: MWWorld::InventoryStore& inv, int visibilityFlags); virtual ~NpcAnimation(); - virtual void runAnimation(float timepassed); + virtual Ogre::Vector3 runAnimation(float timepassed); void forceUpdate(); };