mirror of
https://github.com/OpenMW/openmw.git
synced 2025-01-22 10:53:54 +00:00
Return the animation movement from the character controller.
Consequently, dead actors don't move anymore. The doPhysics call apparently isn't moving them.
This commit is contained in:
parent
9123f4f2af
commit
1cdd64cd9b
3 changed files with 20 additions and 16 deletions
|
@ -120,10 +120,25 @@ void CharacterController::markerEvent(float time, const std::string &evt)
|
||||||
|
|
||||||
Ogre::Vector3 CharacterController::update(float duration)
|
Ogre::Vector3 CharacterController::update(float duration)
|
||||||
{
|
{
|
||||||
|
Ogre::Vector3 movement = Ogre::Vector3::ZERO;
|
||||||
if(mAnimation && !mSkipAnim)
|
if(mAnimation && !mSkipAnim)
|
||||||
mAnimation->runAnimation(duration);
|
movement += mAnimation->runAnimation(duration);
|
||||||
mSkipAnim = false;
|
mSkipAnim = false;
|
||||||
return mDirection;
|
|
||||||
|
if(getState() == CharState_SpecialIdle || getState() == CharState_Idle ||
|
||||||
|
getState() == CharState_Dead)
|
||||||
|
{
|
||||||
|
// FIXME: mDirection shouldn't influence the movement here.
|
||||||
|
movement += mDirection;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// FIXME: mDirection should be normalized after setting the speed of
|
||||||
|
// the animation in setDirection, rather than here.
|
||||||
|
movement = mDirection.normalisedCopy() * movement.length();
|
||||||
|
}
|
||||||
|
|
||||||
|
return movement;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -140,16 +140,6 @@ Ogre::Vector3 Animation::updatePosition(float time)
|
||||||
/* Translate the accumulation root back to compensate for the move. */
|
/* Translate the accumulation root back to compensate for the move. */
|
||||||
mAccumRoot->translate(-posdiff);
|
mAccumRoot->translate(-posdiff);
|
||||||
mLastPosition += posdiff;
|
mLastPosition += posdiff;
|
||||||
|
|
||||||
if(mPtr.isInCell())
|
|
||||||
{
|
|
||||||
/* Finally, move the object based on how much the non-accumulation root moved. */
|
|
||||||
Ogre::Vector3 newpos(mPtr.getRefData().getPosition().pos);
|
|
||||||
newpos += mInsert->getOrientation() * posdiff;
|
|
||||||
|
|
||||||
MWBase::World *world = MWBase::Environment::get().getWorld();
|
|
||||||
world->moveObject(mPtr, newpos.x, newpos.y, newpos.z);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return posdiff;
|
return posdiff;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,11 +32,10 @@ protected:
|
||||||
NifOgre::TextKeyMap::const_iterator mNextKey;
|
NifOgre::TextKeyMap::const_iterator mNextKey;
|
||||||
Ogre::AnimationState *mAnimState;
|
Ogre::AnimationState *mAnimState;
|
||||||
|
|
||||||
/* Updates the animation to the specified time, and moves the mPtr object
|
/* Updates the animation to the specified time, and returns the movement
|
||||||
* based on the change since the last update or reset. */
|
* vector since the last update or reset. */
|
||||||
Ogre::Vector3 updatePosition(float time);
|
Ogre::Vector3 updatePosition(float time);
|
||||||
/* Updates the animation to the specified time, without moving the mPtr
|
/* Updates the animation to the specified time, without moving anything. */
|
||||||
* object. */
|
|
||||||
void resetPosition(float time);
|
void resetPosition(float time);
|
||||||
|
|
||||||
float findStart(const std::string &groupname, const std::string &start);
|
float findStart(const std::string &groupname, const std::string &start);
|
||||||
|
|
Loading…
Reference in a new issue