#pragma once #include "IBone.h" #include "IEngine.h" class Bone : public IBone { public: Bone(IEngine& argEngine); virtual ~Bone(); virtual void Initialize(const string16& argName, int argIndex, const D3DXVECTOR3& argPoseTranslation, const D3DXVECTOR3& argPoseScale, const D3DXQUATERNION& argPoseRotation); virtual const D3DXMATRIX& GetTransformationAtTime(float argTime, const D3DXMATRIX& argRootTransformationMatrix); virtual const D3DXMATRIX& get_PoseTransformation() const; virtual void set_Parent(IBone* argParent_); virtual IBone* get_Parent() const; virtual std::vector& get_ChildBones(); virtual string16 get_Name() const; virtual int get_Index() const; virtual void set_TransformationAnimation(ITransformationAnimation* argTransformationAnimation); virtual ITransformationAnimation* get_TransformationAnimation() const; virtual std::map& get_BoneIndexList(); virtual D3DXMATRIX* get_MatrixArray(); virtual unsigned int get_MatrixArraySize(); private: void FillBoneIndexList(IBone* argCurrentBone, std::map& argList); private: IEngine& m_Engine; string16 m_Name; int m_BoneIndex; D3DXMATRIX m_PoseTransformation; D3DXMATRIX m_InvPoseTransformation; float m_LastAnimationTime; D3DXMATRIX m_Transformation; std::vector m_Children; IBone* m_Parent; ITransformationAnimation* m_TransformationAnimation; std::map m_BoneIndexList; D3DXMATRIX* m_MatrixArray; unsigned int m_MatrixArraySize; };