45 std::vector<StdMeshBone*> Children;
80 std::map<float, StdMeshKeyFrame> Frames;
101 std::vector<StdMeshTrack*> Tracks;
139 std::vector<StdMeshBone*> Bones;
141 std::map<StdCopyStrBuf, StdMeshAnimation> Animations;
163 const std::vector<Vertex>&
GetVertices()
const {
return Vertices; }
179 std::vector<Vertex> Vertices;
180 std::vector<StdMeshFace> Faces;
181 size_t vertex_buffer_offset{0};
182 size_t index_buffer_offset{0};
217 void SetLabel(
const std::string &label) { Label = label; }
223 unsigned int vaoid{0};
231 std::vector<Vertex> SharedVertices;
233 std::vector<StdSubMesh> SubMeshes;
234 std::shared_ptr<StdMeshSkeleton> Skeleton;
239 float BoundingRadius;
379 unsigned int BoneIndex;
388 } LinearInterpolation;
422 static std::vector<IDBase*>* IDs;
432 if(!IDs) IDs =
new std::vector<IDBase*>;
433 IDs->push_back(
this);
439 IDs->erase(std::find(IDs->begin(), IDs->end(),
this));
440 if (!IDs->size()) {
delete IDs; IDs =
nullptr; }
462 if(!IDs)
return nullptr;
463 for(
auto &
ID : *IDs)
464 if(strcmp(
ID->
name, name) == 0)
471 if(!IDs)
return nullptr;
472 for(
auto &
ID : *IDs)
506 unsigned int parent_bone,
unsigned int child_bone,
const StdMeshMatrix& transform, uint32_t flags);
529 unsigned int ParentBone{0};
530 unsigned int ChildBone{0};
536 bool FinalTransformDirty{
false};
538 std::vector<int> MatchedBoneInParentSkeleton;
636 template<
typename IteratorType,
typename FuncObj>
637 static bool ScanAttachTree(IteratorType begin, IteratorType end,
const FuncObj& obj);
680 std::unique_ptr<StdMeshInstance::SerializableValueProvider> temp(rID.
newfunc());
682 pStruct = temp.release();
void CompileNewFuncCtx(StdMeshInstance::SerializableValueProvider *&pStruct, StdCompiler *pComp, const StdMeshInstance::SerializableValueProvider::IDBase &rID)
StdMeshTransformation Transformation
void Value(const T &rStruct)
StdMeshAnimation & operator=(const StdMeshAnimation &other)
StdMeshAnimation()=default
StdMeshTransformation InverseTransformation
StdMeshTransformation Transformation
const StdMeshBone * GetParent() const
const StdSubMesh & GetSubMesh(size_t i) const
unsigned int GetVAOID() const
size_t GetNumSubMeshes() const
float GetBoundingRadius() const
StdSubMesh::Vertex Vertex
const StdMeshBox & GetBoundingBox() const
const StdMeshSkeleton & GetSkeleton() const
const std::vector< Vertex > & GetSharedVertices() const
void SetLabel(const std::string &label)
StdMeshSkeleton & GetSkeleton()
virtual void DenumeratePointers(AttachedMesh *attach)
virtual bool ClearPointers(class C4Object *pObj)
virtual void CompileFunc(StdCompiler *pComp, AttachedMesh *attach)=0
virtual ~Denumerator()=default
bool SetChildBone(const StdStrBuf &bone)
unsigned int GetChildBone() const
void DenumeratePointers()
void SetAttachTransformation(const StdMeshMatrix &transformation)
uint32_t GetFlags() const
Denumerator * ChildDenumerator
static Denumerator * DenumeratorFactory()
void CompileFunc(StdCompiler *pComp, DenumeratorFactoryFunc Factory)
unsigned int GetParentBone() const
Denumerator *(* DenumeratorFactoryFunc)()
const StdMeshMatrix & GetFinalTransformation() const
bool SetParentBone(const StdStrBuf &bone)
bool ClearPointers(class C4Object *pObj)
virtual void DenumeratePointers()
virtual void ClearPointers(class C4Object *pObj)
static const IDBase * Lookup(const char *name)
static const IDBase * Lookup(const std::type_info &type)
virtual void CompileFunc(StdCompiler *pComp)
ValueProvider * GetWeightProvider()
AnimationNode * GetParent()
void CompileFunc(StdCompiler *pComp, const StdMesh *Mesh)
C4Real GetPosition() const
void ClearPointers(class C4Object *pObj)
~StdMeshInstanceAnimationNode()
StdMeshInstanceAnimationNode AnimationNode
bool GetBoneTransform(unsigned int bone, StdMeshTransformation &transformation)
@ LinearInterpolationNode
StdMeshInstanceAnimationNode()
AnimationNode * GetLeftChild()
void DenumeratePointers()
unsigned int GetNumber() const
ValueProvider * GetPositionProvider()
const StdMeshAnimation * GetAnimation() const
AnimationNode * GetRightChild()
StdMeshInstanceValueProvider ValueProvider
float GetCompletion() const
size_t GetNumSharedVertices() const
unsigned int GetVAOID() const
static bool ScanAttachTree(IteratorType begin, IteratorType end, const FuncObj &obj)
void SetCompletion(float completion)
void SetMaterial(size_t i, const StdMeshMaterial &material)
std::vector< StdSubMeshInstance * > SubMeshInstances
std::vector< StdSubMeshInstance * > SubMeshInstancesOrdered
StdMeshInstanceAnimationNode AnimationNode
void ReorderFaces(StdMeshMatrix *global_trans)
AnimationNodeList AnimationNodes
void InsertAnimationNode(AnimationNode *node, int slot, AnimationNode *sibling, ValueProvider *weight, bool stop_previous_animation)
AttachedMesh * GetAttachParent() const
AnimationNodeList AnimationStack
void ApplyBoneTransformToVertices(const std::vector< StdSubMesh::Vertex > &mesh_vertices, std::vector< StdMeshVertex > &instance_vertices)
bool DetachMesh(unsigned int number)
AnimationNode * GetRootAnimationForSlot(int slot)
size_t GetBoneCount() const
bool UpdateBoneTransforms()
AttachedMeshIter AttachedMeshesBegin() const
AnimationNode * PlayAnimation(const StdStrBuf &animation_name, int slot, AnimationNode *sibling, ValueProvider *position, ValueProvider *weight, bool stop_previous_animation)
void ClearPointers(class C4Object *pObj)
void SetFaceOrderingForClrModulation(uint32_t clrmod)
const StdSubMeshInstance & GetSubMeshOrdered(size_t i) const
void StopAnimation(AnimationNode *node)
AttachedMesh * GetAttachedMeshByNumber(unsigned int number) const
const StdMesh & GetMesh() const
std::vector< StdMeshMatrix > BoneTransforms
AttachedMeshIter AttachedMeshesEnd() const
AttachedMesh * AttachMeshImpl(StdMeshInstance &instance, AttachedMesh::Denumerator *denumerator, const StdStrBuf &parent_bone, const StdStrBuf &child_bone, const StdMeshMatrix &transformation, uint32_t flags, bool own_child, unsigned int new_attach_number)
const StdSubMeshInstance & GetSubMesh(size_t i) const
void DenumeratePointers()
StdMeshInstanceValueProvider ValueProvider
const std::vector< StdMeshVertex > & GetSharedVertices() const
StdMeshInstance(const StdMesh &mesh, float completion=1.0f)
void SetAnimationPosition(AnimationNode *node, ValueProvider *position)
AnimationNode * GetAnimationNodeByNumber(unsigned int number)
void ExecuteAnimation(float dt)
StdSubMeshInstance & GetSubMesh(size_t i)
AnimationNodeList::iterator GetStackIterForSlot(int slot, bool create)
std::vector< AttachedMesh * > AttachedMeshList
AttachedMesh * AttachParent
StdSubMeshInstance::FaceOrdering FaceOrdering
AttachedMeshList::const_iterator AttachedMeshIter
void SetBoneTransformsDirty(bool value)
void SetAnimationBoneTransform(AnimationNode *node, const StdMeshTransformation &trans)
AttachedMesh * AttachMesh(const StdMesh &mesh, AttachedMesh::Denumerator *denumerator, const StdStrBuf &parent_bone, const StdStrBuf &child_bone, const StdMeshMatrix &transformation=StdMeshMatrix::Identity(), uint32_t flags=AM_None, unsigned int attach_number=0)
void SetFaceOrdering(FaceOrdering ordering)
size_t GetNumSubMeshes() const
const StdMeshMatrix & GetBoneTransform(size_t i) const
bool ExecuteAnimationNode(AnimationNode *node)
void CompileFunc(StdCompiler *pComp, AttachedMesh::DenumeratorFactoryFunc Factory)
std::vector< AttachedMesh * > AttachChildren
void SetAnimationWeight(AnimationNode *node, ValueProvider *weight)
std::vector< AnimationNode * > AnimationNodeList
StdMeshInstanceValueProvider()
virtual ~StdMeshInstanceValueProvider()=default
static StdMeshMatrix Identity()
std::vector< int > GetMatchingBones(const StdMeshSkeleton &skeleton) const
const StdMeshBone * GetBoneByName(const StdStrBuf &name) const
std::vector< const StdMeshAnimation * > GetAnimations() const
void InsertAnimation(const StdMeshAnimation &animation)
const StdMeshBone & GetBone(size_t i) const
const StdMeshAnimation * GetAnimationByName(const StdStrBuf &name) const
void MirrorAnimation(const StdMeshAnimation &animation)
size_t GetNumBones() const
StdMeshTransformation GetTransformAt(float time, float length) const
const StdMeshMaterial & GetMaterial() const
size_t GetOffsetInVBO() const
const StdMeshFace & GetFace(size_t i) const
size_t GetNumVertices() const
size_t GetOffsetInIBO() const
const Vertex & GetVertex(size_t i) const
const std::vector< Vertex > & GetVertices() const
size_t GetNumFaces() const
void SetFaceOrdering(class StdMeshInstance &instance, const StdSubMesh &submesh, FaceOrdering ordering)
std::vector< TexUnit > TexUnits
void SetMaterial(const StdMeshMaterial &material)
double GetTexturePosition(size_t pass, size_t texunit) const
const StdMeshMaterial * Material
std::vector< StdMeshFace > Faces
StdSubMeshInstance(class StdMeshInstance &instance, const StdSubMesh &submesh, float completion)
size_t GetNumFaces() const
const StdSubMesh & GetSubMesh() const
FaceOrdering GetFaceOrdering() const
std::vector< Pass > PassData
FaceOrdering CurrentFaceOrdering
void SetFaceOrderingForClrModulation(class StdMeshInstance &instance, const StdSubMesh &submesh, uint32_t clrmod)
const StdMeshMaterial & GetMaterial() const
void LoadFacesForCompletion(class StdMeshInstance &instance, const StdSubMesh &submesh, float completion)
unsigned int GetTexturePhase(size_t pass, size_t texunit) const
const StdMeshFace * GetFaces() const
void CompileFunc(StdCompiler *pComp)
StdMeshVector GetCenter() const
IDBase(const char *name, const std::type_info &type, NewFunc newfunc)
const std::type_info & type
SerializableValueProvider *(* NewFunc)()