mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-19 23:23:52 +00:00
Split refreshCurrentAnims into multiple functions
This commit is contained in:
parent
824cd3be22
commit
b5cb11ff07
2 changed files with 104 additions and 82 deletions
|
@ -238,10 +238,7 @@ std::string CharacterController::chooseRandomGroup (const std::string& prefix, i
|
||||||
return prefix + toString(roll);
|
return prefix + toString(roll);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CharacterController::refreshCurrentAnims(CharacterState idle, CharacterState movement, JumpingState jump, bool force)
|
void CharacterController::refreshHitRecoilAnims()
|
||||||
{
|
|
||||||
// hit recoils/knockdown animations handling
|
|
||||||
if(mPtr.getClass().isActor())
|
|
||||||
{
|
{
|
||||||
bool recovery = mPtr.getClass().getCreatureStats(mPtr).getHitRecovery();
|
bool recovery = mPtr.getClass().getCreatureStats(mPtr).getHitRecovery();
|
||||||
bool knockdown = mPtr.getClass().getCreatureStats(mPtr).getKnockedDown();
|
bool knockdown = mPtr.getClass().getCreatureStats(mPtr).getKnockedDown();
|
||||||
|
@ -316,10 +313,8 @@ void CharacterController::refreshCurrentAnims(CharacterState idle, CharacterStat
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const WeaponInfo *weap = std::find_if(sWeaponTypeList, sWeaponTypeListEnd, FindWeaponType(mWeaponType));
|
void CharacterController::refreshJumpAnims(const WeaponInfo* weap, JumpingState jump, bool force)
|
||||||
if (!mPtr.getClass().isBipedal(mPtr))
|
{
|
||||||
weap = sWeaponTypeListEnd;
|
|
||||||
|
|
||||||
if(force || jump != mJumpState)
|
if(force || jump != mJumpState)
|
||||||
{
|
{
|
||||||
bool startAtLoop = (jump == mJumpState);
|
bool startAtLoop = (jump == mJumpState);
|
||||||
|
@ -358,7 +353,10 @@ void CharacterController::refreshCurrentAnims(CharacterState idle, CharacterStat
|
||||||
1.0f, "loop stop", "stop", 0.0f, 0);
|
1.0f, "loop stop", "stop", 0.0f, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CharacterController::refreshMovementAnims(const WeaponInfo* weap, CharacterState movement, bool force)
|
||||||
|
{
|
||||||
if(force || movement != mMovementState)
|
if(force || movement != mMovementState)
|
||||||
{
|
{
|
||||||
mMovementState = movement;
|
mMovementState = movement;
|
||||||
|
@ -466,16 +464,10 @@ void CharacterController::refreshCurrentAnims(CharacterState idle, CharacterStat
|
||||||
1.f, ((mode!=2)?"start":"loop start"), "stop", 0.0f, ~0ul);
|
1.f, ((mode!=2)?"start":"loop start"), "stop", 0.0f, ~0ul);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// idle handled last as it can depend on the other states
|
void CharacterController::refreshIdleAnims(const WeaponInfo* weap, CharacterState idle, bool force)
|
||||||
// FIXME: if one of the below states is close to their last animation frame (i.e. will be disabled in the coming update),
|
{
|
||||||
// the idle animation should be displayed
|
|
||||||
if ((mUpperBodyState != UpperCharState_Nothing
|
|
||||||
|| (mMovementState != CharState_None && mMovementState != CharState_TurnLeft && mMovementState != CharState_TurnRight)
|
|
||||||
|| mHitState != CharState_None)
|
|
||||||
&& !mPtr.getClass().isBipedal(mPtr))
|
|
||||||
idle = CharState_None;
|
|
||||||
|
|
||||||
if(force || idle != mIdleState)
|
if(force || idle != mIdleState)
|
||||||
{
|
{
|
||||||
mIdleState = idle;
|
mIdleState = idle;
|
||||||
|
@ -513,6 +505,30 @@ void CharacterController::refreshCurrentAnims(CharacterState idle, CharacterStat
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CharacterController::refreshCurrentAnims(CharacterState idle, CharacterState movement, JumpingState jump, bool force)
|
||||||
|
{
|
||||||
|
if (mPtr.getClass().isActor())
|
||||||
|
refreshHitRecoilAnims();
|
||||||
|
|
||||||
|
const WeaponInfo *weap = std::find_if(sWeaponTypeList, sWeaponTypeListEnd, FindWeaponType(mWeaponType));
|
||||||
|
if (!mPtr.getClass().isBipedal(mPtr))
|
||||||
|
weap = sWeaponTypeListEnd;
|
||||||
|
|
||||||
|
refreshJumpAnims(weap, jump, force);
|
||||||
|
refreshMovementAnims(weap, movement, force);
|
||||||
|
|
||||||
|
// idle handled last as it can depend on the other states
|
||||||
|
// FIXME: if one of the below states is close to their last animation frame (i.e. will be disabled in the coming update),
|
||||||
|
// the idle animation should be displayed
|
||||||
|
if ((mUpperBodyState != UpperCharState_Nothing
|
||||||
|
|| (mMovementState != CharState_None && mMovementState != CharState_TurnLeft && mMovementState != CharState_TurnRight)
|
||||||
|
|| mHitState != CharState_None)
|
||||||
|
&& !mPtr.getClass().isBipedal(mPtr))
|
||||||
|
idle = CharState_None;
|
||||||
|
|
||||||
|
refreshIdleAnims(weap, idle, force);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void getWeaponGroup(WeaponType weaptype, std::string &group)
|
void getWeaponGroup(WeaponType weaptype, std::string &group)
|
||||||
{
|
{
|
||||||
|
|
|
@ -140,6 +140,8 @@ enum JumpingState {
|
||||||
JumpState_Landing
|
JumpState_Landing
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct WeaponInfo;
|
||||||
|
|
||||||
class CharacterController : public MWRender::Animation::TextKeyListener
|
class CharacterController : public MWRender::Animation::TextKeyListener
|
||||||
{
|
{
|
||||||
MWWorld::Ptr mPtr;
|
MWWorld::Ptr mPtr;
|
||||||
|
@ -193,6 +195,10 @@ class CharacterController : public MWRender::Animation::TextKeyListener
|
||||||
void setAttackTypeRandomly();
|
void setAttackTypeRandomly();
|
||||||
|
|
||||||
void refreshCurrentAnims(CharacterState idle, CharacterState movement, JumpingState jump, bool force=false);
|
void refreshCurrentAnims(CharacterState idle, CharacterState movement, JumpingState jump, bool force=false);
|
||||||
|
void refreshHitRecoilAnims();
|
||||||
|
void refreshJumpAnims(const WeaponInfo* weap, JumpingState jump, bool force=false);
|
||||||
|
void refreshMovementAnims(const WeaponInfo* weap, CharacterState movement, bool force=false);
|
||||||
|
void refreshIdleAnims(const WeaponInfo* weap, CharacterState idle, bool force=false);
|
||||||
|
|
||||||
void clearAnimQueue();
|
void clearAnimQueue();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue