@@ -16,6 +16,8 @@ h_CAnimBlendHierarchy_CalcTotalTime OLD__CAnimBlendHierarchy_CalcTotalTi
16
16
extern DWORD BoneIds[];
17
17
extern char BoneNames[][24 ];
18
18
19
+ DWORD CClientIFP::s_iAnimationSearchReferences = 0 ;
20
+
19
21
CClientIFP::CClientIFP ( class CClientManager * pManager, ElementID ID ) : CClientEntity ( ID )
20
22
{
21
23
// Init
@@ -68,7 +70,7 @@ void CClientIFP::UnloadIFP ( void )
68
70
m_pIFPAnimations->bUnloadOnZeroReferences = true ;
69
71
70
72
// unload IFP animations, if reference count is zero
71
- if ( m_pIFPAnimations->iReferences == 0 )
73
+ if ( ( m_pIFPAnimations->iReferences == 0 ) && ( s_iAnimationSearchReferences == 0 ) )
72
74
{
73
75
g_pClientGame->UnloadIFPAnimations ( m_pIFPAnimations );
74
76
@@ -1161,17 +1163,20 @@ std::string CClientIFP::getCorrectBoneNameFromName(std::string const& BoneName)
1161
1163
1162
1164
CAnimBlendHierarchySAInterface * CClientIFP::GetAnimationHierarchy ( const SString & strAnimationName )
1163
1165
{
1166
+ CAnimBlendHierarchySAInterface * pAnimHierarchyInterface = nullptr ;
1164
1167
if ( m_bisIFPLoaded )
1165
1168
{
1169
+ s_iAnimationSearchReferences ++;
1166
1170
for (auto it = m_pVecAnimations->begin (); it != m_pVecAnimations->end (); ++it)
1167
1171
{
1168
1172
if (strAnimationName.ToLower () == it->Name .ToLower ())
1169
1173
{
1170
- return (CAnimBlendHierarchySAInterface *)&it->Hierarchy ;
1174
+ pAnimHierarchyInterface = (CAnimBlendHierarchySAInterface *)&it->Hierarchy ;
1171
1175
}
1172
1176
}
1177
+ s_iAnimationSearchReferences --;
1173
1178
}
1174
- return nullptr ;
1179
+ return pAnimHierarchyInterface ;
1175
1180
}
1176
1181
1177
1182
// ----------------------------------------------------------------------------------------------------------
0 commit comments