]> git.mxchange.org Git - simgear.git/commitdiff
Let SGCloudLayer handle coverage strings
authorTorsten Dreyer <Torsten@t3r.de>
Fri, 27 Aug 2010 16:20:09 +0000 (18:20 +0200)
committerTorsten Dreyer <Torsten@t3r.de>
Fri, 27 Aug 2010 16:20:09 +0000 (18:20 +0200)
This is currently handled in various places in FlightGear.

simgear/scene/sky/cloud.cxx
simgear/scene/sky/cloud.hxx

index d7b7e2f3c4b1c5d05c354a593bb97ff00ef1d114..5d8b09ffb799e14997ebe838dadc46e63ffa72e6 100644 (file)
@@ -83,6 +83,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,
@@ -293,6 +300,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)
 {
index 91a977b02f00d5e99795ac9614b0a1b11c6fb547..9b490fa9d3371d2cca234ca248b55b511addbb9b 100644 (file)
@@ -63,6 +63,13 @@ public:
        SG_MAX_CLOUD_COVERAGES
     };
 
+    static const std::string SG_CLOUD_OVERCAST_STRING; // "overcast"
+    static const std::string SG_CLOUD_BROKEN_STRING; // "broken"
+    static const std::string SG_CLOUD_SCATTERED_STRING; // "scattered"
+    static const std::string SG_CLOUD_FEW_STRING; // "few"
+    static const std::string SG_CLOUD_CIRRUS_STRING; // "cirrus"
+    static const std::string SG_CLOUD_CLEAR_STRING; // "clear"
+
     /**
      * Constructor
      * @param tex_path the path to the set of cloud textures
@@ -123,6 +130,18 @@ public:
      */
     void setCoverage (Coverage coverage);
 
+    /** get coverage as string */
+    const string & getCoverageString() const;
+
+    /** get coverage as string */
+    static const string & getCoverageString( Coverage coverage );
+
+    /** get coverage type from string */
+    static Coverage getCoverageType( const std::string & coverage );
+
+    /** set coverage as string */
+    void setCoverageString( const string & coverage );
+
     /**
      * set the cloud movement direction
      * @param dir the cloud movement direction