www.pudn.com > XFileLoadingCode.zip > XFileEntity.h


#pragma once 
 
struct D3DXFRAME_EXTENDED; 
struct D3DXMESHCONTAINER_EXTENDED; 
 
/** 
 * \class CXFileEntity 
 * \brief Loads a .x file and maintains the heirarchy 
 * \author Keith Ditchburn \date 17 July 2005 
*/ 
class CXFileEntity 
{ 
private: 
	LPD3DXFRAME                 m_frameRoot; 
    LPD3DXANIMATIONCONTROLLER   m_animController; 
	 
	// Them bones 
	D3DXMATRIX *m_boneMatrices; 
	UINT m_maxBones; 
 
	D3DXMESHCONTAINER_EXTENDED* m_firstMesh; 
 
	// Bounding sphere 
	D3DXVECTOR3 m_sphereCentre; 
	float m_sphereRadius; 
 
	// Animation variables 
	UINT m_currentAnimationSet;	 
	UINT m_numAnimationSets; 
	DWORD m_currentTrack; 
	float m_currentTime; 
	float m_speedAdjust; 
 
	void UpdateFrameMatrices(const D3DXFRAME *frameBase, const D3DXMATRIX *parentMatrix); 
	void DrawFrame(LPDIRECT3DDEVICE9 device,LPD3DXFRAME frame) const; 
	void DrawMeshContainer(LPDIRECT3DDEVICE9 device,LPD3DXMESHCONTAINER meshContainerBase, LPD3DXFRAME frameBase) const; 
 
public: 
	CXFileEntity(void); 
	~CXFileEntity(void); 
 
	HRESULT LoadXFile(LPDIRECT3DDEVICE9 device,const WCHAR* filename); 
	void SetupBoneMatrices(LPDIRECT3DDEVICE9 device,D3DXFRAME_EXTENDED *pFrame, LPD3DXMATRIX pParentMatrix); 
	void FrameMove(float elapsedTime,const D3DXMATRIX *matWorld); 
	void Render(LPDIRECT3DDEVICE9 device) const; 
	void SetAnimationSet(UINT index); 
	void GetBoundingSphere(D3DXVECTOR3* centre,float *radius) const {*centre=m_sphereCentre;*radius=m_sphereRadius;} 
 
	void NextAnimation(); 
 
	inline UINT GetIndexOfCurrentAnimationSet() const {return m_currentAnimationSet;} 
	inline UINT GetNumAnimationSets() const {return m_numAnimationSets;} 
	inline UINT GetMaxBones() const {return m_maxBones;} 
 
	void AnimateFaster(); 
	void AnimateSlower(); 
 
	const char *GetAnimationSetName(UINT index); 
};