D:/Zythum/DinoKod/Model/MdlAnim.cpp

00001 //---------------------------------------------------------------------------------------------
00002 //      This file is a part of "DinoKod".
00003 //      Copyright © 2003 Dino Productions. All Rights Reserved.
00004 //      
00005 //      File                    : MdlAnim.h
00006 //      Author                  : Sebastien LEIX        sebastien.leix@wanadoo.fr
00007 //      Date                    : 09/09/2002
00008 //      Modification    :
00009 //
00010 //---------------------------------------------------------------------------------------------
00011 #include "Model/MdlMesh.h"
00012 #include "Model/MdlAnim.h"
00013 
00014 
00015 //---------------------------------------------------------------------------------------------------------------------
00016 KMdlAnim::KMdlAnim()
00017 {
00018         m_nMeshAnims    = 0;
00019         m_MaxFrame              = 0;
00020         m_FPS                   = 20;
00021         m_CurrentFrame  = 0;
00022 }
00023 
00024 //---------------------------------------------------------------------------------------------------------------------
00025 void KMdlAnim::Save( KFile& File )
00026 {
00027 }
00028 
00029 //---------------------------------------------------------------------------------------------------------------------
00030 void KMdlAnim::Load( KFile& File )
00031 {
00032 }
00033 
00034 //---------------------------------------------------------------------------------------------------------------------
00035 u32     KMdlAnim::AddMeshAnim( KMdlMeshAnim* pMeshAnim )
00036 {
00037         KASSERT( m_nMeshAnims == m_pMeshAnims.GetSize() );
00038         pMeshAnim->SetpAnim( this );
00039         m_pMeshAnims.Add( pMeshAnim );
00040         m_nMeshAnims ++;
00041         return m_nMeshAnims - 1;
00042 }
00043 
00044 //---------------------------------------------------------------------------------------------------------------------
00045 u32     KMdlAnim::RemoveMeshAnim( KMdlMeshAnim* pMeshAnim )
00046 {
00047         KASSERT( m_nMeshAnims == m_pMeshAnims.GetSize() );
00048         for( u32 i = 0; i < m_nMeshAnims; i++ )
00049         {
00050                 if( m_pMeshAnims[i] == pMeshAnim )
00051                 {
00052                         m_pMeshAnims.Erase( i );
00053                         m_nMeshAnims --;
00054                         break;
00055                 }
00056         }
00057         return m_nMeshAnims - 1;
00058 }
00059 
00060 //---------------------------------------------------------------------------------------------------------------------
00061 void KMdlAnim::SetFrame( u32 Frame )
00062 {
00063         for( u32 i = 0; i < m_nMeshAnims; i++ )
00064                 m_pMeshAnims[i]->SetFrame( Frame );
00065 }
00066 
00067 //---------------------------------------------------------------------------------------------------------------------
00068 void KMdlAnim::SetMaxFrame( u32 Frame )
00069 {
00070         KASSERT( Frame >= 0 );
00071         m_MaxFrame = Frame;
00072         for( u32 i = 0; i < m_nMeshAnims; i++ )
00073         {
00074                 if( m_pMeshAnims[i]->GetFrameStart() >= Frame )
00075                         m_pMeshAnims[i]->SetFrameStart( Frame );
00076                 if( m_pMeshAnims[i]->GetFrameEnd() >= Frame )
00077                         m_pMeshAnims[i]->SetFrameEnd( Frame );
00078         }
00079 
00080 }
00081 
00082 //---------------------------------------------------------------------------------------------------------------------
00083 //---------------------------------------------------------------------------------------------------------------------
00084 //---------------------------------------------------------------------------------------------------------------------
00085 KMdlMeshAnim::KMdlMeshAnim()
00086 {
00087         m_FrameStart            = 0;
00088         m_FrameEnd                      = 0;
00089         m_MeshFrameStart        = 0;
00090         m_MeshFrameEnd          = 0;
00091         m_CurrentFrame          = 0;
00092         m_pMesh                         = NULL;
00093         m_pAnim                         = NULL;
00094         m_bInheritFrame         = true;
00095 }
00096 
00097 //---------------------------------------------------------------------------------------------------------------------
00098 void KMdlMeshAnim::SetFrame( u32 Frame )
00099 {
00100         KASSERT( Frame >= 0 );
00101         KASSERT( m_pMesh );
00102 
00103         if( Frame < m_FrameStart )
00104         {
00105                 m_pMesh->SetFrame( m_MeshFrameStart );
00106                 return;
00107         }
00108 
00109         if( Frame > m_FrameEnd )
00110         {
00111                 m_pMesh->SetFrame( m_MeshFrameEnd );
00112                 return;
00113         }
00114                 
00115         if( m_FrameStart != m_FrameEnd )
00116         {
00117                 KMdlMesh::SetMeshFrame( m_pMesh,
00118                                                                 (u32)(m_MeshFrameStart + ((( m_MeshFrameEnd - m_MeshFrameStart ) / (float)(m_FrameEnd - m_FrameStart)) * ( Frame - m_FrameStart ))),
00119                                                                 IsInheritFrame() );
00120                 m_CurrentFrame = Frame;
00121         }
00122         else
00123         {
00124                 m_pMesh->SetFrame( m_MeshFrameStart );
00125                 m_CurrentFrame = m_FrameStart;
00126         }
00127 }
00128 

Generated on Sun Mar 25 20:02:15 2007 for Zythum Project by  doxygen 1.5.1-p1