ParticleSystem.h
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:3k
源码类别:

游戏

开发平台:

Visual C++

  1. //-----------------------------------------------------------------------------
  2. // File: ParticleSystem.h
  3. //
  4. // Copyright (C) Microsoft Corporation. All Rights Reserved.
  5. //-----------------------------------------------------------------------------
  6. #pragma once
  7. #include <math.h>
  8. #include <stdio.h>
  9. #include "DXUtil.h"
  10. // Helper function to stuff a FLOAT into a DWORD argument
  11. inline DWORD FtoDW( FLOAT f ) { return *((DWORD*)&f); }
  12. //-----------------------------------------------------------------------------
  13. // Name:
  14. // Desc:
  15. //-----------------------------------------------------------------------------
  16. class CParticleSystem
  17. {
  18. public:
  19.     //-----------------------------------------------------------------------------
  20.     // Custom vertex types
  21.     //-----------------------------------------------------------------------------
  22.     struct COLORVERTEX
  23.     {
  24.         D3DXVECTOR3 v;
  25.         D3DCOLOR    color;
  26.         FLOAT       tu;
  27.         FLOAT       tv;
  28.     };
  29.     #define D3DFVF_COLORVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1)
  30.     struct POINTVERTEX
  31.     {
  32.         D3DXVECTOR3 v;
  33.         D3DCOLOR    color;
  34.     };
  35.     #define D3DFVF_POINTVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)
  36.     //-----------------------------------------------------------------------------
  37.     // Global data for the particles
  38.     //-----------------------------------------------------------------------------
  39.     struct PARTICLE
  40.     {
  41.         BOOL        m_bSpark;     // Sparks are less energetic particles that
  42.                                 // are generated where/when the main particles
  43.                                 // hit the ground
  44.         D3DXVECTOR3 m_vPos;       // Current position
  45.         D3DXVECTOR3 m_vVel;       // Current velocity
  46.         D3DXVECTOR3 m_vPos0;      // Initial position
  47.         D3DXVECTOR3 m_vVel0;      // Initial velocity
  48.         FLOAT       m_fTime0;     // Time of creation
  49.         D3DXCOLOR   m_clrDiffuse; // Initial diffuse color
  50.         D3DXCOLOR   m_clrFade;    // Faded diffuse color
  51.         FLOAT       m_fFade;      // Fade progression
  52.         PARTICLE*   m_pNext;      // Next particle in list
  53.     };
  54. protected:
  55.     FLOAT     m_fRadius;
  56.     FLOAT     m_fTime;
  57.     DWORD     m_dwBase;
  58. DWORD     m_dwFlush;
  59.     DWORD     m_dwDiscard;
  60.     DWORD     m_dwParticles;
  61.     DWORD     m_dwParticlesLim;
  62.     PARTICLE* m_pParticles;
  63.     PARTICLE* m_pParticlesFree;
  64.     // Geometry
  65.     LPDIRECT3DVERTEXBUFFER9 m_pVB;
  66. public:
  67.     CParticleSystem( DWORD dwFlush, DWORD dwDiscard, FLOAT fRadius );
  68.    ~CParticleSystem();
  69.     HRESULT RestoreDeviceObjects();
  70.     HRESULT InvalidateDeviceObjects();
  71.     HRESULT Update( FLOAT fSecsPerFrame, DWORD dwNumParticlesToEmit,
  72.                     const D3DXCOLOR &dwEmitColor, const D3DXCOLOR &dwFadeColor,
  73.                     FLOAT fEmitVel, D3DXVECTOR3 vPosition, BOOL bEmitNewParticles );
  74.     HRESULT Render( const float fWrapOffsetX, const float fWrapOffsetZ );
  75.     HRESULT GetNumActiveParticles() { return m_dwParticles; }
  76. };