#pragma once #include "IBone.h" #include "IEngine.h" #include "ITimeLine.h" #include "IUpdatable.h" #include "../ShaderParameterCollection/ShaderParameterCollection.h" class BoneController : public IBoneController , public ShaderParameterCollection , public IUpdatable { public: BoneController(IEngine& argEngine); virtual ~BoneController(); virtual void Initialize(IBone& argRootBone); virtual void Initialize(const IBoneController& argOther); virtual void Apply(); virtual void RegisterSequence(const string16& argName, float argStart, float argEnd, bool argLoop); virtual void PlaySequence(const string16& argName); virtual const string16& get_CurrentSequence() const; virtual const std::map& get_Sequences() const { return m_Sequences; } virtual IBone& get_RootBone() const { return *m_RootBone; } // IUpdatable virtual void Update(bool argForceUpdate) { this->Apply(); } virtual bool get_WantsUpdate() const { return true; } protected: // ICommandUser virtual string8 get_UserName() const { return "BoneController"; } private: float get_CurrentTime(); IBone* m_RootBone; double m_StartTime; string16 m_CurrentSequence; Sequence m_CurrentSequenceInfo; std::map m_Sequences; std::map m_Bones; D3DXMATRIX* m_LastMatrixArray; };