8#include <unordered_map>
40 int GetBoneCount()
const {
return static_cast<int>(m_bones.size()); }
43 auto it = m_boneNameToId.find(name);
44 return (it != m_boneNameToId.end()) ? it->second : -1;
51 int id =
static_cast<int>(m_bones.size());
54 m_boneNameToId[b.
name] = id;
60 return m_globalInverseTransform;
64 m_globalInverseTransform = mat;
69 int idx =
static_cast<int>(m_nodes.size());
70 m_nodes.push_back(node);
71 m_nodeNameToIndex[node.
name] = idx;
77 if (parentIdx >= 0 && parentIdx <
static_cast<int>(m_nodes.size()))
78 m_nodes[parentIdx].children.push_back(childIdx);
81 int GetNodeCount()
const {
return static_cast<int>(m_nodes.size()); }
87 auto it = m_nodeNameToIndex.find(name);
88 return (it != m_nodeNameToIndex.end()) ? it->second : -1;
95 if (boneId >= 0 && boneId <
static_cast<int>(m_bones.size()))
96 m_bones[boneId].parentId = parentId;
100 std::vector<Bone> m_bones;
101 std::unordered_map<std::string, int> m_boneNameToId;
105 std::vector<NodeData> m_nodes;
106 std::unordered_map<std::string, int> m_nodeNameToIndex;
void SetBoneParent(int boneId, int parentId)
Reassigns the parent of boneId, e.g. once the full hierarchy is known.
const NodeData & GetNode(int idx) const
void AddNodeChild(int parentIdx, int childIdx)
Links childIdx under parentIdx in the node tree.
int AddBone(const Bone &bone)
Appends bone, assigning it the next bone id.
int AddNode(const NodeData &node)
Appends node, returning its index in the node array.
int FindNodeIndex(const std::string &name) const
int FindBoneId(const std::string &name) const
const Bone & GetBone(int id) const
int GetRootNodeIndex() const
void SetGlobalInverseTransform(const Math::Matrix4 &mat)
const Math::Matrix4 & GetGlobalInverseTransform() const
Vectors, matrices, quaternions, colors, AABBs, and random helpers.
Matrix< float, 4, 4 > Matrix4
Root namespace for everything the engine exposes.
static constexpr int MAX_BONES
static constexpr int MAX_BONE_INFLUENCE
Math::Matrix4 offsetMatrix
std::vector< int > children
Math::Matrix4 defaultTransform