00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00013 #ifndef __smoke_H__
00014 #define __smoke_H__
00015
00016 #include <list>
00017 #include "opengl.h"
00018 #include "particle.h"
00019
00021 #define SMOKE "data/smoke.bmp"
00022
00024 #define SMOKEMASK "data/smokemask.bmp"
00025
00027 #define SMOKE_DAMPING 0.04
00028
00030 #define SMOKE_MASS_MEAN 0.01
00031
00033 #define SMOKE_MASS_STD 0.001
00034
00036 #define SMOKE_POS_STD 0.1
00037
00039 #define SMOKE_VEL_LENGTH_STD 1.0
00040
00042 #define SMOKE_VEL_ANGLE_MEAN 0.0
00043
00045 #define SMOKE_VEL_ANGLE_STD 0.1
00046
00048 #define SMOKE_LIEFTIME_MEAN 2.0
00049
00051 #define SMOKE_LIEFTIME_STD 1.0
00052
00054 #define SMOKE_FORCE_MEAN_X 0.0
00055
00057 #define SMOKE_FORCE_MEAN_Y 0.15 // points upward
00058
00060 #define SMOKE_FORCE_STD 0.001
00061
00068 #define SMOKE_FORCE_AGE_COEFF 0.5
00069
00070 using namespace std;
00071
00075 class Smoke {
00076 private:
00077 list<Particle> particles;
00078 void setExternalForces();
00079
00080 SDL_Surface *texture, *mask;
00081
00082 public:
00084 int textureWidth, textureHeight;
00085
00087 unsigned char *image;
00088
00092 Smoke();
00093
00097 void clear();
00098
00107 void createSmoke(vector2 &start, vector2 &velocity, int n);
00108
00113 void doPhysics(component timestep);
00114
00118 void draw();
00119 };
00120
00121 #endif