]> git.mxchange.org Git - simgear.git/blob - simgear/environment/visual_enviro.hxx
gcc fix.
[simgear.git] / simgear / environment / visual_enviro.hxx
1 // Visual environment helper class
2 //
3 // Written by Harald JOHNSEN, started April 2005.
4 //
5 // Copyright (C) 2005  Harald JOHNSEN - hjohnsen@evc.net
6 //
7 // This program is free software; you can redistribute it and/or
8 // modify it under the terms of the GNU General Public License as
9 // published by the Free Software Foundation; either version 2 of the
10 // License, or (at your option) any later version.
11 //
12 // This program is distributed in the hope that it will be useful, but
13 // WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 // General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program; if not, write to the Free Software
19 // Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
20 //
21 //
22 #ifndef _VISUAL_ENVIRO_HXX
23 #define _VISUAL_ENVIRO_HXX
24
25 #include <simgear/compiler.h>
26 #include STL_STRING
27
28 SG_USING_STD(string);
29
30 class SGLightning;
31 class SGSoundMgr;
32
33 /**
34  * Visual environment helper class.
35  */
36 class SGEnviro {
37 friend struct SGLightning;
38 private:
39         void DrawCone2(float baseRadius, float height, int slices, bool down, double rain_norm, double speed);
40         void lt_update(void);
41
42         bool view_in_cloud;
43         bool precipitation_enable_state;
44         float precipitation_density;
45         bool turbulence_enable_state;
46         double last_cloud_turbulence, cloud_turbulence;
47         bool lightning_enable_state;
48         double elapsed_time, dt;
49         sgVec4  fog_color;
50         sgMat4 transform;
51         double last_lon, last_lat, last_alt;
52         SGSoundMgr      *soundMgr;
53         bool            snd_active, snd_playing;
54         double          snd_timer, snd_wait, snd_pos_lat, snd_pos_lon, snd_dist;
55         double          min_time_before_lt;
56
57         float fov_width, fov_height;
58
59 public:
60         SGEnviro();
61         ~SGEnviro();
62
63     /**
64      * Forward a few states used for renderings.
65      */
66         void startOfFrame( sgVec3 p, sgVec3 up, double lon, double lat, double alt, double delta_time);
67
68         void endOfFrame(void);
69
70     /**
71      * Whenever a cloud is drawn we check his 'impact' on the environment.
72      * @param heading direction of cloud in radians
73      * @param alt asl of cloud in meters
74      * @param radius radius of cloud in meters
75      * @param familly cloud familly
76      * @param dist  squared dist to cloud in meters
77      */
78         void callback_cloud(float heading, float alt, float radius, int familly, float dist);
79
80         void drawRain(double pitch, double roll, double speed, double rain_norm);
81     /**
82      * Draw rain or snow precipitation around the viewer.
83      * @param rain_norm rain normalized intensity given by metar class
84      * @param snow_norm snow normalized intensity given by metar class
85      * @param hail_norm hail normalized intensity given by metar class
86      * @param pitch pitch rotation of viewer
87      * @param roll roll rotation of viewer
88      * @param speed moving speed of viewer in kt
89      */
90         void drawPrecipitation(double rain_norm, double snow_norm, double hail_norm,
91                                                         double pitch, double roll, double speed);
92
93     /**
94      * Draw the lightnings spawned by cumulo nimbus.
95      */
96         void drawLightning(void);
97
98     /**
99      * Forward the fog color used by the rain rendering.
100      * @param adj_fog_color color of the fog
101      */
102         void setLight(sgVec4 adj_fog_color);
103
104         // this can be queried to add some turbulence for example
105         bool is_view_in_cloud(void) const;
106         void set_view_in_cloud(bool incloud);
107         double get_cloud_turbulence(void) const;
108
109         // Clouds
110         // return the size of the memory pool used by texture impostors
111         int get_clouds_CacheSize(void) const;
112         int get_CacheResolution(void) const;
113         float get_clouds_visibility(void) const;
114         float get_clouds_density(void) const;
115         bool get_clouds_enable_state(void) const;
116         bool get_turbulence_enable_state(void) const;
117
118     /**
119      * Set the size of the impostor texture cache for 3D clouds.
120      * @param sizeKb size of the texture pool in Kb
121      */
122         void set_clouds_CacheSize(int sizeKb);
123     /**
124      * Set the resolution of the impostor texture for 3D clouds.
125      * @param resolutionPixels size of each texture in pixels (64|128|256)
126      */
127         void set_CacheResolution(int resolutionPixels);
128     /**
129      * Set the maximum range used when drawing clouds.
130          * Clouds are blended from totaly transparent at max range to totaly opaque around the viewer
131      * @param distance in meters
132      */
133         void set_clouds_visibility(float distance);
134     /**
135      * Set the proportion of clouds that will be rendered to limit drop in FPS.
136      * @param density 0..100 no clouds drawn when density == 0, all are drawn when density == 100
137      */
138         void set_clouds_density(float density);
139     /**
140      * Enable or disable the use of 3D clouds.
141      * @param enable when false we draw the 2D layers
142      */
143         void set_clouds_enable_state(bool enable);
144     /**
145      * Enable or disable the use of proximity cloud turbulence.
146      * @param enable when true the turbulence is computed based on type of cloud around the AC
147      */
148         void set_turbulence_enable_state(bool enable);
149
150         // rain/snow
151         float get_precipitation_density(void) const;
152         bool get_precipitation_enable_state(void) const;
153
154         void set_precipitation_density(float density);
155     /**
156      * Enable or disable the rendering of precipitation around the viewer.
157      * @param enable when true we will draw precipitation depending on metar data
158      */
159         void set_precipitation_enable_state(bool enable);
160
161         // others
162         bool get_lightning_enable_state(void) const;
163     /**
164      * Enable or disable the rendering of lightning and the thunder sound.
165      * @param enable when true we will draw lightning spwaned by cumulonimbus
166      */
167         void set_lightning_enable_state(bool enable);
168
169     /**
170      * Spawn a new lighning at specified lon/lat.
171      * @param lon position of the new lightning
172      * @param lat position of the new lightning
173      * @param alt asl of the starting point of the lightning in meters
174      */
175         void addLightning(double lon, double lat, double alt);
176
177     /**
178      * Forward the sound manager instance to be able to play samples.
179      * @param mgr a running sound manager
180      */
181         void set_soundMgr(SGSoundMgr *mgr);
182
183         void setFOV( float w, float h );
184         void getFOV( float &w, float &h );
185
186 };
187
188 extern SGEnviro sgEnviro;
189
190 #endif // _VISUAL_ENVIRO_HXX