2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-09 00:27:42 +00:00

Tons of animation bug fixes

This commit is contained in:
Jack Andersen
2016-09-05 19:52:51 -10:00
parent 668c4f7eee
commit 9b436b4b23
21 changed files with 168 additions and 85 deletions

View File

@@ -1,10 +1,11 @@
#include "CPoseAsTransforms.hpp"
#include "CCharLayoutInfo.hpp"
namespace urde
{
CPoseAsTransforms::CPoseAsTransforms(u8 boneCount)
: x1_count(boneCount), xd0_transformArr(new zeus::CTransform[boneCount])
: x1_count(boneCount), xd0_transformArr(new Transform[boneCount])
{}
bool CPoseAsTransforms::ContainsDataFor(const CSegId& id) const
@@ -33,26 +34,38 @@ void CPoseAsTransforms::AccumulateScaledTransform(const CSegId& id,
const zeus::CTransform& CPoseAsTransforms::GetTransform(const CSegId& id) const
{
const std::pair<CSegId, CSegId>& link = x8_links[id];
return xd0_transformArr[link.second];
return xd0_transformArr[link.second].m_originToAccum;
}
const zeus::CTransform& CPoseAsTransforms::GetRestToAccumTransform(const CSegId& id) const
{
const std::pair<CSegId, CSegId>& link = x8_links[id];
return xd0_transformArr[link.second].m_restPoseToAccum;
}
const zeus::CVector3f& CPoseAsTransforms::GetOffset(const CSegId& id) const
{
const std::pair<CSegId, CSegId>& link = x8_links[id];
return xd0_transformArr[link.second].origin;
return xd0_transformArr[link.second].m_originToAccum.origin;
}
const zeus::CMatrix3f& CPoseAsTransforms::GetRotation(const CSegId& id) const
{
const std::pair<CSegId, CSegId>& link = x8_links[id];
return xd0_transformArr[link.second].basis;
return xd0_transformArr[link.second].m_originToAccum.basis;
}
void CPoseAsTransforms::Insert(const CSegId& id,
const zeus::CMatrix3f& rotation,
const zeus::CVector3f& offset)
const zeus::CVector3f& offset,
const zeus::CVector3f& restOffset)
{
xd0_transformArr[x0_nextId] = zeus::CTransform(rotation, offset);
Transform& xfOut = xd0_transformArr[x0_nextId];
xfOut.m_originToAccum = zeus::CTransform(rotation, offset);
xfOut.m_restPoseToAccum = xfOut.m_originToAccum * zeus::CTransform::Translate(-restOffset);
printf("INSBONE %d\n", int(id));
xfOut.m_originToAccum.printMatrix();
std::pair<CSegId, CSegId>& link = x8_links[id];
link.first = xd4_lastInserted;
link.second = x0_nextId;