#pragma once #include #include "Particle.h" #include "Media.h" #include "Parameters.h" using namespace std; struct vertexFormat { FLOAT x, y, z; DWORD color; FLOAT u1, v1, s1, t1; FLOAT u2, v2, s2; }; class ParticleSystem { public: ParticleSystem(void); ~ParticleSystem(void); void addSystem(char* filename, bool fire, D3DCOLOR particleColor, float minSize, float maxSize); void draw(IDirect3DTexture9* sceneTexture, IDirect3DTexture9* phaseTexture); void SetWorldViewProj(D3DXMATRIXA16& mWorld, D3DXMATRIXA16& mView, D3DXMATRIXA16& mProj ); void stepFrame(); void initBuffers(); void OnCreateDevice( IDirect3DDevice9* pd3dDevice); void OnDestroyDevice(); void OnResetDevice(); void OnLostDevice(); void setParams(Parameters& p){params=&p;} void setCameraPosition(const D3DXVECTOR3& pos); void setScreenDimensions(int width, int height) { screenWidth = width; screenHeight = height; } IDirect3DTexture9* getPlanckTexture(){return planckColors;}; float getFireTemperature(){return fireTemperature;} protected: Parameters* params; IDirect3DDevice9* pd3dDevice; typedef vector Frame; vector animFrames; int frameCount; int maxParticleCount; int currentframe; int screenWidth; int screenHeight; vertexFormat** allVertices; IDirect3DTexture9* fireAlpha; IDirect3DTexture9* smokeAlpha; IDirect3DTexture9* planckColors; IDirect3DTexture9* perlinNoise; IDirect3DTexture9* gradTex; ID3DXEffect* sbbEffect; HRESULT hr; // return codes float fireTemperature; // 0 - 1 };