Add a couple more character states

This commit is contained in:
Chris Robinson 2013-02-03 00:19:22 -08:00
parent 007a5963de
commit 7fe877d8ea
3 changed files with 33 additions and 8 deletions

View file

@ -169,7 +169,7 @@ namespace MWMechanics
if(!MWWorld::Class::get(ptr).getCreatureStats(ptr).isDead())
mActors.insert(std::make_pair(ptr, CharacterController(ptr, anim, CharState_Idle, true)));
else
mActors.insert(std::make_pair(ptr, CharacterController(ptr, anim, CharState_Dead, false)));
mActors.insert(std::make_pair(ptr, CharacterController(ptr, anim, CharState_Death1, false)));
}
void Actors::removeActor (const MWWorld::Ptr& ptr)
@ -215,7 +215,7 @@ namespace MWMechanics
{
if(!MWWorld::Class::get(iter->first).getCreatureStats(iter->first).isDead())
{
if(iter->second.getState() == CharState_Dead)
if(iter->second.getState() >= CharState_Death1)
iter->second.setState(CharState_Idle, true);
updateActor(iter->first, totalDuration);
@ -243,11 +243,11 @@ namespace MWMechanics
continue;
}
if(iter->second.getState() == CharState_Dead)
if(iter->second.getState() >= CharState_Death1)
continue;
iter->second.setMovementVector(Ogre::Vector3::ZERO);
iter->second.setState(CharState_Dead, false);
iter->second.setState(CharState_Death1, false);
++mDeathCount[MWWorld::Class::get(iter->first).getId(iter->first)];
@ -261,7 +261,7 @@ namespace MWMechanics
{
for(PtrControllerMap::iterator iter(mActors.begin());iter != mActors.end();++iter)
{
if(iter->second.getState() == CharState_Dead)
if(iter->second.getState() >= CharState_Death1)
continue;
Ogre::Vector3 movement = MWWorld::Class::get(iter->first).getMovementVector(iter->first);

View file

@ -37,13 +37,25 @@ static const struct {
Ogre::Vector3 accumulate;
} sStateList[] = {
{ CharState_Idle, "idle", Ogre::Vector3(1.0f, 1.0f, 0.0f) },
{ CharState_Idle2, "idle2", Ogre::Vector3(1.0f, 1.0f, 0.0f) },
{ CharState_Idle3, "idle3", Ogre::Vector3(1.0f, 1.0f, 0.0f) },
{ CharState_Idle4, "idle4", Ogre::Vector3(1.0f, 1.0f, 0.0f) },
{ CharState_Idle5, "idle5", Ogre::Vector3(1.0f, 1.0f, 0.0f) },
{ CharState_Idle6, "idle6", Ogre::Vector3(1.0f, 1.0f, 0.0f) },
{ CharState_Idle7, "idle7", Ogre::Vector3(1.0f, 1.0f, 0.0f) },
{ CharState_Idle8, "idle8", Ogre::Vector3(1.0f, 1.0f, 0.0f) },
{ CharState_Idle9, "idle9", Ogre::Vector3(1.0f, 1.0f, 0.0f) },
{ CharState_WalkForward, "walkforward", Ogre::Vector3(0.0f, 1.0f, 0.0f) },
{ CharState_WalkBack, "walkback", Ogre::Vector3(0.0f, 1.0f, 0.0f) },
{ CharState_WalkLeft, "walkleft", Ogre::Vector3(1.0f, 0.0f, 0.0f) },
{ CharState_WalkRight, "walkright", Ogre::Vector3(1.0f, 0.0f, 0.0f) },
{ CharState_Dead, "death1", Ogre::Vector3(1.0f, 1.0f, 0.0f) },
{ CharState_Death1, "death1", Ogre::Vector3(1.0f, 1.0f, 0.0f) },
{ CharState_Death2, "death2", Ogre::Vector3(1.0f, 1.0f, 0.0f) },
{ CharState_Death3, "death3", Ogre::Vector3(1.0f, 1.0f, 0.0f) },
{ CharState_Death4, "death4", Ogre::Vector3(1.0f, 1.0f, 0.0f) },
{ CharState_Death5, "death5", Ogre::Vector3(1.0f, 1.0f, 0.0f) },
};
static const size_t sStateListSize = sizeof(sStateList)/sizeof(sStateList[0]);
@ -162,7 +174,7 @@ Ogre::Vector3 CharacterController::update(float duration)
movement += mAnimation->runAnimation(duration);
mSkipAnim = false;
if(!(getState() == CharState_Idle || getState() == CharState_Dead))
if(!(getState() == CharState_Idle || getState() >= CharState_Death1))
{
movement = mDirection * movement.length();
}

View file

@ -15,13 +15,26 @@ namespace MWMechanics
enum CharacterState {
CharState_Idle,
CharState_Idle2,
CharState_Idle3,
CharState_Idle4,
CharState_Idle5,
CharState_Idle6,
CharState_Idle7,
CharState_Idle8,
CharState_Idle9,
CharState_WalkForward,
CharState_WalkBack,
CharState_WalkLeft,
CharState_WalkRight,
CharState_Dead
/* Must be last! */
CharState_Death1,
CharState_Death2,
CharState_Death3,
CharState_Death4,
CharState_Death5
};
class CharacterController