Skip to content

Commit a7b1011

Browse files
committed
Code design improvement in CIFPAnimations::DeleteAnimations
1 parent 015fd39 commit a7b1011

File tree

5 files changed

+38
-41
lines changed

5 files changed

+38
-41
lines changed

Client/game_sa/CAnimBlendSequenceSA.h

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,17 @@ class CAnimBlendSequenceSAInterface
3535
class CAnimBlendSequenceSA : public CAnimBlendSequence
3636
{
3737
public:
38-
CAnimBlendSequenceSA ( CAnimBlendSequenceSAInterface * pInterface ) { m_pInterface = pInterface; }
39-
void Initialize ( void );
40-
void SetName ( const char * szName );
41-
void SetBoneTag ( int32_t i32BoneID );
42-
void SetKeyFrames ( size_t cKeyFrames, bool bRoot, bool bCompressed, void * pKeyFrames );
43-
uint32_t GetHash ( void ) { return m_pInterface->m_hash; }
44-
uint16_t GetBoneTag ( void ) { return m_pInterface->m_boneId; }
45-
void * GetKeyFrames ( void ) { return m_pInterface->pKeyFrames; }
46-
unsigned short GetKeyFramesCount ( void ) { return m_pInterface->sNumKeyFrames; }
47-
CAnimBlendSequenceSAInterface * GetInterface ( void ) { return m_pInterface; }
38+
CAnimBlendSequenceSA ( CAnimBlendSequenceSAInterface * pInterface ) { m_pInterface = pInterface; }
39+
void Initialize ( void );
40+
void SetName ( const char * szName );
41+
void SetBoneTag ( int32_t i32BoneID );
42+
void SetKeyFrames ( size_t cKeyFrames, bool bRoot, bool bCompressed, void * pKeyFrames );
43+
uint32_t GetHash ( void ) { return m_pInterface->m_hash; }
44+
uint16_t GetBoneTag ( void ) { return m_pInterface->m_boneId; }
45+
void * GetKeyFrames ( void ) { return m_pInterface->pKeyFrames; }
46+
unsigned short GetKeyFramesCount ( void ) { return m_pInterface->sNumKeyFrames; }
47+
bool IsBigChunkForAllSequences ( void ) { return ( ( m_pInterface->sFlags >> 3) & 1 ); }
48+
CAnimBlendSequenceSAInterface * GetInterface ( void ) { return m_pInterface; }
4849

4950
protected:
5051
CAnimBlendSequenceSAInterface * m_pInterface;

Client/mods/deathmatch/logic/CClientIFP.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ bool CClientIFP::LoadIFPFile ( const char * szFilePath )
5454
}
5555

5656
// We are unloading the data because we don't need to read it anymore.
57-
// This function does not unload IFP, to unload ifp call unloadIFP function
57+
// This function does not unload IFP, to unload ifp, use destroyElement from lua
5858
UnloadFile ( );
5959
}
6060
else
@@ -407,13 +407,13 @@ void CClientIFP::ReadKr00FramesAsCompressed ( BYTE * pKeyFrames, int32_t TotalF
407407
}
408408
}
409409

410-
void CClientIFP::ReadKr00CompressedFrames ( BYTE * pKeyFrames, int32_t TotalFrames )
410+
inline void CClientIFP::ReadKr00CompressedFrames ( BYTE * pKeyFrames, int32_t TotalFrames )
411411
{
412412
size_t iSizeInBytes = sizeof ( IFP_Compressed_KR00 ) * TotalFrames;
413413
ReadBytes ( pKeyFrames, iSizeInBytes );
414414
}
415415

416-
void CClientIFP::ReadKrt0CompressedFrames ( BYTE * pKeyFrames, int32_t TotalFrames )
416+
inline void CClientIFP::ReadKrt0CompressedFrames ( BYTE * pKeyFrames, int32_t TotalFrames )
417417
{
418418
size_t iSizeInBytes = sizeof ( IFP_Compressed_KRT0 ) * TotalFrames;
419419
ReadBytes ( pKeyFrames, iSizeInBytes );

Client/mods/deathmatch/logic/CClientIFP.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,8 +230,8 @@ class CClientIFP: public CClientEntity, CFileReader
230230
void ReadKrtsFramesAsCompressed ( BYTE * pKeyFrames, int32_t TotalFrames );
231231
void ReadKrt0FramesAsCompressed ( BYTE * pKeyFrames, int32_t TotalFrames );
232232
void ReadKr00FramesAsCompressed ( BYTE * pKeyFrames, int32_t TotalFrames );
233-
void ReadKr00CompressedFrames ( BYTE * pKeyFrames, int32_t TotalFrames );
234-
void ReadKrt0CompressedFrames ( BYTE * pKeyFrames, int32_t TotalFrames );
233+
inline void ReadKr00CompressedFrames ( BYTE * pKeyFrames, int32_t TotalFrames );
234+
inline void ReadKrt0CompressedFrames ( BYTE * pKeyFrames, int32_t TotalFrames );
235235

236236
void InitializeAnimationHierarchy ( std::unique_ptr < CAnimBlendHierarchy > & pAnimationHierarchy, const char * szAnimationName, const int32_t iSequences );
237237
void InitializeAnimationSequence ( std::unique_ptr < CAnimBlendSequence > & pAnimationSequence, const char * szName, const int32_t iBoneID );

Client/mods/deathmatch/logic/CIFPAnimations.cpp

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,42 +8,37 @@ CIFPAnimations::CIFPAnimations ( void )
88

99
CIFPAnimations::~CIFPAnimations ( void )
1010
{
11-
printf("~CIFPAnimations(): CIFPAnimations destoryed\n");
11+
printf("~CIFPAnimations(): Going to call DeleteAnimations\n");
1212
DeleteAnimations ( );
1313
}
1414

1515
void CIFPAnimations::DeleteAnimations ( void )
1616
{
1717
CAnimManager * pAnimManager = g_pGame->GetAnimManager ( );
18-
for ( size_t i = 0; i < vecAnimations.size(); i++ )
19-
{
20-
IFP_Animation * ifpAnimation = &vecAnimations[i];
21-
22-
pAnimManager->RemoveFromUncompressedCache ( &ifpAnimation->Hierarchy );
23-
24-
for (unsigned short SequenceIndex = 0; SequenceIndex < ifpAnimation->Hierarchy.usNumSequences; SequenceIndex++)
18+
for ( auto it = vecAnimations.begin(); it != vecAnimations.end(); ++it )
19+
{
20+
auto pAnimationHierarchy = pAnimManager->GetCustomAnimBlendHierarchy ( &it->Hierarchy );
21+
for (unsigned short SequenceIndex = 0; SequenceIndex < pAnimationHierarchy->GetNumSequences ( ); SequenceIndex++)
2522
{
26-
auto pSequence = (CAnimBlendSequenceSAInterface*)((BYTE*)ifpAnimation->Hierarchy.pSequences + (sizeof(CAnimBlendSequenceSAInterface) * SequenceIndex));
27-
28-
if ( !( (pSequence->sFlags >> 3) & 1 ) ) // If ( !OneBigChunkForAllSequences )
23+
pAnimManager->RemoveFromUncompressedCache ( pAnimationHierarchy->GetInterface ( ) );
24+
auto pAnimationSequence = pAnimManager->GetCustomAnimBlendSequence ( pAnimationHierarchy->GetSequence ( SequenceIndex ) );
25+
void * pKeyFrames = pAnimationSequence->GetKeyFrames ( );
26+
if ( !pAnimationSequence->IsBigChunkForAllSequences ( ) )
2927
{
30-
pAnimManager->FreeKeyFramesMemory ( pSequence->pKeyFrames ); //*(void **)(pThis + 8)); //pSequence->m_pFrames );
28+
pAnimManager->FreeKeyFramesMemory ( pKeyFrames );
3129
}
3230
else
3331
{
3432
if ( SequenceIndex == 0 )
3533
{
3634
// All frames of all sequences are allocated on one memory block, so free that one
3735
// and break the loop
38-
pAnimManager->FreeKeyFramesMemory ( pSequence->pKeyFrames );
36+
pAnimManager->FreeKeyFramesMemory ( pKeyFrames );
3937
break;
4038
}
4139
}
42-
4340
}
44-
delete ifpAnimation->pSequencesMemory;
41+
delete it->pSequencesMemory;
4542
}
46-
4743
printf("CIFPAnimations::DeleteAnimations: IFP Animations have been unloaded successfully!\n");
48-
4944
}

Client/sdk/game/CAnimBlendSequence.h

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,16 @@
1515
class CAnimBlendSequence
1616
{
1717
public:
18-
virtual void Initialize ( void ) = 0;
19-
virtual void SetName ( const char * szName ) = 0;
20-
virtual void SetBoneTag ( int32_t i32BoneID ) = 0;
21-
virtual void SetKeyFrames ( size_t cKeyFrames, bool bRoot, bool bCompressed, void * pKeyFrames ) = 0;
22-
virtual uint32_t GetHash ( void ) = 0;
23-
virtual uint16_t GetBoneTag ( void ) = 0;
24-
virtual void * GetKeyFrames ( void ) = 0;
25-
virtual unsigned short GetKeyFramesCount ( void ) = 0;
26-
virtual CAnimBlendSequenceSAInterface * GetInterface ( void ) = 0;
18+
virtual void Initialize ( void ) = 0;
19+
virtual void SetName ( const char * szName ) = 0;
20+
virtual void SetBoneTag ( int32_t i32BoneID ) = 0;
21+
virtual void SetKeyFrames ( size_t cKeyFrames, bool bRoot, bool bCompressed, void * pKeyFrames ) = 0;
22+
virtual uint32_t GetHash ( void ) = 0;
23+
virtual uint16_t GetBoneTag ( void ) = 0;
24+
virtual void * GetKeyFrames ( void ) = 0;
25+
virtual unsigned short GetKeyFramesCount ( void ) = 0;
26+
virtual bool IsBigChunkForAllSequences ( void ) = 0;
27+
virtual CAnimBlendSequenceSAInterface * GetInterface ( void ) = 0;
2728
};
2829

2930
#endif

0 commit comments

Comments
 (0)