mirror of https://github.com/PrimeDecomp/prime.git
35 lines
1.1 KiB
C++
35 lines
1.1 KiB
C++
#ifndef _CVIRTUALBONE
|
|
#define _CVIRTUALBONE
|
|
|
|
#include "Kyoto/Animation/CSegId.hpp"
|
|
#include "Kyoto/Math/CMatrix3f.hpp"
|
|
#include "Kyoto/Math/CTransform4f.hpp"
|
|
|
|
struct SSkinWeighting {
|
|
CSegId x0_id;
|
|
float x4_weight;
|
|
explicit SSkinWeighting(CInputStream& in) : x0_id(in), x4_weight(in.ReadFloat()) {}
|
|
};
|
|
|
|
class CPoseAsTransforms;
|
|
class CVirtualBone {
|
|
public:
|
|
explicit CVirtualBone(CInputStream& in);
|
|
const rstl::reserved_vector< SSkinWeighting, 3 >& GetWeights() const { return x0_weights; }
|
|
uint GetVertexCount() const { return x1c_vertexCount; }
|
|
|
|
void BuildPoints(const ushort*, volatile void*, int) const;
|
|
void BuildNormals(const ushort*, volatile void*, int) const;
|
|
void BuildNormals(const CVector3f*, CVector3f*, int) const;
|
|
void BuildAccumulatedTransform(const CPoseAsTransforms& pose, const CVector3f* points) const;
|
|
void BuildFinalPosMatrix(const CPoseAsTransforms& pose, const CVector3f* points) const;
|
|
|
|
private:
|
|
rstl::reserved_vector< SSkinWeighting, 3 > x0_weights;
|
|
uint x1c_vertexCount;
|
|
mutable CTransform4f x20_xf;
|
|
mutable CMatrix3f x50_rotation;
|
|
};
|
|
|
|
#endif // _CVIRTUALBONE
|