Fix an issue where animations (legs) would not loop

This commit is contained in:
smallmodel 2025-01-05 02:00:40 +01:00
parent 19eec6305b
commit 269e73168e
No known key found for this signature in database
GPG key ID: A96F163ED4891440
2 changed files with 11 additions and 14 deletions

View file

@ -5510,7 +5510,6 @@ void Player::EvaluateState(State *forceTorso, State *forceLegs)
laststate_Legs = NULL; laststate_Legs = NULL;
} }
animdone_Legs = false;
if (currentState_Legs) { if (currentState_Legs) {
if (laststate_Legs) { if (laststate_Legs) {
// Process exit commands of the last state // Process exit commands of the last state

View file

@ -71,7 +71,7 @@ void Player::SetPartAnim(const char *anim, bodypart_t slot)
} }
animnum = gi.Anim_NumForName(edict->tiki, anim); animnum = gi.Anim_NumForName(edict->tiki, anim);
if (animnum == CurrentAnim() && partAnim[slot] == anim) { if (animnum == CurrentAnim(m_iPartSlot[slot]) && partAnim[slot] == anim) {
return; return;
} }
@ -93,21 +93,19 @@ void Player::SetPartAnim(const char *anim, bodypart_t slot)
if (m_fPartBlends[slot] < 0.5f) { if (m_fPartBlends[slot] < 0.5f) {
SetAnimDoneEvent(NULL, m_iPartSlot[slot]); SetAnimDoneEvent(NULL, m_iPartSlot[slot]);
float m_fCrossTime = gi.Anim_CrossTime(edict->tiki, animnum); partBlendMult[slot] = gi.Anim_CrossTime(edict->tiki, animnum);
if (partBlendMult[slot] > 0.0f) {
partBlendMult[slot] = m_fCrossTime;
if (m_fCrossTime <= 0.0f) {
partOldAnim[slot] = "";
m_fPartBlends[slot] = 0.0f;
} else {
m_iPartSlot[slot] ^= 1; m_iPartSlot[slot] ^= 1;
partBlendMult[slot] = 1.0f / m_fCrossTime; partBlendMult[slot] = 1.0f / partBlendMult[slot];
partOldAnim[slot] = partAnim[slot]; partOldAnim[slot] = partAnim[slot];
m_fPartBlends[slot] = 1.0f; m_fPartBlends[slot] = 1.0f;
} else {
partOldAnim[slot] = "";
m_fPartBlends[slot] = 0.0f;
} }
} }
if (slot) { if (slot != legs) {
animdone_Torso = false; animdone_Torso = false;
} else { } else {
animdone_Legs = false; animdone_Legs = false;
@ -117,7 +115,7 @@ void Player::SetPartAnim(const char *anim, bodypart_t slot)
partAnim[slot] = anim; partAnim[slot] = anim;
if (slot) { if (slot != legs) {
NewAnim(animnum, EV_Player_AnimLoop_Torso, m_iPartSlot[slot]); NewAnim(animnum, EV_Player_AnimLoop_Torso, m_iPartSlot[slot]);
} else { } else {
NewAnim(animnum, EV_Player_AnimLoop_Legs, m_iPartSlot[legs]); NewAnim(animnum, EV_Player_AnimLoop_Legs, m_iPartSlot[legs]);
@ -147,7 +145,7 @@ void Player::StopPartAnimating(bodypart_t part)
StopAnimating(m_iPartSlot[part]); StopAnimating(m_iPartSlot[part]);
if (part) { if (part != legs) {
animdone_Torso = false; animdone_Torso = false;
} else { } else {
animdone_Legs = false; animdone_Legs = false;
@ -162,7 +160,7 @@ void Player::PausePartAnim(bodypart_t part)
int Player::CurrentPartAnim(bodypart_t part) const int Player::CurrentPartAnim(bodypart_t part) const
{ {
if (!*partAnim[part]) { if (partAnim[part] == "") {
return -1; return -1;
} }