Skip to content

Commit b5caa13

Browse files
committed
Improved code readability. Still more improvement needed.
1 parent 3e25495 commit b5caa13

File tree

3 files changed

+277
-72
lines changed

3 files changed

+277
-72
lines changed

Client/mods/deathmatch/logic/CClientIFP.cpp

Lines changed: 80 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -122,14 +122,14 @@ void CClientIFP::ReadIFPVersion2( bool anp3)
122122
pAnimationHierarchy->SetNumSequences ( AnimationNode.TotalObjects );
123123
pAnimationHierarchy->SetAnimationBlockID ( 0 );
124124

125-
const unsigned short TotalSequences = IFP_TOTAL_SEQUENCES + pAnimationHierarchy->GetNumSequences ( );
125+
const unsigned short TotalSequences = cIFPSequences + pAnimationHierarchy->GetNumSequences ( );
126126
ifpAnimation.pSequencesMemory = ( char * ) operator new ( 12 * TotalSequences + 4 ); // Allocate memory for sequences ( 12 * seq_count + 4 )
127127

128128
pAnimationHierarchy->SetSequences ( reinterpret_cast < CAnimBlendSequenceSAInterface * > ( ifpAnimation.pSequencesMemory + 4 ) );
129129

130-
std::map < std::string, _CAnimBlendSequence > MapOfSequences;
130+
std::map < std::string, CAnimBlendSequenceSAInterface > MapOfSequences;
131131

132-
unsigned short TotalUnknownSequences = 0;
132+
WORD wUnknownSequences = 0;
133133

134134
bool bFirstSeq = true;
135135
for (size_t SequenceIndex = 0; SequenceIndex < pAnimationHierarchy->GetNumSequences ( ); SequenceIndex++)
@@ -138,40 +138,18 @@ void CClientIFP::ReadIFPVersion2( bool anp3)
138138

139139
readBuffer < Object >(&ObjectNode);
140140

141-
std::string BoneName = convertStringToMapKey (ObjectNode.Name);
142-
std::string CorrectBoneName;
143-
144-
bool bUnknownSequence = false;
145-
if (ObjectNode.BoneID == -1)
146-
{
147-
ObjectNode.BoneID = getBoneIDFromName(BoneName);
148-
if (ObjectNode.BoneID == -1)
149-
{
150-
bUnknownSequence = true;
151-
}
141+
std::string strCorrectBoneName;
142+
ParseSequenceObject ( ObjectNode, strCorrectBoneName );
152143

153-
CorrectBoneName = getCorrectBoneNameFromName(BoneName);
154-
}
155-
else
156-
{
157-
CorrectBoneName = getCorrectBoneNameFromID(ObjectNode.BoneID);
158-
if (CorrectBoneName == "Unknown")
159-
{
160-
CorrectBoneName = getCorrectBoneNameFromName(BoneName);
161-
}
162-
}
163-
164-
memset (ObjectNode.Name, 0, sizeof(Object::Name));
165-
strncpy (ObjectNode.Name, CorrectBoneName.c_str(), CorrectBoneName.size() +1);
166-
167-
168144
CAnimBlendSequenceSAInterface AnimationSequence;
169145
CAnimBlendSequenceSAInterface * pAnimationSequenceInterface = &AnimationSequence;
146+
147+
bool bUnknownSequence = ObjectNode.BoneID == -1;
170148
if (bUnknownSequence)
171149
{
172-
size_t UnkownSequenceIndex = IFP_TOTAL_SEQUENCES + TotalUnknownSequences;
150+
size_t UnkownSequenceIndex = cIFPSequences + wUnknownSequences;
173151
pAnimationSequenceInterface = pAnimationHierarchy->GetSequence ( UnkownSequenceIndex );
174-
TotalUnknownSequences ++;
152+
wUnknownSequences ++;
175153
}
176154

177155
std::unique_ptr < CAnimBlendSequence > pAnimationSequence = pAnimManager->GetCustomAnimBlendSequence ( pAnimationSequenceInterface );
@@ -225,36 +203,17 @@ void CClientIFP::ReadIFPVersion2( bool anp3)
225203

226204
if ( !bUnknownSequence )
227205
{
228-
_CAnimBlendSequence * pAnimSequenceInterface = (_CAnimBlendSequence*)pAnimationSequence->GetInterface();
229-
MapOfSequences [ CorrectBoneName ] = (_CAnimBlendSequence)*pAnimSequenceInterface;
206+
MapOfSequences [ strCorrectBoneName ] = *pAnimationSequence->GetInterface();
230207
}
231208
}
232209
}
233210

234-
std::map < std::string, _CAnimBlendSequence >::iterator it;
235-
for (size_t SequenceIndex = 0; SequenceIndex < IFP_TOTAL_SEQUENCES; SequenceIndex++)
236-
{
237-
std::string BoneName = BoneNames[SequenceIndex];
238-
DWORD BoneID = BoneIds[SequenceIndex];
239-
240-
CAnimBlendSequenceSAInterface * pAnimationSequenceInterface = pAnimationHierarchy->GetSequence ( SequenceIndex );
211+
CopySequencesWithDummies ( pAnimManager, pAnimationHierarchy, MapOfSequences );
241212

242-
it = MapOfSequences.find(BoneName);
243-
if (it != MapOfSequences.end())
244-
{
245-
memcpy ( pAnimationSequenceInterface, &it->second, sizeof ( CAnimBlendSequenceSAInterface ) );
246-
}
247-
else
248-
{
249-
std::unique_ptr < CAnimBlendSequence > pAnimationSequence = pAnimManager->GetCustomAnimBlendSequence ( pAnimationSequenceInterface );
250-
InsertAnimationDummySequence ( pAnimationSequence, BoneName, BoneID );
251-
}
252-
}
253-
254-
*(DWORD *)ifpAnimation.pSequencesMemory = IFP_TOTAL_SEQUENCES + TotalUnknownSequences;
213+
*(DWORD *)ifpAnimation.pSequencesMemory = cIFPSequences + wUnknownSequences;
255214

256215
// This order is very important. As we need support for all 32 bones, we must change the total sequences count
257-
pAnimationHierarchy->SetNumSequences ( IFP_TOTAL_SEQUENCES + TotalUnknownSequences );
216+
pAnimationHierarchy->SetNumSequences ( cIFPSequences + wUnknownSequences );
258217

259218
if ( !pAnimationHierarchy->isRunningCompressed ( ) )
260219
{
@@ -265,16 +224,39 @@ void CClientIFP::ReadIFPVersion2( bool anp3)
265224
}
266225
}
267226

227+
void CClientIFP::CopySequencesWithDummies ( CAnimManager * pAnimManager, std::unique_ptr < CAnimBlendHierarchy > & pAnimationHierarchy, std::map < std::string, CAnimBlendSequenceSAInterface > & mapOfSequences )
228+
{
229+
std::map < std::string, CAnimBlendSequenceSAInterface >::iterator it;
230+
for (size_t SequenceIndex = 0; SequenceIndex < cIFPSequences; SequenceIndex++)
231+
{
232+
std::string BoneName = BoneNames[SequenceIndex];
233+
DWORD BoneID = BoneIds[SequenceIndex];
234+
235+
CAnimBlendSequenceSAInterface * pAnimationSequenceInterface = pAnimationHierarchy->GetSequence ( SequenceIndex );
236+
237+
it = mapOfSequences.find(BoneName);
238+
if (it != mapOfSequences.end())
239+
{
240+
memcpy ( pAnimationSequenceInterface, &it->second, sizeof ( CAnimBlendSequenceSAInterface ) );
241+
}
242+
else
243+
{
244+
std::unique_ptr < CAnimBlendSequence > pAnimationSequence = pAnimManager->GetCustomAnimBlendSequence ( pAnimationSequenceInterface );
245+
InsertAnimationDummySequence ( pAnimationSequence, BoneName, BoneID );
246+
}
247+
}
248+
}
249+
268250
void CClientIFP::ReadIFPVersion1 ( )
269251
{
270252
/*uint32_t OffsetEOF;
271253
272254
readBuffer < uint32_t > ( &OffsetEOF );
273-
ROUNDSIZE (OffsetEOF);
255+
RoundSize (OffsetEOF);
274256
275257
IFP_INFO Info;
276258
readBytes ( &Info, sizeof ( IFP_BASE ) );
277-
ROUNDSIZE (Info.Base.Size);
259+
RoundSize (Info.Base.Size);
278260
279261
readBytes(&Info.Entries, Info.Base.Size);
280262
@@ -291,7 +273,7 @@ void CClientIFP::ReadIFPVersion1 ( )
291273
292274
IFP_NAME Name;
293275
readBuffer < IFP_NAME > ( &Name );
294-
ROUNDSIZE ( Name.Base.Size );
276+
RoundSize ( Name.Base.Size );
295277
296278
char AnimationName [ 24 ];
297279
readCString (AnimationName, Name.Base.Size);
@@ -309,8 +291,8 @@ void CClientIFP::ReadIFPVersion1 ( )
309291
310292
IFP_DGAN Dgan;
311293
readBytes ( &Dgan, sizeof ( IFP_BASE ) * 2 );
312-
ROUNDSIZE ( Dgan.Base.Size );
313-
ROUNDSIZE ( Dgan.Info.Base.Size );
294+
RoundSize ( Dgan.Base.Size );
295+
RoundSize ( Dgan.Info.Base.Size );
314296
315297
//ofs << "going to read Dgan.Info.Entries | Dgan.Info.Base.Size : " << Dgan.Info.Base.Size << std::endl;
316298
@@ -322,23 +304,23 @@ void CClientIFP::ReadIFPVersion1 ( )
322304
pAnimHierarchy->m_nAnimBlockId = 0;
323305
pAnimHierarchy->field_B = 0;
324306
325-
const unsigned short TotalSequences = IFP_TOTAL_SEQUENCES + pAnimHierarchy->m_nSeqCount;
307+
const unsigned short TotalSequences = cIFPSequences + pAnimHierarchy->m_nSeqCount;
326308
ifpAnimation.pSequencesMemory = ( char * ) operator new ( 12 * TotalSequences + 4 ); // Allocate memory for sequences ( 12 * seq_count + 4 )
327309
328310
pAnimHierarchy->m_pSequences = ( _CAnimBlendSequence * )( ifpAnimation.pSequencesMemory+ 4 );
329311
330312
std::map < std::string, _CAnimBlendSequence > MapOfSequences;
331313
332-
unsigned short TotalUnknownSequences = 0;
314+
unsigned short wUnknownSequences = 0;
333315
for (size_t SequenceIndex = 0; SequenceIndex < pAnimHierarchy->m_nSeqCount; SequenceIndex++)
334316
{
335317
IFP_CPAN Cpan;
336318
readBuffer < IFP_CPAN > ( &Cpan );
337-
ROUNDSIZE ( Cpan.Base.Size );
319+
RoundSize ( Cpan.Base.Size );
338320
339321
IFP_ANIM Anim;
340322
readBytes ( &Anim, sizeof ( IFP_BASE ) );
341-
ROUNDSIZE ( Anim.Base.Size );
323+
RoundSize ( Anim.Base.Size );
342324
343325
readBytes ( &Anim.Name, Anim.Base.Size );
344326
@@ -381,7 +363,7 @@ void CClientIFP::ReadIFPVersion1 ( )
381363
_CAnimBlendSequence * pUnkownSequence = nullptr;
382364
if (bUnknownSequence)
383365
{
384-
size_t UnkownSequenceIndex = IFP_TOTAL_SEQUENCES + TotalUnknownSequences;
366+
size_t UnkownSequenceIndex = cIFPSequences + wUnknownSequences;
385367
pUnkownSequence = (_CAnimBlendSequence*)((BYTE*)pAnimHierarchy->m_pSequences + (sizeof(_CAnimBlendSequence) * UnkownSequenceIndex));
386368
387369
_CAnimBlendSequence_Constructor ( pUnkownSequence );
@@ -390,7 +372,7 @@ void CClientIFP::ReadIFPVersion1 ( )
390372
391373
OLD__CAnimBlendSequence_SetBoneTag ( pUnkownSequence, BoneID );
392374
393-
TotalUnknownSequences ++;
375+
wUnknownSequences ++;
394376
}
395377
else
396378
{
@@ -444,7 +426,7 @@ void CClientIFP::ReadIFPVersion1 ( )
444426
}
445427
446428
std::map < std::string, _CAnimBlendSequence >::iterator it;
447-
for (size_t SequenceIndex = 0; SequenceIndex < IFP_TOTAL_SEQUENCES; SequenceIndex++)
429+
for (size_t SequenceIndex = 0; SequenceIndex < cIFPSequences; SequenceIndex++)
448430
{
449431
std::string BoneName = BoneNames[SequenceIndex];
450432
DWORD BoneID = BoneIds[SequenceIndex];
@@ -464,10 +446,10 @@ void CClientIFP::ReadIFPVersion1 ( )
464446
}
465447
}
466448
467-
*(DWORD *)ifpAnimation.pSequencesMemory = IFP_TOTAL_SEQUENCES + TotalUnknownSequences;
449+
*(DWORD *)ifpAnimation.pSequencesMemory = cIFPSequences + wUnknownSequences;
468450
469451
// This order is very important. As we need support for all 32 bones, we must change the total sequences count
470-
pAnimHierarchy->m_nSeqCount = IFP_TOTAL_SEQUENCES + TotalUnknownSequences;
452+
pAnimHierarchy->m_nSeqCount = cIFPSequences + wUnknownSequences;
471453
472454
//ofs << std::endl << std::endl;
473455
@@ -572,7 +554,7 @@ std::string CClientIFP::convertStringToMapKey (char * String)
572554
return ConvertedString;
573555
}
574556

575-
IFP_FrameType CClientIFP::getFrameTypeFromFourCC ( char * FourCC )
557+
CClientIFP::IFP_FrameType CClientIFP::getFrameTypeFromFourCC ( char * FourCC )
576558
{
577559
if (strncmp(FourCC, "KRTS", 4) == 0)
578560
{
@@ -1087,6 +1069,35 @@ std::string CClientIFP::getCorrectBoneNameFromName(std::string const& BoneName)
10871069
return BoneName;
10881070
}
10891071

1072+
constexpr void CClientIFP::RoundSize ( uint32_t & u32Size )
1073+
{
1074+
if( u32Size & 3 )
1075+
{
1076+
u32Size += 4 - ( u32Size & 3 );
1077+
}
1078+
}
1079+
1080+
void CClientIFP::ParseSequenceObject ( Object & ObjectNode, std::string & CorrectBoneName )
1081+
{
1082+
std::string BoneName = convertStringToMapKey ( ObjectNode.Name );
1083+
1084+
if (ObjectNode.BoneID == -1)
1085+
{
1086+
ObjectNode.BoneID = getBoneIDFromName ( BoneName );
1087+
CorrectBoneName = getCorrectBoneNameFromName ( BoneName );
1088+
}
1089+
else
1090+
{
1091+
CorrectBoneName = getCorrectBoneNameFromID ( ObjectNode.BoneID );
1092+
if ( CorrectBoneName == "Unknown" )
1093+
{
1094+
CorrectBoneName = getCorrectBoneNameFromName ( BoneName );
1095+
}
1096+
}
1097+
1098+
strncpy ( ObjectNode.Name, CorrectBoneName.c_str(), CorrectBoneName.size() +1 );
1099+
}
1100+
10901101
CAnimBlendHierarchySAInterface * CClientIFP::GetAnimationHierarchy ( const SString & strAnimationName )
10911102
{
10921103
for ( auto it = m_pVecAnimations->begin(); it != m_pVecAnimations->end(); ++it )

0 commit comments

Comments
 (0)