#include "textinfo.h" #include "intrin.h" #include "globals.h" #ifdef EXTRACODE int m_iTextCount= 0; char m_pcTextData[65536]; STextInfo m_TextInfos[ m_iMaxTextCount ]; #else #include "textdata.h" #endif void CreateTextRenderJobs() { int iObj= OI_TextFirst; int iTextPos= 0; for( int i= 0; i < m_iTextCount; ++i ) { assert( iObj <= OI_TextLast ); g_Objects[ iObj ].CreateTextMesh( m_pcTextData + iTextPos ); g_Objects[ iObj ].m_iUsedPreShader= PreDepth; g_Objects[ iObj ].m_iUsedShader[ 0 ]= Text; iObj++; iTextPos+= 1 + strlen( m_pcTextData + iTextPos ); } } void SetTextPos( int iTime ) { int iObj= OI_TextFirst; for( int i= 0; i < m_iTextCount; ++i ) { STextInfo& ti= m_TextInfos[ i ]; D3DXVECTOR3 v3Pos= ti.m_v3Pos; if( iTime >= ti.m_iTimeStart + ti.m_iTimeLength ) { v3Pos+= ti.m_v3Move; } else if( iTime > ti.m_iTimeStart ) { float fFac= (float)( ti.m_iTimeStart - iTime )/ (float)ti.m_iTimeLength; v3Pos+= ti.m_v3Move * ( 0.5f - 0.5f * cos( fFac * c_PI ) ); } if( v3Pos.y > 300.0f || iTime > 304 * 1000 ) { v3Pos.y= -300.0f; } D3DXMATRIX matResult; D3DXMATRIX mat; D3DXMatrixScaling( &matResult, ti.m_v3Scale.x, ti.m_v3Scale.y, ti.m_v3Scale.z ); D3DXMatrixRotationYawPitchRoll( &mat, ti.m_v3Rot.x, ti.m_v3Rot.y, ti.m_v3Rot.z ); D3DXMatrixMultiply( &matResult,&matResult,&mat); D3DXMatrixTranslation( &mat, v3Pos.x, v3Pos.y, v3Pos.z ); D3DXMatrixMultiply( &matResult,&matResult,&mat); assert( iObj <= OI_TextLast ); g_Objects[ iObj ].SetTransformation( matResult ); iObj++; } }