00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #if !defined(__INCLUDE_WaterWavesh_INCLUDE__)
00022 #define __INCLUDE_WaterWavesh_INCLUDE__
00023
00024 #include <common/Vector.h>
00025 #include <common/ProgressCounter.h>
00026 #include <GLEXT/GLTexture.h>
00027 #include <vector>
00028
00029 class Water2Patches;
00030 class WaterWaves
00031 {
00032 public:
00033 WaterWaves();
00034 virtual ~WaterWaves();
00035
00036 void generateWaves(float waterHeight, ProgressCounter *counter = 0);
00037 void draw(Water2Patches ¤tPatch);
00038 void simulate(float frameTime);
00039
00040 protected:
00041 struct WaterWaveEntry
00042 {
00043 Vector perp;
00044 Vector ptA;
00045 Vector ptB;
00046 Vector ptC;
00047 Vector ptD;
00048 };
00049 struct WaterWaveContext
00050 {
00051 int mapWidth;
00052 int mapHeight;
00053 int pointsWidth;
00054 int pointsHeight;
00055 int pointsMult;
00056 bool *wavePoints;
00057 unsigned int pointCount;
00058 unsigned int removedCount;
00059 };
00060
00061 GLTexture wavesTexture1_;
00062 GLTexture wavesTexture2_;
00063 Vector wavesColor_;
00064
00065 std::vector<WaterWaveEntry> paths1_;
00066 std::vector<WaterWaveEntry> paths2_;
00067 float totalTime_;
00068
00069 void findPoints(WaterWaveContext *context,
00070 float waterHeight, ProgressCounter *counter);
00071 bool findNextPath(WaterWaveContext *context,
00072 float waterHeight, ProgressCounter *counter);
00073 void findPath(WaterWaveContext *context,
00074 std::vector<Vector> &points, int x, int y, ProgressCounter *counter);
00075 void constructLines(WaterWaveContext *context,
00076 float waterHeight, std::vector<Vector> &points);
00077 void drawBoxes(Water2Patches ¤tPatch,
00078 float totalTime, Vector &windDir,
00079 std::vector<WaterWaveEntry> &paths);
00080
00081 };
00082
00083 #endif