From 3c487e601934b7422da4683fe5953d99298da7ad Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 16 Jan 2013 10:45:18 -0800 Subject: [PATCH] Play an animation when changing states --- apps/openmw/mwmechanics/actors.cpp | 4 ---- apps/openmw/mwmechanics/character.cpp | 33 +++++++++++++++++++++++++++ apps/openmw/mwmechanics/character.hpp | 8 ++----- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/apps/openmw/mwmechanics/actors.cpp b/apps/openmw/mwmechanics/actors.cpp index bd7a9cef2..d9a3b6878 100644 --- a/apps/openmw/mwmechanics/actors.cpp +++ b/apps/openmw/mwmechanics/actors.cpp @@ -169,10 +169,7 @@ namespace MWMechanics if(!MWWorld::Class::get(ptr).getCreatureStats(ptr).isDead()) mActors.insert(std::make_pair(ptr, CharacterController(ptr, anim, CharState_Idle))); else - { mActors.insert(std::make_pair(ptr, CharacterController(ptr, anim, CharState_Dead))); - MWBase::Environment::get().getWorld()->playAnimationGroup (ptr, "death1", 2); - } } void Actors::removeActor (const MWWorld::Ptr& ptr) @@ -247,7 +244,6 @@ namespace MWMechanics } iter->second.setState(CharState_Dead); - MWBase::Environment::get().getWorld()->playAnimationGroup(iter->first, "death1", 0); ++mDeathCount[MWWorld::Class::get(iter->first).getId(iter->first)]; diff --git a/apps/openmw/mwmechanics/character.cpp b/apps/openmw/mwmechanics/character.cpp index 319c4fe9b..6d5b92860 100644 --- a/apps/openmw/mwmechanics/character.cpp +++ b/apps/openmw/mwmechanics/character.cpp @@ -19,8 +19,41 @@ #include "character.hpp" +#include "../mwrender/animation.hpp" namespace MWMechanics { +CharacterController::CharacterController(const MWWorld::Ptr &ptr, MWRender::Animation *anim, CharacterState state) + : mPtr(ptr), mAnimation(anim), mState(state) +{ + if(!mAnimation) + return; + + switch(mState) + { + case CharState_Idle: + mAnimation->playGroup("idle", 1, 1); + break; + case CharState_Dead: + mAnimation->playGroup("death1", 1, 1); + break; + } +} + + +void CharacterController::setState(CharacterState state) +{ + mState = state; + switch(mState) + { + case CharState_Idle: + mAnimation->playGroup("idle", 1, 1); + break; + case CharState_Dead: + mAnimation->playGroup("death1", 1, 1); + break; + } +} + } diff --git a/apps/openmw/mwmechanics/character.hpp b/apps/openmw/mwmechanics/character.hpp index 8a0986117..9bb3a1bfc 100644 --- a/apps/openmw/mwmechanics/character.hpp +++ b/apps/openmw/mwmechanics/character.hpp @@ -24,15 +24,11 @@ class CharacterController CharacterState mState; public: - CharacterController(const MWWorld::Ptr &ptr, MWRender::Animation *anim, CharacterState state) - : mPtr(ptr), mAnimation(anim), mState(state) - { } + CharacterController(const MWWorld::Ptr &ptr, MWRender::Animation *anim, CharacterState state); + void setState(CharacterState state); CharacterState getState() const { return mState; } - - void setState(CharacterState state) - { mState = state; } }; }