Skip to content

Commit c54b854

Browse files
committed
Removed GameSA includes from Client Deathmatch and minor code improvements
Replaced GameSA includes with interfaces - Suggested by Jusonex Removed #pragma from CIFPEngine.h eRestoreType is now passed by const reference in CIFPEngine::EngineRestoreAnimation
1 parent 43f90fe commit c54b854

17 files changed

+93
-64
lines changed

Client/game_sa/CAnimBlendAssocGroupSA.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class CAnimBlendAssocGroupSA : public CAnimBlendAssocGroup
5151
int GetNumAnimations(void);
5252
CAnimBlock* GetAnimBlock(void);
5353
CAnimBlendStaticAssociation* GetAnimation(unsigned int ID);
54+
AssocGroupId GetGroupID(void) { return m_pInterface->groupID;};
5455
void CreateAssociations(const char* szBlockName);
5556

5657
bool IsLoaded(void);

Client/game_sa/CAnimBlendSequenceSA.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ void CAnimBlendSequenceSA::SetKeyFrames(size_t cKeyFrames, bool bRoot, bool bCom
5858
}
5959
}
6060

61+
void CAnimBlendSequenceSA::CopySequenceProperties( CAnimBlendSequenceSAInterface * pAnimSequenceInterface )
62+
{
63+
*m_pInterface = *pAnimSequenceInterface;
64+
}
65+
6166
void* CAnimBlendSequenceSA::GetKeyFrame(size_t iFrame, uint32_t u32FrameSizeInBytes)
6267
{
6368
return (m_pInterface->pKeyFrames + u32FrameSizeInBytes * iFrame);

Client/game_sa/CAnimBlendSequenceSA.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class CAnimBlendSequenceSA : public CAnimBlendSequence
4444
BYTE* GetKeyFrames(void) { return m_pInterface->pKeyFrames; }
4545
unsigned short GetKeyFramesCount(void) { return m_pInterface->sNumKeyFrames; }
4646
bool IsBigChunkForAllSequences(void) { return ((m_pInterface->sFlags >> 3) & 1); }
47+
void CopySequenceProperties(CAnimBlendSequenceSAInterface * pAnimSequenceInterface);
4748
CAnimBlendSequenceSAInterface* GetInterface(void) { return m_pInterface; }
4849

4950
protected:

Client/game_sa/CAnimManagerSA.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -764,6 +764,18 @@ std::unique_ptr<CAnimBlendSequence> CAnimManagerSA::GetCustomAnimBlendSequence(C
764764
return std::make_unique<CAnimBlendSequenceSA>(pInterface);
765765
}
766766

767+
std::unique_ptr<CAnimBlendHierarchy> CAnimManagerSA::GetCustomAnimBlendHierarchy(void)
768+
{
769+
auto pInterface = new CAnimBlendHierarchySAInterface;
770+
return std::make_unique<CAnimBlendHierarchySA>(pInterface);
771+
}
772+
773+
std::unique_ptr<CAnimBlendSequence> CAnimManagerSA::GetCustomAnimBlendSequence(void)
774+
{
775+
auto pInterface = new CAnimBlendSequenceSAInterface;
776+
return std::make_unique<CAnimBlendSequenceSA>(pInterface);
777+
}
778+
767779
bool CAnimManagerSA::isGateWayAnimationHierarchy(CAnimBlendHierarchySAInterface* pInterface)
768780
{
769781
return pGame->GetKeyGen()->GetUppercaseKey(m_kGateWayAnimationName.c_str()) == pInterface->iHashKey;

Client/game_sa/CAnimManagerSA.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,10 @@ class CAnimManagerSA : public CAnimManager
159159
std::unique_ptr<CAnimBlendHierarchy> GetCustomAnimBlendHierarchy(CAnimBlendHierarchySAInterface *pInterface);
160160
std::unique_ptr<CAnimBlendSequence> GetCustomAnimBlendSequence(CAnimBlendSequenceSAInterface *pInterface);
161161

162+
// Warning! These two functions will create a new interface ( dynamic memory memory allocation )
163+
std::unique_ptr<CAnimBlendHierarchy> GetCustomAnimBlendHierarchy(void);
164+
std::unique_ptr<CAnimBlendSequence> GetCustomAnimBlendSequence(void);
165+
162166
bool isGateWayAnimationHierarchy(CAnimBlendHierarchySAInterface *pInterface);
163167
const SString &GetGateWayBlockName(void) { return m_kGateWayBlockName; };
164168
const SString &GetGateWayAnimationName(void) { return m_kGateWayAnimationName; };

Client/mods/deathmatch/logic/CClientGame.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111

1212
#include "StdInc.h"
1313
#include <net/SyncStructures.h>
14-
#include <../Client/game_sa/CAnimBlendAssocGroupSA.h>
15-
#include <../Client/game_sa/CAnimBlendAssociationSA.h>
16-
#include <../game_sa/CAnimBlendHierarchySA.h>
14+
#include "game/CAnimBlendAssocGroup.h"
15+
#include "game/CAnimBlendAssociation.h"
16+
#include "game/CAnimBlendHierarchy.h"
1717

1818
SString StringZeroPadout(const SString& strInput, uint uiPadoutSize)
1919
{
@@ -3961,11 +3961,12 @@ CAnimBlendAssociationSAInterface* CClientGame::AddAnimationAndSyncHandler(RpClum
39613961

39623962
bool CClientGame::AssocGroupCopyAnimationHandler(CAnimBlendStaticAssociationSAInterface* pOutAnimStaticAssocInterface,
39633963
CAnimBlendAssociationSAInterface* pAnimAssoc, RpClump* pClump,
3964-
CAnimBlendAssocGroupSAInterface* pAnimAssocGroup, AnimationId animID)
3964+
CAnimBlendAssocGroupSAInterface* pAnimAssocGroupInterface, AnimationId animID)
39653965
{
39663966
bool isCustomAnimationToPlay = false;
39673967
CAnimManager* pAnimationManager = g_pGame->GetAnimManager();
3968-
auto pOriginalAnimStaticAssoc = pAnimationManager->GetAnimStaticAssociation(pAnimAssocGroup->groupID, animID);
3968+
auto pAnimAssocGroup = pAnimationManager->GetAnimBlendAssocGroup (pAnimAssocGroupInterface);
3969+
auto pOriginalAnimStaticAssoc = pAnimationManager->GetAnimStaticAssociation(pAnimAssocGroup->GetGroupID(), animID);
39693970
auto pOriginalAnimHierarchyInterface = pOriginalAnimStaticAssoc->GetAnimHierachyInterface();
39703971
auto pOutAnimStaticAssoc = pAnimationManager->GetAnimStaticAssociation(pOutAnimStaticAssocInterface);
39713972
CClientPed* pClientPed = GetClientPedByClump(*pClump);

Client/mods/deathmatch/logic/CClientIFP.cpp

Lines changed: 44 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include <StdInc.h>
2-
#include "../game_sa/CAnimBlendSequenceSA.h"
2+
#include "game/CAnimBlendSequence.h"
3+
#include "game/CAnimBlendHierarchy.h"
34

45
CClientIFP::CClientIFP(class CClientManager* pManager, ElementID ID) : CClientEntity(ID)
56
{
@@ -70,14 +71,13 @@ void CClientIFP::ReadIFPVersion1()
7071
SDgan Dgan;
7172
ReadDgan(Dgan);
7273

73-
std::unique_ptr<CAnimBlendHierarchy> pAnimationHierarchy = m_pAnimManager->GetCustomAnimBlendHierarchy(&Animation.Hierarchy);
74-
InitializeAnimationHierarchy(pAnimationHierarchy, Animation.Name, Dgan.Info.Entries);
75-
Animation.pSequencesMemory = AllocateSequencesMemory(pAnimationHierarchy);
74+
Animation.pHierarchy = m_pAnimManager->GetCustomAnimBlendHierarchy();
75+
InitializeAnimationHierarchy(Animation.pHierarchy, Animation.Name, Dgan.Info.Entries);
76+
Animation.pSequencesMemory = AllocateSequencesMemory(Animation.pHierarchy);
77+
Animation.pHierarchy->SetSequences(reinterpret_cast<CAnimBlendSequenceSAInterface*>(Animation.pSequencesMemory + 4));
7678

77-
pAnimationHierarchy->SetSequences(reinterpret_cast<CAnimBlendSequenceSAInterface*>(Animation.pSequencesMemory + 4));
78-
79-
*(DWORD*)Animation.pSequencesMemory = ReadSequencesWithDummies(pAnimationHierarchy);
80-
PreProcessAnimationHierarchy(pAnimationHierarchy);
79+
*(DWORD*)Animation.pSequencesMemory = ReadSequencesWithDummies(Animation.pHierarchy);
80+
PreProcessAnimationHierarchy(Animation.pHierarchy);
8181
}
8282
}
8383

@@ -94,33 +94,31 @@ void CClientIFP::ReadIFPVersion2(bool bAnp3)
9494

9595
Animation.Name = AnimationNode.Name;
9696
Animation.uiNameHash = HashString(Animation.Name.ToLower());
97+
Animation.pHierarchy = m_pAnimManager->GetCustomAnimBlendHierarchy();
98+
InitializeAnimationHierarchy(Animation.pHierarchy, AnimationNode.Name, AnimationNode.TotalObjects);
9799

98-
auto pAnimationHierarchy = m_pAnimManager->GetCustomAnimBlendHierarchy(&Animation.Hierarchy);
99-
InitializeAnimationHierarchy(pAnimationHierarchy, AnimationNode.Name, AnimationNode.TotalObjects);
100-
101-
Animation.pSequencesMemory = AllocateSequencesMemory(pAnimationHierarchy);
102-
pAnimationHierarchy->SetSequences(reinterpret_cast<CAnimBlendSequenceSAInterface*>(Animation.pSequencesMemory + 4));
100+
Animation.pSequencesMemory = AllocateSequencesMemory(Animation.pHierarchy);
101+
Animation.pHierarchy->SetSequences(reinterpret_cast<CAnimBlendSequenceSAInterface*>(Animation.pSequencesMemory + 4));
103102

104-
*(DWORD*)Animation.pSequencesMemory = ReadSequencesWithDummies(pAnimationHierarchy);
105-
PreProcessAnimationHierarchy(pAnimationHierarchy);
103+
*(DWORD*)Animation.pSequencesMemory = ReadSequencesWithDummies(Animation.pHierarchy);
104+
PreProcessAnimationHierarchy(Animation.pHierarchy);
106105
}
107106
}
108107

109108
WORD CClientIFP::ReadSequencesWithDummies(std::unique_ptr<CAnimBlendHierarchy>& pAnimationHierarchy)
110109
{
111-
std::map<DWORD, CAnimBlendSequenceSAInterface> MapOfSequences;
112-
WORD wUnknownSequences = ReadSequences(pAnimationHierarchy, MapOfSequences);
113-
114-
CopySequencesWithDummies(pAnimationHierarchy, MapOfSequences);
110+
SequenceMapType MapOfSequences;
111+
WORD wUnknownSequences = ReadSequences(pAnimationHierarchy, MapOfSequences);
115112

113+
MoveSequencesWithDummies(pAnimationHierarchy, MapOfSequences);
116114
WORD cSequences = m_kcIFPSequences + wUnknownSequences;
117115

118116
// As we need support for all 32 bones, we must change the total sequences count
119117
pAnimationHierarchy->SetNumSequences(cSequences);
120118
return cSequences;
121119
}
122120

123-
WORD CClientIFP::ReadSequences(std::unique_ptr<CAnimBlendHierarchy>& pAnimationHierarchy, std::map<DWORD, CAnimBlendSequenceSAInterface>& MapOfSequences)
121+
WORD CClientIFP::ReadSequences(std::unique_ptr<CAnimBlendHierarchy>& pAnimationHierarchy, SequenceMapType& MapOfSequences)
124122
{
125123
if (m_bVersion1)
126124
{
@@ -129,8 +127,7 @@ WORD CClientIFP::ReadSequences(std::unique_ptr<CAnimBlendHierarchy>& pAnimationH
129127
return ReadSequencesVersion2(pAnimationHierarchy, MapOfSequences);
130128
}
131129

132-
WORD CClientIFP::ReadSequencesVersion1(std::unique_ptr<CAnimBlendHierarchy>& pAnimationHierarchy,
133-
std::map<DWORD, CAnimBlendSequenceSAInterface>& MapOfSequences)
130+
WORD CClientIFP::ReadSequencesVersion1(std::unique_ptr<CAnimBlendHierarchy>& pAnimationHierarchy, SequenceMapType& MapOfSequences)
134131
{
135132
WORD wUnknownSequences = 0;
136133
for (size_t SequenceIndex = 0; SequenceIndex < pAnimationHierarchy->GetNumSequences(); SequenceIndex++)
@@ -142,31 +139,31 @@ WORD CClientIFP::ReadSequencesVersion1(std::unique_ptr<CAnimBlendHierarchy>&
142139
continue;
143140
}
144141

145-
CAnimBlendSequenceSAInterface AnimationSequence;
146-
CAnimBlendSequenceSAInterface* pAnimationSequenceInterface = &AnimationSequence;
147-
142+
std::unique_ptr<CAnimBlendSequence> pAnimationSequence;
148143
bool bUnknownSequence = iBoneID == eBoneType::UNKNOWN;
149144
if (bUnknownSequence)
150145
{
151146
size_t UnkownSequenceIndex = m_kcIFPSequences + wUnknownSequences;
152-
pAnimationSequenceInterface = pAnimationHierarchy->GetSequence(UnkownSequenceIndex);
147+
auto pAnimationSequenceInterface = pAnimationHierarchy->GetSequence(UnkownSequenceIndex);
148+
pAnimationSequence = m_pAnimManager->GetCustomAnimBlendSequence(pAnimationSequenceInterface);
153149
wUnknownSequences++;
154150
}
155-
156-
std::unique_ptr<CAnimBlendSequence> pAnimationSequence = m_pAnimManager->GetCustomAnimBlendSequence(pAnimationSequenceInterface);
151+
else
152+
{
153+
pAnimationSequence = m_pAnimManager->GetCustomAnimBlendSequence();
154+
}
157155
InitializeAnimationSequence(pAnimationSequence, Anim.Name, iBoneID);
158156

159157
eFrameType iFrameType = ReadKfrm();
160158
if ((ReadSequenceKeyFrames(pAnimationSequence, iFrameType, Anim.Frames)) && (!bUnknownSequence))
161159
{
162-
MapOfSequences[iBoneID] = *pAnimationSequence->GetInterface();
160+
MapOfSequences[iBoneID] = std::move (pAnimationSequence);
163161
}
164162
}
165163
return wUnknownSequences;
166164
}
167165

168-
WORD CClientIFP::ReadSequencesVersion2(std::unique_ptr<CAnimBlendHierarchy>& pAnimationHierarchy,
169-
std::map<DWORD, CAnimBlendSequenceSAInterface>& MapOfSequences)
166+
WORD CClientIFP::ReadSequencesVersion2(std::unique_ptr<CAnimBlendHierarchy>& pAnimationHierarchy,SequenceMapType& MapOfSequences)
170167
{
171168
WORD wUnknownSequences = 0;
172169
for (size_t SequenceIndex = 0; SequenceIndex < pAnimationHierarchy->GetNumSequences(); SequenceIndex++)
@@ -176,22 +173,24 @@ WORD CClientIFP::ReadSequencesVersion2(std::unique_ptr<CAnimBlendHierarchy>&
176173

177174
bool bUnknownSequence = ObjectNode.BoneID == eBoneType::UNKNOWN;
178175

179-
CAnimBlendSequenceSAInterface AnimationSequence;
180-
CAnimBlendSequenceSAInterface* pAnimationSequenceInterface = &AnimationSequence;
176+
std::unique_ptr<CAnimBlendSequence> pAnimationSequence;
181177
if (bUnknownSequence)
182178
{
183179
size_t UnkownSequenceIndex = m_kcIFPSequences + wUnknownSequences;
184-
pAnimationSequenceInterface = pAnimationHierarchy->GetSequence(UnkownSequenceIndex);
180+
auto pAnimationSequenceInterface = pAnimationHierarchy->GetSequence(UnkownSequenceIndex);
181+
pAnimationSequence = m_pAnimManager->GetCustomAnimBlendSequence(pAnimationSequenceInterface);
185182
wUnknownSequences++;
186183
}
187-
188-
std::unique_ptr<CAnimBlendSequence> pAnimationSequence = m_pAnimManager->GetCustomAnimBlendSequence(pAnimationSequenceInterface);
184+
else
185+
{
186+
pAnimationSequence = m_pAnimManager->GetCustomAnimBlendSequence();
187+
}
189188
InitializeAnimationSequence(pAnimationSequence, ObjectNode.Name, ObjectNode.BoneID);
190189

191190
eFrameType iFrameType = static_cast<eFrameType>(ObjectNode.FrameType);
192191
if ((ReadSequenceKeyFrames(pAnimationSequence, iFrameType, ObjectNode.TotalFrames)) && (!bUnknownSequence))
193192
{
194-
MapOfSequences[ObjectNode.BoneID] = *pAnimationSequence->GetInterface();
193+
MapOfSequences[ObjectNode.BoneID] = std::move(pAnimationSequence);
195194
}
196195
}
197196
return wUnknownSequences;
@@ -443,23 +442,25 @@ void CClientIFP::PreProcessAnimationHierarchy(std::unique_ptr<CAnimBlendHierarch
443442
}
444443
}
445444

446-
void CClientIFP::CopySequencesWithDummies(std::unique_ptr<CAnimBlendHierarchy>& pAnimationHierarchy,
447-
std::map<DWORD, CAnimBlendSequenceSAInterface>& mapOfSequences)
445+
void CClientIFP::MoveSequencesWithDummies(std::unique_ptr<CAnimBlendHierarchy>& pAnimationHierarchy, SequenceMapType& mapOfSequences)
448446
{
449447
for (size_t SequenceIndex = 0; SequenceIndex < m_kcIFPSequences; SequenceIndex++)
450448
{
451449
SString BoneName = m_karrstrBoneNames[SequenceIndex];
452450
DWORD BoneID = m_karruBoneIds[SequenceIndex];
453451

454-
CAnimBlendSequenceSAInterface* pAnimationSequenceInterface = pAnimationHierarchy->GetSequence(SequenceIndex);
452+
auto pAnimationSequenceInterface = pAnimationHierarchy->GetSequence(SequenceIndex);
453+
auto pAnimationSequence = m_pAnimManager->GetCustomAnimBlendSequence(pAnimationSequenceInterface);
455454
auto it = mapOfSequences.find(BoneID);
456455
if (it != mapOfSequences.end())
457456
{
458-
*pAnimationSequenceInterface = it->second;
457+
auto pMapAnimSequenceInterface = it->second->GetInterface();
458+
pAnimationSequence->CopySequenceProperties (pMapAnimSequenceInterface);
459+
// Delete the interface because we are moving, not copying
460+
delete pMapAnimSequenceInterface;
459461
}
460462
else
461463
{
462-
std::unique_ptr<CAnimBlendSequence> pAnimationSequence = m_pAnimManager->GetCustomAnimBlendSequence(pAnimationSequenceInterface);
463464
InsertAnimationDummySequence(pAnimationSequence, BoneName, BoneID);
464465
}
465466
}
@@ -1072,7 +1073,7 @@ CAnimBlendHierarchySAInterface* CClientIFP::GetAnimationHierarchy(const SString&
10721073
[&uiAnimationNameHash](SAnimation const& Animation) { return Animation.uiNameHash == uiAnimationNameHash; });
10731074
if (it != m_pVecAnimations->end())
10741075
{
1075-
return &it->Hierarchy;
1076+
return it->pHierarchy->GetInterface();
10761077
}
10771078
return nullptr;
10781079
}

Client/mods/deathmatch/logic/CClientIFP.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ class CClientIFP : public CClientEntity, CFileReader
99
{
1010
public:
1111
typedef CIFPAnimations::SAnimation SAnimation;
12+
typedef std::map<DWORD, std::unique_ptr<CAnimBlendSequence>> SequenceMapType;
1213

1314
struct SBase
1415
{
@@ -212,9 +213,9 @@ class CClientIFP : public CClientEntity, CFileReader
212213
void ReadIFPVersion2(bool bAnp3);
213214

214215
WORD ReadSequencesWithDummies(std::unique_ptr<CAnimBlendHierarchy>& pAnimationHierarchy);
215-
WORD ReadSequences(std::unique_ptr<CAnimBlendHierarchy>& pAnimationHierarchy, std::map<DWORD, CAnimBlendSequenceSAInterface>& MapOfSequences);
216-
WORD ReadSequencesVersion1(std::unique_ptr<CAnimBlendHierarchy>& pAnimationHierarchy, std::map<DWORD, CAnimBlendSequenceSAInterface>& MapOfSequences);
217-
WORD ReadSequencesVersion2(std::unique_ptr<CAnimBlendHierarchy>& pAnimationHierarchy, std::map<DWORD, CAnimBlendSequenceSAInterface>& MapOfSequences);
216+
WORD ReadSequences(std::unique_ptr<CAnimBlendHierarchy>& pAnimationHierarchy, SequenceMapType& MapOfSequences);
217+
WORD ReadSequencesVersion1(std::unique_ptr<CAnimBlendHierarchy>& pAnimationHierarchy, SequenceMapType& MapOfSequences);
218+
WORD ReadSequencesVersion2(std::unique_ptr<CAnimBlendHierarchy>& pAnimationHierarchy, SequenceMapType& MapOfSequences);
218219
std::int32_t ReadSequenceVersion1(SAnim& Anim);
219220
void ReadSequenceVersion2(SSequenceHeaderV2& ObjectNode);
220221

@@ -242,7 +243,7 @@ class CClientIFP : public CClientEntity, CFileReader
242243
const std::int32_t& iSequences);
243244
void InitializeAnimationSequence(std::unique_ptr<CAnimBlendSequence>& pAnimationSequence, const SString& strName, const std::int32_t& iBoneID);
244245
void PreProcessAnimationHierarchy(std::unique_ptr<CAnimBlendHierarchy>& pAnimationHierarchy);
245-
void CopySequencesWithDummies(std::unique_ptr<CAnimBlendHierarchy>& pAnimationHierarchy, std::map<DWORD, CAnimBlendSequenceSAInterface>& mapOfSequences);
246+
void MoveSequencesWithDummies(std::unique_ptr<CAnimBlendHierarchy>& pAnimationHierarchy, std::map<DWORD, std::unique_ptr<CAnimBlendSequence>>& mapOfSequences);
246247
BYTE* AllocateSequencesMemory(std::unique_ptr<CAnimBlendHierarchy>& pAnimationHierarchy);
247248

248249
void InsertAnimationDummySequence(std::unique_ptr<CAnimBlendSequence>& pAnimationSequence, const SString& BoneName, const DWORD& dwBoneID);

Client/mods/deathmatch/logic/CClientPed.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
*****************************************************************************/
1010

1111
#include "StdInc.h"
12-
12+
#include "game/CAnimBlendHierarchy.h"
1313
using std::list;
1414
using std::vector;
1515

Client/mods/deathmatch/logic/CClientPed.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ class CClientPed;
1919

2020
#include <multiplayer/CMultiplayer.h>
2121
#include "CClientPad.h"
22-
#include <../game_sa/CAnimBlendHierarchySA.h>
2322
#include <memory>
2423

2524
class CClientCamera;

Client/mods/deathmatch/logic/CIFPAnimations.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include <StdInc.h>
2-
#include "../game_sa/CAnimBlendSequenceSA.h"
2+
#include "game/CAnimBlendSequence.h"
3+
#include "game/CAnimBlendHierarchy.h"
34

45
CIFPAnimations::~CIFPAnimations(void)
56
{
@@ -11,11 +12,10 @@ void CIFPAnimations::DeleteAnimations(void)
1112
CAnimManager* pAnimManager = g_pGame->GetAnimManager();
1213
for (auto& Animation : vecAnimations)
1314
{
14-
auto pAnimationHierarchy = pAnimManager->GetCustomAnimBlendHierarchy(&Animation.Hierarchy);
15-
for (unsigned short SequenceIndex = 0; SequenceIndex < pAnimationHierarchy->GetNumSequences(); SequenceIndex++)
15+
for (unsigned short SequenceIndex = 0; SequenceIndex < Animation.pHierarchy->GetNumSequences(); SequenceIndex++)
1616
{
17-
pAnimManager->RemoveFromUncompressedCache(pAnimationHierarchy->GetInterface());
18-
auto pAnimationSequence = pAnimManager->GetCustomAnimBlendSequence(pAnimationHierarchy->GetSequence(SequenceIndex));
17+
pAnimManager->RemoveFromUncompressedCache(Animation.pHierarchy->GetInterface());
18+
auto pAnimationSequence = pAnimManager->GetCustomAnimBlendSequence(Animation.pHierarchy->GetSequence(SequenceIndex));
1919
void* pKeyFrames = pAnimationSequence->GetKeyFrames();
2020
if (!pAnimationSequence->IsBigChunkForAllSequences())
2121
{
@@ -33,5 +33,6 @@ void CIFPAnimations::DeleteAnimations(void)
3333
}
3434
}
3535
delete Animation.pSequencesMemory;
36+
delete Animation.pHierarchy->GetInterface();
3637
}
3738
}

Client/mods/deathmatch/logic/CIFPAnimations.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#ifndef __CIFPANIMATIONS_H
22
#define __CIFPANIMATIONS_H
3-
#include "../Client/mods/deathmatch/logic/CClientIFP.h"
3+
#include "CClientIFP.h"
44

55
class CIFPAnimations
66
{
@@ -9,7 +9,7 @@ class CIFPAnimations
99
{
1010
SString Name;
1111
unsigned int uiNameHash;
12-
CAnimBlendHierarchySAInterface Hierarchy;
12+
std::unique_ptr<CAnimBlendHierarchy> pHierarchy;
1313
BYTE* pSequencesMemory;
1414
};
1515

0 commit comments

Comments
 (0)