Skip to content

Commit 2d85c84

Browse files
committed
AnimationManagerMes_Z, AnimationManagerSkel_Z: Match
1 parent 1723aa3 commit 2d85c84

File tree

5 files changed

+147
-10
lines changed

5 files changed

+147
-10
lines changed

configure.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -920,7 +920,7 @@ def MatchingFor(*versions):
920920
Object(NonMatching, "Engine/Handle_Z.cpp"),
921921
Object(NonMatching, "Engine/GameRtc_Z.cpp"),
922922
Object(NonMatching, "Engine/EmiterDraw_Z.cpp"),
923-
Object(NonMatching, "Engine/AnimationManagerSkel_Z.cpp"),
923+
Object(Matching, "Engine/AnimationManagerSkel_Z.cpp"),
924924
Object(NonMatching, "Engine/CameraEngineZoneColl_Z.cpp"),
925925
Object(NonMatching, "Engine/Breakable_Z.cpp"),
926926
Object(NonMatching, "Engine/Material_Z.cpp"),
@@ -981,7 +981,7 @@ def MatchingFor(*versions):
981981
Object(NonMatching, "Engine/KeyframerVec4f_Z.cpp"),
982982
Object(NonMatching, "Engine/UnSharedObjectCollisionTools_Z.cpp"),
983983
Object(NonMatching, "Engine/SurfaceCollisionMovingSphere_Z.cpp"),
984-
Object(NonMatching, "Engine/AnimationManagerMes_Z.cpp"),
984+
Object(Matching, "Engine/AnimationManagerMes_Z.cpp"),
985985
Object(NonMatching, "Engine/GameAgent_Z.cpp"),
986986
Object(NonMatching, "Engine/AnimMessage_Z.cpp"),
987987
Object(NonMatching, "Engine/Omni_Z.cpp"),

src/Engine/AnimationManagerMes_Z.cpp

Lines changed: 90 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,98 @@ void AnimationManager_Z::ReserveMsgArray() {
1818
m_DfltSkelMsg.m_VsAgentPtr = NULL;
1919
m_DfltSkelMsg.m_CanVsSphereCollide = false;
2020
m_DfltSkelMsg.m_CanSphereCollide = false;
21-
m_AnimMsg = NewL_Z(17) RegMessage_Z[512];
22-
m_BufAnimMsg = NewL_Z(18) RegMessage_Z[512];
21+
m_AnimMsg = NewL_Z(17) RegMessage_Z[MAX_REGMSG_ARRAY_SIZE];
22+
m_BufAnimMsg = NewL_Z(18) RegMessage_Z[MAX_REGMSG_ARRAY_SIZE];
2323
m_BufAnimMsgNb = 0;
2424
m_AnimMsgNb = 0;
25-
m_SkelMsg = NewL_Z(22) SkelMessage_Z[256];
26-
m_BufSkelMsg = NewL_Z(23) SkelMessage_Z[256];
25+
m_SkelMsg = NewL_Z(22) SkelMessage_Z[MAX_SKELMSG_ARRAY_SIZE];
26+
m_BufSkelMsg = NewL_Z(23) SkelMessage_Z[MAX_SKELMSG_ARRAY_SIZE];
2727
m_BufSkelMsgNb = 0;
2828
m_SkelMsgNb = 0;
2929
}
30+
31+
void AnimationManager_Z::ReleaseMsgArray() {
32+
if (m_SkelMsg) {
33+
Delete_Z[] m_SkelMsg;
34+
}
35+
if (m_BufSkelMsg) {
36+
Delete_Z[] m_BufSkelMsg;
37+
}
38+
if (m_AnimMsg) {
39+
Delete_Z[] m_AnimMsg;
40+
}
41+
if (m_BufAnimMsg) {
42+
Delete_Z[] m_BufAnimMsg;
43+
}
44+
m_BufSkelMsg = NULL;
45+
m_SkelMsg = NULL;
46+
m_BufAnimMsg = NULL;
47+
m_AnimMsg = NULL;
48+
}
49+
50+
void AnimationManager_Z::SwapMsgArray() {
51+
SkelMessage_Z* l_TempSkelMsg = m_SkelMsg;
52+
m_SkelMsg = m_BufSkelMsg;
53+
m_BufSkelMsg = l_TempSkelMsg;
54+
m_SkelMsgNb = m_BufSkelMsgNb;
55+
RegMessage_Z* l_TempRegMsg = m_AnimMsg;
56+
m_AnimMsg = m_BufAnimMsg;
57+
m_BufAnimMsg = l_TempRegMsg;
58+
m_AnimMsgNb = m_BufAnimMsgNb;
59+
m_BufSkelMsgNb = 0;
60+
m_BufAnimMsgNb = 0;
61+
}
62+
63+
RegMessage_Z& AnimationManager_Z::GetRegMessage(S32 i_Idx) {
64+
if (i_Idx < 0 || i_Idx >= MAX_REGMSG_ARRAY_SIZE || i_Idx >= m_AnimMsgNb) {
65+
return m_DfltRegMsg;
66+
}
67+
return m_AnimMsg[i_Idx];
68+
}
69+
70+
S32 AnimationManager_Z::GetMaxRegMessage() {
71+
return MAX_REGMSG_ARRAY_SIZE;
72+
}
73+
74+
RegMessage_Z* AnimationManager_Z::GetRegMessage() {
75+
return m_BufAnimMsg;
76+
}
77+
78+
S32& AnimationManager_Z::GetRegMessageNb() {
79+
if (m_BufAnimMsgNb >= MAX_REGMSG_ARRAY_SIZE) {
80+
PrintfMsgAndCount();
81+
ASSERTLE_Z(m_BufAnimMsgNb < MAX_REGMSG_ARRAY_SIZE, "Increase MAX_REGMSG_ARRAY_SIZE", 94, "BufAnimMsgNb<MAX_REGMSG_ARRAY_SIZE");
82+
}
83+
return m_BufAnimMsgNb;
84+
}
85+
86+
void AnimationManager_Z::PrintfMsgAndCount() {
87+
S32DA l_MsgCountById;
88+
RegMessage_Z* l_Msg = m_BufAnimMsg;
89+
S32 i;
90+
S32 l_MsgNb = m_BufAnimMsgNb;
91+
for (i = 0; i < l_MsgNb; i++, l_Msg++) {
92+
S32 l_OldSize = l_MsgCountById.GetSize();
93+
if (l_Msg->m_Id >= l_OldSize) {
94+
l_MsgCountById.SetSize(l_Msg->m_Id + 1);
95+
while (l_OldSize < l_MsgCountById.GetSize()) {
96+
l_MsgCountById[l_OldSize] = 0;
97+
l_OldSize++;
98+
}
99+
}
100+
l_MsgCountById[l_Msg->m_Id]++;
101+
}
102+
S32* l_Ptr = l_MsgCountById.GetArrayPtr();
103+
for (i = l_MsgCountById.GetSize(); i > 0; i--) {
104+
// $SABE: In a non master build here they would presumably print the message counts per ID
105+
l_Ptr++;
106+
}
107+
}
108+
109+
S32& AnimationManager_Z::GetSkelMessageNb() {
110+
return m_BufSkelMsgNb;
111+
}
112+
113+
SkelMessage_Z* AnimationManager_Z::GetSkelMessage() {
114+
return m_BufSkelMsg;
115+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include "AnimationManager_Z.h"
2+
3+
S32 AnimationManager_Z::AddSkelId(const Name_Z& i_SkelName) {
4+
for (S32 i = m_SkelOriginalNodes.FindFirst(); i >= 0; i = m_SkelOriginalNodes.FindNext(i)) {
5+
if (m_SkelOriginalNodes[i].m_SkelName == i_SkelName) {
6+
m_SkelOriginalNodes[i].m_RefCount++;
7+
return i;
8+
}
9+
}
10+
S32 l_SkelId = m_SkelOriginalNodes.Add();
11+
m_SkelOriginalNodes[l_SkelId].m_SkelName = i_SkelName;
12+
m_SkelOriginalNodes[l_SkelId].m_RefCount = 1;
13+
return l_SkelId;
14+
}
15+
16+
void AnimationManager_Z::SetOriginalArray(S32 i_SkelId, BoneNode_Z* i_OriginalBones) {
17+
m_SkelOriginalNodes[i_SkelId].m_BonesArrayPtr = i_OriginalBones;
18+
m_SkelOriginalNodes[i_SkelId].m_RootBonePtr = i_OriginalBones->GetRoot();
19+
}
20+
21+
void AnimationManager_Z::RemoveSkelNodes(S32 i_SkelId) {
22+
m_SkelOriginalNodes[i_SkelId].m_RefCount--;
23+
if (m_SkelOriginalNodes[i_SkelId].m_RefCount == 0) {
24+
m_SkelOriginalNodes.Remove(i_SkelId);
25+
}
26+
}
27+
28+
void AnimationManager_Z::MarkSkelHandles() {
29+
for (S32 i = m_SkelOriginalNodes.FindFirst(); i >= 0; i = m_SkelOriginalNodes.FindNext(i)) {
30+
if (m_SkelOriginalNodes[i].m_RefCount != 0) {
31+
m_SkelOriginalNodes[i].m_RootBonePtr->MarkHandles();
32+
}
33+
}
34+
}

src/Engine/includes/AnimationManager_Z.h

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ class RegMessage_Z;
99
class SkelMessage_Z;
1010

1111
#define ANIM_RESOURCE_MAX 128
12+
#define MAX_REGMSG_ARRAY_SIZE 512
13+
#define MAX_SKELMSG_ARRAY_SIZE 256
1214

1315
enum NodeIds {
1416
BONE_TETE = 0,
@@ -134,6 +136,17 @@ class AnimationManager_Z : public ClassNameResManager_Z {
134136
S32 GetMeshByName(const Name_Z& i_Name);
135137
void ReserveMsgArray();
136138
void ReleaseMsgArray();
139+
void SwapMsgArray();
140+
RegMessage_Z& GetRegMessage(S32 i_Idx);
141+
S32 GetMaxRegMessage();
142+
RegMessage_Z* GetRegMessage();
143+
S32& GetRegMessageNb();
144+
void PrintfMsgAndCount();
145+
S32& GetSkelMessageNb();
146+
SkelMessage_Z* GetSkelMessage();
147+
S32 AddSkelId(const Name_Z& i_SkelName);
148+
void SetOriginalArray(S32 i_SkelId, BoneNode_Z* i_OriginalBones);
149+
void RemoveSkelNodes(S32 i_SkelId);
137150
void MarkSkelHandles();
138151

139152
private:
@@ -146,12 +159,12 @@ class AnimationManager_Z : public ClassNameResManager_Z {
146159
HoleArray_Z<SkelNodeArray> m_SkelOriginalNodes;
147160
RegMessage_Z* m_AnimMsg;
148161
RegMessage_Z* m_BufAnimMsg;
149-
U32 m_AnimMsgNb;
150-
U32 m_BufAnimMsgNb;
162+
S32 m_AnimMsgNb;
163+
S32 m_BufAnimMsgNb;
151164
SkelMessage_Z* m_SkelMsg;
152165
SkelMessage_Z* m_BufSkelMsg;
153-
U32 m_SkelMsgNb;
154-
U32 m_BufSkelMsgNb;
166+
S32 m_SkelMsgNb;
167+
S32 m_BufSkelMsgNb;
155168
U32 m_UnkU32_0xC4;
156169
RegMessage_Z m_DfltRegMsg;
157170
SkelMessage_Z m_DfltSkelMsg;

src/Engine/includes/BoneNode_Z.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@ class BoneNode_Z {
9595

9696
inline BoneNode_Z* GetHeadSon() { return m_Trs.m_HeadSon; }
9797

98+
BoneNode_Z* GetRoot();
99+
100+
void MarkHandles();
101+
98102
private:
99103
BoneTRS_Z m_Trs;
100104
// Quat m_Rotation;

0 commit comments

Comments
 (0)