My Project
XFileMultiAnim.h
1 #pragma once
2 
3 namespace ParaEngine
4 {
5 class CMultiAnim;
6 class CAnimInstance;
7 
14 class CMultiAnimAllocateHierarchy : public ID3DXAllocateHierarchy
15 {
17  STDMETHOD( CreateFrame )( THIS_ LPCSTR Name, LPD3DXFRAME *ppNewFrame );
19  STDMETHOD( CreateMeshContainer )( THIS_ LPCSTR Name, CONST D3DXMESHDATA * pMeshData,
20  CONST D3DXMATERIAL * pMaterials, CONST D3DXEFFECTINSTANCE * pEffectInstances,
21  DWORD NumMaterials, CONST DWORD * pAdjacency, LPD3DXSKININFO pSkinInfo,
22  LPD3DXMESHCONTAINER * ppNewMeshContainer );
24  STDMETHOD( DestroyFrame )( THIS_ LPD3DXFRAME pFrameToFree );
26  STDMETHOD( DestroyMeshContainer )( THIS_ LPD3DXMESHCONTAINER pMeshContainerToFree );
27 
28 public:
30 
32  STDMETHOD( SetMA )( THIS_ CMultiAnim *pMA );
33 
34 private:
35  CMultiAnim *m_pMA;
36 };
37 
38 
39 
40 
42 struct MultiAnimFrame : public D3DXFRAME
43 {
44 };
45 
46 
47 
48 
54 struct MultiAnimMC : public D3DXMESHCONTAINER
55 {
56  LPDIRECT3DTEXTURE9 *m_apTextures;
57  LPD3DXMESH m_pWorkingMesh;
58  Matrix4 * m_amxBoneOffsets; // Bone offset matrices retrieved from pSkinInfo
59  Matrix4 ** m_apmxBonePointers; // Provides index to bone matrix lookup
60 
61  DWORD m_dwNumPaletteEntries;
62  DWORD m_dwMaxNumFaceInfls;
63  DWORD m_dwNumAttrGroups;
64  LPD3DXBUFFER m_pBufBoneCombos;
65 
66  HRESULT SetupBonePtrs( D3DXFRAME * pFrameRoot );
67 };
68 
69 
70 
71 
80 {
81  friend class CMultiAnimAllocateHierarchy;
82  friend class CAnimInstance;
83  friend struct MultiAnimFrame;
84  friend struct MultiAnimMC;
85 
86 protected:
87 
88  LPDIRECT3DDEVICE9 m_pDevice;
89 
90  LPD3DXEFFECT m_pEffect;
91  char * m_sTechnique; // character rendering technique
92  bool m_bSWVP; // software vertext processing
93  DWORD m_dwWorkingPaletteSize;
94  Matrix4 * m_amxWorkingPalette;
95 
96  vector< CAnimInstance* > m_v_pAnimInstances; // must be at lesat 1; otherwise, clear all
97 
98  MultiAnimFrame * m_pFrameRoot; // shared between all instances
99  LPD3DXANIMATIONCONTROLLER m_pAC; // AC that all children clone from -- to clone clean, no keys
100 
101  // useful data an app can retrieve
102  float m_fBoundingRadius;
103 
104 private:
105 
106  HRESULT CreateInstance( CAnimInstance ** ppAnimInstance );
107  HRESULT SetupBonePtrs( MultiAnimFrame * pFrame );
108 
109 public:
110 
111  CMultiAnim();
112  virtual ~CMultiAnim();
113 
114  virtual HRESULT Setup( LPDIRECT3DDEVICE9 pDevice, TCHAR sXFile[], TCHAR sFxFile[], CMultiAnimAllocateHierarchy *pAH, LPD3DXLOADUSERDATA pLUD = NULL );
115  virtual HRESULT Cleanup( CMultiAnimAllocateHierarchy * pAH );
116 
117  LPDIRECT3DDEVICE9 GetDevice();
118  LPD3DXEFFECT GetEffect();
119  DWORD GetNumInstances();
120  CAnimInstance * GetInstance( DWORD dwIdx );
121  float GetBoundingRadius();
122 
123  virtual HRESULT CreateNewInstance( DWORD * pdwNewIdx );
124 
125  virtual void SetTechnique( char * sTechnique );
126  virtual void SetSWVP( bool bSWVP );
127 
128  virtual HRESULT Draw();
129 };
130 
131 
132 
133 
138 {
139  friend class CMultiAnim;
140 
141 protected:
142 
143  CMultiAnim *m_pMultiAnim;
144  Matrix4 m_mxWorld;
145  LPD3DXANIMATIONCONTROLLER m_pAC;
146 
147 private:
148 
149  virtual HRESULT Setup( LPD3DXANIMATIONCONTROLLER pAC );
150  virtual void UpdateFrames( MultiAnimFrame * pFrame, Matrix4 * pmxBase );
151  virtual void DrawFrames( MultiAnimFrame * pFrame );
152  virtual void DrawMeshFrame( MultiAnimFrame * pFrame );
153 
154 public:
155 
156  CAnimInstance( CMultiAnim * pMultiAnim );
157  virtual ~CAnimInstance();
158 
159  virtual void Cleanup();
160 
161  CMultiAnim* GetMultiAnim();
162  void GetAnimController( LPD3DXANIMATIONCONTROLLER * ppAC );
163 
164  Matrix4 GetWorldTransform();
165  void SetWorldTransform( const Matrix4 * pmxWorld );
166 
167  virtual HRESULT AdvanceTime( DOUBLE dTimeDelta, ID3DXAnimationCallbackHandler * pCH );
168  virtual HRESULT ResetTime();
169  virtual HRESULT Draw();
170 };
171 }
Encapsulates an animation instance, with its own animation controller.
Definition: XFileMultiAnim.h:137
different physics engine has different winding order.
Definition: EventBinding.h:32
Inheriting from ID3DXAllocateHierarchy, this class handles the allocation and release of the memory u...
Definition: XFileMultiAnim.h:14
Class encapsulating a standard 4x4 homogeneous matrix.
Definition: ParaMatrix4.h:23
STDMETHOD() SetMA(THIS_ CMultiAnim *pMA)
Setup method.
Definition: AllocHierarchy.cpp:47
This class encapsulates a mesh hierarchy (typically loaded from an .X file).
Definition: XFileMultiAnim.h:79
Desc: Inherits from D3DXMESHCONTAINER.
Definition: XFileMultiAnim.h:54
Inherits from D3DXFRAME.
Definition: XFileMultiAnim.h:42