]> git.mxchange.org Git - flightgear.git/blobdiff - src/Time/light.hxx
#346 related: missing status message for property server
[flightgear.git] / src / Time / light.hxx
index 6954513bcdd1a4a8c76324e6262e3b12c1d29845..1880c3deab0a3cf9fa34b95e39b23a0c9f5dc105 100644 (file)
 #  include <config.h>
 #endif
 
-#ifdef HAVE_WINDOWS_H
-#  include <windows.h>
-#endif
-
 #include <simgear/compiler.h>
 
-#include SG_GL_H
-
-#include <plib/sg.h>                   // plib include
-
+#include <simgear/props/props.hxx>
 #include <simgear/structure/subsystem_mgr.hxx>
 #include <simgear/math/interpolater.hxx>
-#include <simgear/math/point3d.hxx>
 
 
 // Define a structure containing the global lighting parameters
@@ -66,17 +58,14 @@ private:
      */
 
     // in geocentric coordinates
-    double _sun_lon, _sun_gc_lat;
+    double _sun_lon, _sun_lat;
     double _moon_lon, _moon_gc_lat;
 
-    // in cartesian coordiantes
-    Point3D _sunpos, _moonpos;
-
     // (in view coordinates)
-    sgVec4 _sun_vec, _moon_vec;
+    SGVec4f _sun_vec, _moon_vec;
 
     // inverse (in view coordinates)
-    sgVec4 _sun_vec_inv, _moon_vec_inv;
+    SGVec4f _sun_vec_inv, _moon_vec_inv;
 
     // the angle between the celestial object and the local horizontal
     // (in radians)
@@ -94,24 +83,35 @@ private:
      */
 
     // ambient, diffuse and specular component
-    GLfloat _scene_ambient[4];
-    GLfloat _scene_diffuse[4];
-    GLfloat _scene_specular[4];
+    SGVec4f _scene_ambient;
+    SGVec4f _scene_diffuse;
+    SGVec4f _scene_specular;
+    SGVec4f _scene_chrome;
 
     // clear sky, fog and cloud color
-    GLfloat _sky_color[4];
-    GLfloat _fog_color[4];
-    GLfloat _cloud_color[4];
+    SGVec4f _sky_color;
+    SGVec4f _fog_color;
+    SGVec4f _cloud_color;
 
     // clear sky and fog color adjusted for sunset effects
-    GLfloat _adj_fog_color[4];
-    GLfloat _adj_sky_color[4];
+    SGVec4f _adj_fog_color;
+    SGVec4f _adj_sky_color;
+
+    // input parameters affected by the weather system
+    float _saturation;
+    float _scattering;
+    float _overcast;
 
     double _dt_total;
 
     void update_sky_color ();
     void update_adj_fog_color ();
 
+    void updateSunPos();
+    
+    // properties for chrome light; not a tie because I want to fire
+    // property listeners when the values change.
+    SGPropertyNode_ptr _chromeProps[4];
 public:
 
     FGLight ();
@@ -126,14 +126,15 @@ public:
 
     // Color related functions
 
-    inline float *scene_ambient () const { return (float *)_scene_ambient; }
-    inline float *scene_diffuse () const { return (float *)_scene_diffuse; }
-    inline float *scene_specular () const { return (float *)_scene_specular; }
-
-    inline float *sky_color () const { return (float *)_sky_color; }
-    inline float *cloud_color () const { return (float *)_cloud_color; }
-    inline float *adj_fog_color () const { return (float *)_adj_fog_color; }
+    inline const SGVec4f& scene_ambient () const { return _scene_ambient; }
+    inline const SGVec4f& scene_diffuse () const { return _scene_diffuse; }
+    inline const SGVec4f& scene_specular () const { return _scene_specular; }
+    inline const SGVec4f& scene_chrome () const { return _scene_chrome; }
 
+    inline const SGVec4f& sky_color () const { return _sky_color; }
+    inline const SGVec4f& cloud_color () const { return _cloud_color; }
+    inline const SGVec4f& adj_fog_color () const { return _adj_fog_color; }
+    inline const SGVec4f& adj_sky_color () const { return _adj_sky_color; }
 
     // Sun related functions
 
@@ -146,14 +147,11 @@ public:
     inline double get_sun_lon () const { return _sun_lon; }
     inline void set_sun_lon (double l) { _sun_lon = l; }
 
-    inline double get_sun_gc_lat () const { return _sun_gc_lat; }
-    inline void set_sun_gc_lat (double l) { _sun_gc_lat = l; }
+    inline double get_sun_lat () const { return _sun_lat; }
+    inline void set_sun_lat (double l) { _sun_lat = l; }
 
-    inline const Point3D& get_sunpos () const { return _sunpos; }
-    inline void set_sunpos (const Point3D& p) { _sunpos = p; }
-
-    inline float *sun_vec () const { return (float *)_sun_vec; }
-    inline float *sun_vec_inv () const { return (float *)_sun_vec_inv; }
+    inline SGVec4f& sun_vec () { return _sun_vec; }
+    inline SGVec4f& sun_vec_inv () { return _sun_vec_inv; }
 
 
     // Moon related functions
@@ -170,11 +168,8 @@ public:
     inline double get_moon_gc_lat () const { return _moon_gc_lat; }
     inline void set_moon_gc_lat (double l) { _moon_gc_lat = l; }
 
-    inline const Point3D& get_moonpos () const { return _moonpos; }
-    inline void set_moonpos (const Point3D& p) { _moonpos = p; }
-
-    inline float *moon_vec () const { return (float *)_moon_vec; }
-    inline float *moon_vec_inv () const { return (float *)_moon_vec_inv; }
+    inline const SGVec4f& moon_vec () const { return _moon_vec; }
+    inline const SGVec4f& moon_vec_inv () const { return _moon_vec_inv; }
 };
 
 #endif // _LIGHT_HXX