]> git.mxchange.org Git - flightgear.git/blobdiff - src/Environment/fgclouds.cxx
Bind the CAVOK flag to metarproperties
[flightgear.git] / src / Environment / fgclouds.cxx
index 2374cd2360d29579d6d35f43823198baa5dc5812..58653e05364c3dce780ab2695d3f308743ff8406 100644 (file)
@@ -24,6 +24,8 @@
 #  include "config.h"
 #endif
 
+#include "fgclouds.hxx"
+
 #include <cstring>
 #include <cstdio>
 #include <Main/fg_props.hxx>
 #include <Main/globals.hxx>
 #include <Main/util.hxx>
 #include <Viewer/renderer.hxx>
-#include <Airports/simple.hxx>
-
-#include "fgclouds.hxx"
-
-static bool do_delete_3Dcloud (const SGPropertyNode *arg);
-static bool do_move_3Dcloud (const SGPropertyNode *arg);
-static bool do_add_3Dcloud (const SGPropertyNode *arg);
+#include <Airports/airport.hxx>
 
 // RNG seed to ensure cloud synchronization across multi-process
 // deployments
 static mt seed;
 
 FGClouds::FGClouds() :
-#if 0
-    snd_lightning(0),
-#endif
     clouds_3d_enabled(false),
     index(0)
 {
@@ -64,6 +57,10 @@ FGClouds::FGClouds() :
 
 FGClouds::~FGClouds()
 {
+    globals->get_commands()->removeCommand("add-cloud");
+       globals->get_commands()->removeCommand("del-cloud");
+       globals->get_commands()->removeCommand("move-cloud");
+
 }
 
 int FGClouds::get_update_event(void) const {
@@ -75,27 +72,19 @@ void FGClouds::set_update_event(int count) {
        buildCloudLayers();
 }
 
-void FGClouds::Init(void) {
-#if 0
-       if( snd_lightning == NULL ) {
-               snd_lightning = new SGSoundSample("Sounds/thunder.wav", SGPath());
-               snd_lightning->set_max_dist(7000.0f);
-               snd_lightning->set_reference_dist(3000.0f);
-               SGSoundMgr *smgr = globals->get_soundmgr();
-               SGSampleGroup *sgr = smgr->find("weather", true);
-               sgr->add( snd_lightning, "thunder" );
-       }
-#endif
-
+void FGClouds::Init(void)
+{
        mt_init_time_10(&seed);
 
-       globals->get_commands()->addCommand("add-cloud", do_add_3Dcloud);
-       globals->get_commands()->addCommand("del-cloud", do_delete_3Dcloud);
-       globals->get_commands()->addCommand("move-cloud", do_move_3Dcloud);
+       globals->get_commands()->addCommand("add-cloud", this, &FGClouds::add3DCloud);
+       globals->get_commands()->addCommand("del-cloud", this, &FGClouds::delete3DCloud);
+       globals->get_commands()->addCommand("move-cloud", this, &FGClouds::move3DCloud);
 }
 
 // Build an invidual cloud. Returns the extents of the cloud for coverage calculations
-double FGClouds::buildCloud(SGPropertyNode *cloud_def_root, SGPropertyNode *box_def_root, const string& name, double grid_z_rand, SGCloudField *layer) {
+double FGClouds::buildCloud(SGPropertyNode *cloud_def_root, SGPropertyNode *box_def_root,
+                            const std::string& name, double grid_z_rand, SGCloudField *layer)
+{
        SGPropertyNode *box_def=NULL;
        SGPropertyNode *cld_def=NULL;
        double extent = 0.0;
@@ -229,11 +218,10 @@ void FGClouds::buildLayer(int iLayer, const string& name, double coverage) {
                        double count = acloud->getDoubleValue("count", 1.0);
                        tCloudVariety[CloudVarietyCount].count = count;
                        int variety = 0;
-                       cloud_name = cloud_name + "-%d";
                        char variety_name[50];
                        do {
                                variety++;
-                               snprintf(variety_name, sizeof(variety_name) - 1, cloud_name.c_str(), variety);
+                               snprintf(variety_name, sizeof(variety_name) - 1, "%s-%d", cloud_name.c_str(), variety);
                        } while( box_def_root->getChild(variety_name, 0, false) );
 
                        totalCount += count;
@@ -358,8 +346,7 @@ bool FGClouds::get_3dClouds() const
  * (Various) - cloud definition properties. See README.3DClouds
  *
  */
- static bool
- do_add_3Dcloud (const SGPropertyNode *arg)
+ bool FGClouds::add3DCloud(const SGPropertyNode *arg)
  {
    int l = arg->getIntValue("layer", 0);
    int index = arg->getIntValue("index", 0);
@@ -394,8 +381,7 @@ bool FGClouds::get_3dClouds() const
   * index - the cloud index
   *
   */
- static bool
- do_delete_3Dcloud (const SGPropertyNode *arg)
+ bool FGClouds::delete3DCloud(const SGPropertyNode *arg)
  {
    int l = arg->getIntValue("layer", 0);
    int i = arg->getIntValue("index", 0);
@@ -414,8 +400,7 @@ bool FGClouds::get_3dClouds() const
  * lon/lat/alt - the position for the cloud
  *
  */
- static bool
- do_move_3Dcloud (const SGPropertyNode *arg)
+bool FGClouds::move3DCloud(const SGPropertyNode *arg)
  {
    int l = arg->getIntValue("layer", 0);
    int i = arg->getIntValue("index", 0);