X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FEnvironment%2Ffgclouds.cxx;h=58653e05364c3dce780ab2695d3f308743ff8406;hb=c152e7f118881183199285a8b1a9e33d3cbff750;hp=f19d9d6fc5738255c943cf2bb81586a6fd688ce7;hpb=1eb8ae1fbf43359eec09b99885a9280f529c86fb;p=flightgear.git diff --git a/src/Environment/fgclouds.cxx b/src/Environment/fgclouds.cxx index f19d9d6fc..58653e053 100644 --- a/src/Environment/fgclouds.cxx +++ b/src/Environment/fgclouds.cxx @@ -24,6 +24,8 @@ # include "config.h" #endif +#include "fgclouds.hxx" + #include #include #include
@@ -42,20 +44,11 @@ #include #include -#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); - // 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);