diff --git a/FitdLib/anim.cpp b/FitdLib/anim.cpp index 3557e10..c90b9ad 100644 --- a/FitdLib/anim.cpp +++ b/FitdLib/anim.cpp @@ -41,7 +41,6 @@ int SetAnimObjet(int frame, sAnimation* pAnimation, sBody* body) if(body->m_flags & INFO_OPTIMISE) { body->m_groups[i].m_state.m_rotateDelta = keyframe.m_groups[i].m_rotateDelta; - body->m_groups[i].m_state.m_padding = keyframe.m_groups[i].m_padding; } } @@ -855,9 +854,9 @@ s16 SetInterAnimObjet(int frame, sAnimation* pAnim, sBody* pBody) } { - point3dStruct& state = pBody->m_groups[i].m_state.m_rotateDelta; - point3dStruct& previousState = pPreviousKeyframe->m_groups[i].m_rotateDelta; - point3dStruct& nextState = pKeyframe->m_groups[i].m_rotateDelta; + point3dStruct& state = pBody->m_groups[i].m_state.m_rotateDelta.value(); + point3dStruct& previousState = pPreviousKeyframe->m_groups[i].m_rotateDelta.value(); + point3dStruct& nextState = pKeyframe->m_groups[i].m_rotateDelta.value(); PatchInterAngle(&state.x, previousState.x, nextState.x, bp, bx); PatchInterAngle(&state.y, previousState.y, nextState.y, bp, bx); diff --git a/FitdLib/config.h b/FitdLib/config.h index 9aa1ed1..f7a2abc 100644 --- a/FitdLib/config.h +++ b/FitdLib/config.h @@ -4,6 +4,7 @@ #include #include #include +#include #endif #ifdef __APPLE__ diff --git a/FitdLib/hqr.cpp b/FitdLib/hqr.cpp index d82f9e3..7ebe671 100644 --- a/FitdLib/hqr.cpp +++ b/FitdLib/hqr.cpp @@ -141,10 +141,11 @@ sAnimation* createAnimationFromPtr(void* ptr, int size) pGroup->m_delta.y = READ_LE_S16(animPtr); animPtr += 2; pGroup->m_delta.z = READ_LE_S16(animPtr); animPtr += 2; if (bUseOptim) { - pGroup->m_rotateDelta.x = READ_LE_S16(animPtr); animPtr += 2; - pGroup->m_rotateDelta.y = READ_LE_S16(animPtr); animPtr += 2; - pGroup->m_rotateDelta.z = READ_LE_S16(animPtr); animPtr += 2; - pGroup->m_padding = READ_LE_S16(animPtr); animPtr += 2; + pGroup->m_rotateDelta.emplace(); + pGroup->m_rotateDelta.value().x = READ_LE_S16(animPtr); animPtr += 2; + pGroup->m_rotateDelta.value().y = READ_LE_S16(animPtr); animPtr += 2; + pGroup->m_rotateDelta.value().z = READ_LE_S16(animPtr); animPtr += 2; + animPtr += 2; } } } @@ -215,10 +216,11 @@ sBody* createBodyFromPtr(void* ptr) newBody->m_groups[i].m_state.m_delta.x = READ_LE_S16(bodyBuffer); bodyBuffer += 2; newBody->m_groups[i].m_state.m_delta.y = READ_LE_S16(bodyBuffer); bodyBuffer += 2; newBody->m_groups[i].m_state.m_delta.z = READ_LE_S16(bodyBuffer); bodyBuffer += 2; - newBody->m_groups[i].m_state.m_rotateDelta.x = READ_LE_S16(bodyBuffer); bodyBuffer += 2; - newBody->m_groups[i].m_state.m_rotateDelta.y = READ_LE_S16(bodyBuffer); bodyBuffer += 2; - newBody->m_groups[i].m_state.m_rotateDelta.z = READ_LE_S16(bodyBuffer); bodyBuffer += 2; - newBody->m_groups[i].m_state.m_padding = READ_LE_S16(bodyBuffer); bodyBuffer += 2; + newBody->m_groups[i].m_state.m_rotateDelta.emplace(); + newBody->m_groups[i].m_state.m_rotateDelta.value().x = READ_LE_S16(bodyBuffer); bodyBuffer += 2; + newBody->m_groups[i].m_state.m_rotateDelta.value().y = READ_LE_S16(bodyBuffer); bodyBuffer += 2; + newBody->m_groups[i].m_state.m_rotateDelta.value().z = READ_LE_S16(bodyBuffer); bodyBuffer += 2; + bodyBuffer += 2; } } else diff --git a/FitdLib/renderer.cpp b/FitdLib/renderer.cpp index c4d72a6..be12642 100644 --- a/FitdLib/renderer.cpp +++ b/FitdLib/renderer.cpp @@ -344,7 +344,7 @@ int AnimNuage(int x,int y,int z,int alpha,int beta,int gamma, sBody* pBody) break; } - InitGroupeRot(pGroup[0].m_state.m_rotateDelta.x, pGroup[0].m_state.m_rotateDelta.y, pGroup[0].m_state.m_rotateDelta.z); + InitGroupeRot(pGroup->m_state.m_rotateDelta.value().x, pGroup->m_state.m_rotateDelta.value().y, pGroup->m_state.m_rotateDelta.value().z); RotateGroupeOptimise(pGroup); } } diff --git a/FitdLib/vars.h b/FitdLib/vars.h index 083b2e1..b487e7d 100644 --- a/FitdLib/vars.h +++ b/FitdLib/vars.h @@ -504,8 +504,7 @@ struct sGroupState s16 m_type; // 0 point3dStruct m_delta; // 2 // (AITD2+) if Info_optimise - point3dStruct m_rotateDelta; // 8 - s16 m_padding; + std::optional m_rotateDelta; // 8 // 8 / 0x10 };