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
1.5.1-p1