@@ -4027,57 +4027,42 @@ CAnimBlendAssociationSAInterface * CClientGame::AddAnimationAndSyncHandler ( RpC
40274027}
40284028
40294029
4030- typedef void (__thiscall* hCAnimBlendStaticAssociation_Init)
4031- (
4032- CAnimBlendStaticAssociationSAInterface * pThis,
4033- RpClump * Clump,
4034- CAnimBlendHierarchySAInterface * pAnimBlendHierarchy
4035- );
4036-
4037-
4038- bool CClientGame::AssocGroupCopyAnimationHandler ( CAnimBlendStaticAssociationSAInterface * pOutAnimStaticAssoc, CAnimBlendAssociationSAInterface * pAnimAssoc, RpClump * pClump, CAnimBlendAssocGroupSAInterface * pAnimAssocGroup, AnimationId animID )
4030+ bool CClientGame::AssocGroupCopyAnimationHandler ( CAnimBlendStaticAssociationSAInterface * pOutAnimStaticAssocInterface, CAnimBlendAssociationSAInterface * pAnimAssoc, RpClump * pClump, CAnimBlendAssocGroupSAInterface * pAnimAssocGroup, AnimationId animID )
40394031{
4040- auto CAnimBlendStaticAssociation_Init = (hCAnimBlendStaticAssociation_Init)0x4CEC20 ;
40414032 bool isCustomAnimationToPlay = false ;
4042-
40434033 CAnimManager * pAnimationManager = g_pGame->GetAnimManager ();
40444034 auto pOriginalAnimStaticAssoc = pAnimationManager->GetAnimStaticAssociation ( pAnimAssocGroup->groupID , animID );
4045-
4035+ auto pOriginalAnimHierarchyInterface = pOriginalAnimStaticAssoc->GetAnimHierachyInterface ( );
4036+ auto pOutAnimStaticAssoc = pAnimationManager->GetAnimStaticAssociation ( pOutAnimStaticAssocInterface );
40464037 CClientPed * pClientPed = GetClientPedByClump ( *pClump );
40474038 if ( pClientPed != nullptr )
40484039 {
4049- auto pReplacedAnimation = pClientPed->GetReplacedAnimation ( pOriginalAnimStaticAssoc-> pAnimHeirarchy );
4040+ auto pReplacedAnimation = pClientPed->GetReplacedAnimation ( pOriginalAnimHierarchyInterface );
40504041 if ( pReplacedAnimation != nullptr )
40514042 {
40524043 std::shared_ptr < CIFPAnimations > pIFPAnimations = pReplacedAnimation->pIFP ->GetIFPAnimationsPointer ();
40534044 InsertAnimationAssociationToMap ( pAnimAssoc, pIFPAnimations );
40544045
40554046 // Play our custom animation instead of default
4056- CAnimBlendStaticAssociation_Init ( pOutAnimStaticAssoc, pClump, pReplacedAnimation->pAnimationHierarchy );
4047+ pOutAnimStaticAssoc-> Initialize ( pClump, pReplacedAnimation->pAnimationHierarchy );
40574048 isCustomAnimationToPlay = true ;
40584049 }
40594050 }
40604051
40614052 if ( !isCustomAnimationToPlay )
40624053 {
40634054 // Play default internal animation
4064- CAnimBlendStaticAssociation_Init ( pOutAnimStaticAssoc, pClump, pOriginalAnimStaticAssoc-> pAnimHeirarchy );
4055+ pOutAnimStaticAssoc-> Initialize ( pClump, pOriginalAnimHierarchyInterface );
40654056 }
40664057
4067- pOutAnimStaticAssoc->sAnimGroup = static_cast < short > ( pAnimAssocGroup->groupID );
4068- pOutAnimStaticAssoc->sAnimID = static_cast < short > ( animID );
4069-
4070- // Total bones in clump. GTA SA is using 32 bones for peds/players
4071- pOutAnimStaticAssoc->nNumBlendNodes = pOriginalAnimStaticAssoc->nNumBlendNodes ;
4072- pOutAnimStaticAssoc->sFlags = pOriginalAnimStaticAssoc->sFlags ;
4058+ CopyStaticAssociationProperties ( pOutAnimStaticAssoc, pOriginalAnimStaticAssoc );
40734059 return isCustomAnimationToPlay;
40744060}
40754061
40764062
40774063bool CClientGame::BlendAnimationHierarchyHandler ( CAnimBlendAssociationSAInterface * pAnimAssoc, CAnimBlendHierarchySAInterface ** pOutAnimHierarchy, int * pFlags, RpClump * pClump )
40784064{
40794065 bool isCustomAnimationToPlay = false ;
4080-
40814066 CAnimManager * pAnimationManager = g_pGame->GetAnimManager ();
40824067 CClientPed * pClientPed = GetClientPedByClump ( *pClump );
40834068 if ( pClientPed != nullptr )
@@ -6845,12 +6830,25 @@ void CClientGame::RestreamModel ( unsigned short usModel )
68456830
68466831}
68476832
6833+
6834+ void CClientGame::CopyStaticAssociationProperties ( std::unique_ptr < CAnimBlendStaticAssociation > & pOutAnimStaticAssoc, std::unique_ptr < CAnimBlendStaticAssociation > & pOriginalAnimStaticAssoc )
6835+ {
6836+ pOutAnimStaticAssoc->SetAnimGroup ( pOriginalAnimStaticAssoc->GetAnimGroup ( ) );
6837+ pOutAnimStaticAssoc->SetAnimID ( pOriginalAnimStaticAssoc->GetAnimID ( ) );
6838+
6839+ // Total bones in clump. GTA SA is using 32 bones for peds/players
6840+ pOutAnimStaticAssoc->SetNumBlendNodes ( pOriginalAnimStaticAssoc->GetNumBlendNodes ( ) );
6841+ pOutAnimStaticAssoc->SetFlags ( pOriginalAnimStaticAssoc->GetFlags ( ) );
6842+ }
6843+
6844+
68486845void CClientGame::InsertIFPPointerToMap ( const unsigned int u32BlockNameHash, const std::shared_ptr < CClientIFP > & pIFP )
68496846{
68506847 std::lock_guard < std::mutex > mutexGuardedLock ( m_MutexOfIfpPointersMap );
68516848 m_mapOfIfpPointers [ u32BlockNameHash ] = pIFP;
68526849}
68536850
6851+
68546852std::shared_ptr < CClientIFP > CClientGame::GetIFPPointerFromMap ( const unsigned int u32BlockNameHash )
68556853{
68566854 std::lock_guard < std::mutex > mutexGuardedLock ( m_MutexOfIfpPointersMap );
@@ -6862,6 +6860,7 @@ std::shared_ptr < CClientIFP > CClientGame::GetIFPPointerFromMap ( const unsigne
68626860 return nullptr ;
68636861}
68646862
6863+
68656864void CClientGame::RemoveIFPPointerFromMap ( const unsigned int u32BlockNameHash )
68666865{
68676866 std::lock_guard < std::mutex > mutexGuardedLock ( m_MutexOfIfpPointersMap );
@@ -6875,12 +6874,14 @@ void CClientGame::InsertPedPointerToSet ( CClientPed * pPed )
68756874 m_setOfPedPointers.insert ( pPed );
68766875}
68776876
6877+
68786878void CClientGame::RemovePedPointerFromSet ( CClientPed * pPed )
68796879{
68806880 std::lock_guard < std::mutex > mutexGuardedLock ( m_MutexOfPedPointersSet );
68816881 m_setOfPedPointers.erase ( pPed );
68826882}
68836883
6884+
68846885CClientPed * CClientGame::GetClientPedByClump ( const RpClump & Clump )
68856886{
68866887 std::lock_guard < std::mutex > mutexGuardedLock ( m_MutexOfPedPointersSet );
@@ -6902,6 +6903,7 @@ CClientPed * CClientGame::GetClientPedByClump ( const RpClump & Clump )
69026903 return nullptr ;
69036904}
69046905
6906+
69056907void CClientGame::OnClientIFPUnload ( const std::shared_ptr < CClientIFP > & IFP )
69066908{
69076909 std::lock_guard < std::mutex > mutexGuardedLock ( m_MutexOfPedPointersSet );
@@ -6931,12 +6933,14 @@ void CClientGame::OnClientIFPUnload ( const std::shared_ptr < CClientIFP > & IFP
69316933 }
69326934}
69336935
6936+
69346937void CClientGame::InsertAnimationAssociationToMap ( CAnimBlendAssociationSAInterface * pAnimAssociation, const std::shared_ptr < CIFPAnimations > & pIFPAnimations )
69356938{
69366939 std::lock_guard < std::mutex > mutexGuardedLock ( m_MutexOfAnimationAssociationsMap );
69376940 m_mapOfCustomAnimationAssociations [ pAnimAssociation ] = pIFPAnimations;
69386941}
69396942
6943+
69406944void CClientGame::RemoveAnimationAssociationFromMap ( CAnimBlendAssociationSAInterface * pAnimAssociation )
69416945{
69426946 std::lock_guard < std::mutex > mutexGuardedLock ( m_MutexOfAnimationAssociationsMap );
0 commit comments