metaforce/DataSpec/DNAMP1/CSKR.hpp

56 lines
1.3 KiB
C++
Raw Normal View History

2015-08-11 23:32:02 +00:00
#ifndef _DNAMP1_CSKR_HPP_
#define _DNAMP1_CSKR_HPP_
2016-09-18 23:47:48 +00:00
#include "hecl/Blender/BlenderConnection.hpp"
2015-08-11 23:32:02 +00:00
#include "../DNACommon/DNACommon.hpp"
2015-08-13 07:29:00 +00:00
#include "CINF.hpp"
2015-08-11 23:32:02 +00:00
2016-02-13 09:02:47 +00:00
namespace DataSpec
2015-08-11 23:32:02 +00:00
{
namespace DNAMP1
{
struct CSKR : BigDNA
{
DECL_DNA
Value<atUint32> skinningRuleCount;
struct SkinningRule : BigDNA
{
DECL_DNA
Value<atUint32> weightCount;
struct Weight : BigDNA
{
DECL_DNA
Value<atUint32> boneId;
Value<float> weight;
};
Vector<Weight, DNA_COUNT(weightCount)> weights;
Value<atUint32> vertCount;
};
Vector<SkinningRule, DNA_COUNT(skinningRuleCount)> skinningRules;
2015-08-13 07:29:00 +00:00
2015-09-26 03:12:08 +00:00
const atInt16* getMatrixBank(size_t) const
{
return nullptr;
}
2016-03-04 23:04:53 +00:00
void weightVertex(hecl::BlenderConnection::PyOutStream& os, const CINF& cinf, atUint32 idx) const
2015-08-13 07:29:00 +00:00
{
atUint32 accum = 0;
for (const SkinningRule& rule : skinningRules)
{
if (idx >= accum && idx < accum + rule.vertCount)
for (const SkinningRule::Weight& weight : rule.weights)
os.format("vert[dvert_lay][%u] = %f\n",
cinf.getBoneIdxFromId(weight.boneId),
weight.weight);
accum += rule.vertCount;
}
}
2015-08-11 23:32:02 +00:00
};
}
}
#endif // _DNAMP1_CSKR_HPP_