mirror of
https://github.com/OpenMW/openmw.git
synced 2025-06-28 03:11:34 +00:00
Add a couple more character states
This commit is contained in:
parent
007a5963de
commit
7fe877d8ea
3 changed files with 33 additions and 8 deletions
|
@ -169,7 +169,7 @@ namespace MWMechanics
|
||||||
if(!MWWorld::Class::get(ptr).getCreatureStats(ptr).isDead())
|
if(!MWWorld::Class::get(ptr).getCreatureStats(ptr).isDead())
|
||||||
mActors.insert(std::make_pair(ptr, CharacterController(ptr, anim, CharState_Idle, true)));
|
mActors.insert(std::make_pair(ptr, CharacterController(ptr, anim, CharState_Idle, true)));
|
||||||
else
|
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)
|
void Actors::removeActor (const MWWorld::Ptr& ptr)
|
||||||
|
@ -215,7 +215,7 @@ namespace MWMechanics
|
||||||
{
|
{
|
||||||
if(!MWWorld::Class::get(iter->first).getCreatureStats(iter->first).isDead())
|
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);
|
iter->second.setState(CharState_Idle, true);
|
||||||
|
|
||||||
updateActor(iter->first, totalDuration);
|
updateActor(iter->first, totalDuration);
|
||||||
|
@ -243,11 +243,11 @@ namespace MWMechanics
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(iter->second.getState() == CharState_Dead)
|
if(iter->second.getState() >= CharState_Death1)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
iter->second.setMovementVector(Ogre::Vector3::ZERO);
|
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)];
|
++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)
|
for(PtrControllerMap::iterator iter(mActors.begin());iter != mActors.end();++iter)
|
||||||
{
|
{
|
||||||
if(iter->second.getState() == CharState_Dead)
|
if(iter->second.getState() >= CharState_Death1)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
Ogre::Vector3 movement = MWWorld::Class::get(iter->first).getMovementVector(iter->first);
|
Ogre::Vector3 movement = MWWorld::Class::get(iter->first).getMovementVector(iter->first);
|
||||||
|
|
|
@ -37,13 +37,25 @@ static const struct {
|
||||||
Ogre::Vector3 accumulate;
|
Ogre::Vector3 accumulate;
|
||||||
} sStateList[] = {
|
} sStateList[] = {
|
||||||
{ CharState_Idle, "idle", Ogre::Vector3(1.0f, 1.0f, 0.0f) },
|
{ 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_WalkForward, "walkforward", Ogre::Vector3(0.0f, 1.0f, 0.0f) },
|
||||||
{ CharState_WalkBack, "walkback", 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_WalkLeft, "walkleft", Ogre::Vector3(1.0f, 0.0f, 0.0f) },
|
||||||
{ CharState_WalkRight, "walkright", 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]);
|
static const size_t sStateListSize = sizeof(sStateList)/sizeof(sStateList[0]);
|
||||||
|
|
||||||
|
@ -162,7 +174,7 @@ Ogre::Vector3 CharacterController::update(float duration)
|
||||||
movement += mAnimation->runAnimation(duration);
|
movement += mAnimation->runAnimation(duration);
|
||||||
mSkipAnim = false;
|
mSkipAnim = false;
|
||||||
|
|
||||||
if(!(getState() == CharState_Idle || getState() == CharState_Dead))
|
if(!(getState() == CharState_Idle || getState() >= CharState_Death1))
|
||||||
{
|
{
|
||||||
movement = mDirection * movement.length();
|
movement = mDirection * movement.length();
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,13 +15,26 @@ namespace MWMechanics
|
||||||
|
|
||||||
enum CharacterState {
|
enum CharacterState {
|
||||||
CharState_Idle,
|
CharState_Idle,
|
||||||
|
CharState_Idle2,
|
||||||
|
CharState_Idle3,
|
||||||
|
CharState_Idle4,
|
||||||
|
CharState_Idle5,
|
||||||
|
CharState_Idle6,
|
||||||
|
CharState_Idle7,
|
||||||
|
CharState_Idle8,
|
||||||
|
CharState_Idle9,
|
||||||
|
|
||||||
CharState_WalkForward,
|
CharState_WalkForward,
|
||||||
CharState_WalkBack,
|
CharState_WalkBack,
|
||||||
CharState_WalkLeft,
|
CharState_WalkLeft,
|
||||||
CharState_WalkRight,
|
CharState_WalkRight,
|
||||||
|
|
||||||
CharState_Dead
|
/* Must be last! */
|
||||||
|
CharState_Death1,
|
||||||
|
CharState_Death2,
|
||||||
|
CharState_Death3,
|
||||||
|
CharState_Death4,
|
||||||
|
CharState_Death5
|
||||||
};
|
};
|
||||||
|
|
||||||
class CharacterController
|
class CharacterController
|
||||||
|
|
Loading…
Reference in a new issue