home *** CD-ROM | disk | FTP | other *** search
/ Programming an RTS Game with Direct3D / Programming an RTS Game with Direct3D.iso / Examples / Chapter 12 / Example 12.8 / effect.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-01  |  2.6 KB  |  130 lines

  1. #ifndef RTS_EFFECT
  2. #define RTS_EFFECT
  3.  
  4. #include <windows.h>
  5. #include <d3dx9.h>
  6. #include <vector>
  7. #include "debug.h"
  8. #include "shader.h"
  9. #include "skinnedmesh.h"
  10.  
  11. void LoadEffectResources(IDirect3DDevice9 *m_pDevice);
  12. void UnloadEffectResources();
  13.  
  14. class SMOKE;
  15.  
  16. //Transform Help structure
  17. struct TRANSFORM
  18. {
  19.     TRANSFORM();
  20.     TRANSFORM(D3DXVECTOR3 _pos);
  21.     TRANSFORM(D3DXVECTOR3 _pos, D3DXVECTOR3 _rot);
  22.     TRANSFORM(D3DXVECTOR3 _pos, D3DXVECTOR3 _rot, D3DXVECTOR3 _sca);
  23.  
  24.     void Init(D3DXVECTOR3 _pos);
  25.     void Init(D3DXVECTOR3 _pos, D3DXVECTOR3 _rot);
  26.     void Init(D3DXVECTOR3 _pos, D3DXVECTOR3 _rot, D3DXVECTOR3 _sca);
  27.  
  28.     D3DXMATRIX GetWorldMatrix();
  29.  
  30.     D3DXVECTOR3 m_pos, m_rot, m_sca;    
  31. };
  32.  
  33. //Virtual EFFECT class...
  34. class EFFECT
  35. {
  36.     public:
  37.         EFFECT(IDirect3DDevice9 *Dev);
  38.         ~EFFECT(){}
  39.         virtual void Update(float timeDelta) = 0;
  40.         virtual void Render() = 0;
  41.         virtual bool isDead() = 0;
  42.  
  43.         void PreRender();
  44.         void PostRender();
  45.  
  46.         float m_time;
  47.         IDirect3DDevice9 *m_pDevice;
  48.         D3DXVECTOR4 m_color;
  49. };
  50.  
  51. class EFFECT_SPELL : public EFFECT
  52. {
  53.     public:
  54.         EFFECT_SPELL(IDirect3DDevice9 *Dev, D3DXVECTOR3 _pos);
  55.         void Update(float timeDelta);
  56.         void Render();
  57.         bool isDead();
  58.  
  59.     private:
  60.         TRANSFORM m_t1;
  61.         TRANSFORM m_c[10];
  62. };
  63.  
  64. class EFFECT_FIREBALL : public EFFECT
  65. {
  66.     public:
  67.         EFFECT_FIREBALL(IDirect3DDevice9 *Dev, BONE *_src, D3DXVECTOR3 _dest);
  68.         void Update(float timeDelta);
  69.         void Render();
  70.         bool isDead();
  71.         D3DXVECTOR3 GetPosition(float p);
  72.  
  73.     private:
  74.         BONE *m_pSrcBone;
  75.         float m_speed, m_length, m_prc;
  76.         D3DXVECTOR3 m_origin, m_dest;
  77.         TRANSFORM m_t1;
  78. };
  79.  
  80. class EFFECT_LENSFLARE : public EFFECT
  81. {
  82.     public:
  83.  
  84.         struct FLARE
  85.         {
  86.             FLARE(D3DXCOLOR _color, float _place, float _scale, int _sourceFlare)
  87.             {
  88.                 color = _color;
  89.                 place = _place;
  90.                 scale = _scale;
  91.                 sourceFlare = _sourceFlare;
  92.             }
  93.  
  94.             D3DXCOLOR color;
  95.             float place;
  96.             float scale;
  97.             int sourceFlare;
  98.         };
  99.  
  100.         EFFECT_LENSFLARE(IDirect3DDevice9 *Dev, int _type, D3DXVECTOR3 _position);
  101.         void Update(float timeDelta);
  102.         void Render();
  103.         bool isDead();
  104.  
  105.     private:
  106.         float m_mainAlpha;
  107.         bool m_inScreen;
  108.         int m_type;
  109.         D3DXVECTOR3 m_position;
  110.         std::vector<FLARE> m_flares;
  111. };
  112.  
  113. class EFFECT_FIRE : public EFFECT
  114. {
  115.     public:
  116.         EFFECT_FIRE(IDirect3DDevice9 *Dev, D3DXVECTOR3 pos, D3DXVECTOR3 scale);
  117.         ~EFFECT_FIRE();
  118.         void Update(float timeDelta);
  119.         void Render();
  120.         bool isDead();
  121.         void PreRender();
  122.         void PostRender();
  123.  
  124.     private:
  125.         TRANSFORM m_t1;
  126.         D3DXVECTOR3 m_camEye;
  127.         SMOKE *m_pSmoke;
  128. };
  129.  
  130. #endif