forked from teamnwah/openmw-tes3coop
improved, added knockdown after falling
This commit is contained in:
parent
d6345bce91
commit
a8fb1ae51c
2 changed files with 14 additions and 14 deletions
|
@ -166,7 +166,6 @@ void CharacterController::refreshCurrentAnims(CharacterState idle, CharacterStat
|
||||||
|
|
||||||
if(!mAnimation->isPlaying(mCurrentHit))
|
if(!mAnimation->isPlaying(mCurrentHit))
|
||||||
{
|
{
|
||||||
mAnimation->disable(mCurrentHit);
|
|
||||||
if(mJumpState != JumpState_None && !MWBase::Environment::get().getWorld()->isFlying(mPtr)
|
if(mJumpState != JumpState_None && !MWBase::Environment::get().getWorld()->isFlying(mPtr)
|
||||||
&& !MWBase::Environment::get().getWorld()->isSwimming(mPtr) )
|
&& !MWBase::Environment::get().getWorld()->isSwimming(mPtr) )
|
||||||
mCurrentHit = "knockdown";
|
mCurrentHit = "knockdown";
|
||||||
|
@ -175,20 +174,13 @@ void CharacterController::refreshCurrentAnims(CharacterState idle, CharacterStat
|
||||||
int iHit = rand() % sHitListSize;
|
int iHit = rand() % sHitListSize;
|
||||||
mCurrentHit = sHitList[iHit];
|
mCurrentHit = sHitList[iHit];
|
||||||
}
|
}
|
||||||
mAnimation->play(mCurrentHit, Priority_Hit, MWRender::Animation::Group_All, false, 1, "start", "stop", 0.0f, 0);
|
mAnimation->play(mCurrentHit, Priority_Hit, MWRender::Animation::Group_All, true, 1, "start", "stop", 0.0f, 0);
|
||||||
if(mUpperBodyState == UpperCharState_WeapEquiped)
|
|
||||||
mUpdateAfterHit = false;
|
|
||||||
else
|
|
||||||
mUpdateAfterHit = true;
|
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
else if(!mAnimation->isPlaying(mCurrentHit))
|
else if(!mAnimation->isPlaying(mCurrentHit))
|
||||||
{
|
{
|
||||||
mAnimation->disable(mCurrentHit);
|
|
||||||
mCurrentHit.erase();
|
mCurrentHit.erase();
|
||||||
mHitState = CharState_None;
|
mHitState = CharState_None;
|
||||||
mUpdateAfterHit = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const WeaponInfo *weap = std::find_if(sWeaponTypeList, sWeaponTypeListEnd, FindWeaponType(mWeaponType));
|
const WeaponInfo *weap = std::find_if(sWeaponTypeList, sWeaponTypeListEnd, FindWeaponType(mWeaponType));
|
||||||
|
@ -405,7 +397,6 @@ CharacterController::CharacterController(const MWWorld::Ptr &ptr, MWRender::Anim
|
||||||
, mMovementSpeed(0.0f)
|
, mMovementSpeed(0.0f)
|
||||||
, mDeathState(CharState_None)
|
, mDeathState(CharState_None)
|
||||||
, mHitState(CharState_None)
|
, mHitState(CharState_None)
|
||||||
, mUpdateAfterHit(true)
|
|
||||||
, mUpperBodyState(UpperCharState_Nothing)
|
, mUpperBodyState(UpperCharState_Nothing)
|
||||||
, mJumpState(JumpState_None)
|
, mJumpState(JumpState_None)
|
||||||
, mWeaponType(WeapType_None)
|
, mWeaponType(WeapType_None)
|
||||||
|
@ -554,7 +545,7 @@ bool CharacterController::updateNpcState(bool onground, bool inwater, bool isrun
|
||||||
bool animPlaying;
|
bool animPlaying;
|
||||||
if(stats.getAttackingOrSpell())
|
if(stats.getAttackingOrSpell())
|
||||||
{
|
{
|
||||||
if(mUpperBodyState == UpperCharState_WeapEquiped)
|
if(mUpperBodyState == UpperCharState_WeapEquiped && mHitState == CharState_None)
|
||||||
{
|
{
|
||||||
MWBase::Environment::get().getWorld()->breakInvisibility(mPtr);
|
MWBase::Environment::get().getWorld()->breakInvisibility(mPtr);
|
||||||
mAttackType.clear();
|
mAttackType.clear();
|
||||||
|
@ -718,9 +709,18 @@ bool CharacterController::updateNpcState(bool onground, bool inwater, bool isrun
|
||||||
if(mUpperBodyState == UpperCharState_EquipingWeap ||
|
if(mUpperBodyState == UpperCharState_EquipingWeap ||
|
||||||
mUpperBodyState == UpperCharState_FollowStartToFollowStop ||
|
mUpperBodyState == UpperCharState_FollowStartToFollowStop ||
|
||||||
mUpperBodyState == UpperCharState_CastingSpell)
|
mUpperBodyState == UpperCharState_CastingSpell)
|
||||||
|
{
|
||||||
mUpperBodyState = UpperCharState_WeapEquiped;
|
mUpperBodyState = UpperCharState_WeapEquiped;
|
||||||
|
//don't allow to continue playing hit animation after actor had attacked during it
|
||||||
|
if(mHitState != CharState_None)
|
||||||
|
{
|
||||||
|
mAnimation->disable(mCurrentHit);
|
||||||
|
mCurrentHit.clear();
|
||||||
|
mHitState = CharState_None;
|
||||||
|
}
|
||||||
|
}
|
||||||
else if(mUpperBodyState == UpperCharState_UnEquipingWeap)
|
else if(mUpperBodyState == UpperCharState_UnEquipingWeap)
|
||||||
mUpperBodyState = UpperCharState_Nothing;
|
mUpperBodyState = UpperCharState_Nothing;
|
||||||
}
|
}
|
||||||
else if(complete >= 1.0f)
|
else if(complete >= 1.0f)
|
||||||
{
|
{
|
||||||
|
@ -938,6 +938,7 @@ void CharacterController::update(float duration)
|
||||||
int realHealthLost = healthLost * (1.0f - 0.25 * fatigueTerm);
|
int realHealthLost = healthLost * (1.0f - 0.25 * fatigueTerm);
|
||||||
health.setCurrent(health.getCurrent() - realHealthLost);
|
health.setCurrent(health.getCurrent() - realHealthLost);
|
||||||
cls.getCreatureStats(mPtr).setHealth(health);
|
cls.getCreatureStats(mPtr).setHealth(health);
|
||||||
|
cls.onHit(mPtr, realHealthLost, true, MWWorld::Ptr(), MWWorld::Ptr(), true);
|
||||||
|
|
||||||
// report acrobatics progression
|
// report acrobatics progression
|
||||||
if (mPtr.getRefData().getHandle() == "player")
|
if (mPtr.getRefData().getHandle() == "player")
|
||||||
|
@ -1008,7 +1009,7 @@ void CharacterController::update(float duration)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(cls.isNpc() && mUpdateAfterHit)
|
if(cls.isNpc())
|
||||||
forcestateupdate = updateNpcState(onground, inwater, isrunning, sneak) || forcestateupdate;
|
forcestateupdate = updateNpcState(onground, inwater, isrunning, sneak) || forcestateupdate;
|
||||||
|
|
||||||
refreshCurrentAnims(idlestate, movestate, forcestateupdate);
|
refreshCurrentAnims(idlestate, movestate, forcestateupdate);
|
||||||
|
|
|
@ -147,7 +147,6 @@ class CharacterController
|
||||||
|
|
||||||
CharacterState mHitState;
|
CharacterState mHitState;
|
||||||
std::string mCurrentHit;
|
std::string mCurrentHit;
|
||||||
bool mUpdateAfterHit;//don't allow attack if it hadn't been started before actor got hit
|
|
||||||
|
|
||||||
UpperBodyCharacterState mUpperBodyState;
|
UpperBodyCharacterState mUpperBodyState;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue