Changeset 426

Show
Ignore:
Timestamp:
11/19/11 18:50:54 (6 months ago)
Author:
Carsten
Message:

Fixed some issues with animation playback.

Location:
cafu/trunk
Files:
8 modified

Legend:

Unmodified
Added
Removed
  • cafu/trunk/Games/DeathMatch/Code/HumanPlayer.cpp

    r423 r426  
    467467 
    468468                    const float NewFrameNr=Pose->GetFrameNr(); 
    469                     const bool  AnimSequenceWrap=NewFrameNr<State.ActiveWeaponFrameNr; 
     469                    const bool  AnimSequenceWrap=NewFrameNr < State.ActiveWeaponFrameNr || NewFrameNr > WeaponModel->GetAnims()[State.ActiveWeaponSequNr].Frames.Size()-1; 
    470470 
    471471                    State.ActiveWeaponFrameNr=NewFrameNr; 
  • cafu/trunk/Games/DeathMatch/Code/cw_357.cpp

    r423 r426  
    175175                else if (RandomNumber<224) State.ActiveWeaponSequNr=7;  // Idle 3 
    176176                else                       State.ActiveWeaponSequNr=1;  // Fidget 1 
     177 
     178                State.ActiveWeaponFrameNr=0.0; 
    177179            } 
    178180            break; 
  • cafu/trunk/Games/DeathMatch/Code/cw_9mmAR.cpp

    r423 r426  
    229229                } 
    230230                else State.ActiveWeaponSequNr=0;     // Don't play the "Idle1" sequence repeatedly. 
     231 
     232                State.ActiveWeaponFrameNr=0.0; 
    231233            } 
    232234            break; 
  • cafu/trunk/Games/DeathMatch/Code/cw_CrossBow.cpp

    r423 r426  
    105105                } 
    106106                else State.ActiveWeaponSequNr=2;    // Idle3 is the "best-looking" sequence. 
     107 
     108                State.ActiveWeaponFrameNr=0.0; 
    107109            } 
    108110            break; 
  • cafu/trunk/Games/DeathMatch/Code/cw_FaceHugger.cpp

    r423 r426  
    130130                } 
    131131                else State.ActiveWeaponSequNr=0;    // Always play "Idle1" after "Idle2" or "Idle3"! 
     132 
     133                State.ActiveWeaponFrameNr=0.0; 
    132134            } 
    133135            break; 
  • cafu/trunk/Games/DeathMatch/Code/cw_Grenade.cpp

    r423 r426  
    9494                } 
    9595                else State.ActiveWeaponSequNr=0;     // Don't play the "Fidget" sequence repeatedly. 
     96 
     97                State.ActiveWeaponFrameNr=0.0; 
    9698            } 
    9799            break; 
  • cafu/trunk/Games/DeathMatch/Code/cw_RPG.cpp

    r423 r426  
    118118                } 
    119119                else State.ActiveWeaponSequNr=0;     // Don't play the "Fidget" sequence repeatedly. 
     120 
     121                State.ActiveWeaponFrameNr=0.0; 
    120122            } 
    121123            break; 
  • cafu/trunk/Libs/Models/AnimPose.cpp

    r425 r426  
    463463    if (m_SequNr >= int(Anims.Size())) m_SequNr = -1; 
    464464    if (m_SequNr != -1 && (Anims[m_SequNr].FPS<0.0 || Anims[m_SequNr].Frames.Size()==0)) m_SequNr = -1; 
    465     if (m_SequNr == -1) m_FrameNr = 0.0f; 
     465 
     466    m_FrameNr=std::max(m_FrameNr, 0.0f); 
     467    m_FrameNr=(m_SequNr==-1) ? 0.0f : fmod(m_FrameNr, float(Anims[m_SequNr].Frames.Size())); 
    466468} 
    467469 
     
    511513{ 
    512514    // TODO: Beachte korrekte Wrap-Regeln für mit loopen und ohne. 
    513     // TODO: Sollte in NormalizeInput() die m_FrameNr gegen das jeweilige Maximum begrenzt werden? 
    514515    // TODO: Loops (next vs. ForceLoop) richtig behandeln 
    515516    const ArrayT<CafuModelT::AnimT>& Anims=m_Model.GetAnims();