| 1 | /*! | 
|---|
| 2 |  * @file mapped_water.h | 
|---|
| 3 |  *  worldentity for flat, cool looking, mapped water | 
|---|
| 4 | */ | 
|---|
| 5 | /*! example input in .oxw file with the standard values | 
|---|
| 6 | <MappedWater> | 
|---|
| 7 |   <waterpos>0,0,0</waterpos> | 
|---|
| 8 |   <watersize>100,100</watersize> | 
|---|
| 9 |   <wateruv>9</wateruv><!-- size of the waves --> | 
|---|
| 10 |   <waterflow>0.08</waterflow> | 
|---|
| 11 |   <lightpos>0,10,0</lightpos> | 
|---|
| 12 |   <waterangle>0</waterangle> | 
|---|
| 13 |   <normalmapscale>0.25</normalmapscale><!-- you won't see a big differnce if you change that --> | 
|---|
| 14 | </MappedWater> | 
|---|
| 15 | */ | 
|---|
| 16 |  | 
|---|
| 17 |  | 
|---|
| 18 | #ifndef _MAPPED_WATER_H | 
|---|
| 19 | #define _MAPPED_WATER_H | 
|---|
| 20 |  | 
|---|
| 21 | #include "world_entity.h" | 
|---|
| 22 | #include "material.h" | 
|---|
| 23 | #include "shader.h" | 
|---|
| 24 |  | 
|---|
| 25 |  | 
|---|
| 26 | class MappedWater : public WorldEntity | 
|---|
| 27 | { | 
|---|
| 28 | public: | 
|---|
| 29 |   MappedWater(const TiXmlElement* root = NULL); | 
|---|
| 30 |   virtual ~MappedWater(); | 
|---|
| 31 |  | 
|---|
| 32 |   void loadParams(const TiXmlElement* root); | 
|---|
| 33 |  | 
|---|
| 34 |   void draw() const; | 
|---|
| 35 |   void tick(float dt); | 
|---|
| 36 |  | 
|---|
| 37 |   // function to prepare renderpaths for creation of refleaction and reflaction textures | 
|---|
| 38 |   void activateReflection(); | 
|---|
| 39 |   void deactivateReflection(); | 
|---|
| 40 |   void activateRefraction(); | 
|---|
| 41 |   void deactivateRefraction(); | 
|---|
| 42 |  | 
|---|
| 43 |   // functions to set parameters for the water, usually they're called through loadparam | 
|---|
| 44 |   void setLightPos(float x, float y, float z) { this->lightPos = Vector(x,y,z); }; | 
|---|
| 45 |   void setWaterPos(float x, float y, float z) { this->waterPos = Vector(x,y,z); }; | 
|---|
| 46 |   void setWaterSize(float x, float z) { this->xWidth = x; this->zWidth = z; }; | 
|---|
| 47 |   void setWaterAngle(float angle) { this->waterAngle = angle; }; | 
|---|
| 48 |   void setWaterUV(float uv) { this->waterUV = uv; }; | 
|---|
| 49 |   void setWaterFlow(float flow) { this->waterFlow = flow; }; | 
|---|
| 50 |   void setNormalMapScale(float scale) { this->kNormalMapScale = scale; }; | 
|---|
| 51 |  | 
|---|
| 52 | private: | 
|---|
| 53 |   void initParams(); | 
|---|
| 54 |   void initTextures(); | 
|---|
| 55 |   void initShaders(); | 
|---|
| 56 |  | 
|---|
| 57 | private: | 
|---|
| 58 |   Vector              waterPos;               //!< position of the water | 
|---|
| 59 |   float               xWidth, zWidth;         //!< size of the water quad | 
|---|
| 60 |   Vector              lightPos;               //!< position of the light that is used to render the reflection | 
|---|
| 61 |   float               waterAngle;             //!< defines how much the water will be turned around the point waterPos | 
|---|
| 62 |  | 
|---|
| 63 |   float               move;                   //!< textures coords, speeds, positions for the shaded textures.... | 
|---|
| 64 |   float               move2; | 
|---|
| 65 |   float               waterUV;                //!< size of the waves | 
|---|
| 66 |   float               waterFlow;              //!< speed of the water | 
|---|
| 67 |   float               normalUV; | 
|---|
| 68 |   float               kNormalMapScale; | 
|---|
| 69 |  | 
|---|
| 70 |   int                 textureSize;            //!< height and width of the texture | 
|---|
| 71 |   Material            mat; | 
|---|
| 72 |   Shader*             shader; | 
|---|
| 73 |   Shader::Uniform*    cam_uni;                //!< uniform that is used for the camera position | 
|---|
| 74 | }; | 
|---|
| 75 |  | 
|---|
| 76 | #endif | 
|---|