]> git.mxchange.org Git - simgear.git/blobdiff - simgear/scene/sky/cloud.cxx
accomodate changes to osgDB::DatabasePager interface
[simgear.git] / simgear / scene / sky / cloud.cxx
index d7b7e2f3c4b1c5d05c354a593bb97ff00ef1d114..5c62bd05c06d3653ed41c2a253e66970a3598eb6 100644 (file)
@@ -18,7 +18,6 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 //
-// $Id$
 
 #ifdef HAVE_CONFIG_H
 #  include <simgear_config.h>
@@ -83,6 +82,13 @@ static bool bump_mapping = false;
 
 bool SGCloudLayer::enable_bump_mapping = false;
 
+const std::string SGCloudLayer::SG_CLOUD_OVERCAST_STRING = "overcast";
+const std::string SGCloudLayer::SG_CLOUD_BROKEN_STRING = "broken";
+const std::string SGCloudLayer::SG_CLOUD_SCATTERED_STRING = "scattered";
+const std::string SGCloudLayer::SG_CLOUD_FEW_STRING = "few";
+const std::string SGCloudLayer::SG_CLOUD_CIRRUS_STRING = "cirrus";
+const std::string SGCloudLayer::SG_CLOUD_CLEAR_STRING = "clear";
+
 // make an StateSet for a cloud layer given the named texture
 static osg::StateSet*
 SGMakeState(const SGPath &path, const char* colorTexture,
@@ -141,10 +147,13 @@ SGCloudLayer::SGCloudLayer( const string &tex_path ) :
     layer_asl(0.0),
     layer_thickness(0.0),
     layer_transition(0.0),
+    layer_visibility(25.0),
     layer_coverage(SG_CLOUD_CLEAR),
     scale(4000.0),
     speed(0.0),
-    direction(0.0)
+    direction(0.0),
+    last_course(0.0),
+    max_alpha(1.0)
 {
     // XXX
     // Render bottoms before the rest of transparent objects (rendered
@@ -253,6 +262,18 @@ SGCloudLayer::setThickness_m (float thickness_m)
     layer_thickness = thickness_m;
 }
 
+float
+SGCloudLayer::getVisibility_m() const
+{
+    return layer_visibility;
+}
+
+void
+SGCloudLayer::setVisibility_m (float visibility_m)
+{
+    layer_visibility = visibility_m;
+}
+
 float
 SGCloudLayer::getTransition_m () const
 {
@@ -293,6 +314,56 @@ SGCloudLayer::setCoverage (Coverage coverage)
     }
 }
 
+const std::string &
+SGCloudLayer::getCoverageString( Coverage coverage )
+{
+       switch( coverage ) {
+               case SG_CLOUD_OVERCAST:
+                       return SG_CLOUD_OVERCAST_STRING;
+               case SG_CLOUD_BROKEN:
+                       return SG_CLOUD_BROKEN_STRING;
+               case SG_CLOUD_SCATTERED:
+                       return SG_CLOUD_SCATTERED_STRING;
+               case SG_CLOUD_FEW:
+                       return SG_CLOUD_FEW_STRING;
+               case SG_CLOUD_CIRRUS:
+                       return SG_CLOUD_CIRRUS_STRING;
+               case SG_CLOUD_CLEAR:
+               default:
+                       return SG_CLOUD_CLEAR_STRING;
+       }
+}
+
+SGCloudLayer::Coverage 
+SGCloudLayer::getCoverageType( const std::string & coverage )
+{
+       if( SG_CLOUD_OVERCAST_STRING == coverage ) {
+               return SG_CLOUD_OVERCAST;
+       } else if( SG_CLOUD_BROKEN_STRING == coverage ) {
+               return SG_CLOUD_BROKEN;
+       } else if( SG_CLOUD_SCATTERED_STRING == coverage ) {
+               return SG_CLOUD_SCATTERED;
+       } else if( SG_CLOUD_FEW_STRING == coverage ) {
+               return SG_CLOUD_FEW;
+       } else if( SG_CLOUD_CIRRUS_STRING == coverage ) {
+               return SG_CLOUD_CIRRUS;
+       } else {
+               return SG_CLOUD_CLEAR;
+       }
+}
+
+const std::string &
+SGCloudLayer::getCoverageString() const
+{
+       return getCoverageString(layer_coverage);
+}
+
+void
+SGCloudLayer::setCoverageString( const std::string & coverage )
+{
+       setCoverage( getCoverageType(coverage) );
+}
+
 void
 SGCloudLayer::setTextureOffset(const osg::Vec2& offset)
 {
@@ -699,7 +770,7 @@ bool SGCloudLayer::reposition( const SGVec3f& p, const SGVec3f& up, double lon,
         double ax = 0.0, ay = 0.0, bx = 0.0, by = 0.0;
 
         if (dist > 0.0) {
-            ax = cos(course) * dist;
+            ax = -cos(course) * dist;
             ay = sin(course) * dist;
         }
 
@@ -712,6 +783,7 @@ bool SGCloudLayer::reposition( const SGVec3f& p, const SGVec3f& up, double lon,
         double xoff = (ax + bx) / (2 * scale);
         double yoff = (ay + by) / (2 * scale);
 
+
 //        const float layer_scale = layer_span / scale;
 
         // cout << "xoff = " << xoff << ", yoff = " << yoff << endl;