]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/options.cxx
Support scenery reloading (needs simgear update).
[flightgear.git] / src / Main / options.cxx
index 1931bb341ee1f1cc4adb5fbb472988398ae82e24..78471c8f015e52d719c88e2e9fb1dfa610f5f10c 100644 (file)
@@ -56,6 +56,7 @@
 #include "util.hxx"
 #include "viewmgr.hxx"
 #include <Main/viewer.hxx>
+#include <Environment/presets.hxx>
 
 #include <simgear/version.h>
 #include <osg/Version>
@@ -118,7 +119,7 @@ fgSetDefaults ()
        // Otherwise, default to Scenery being in $FG_ROOT/Scenery
        globals->set_fg_scenery("");
     }
-        
+
                                // Position (deliberately out of range)
     fgSetDouble("/position/longitude-deg", 9999.0);
     fgSetDouble("/position/latitude-deg", 9999.0);
@@ -185,8 +186,8 @@ fgSetDefaults ()
 
                                // Features
     fgSetBool("/sim/hud/color/antialiased", false);
-    fgSetBool("/sim/hud/enable3d", true);
-    fgSetBool("/sim/hud/visibility", false);
+    fgSetBool("/sim/hud/enable3d[1]", true);
+    fgSetBool("/sim/hud/visibility[1]", false);
     fgSetBool("/sim/panel/visibility", true);
     fgSetBool("/sim/sound/enabled", true);
     fgSetBool("/sim/sound/working", true);
@@ -220,7 +221,7 @@ fgSetDefaults ()
                                // HUD options
     fgSetString("/sim/startup/units", "feet");
     fgSetString("/sim/hud/frame-stat-type", "tris");
-       
+
                                // Time options
     fgSetInt("/sim/startup/time-offset", 0);
     fgSetString("/sim/startup/time-offset-type", "system-offset");
@@ -355,7 +356,7 @@ parse_time(const string& time_in) {
 
 
 // parse a date string (yyyy:mm:dd:hh:mm:ss) into a time_t (seconds)
-static long int 
+static long int
 parse_date( const string& date)
 {
     struct tm gmt;
@@ -493,7 +494,7 @@ parse_time_offset( const string& time_str) {
 }
 
 
-// Parse --fov=x.xx type option 
+// Parse --fov=x.xx type option
 static double
 parse_fov( const string& arg ) {
     double fov = atof(arg);
@@ -520,7 +521,7 @@ parse_fov( const string& arg ) {
 //        point values are ok.
 //
 // Serial example "--nmea=serial,dir,hz,device,baud" where
-// 
+//
 //  device = OS device name of serial line to be open()'ed
 //  baud = {300, 1200, 2400, ..., 230400}
 //
@@ -900,7 +901,7 @@ fgSetupProxy( const char *arg )
     string::size_type pos;
 
     host = port = auth = "";
-    if ((pos = options.find("@")) != string::npos) 
+    if ((pos = options.find("@")) != string::npos)
         auth = options.substr(0, pos++);
     else
         pos = 0;
@@ -981,7 +982,7 @@ fgOptViewOffset( const char *arg )
     } else {
        default_view_offset = atof( woffset.c_str() ) * SGD_DEGREES_TO_RADIANS;
     }
-    /* apparently not used (CLO, 11 Jun 2002) 
+    /* apparently not used (CLO, 11 Jun 2002)
         FGViewer *pilot_view =
            (FGViewer *)globals->get_viewmgr()->get_view( 0 ); */
     // this will work without calls to the viewer...
@@ -994,18 +995,14 @@ fgOptViewOffset( const char *arg )
 static int
 fgOptVisibilityMeters( const char *arg )
 {
-    double visibility = atof( arg );
-    fgDefaultWeatherValue("visibility-m", visibility);
-    fgSetDouble("/environment/visibility-m", visibility);
+    Environment::Presets::VisibilitySingleton::instance()->preset( atof( arg ) );
     return FG_OPTIONS_OK;
 }
 
 static int
 fgOptVisibilityMiles( const char *arg )
 {
-    double visibility = atof( arg ) * 5280.0 * SG_FEET_TO_METER;
-    fgDefaultWeatherValue("visibility-m", visibility);
-    fgSetDouble("/environment/visibility-m", visibility);
+    Environment::Presets::VisibilitySingleton::instance()->preset( atof( arg ) * 5280.0 * SG_FEET_TO_METER );
     return FG_OPTIONS_OK;
 }
 
@@ -1016,7 +1013,7 @@ fgOptRandomWind( const char *arg )
     double max_hdg = min_hdg + (20 - sqrt(sg_random() * 400));
     double speed = sg_random() * sg_random() * 40;
     double gust = speed + (10 - sqrt(sg_random() * 100));
-    fgSetupWind(min_hdg, max_hdg, speed, gust);
+    Environment::Presets::WindSingleton::instance()->preset(min_hdg, max_hdg, speed, gust);
     return FG_OPTIONS_OK;
 }
 
@@ -1028,14 +1025,14 @@ fgOptWind( const char *arg )
        SG_LOG( SG_GENERAL, SG_ALERT, "bad wind value " << arg );
        return FG_OPTIONS_ERROR;
     }
-    fgSetupWind(min_hdg, max_hdg, speed, gust);
+    Environment::Presets::WindSingleton::instance()->preset(min_hdg, max_hdg, speed, gust);
     return FG_OPTIONS_OK;
 }
 
 static int
 fgOptTurbulence( const char *arg )
 {
-    fgDefaultWeatherValue("turbulence/magnitude-norm", atof(arg));
+    Environment::Presets::TurbulenceSingleton::instance()->preset( atof(arg) );
     return FG_OPTIONS_OK;
 }
 
@@ -1052,9 +1049,7 @@ fgOptCeiling( const char *arg )
         elevation = atof(spec.substr(0, pos).c_str());
         thickness = atof(spec.substr(pos + 1).c_str());
     }
-    fgSetDouble("/environment/clouds/layer[0]/elevation-ft", elevation);
-    fgSetDouble("/environment/clouds/layer[0]/thickness-ft", thickness);
-    fgSetString("/environment/clouds/layer[0]/coverage", "overcast");
+    Environment::Presets::CeilingSingleton::instance()->preset( elevation, thickness );
     return FG_OPTIONS_OK;
 }
 
@@ -1317,7 +1312,7 @@ struct OptionDesc {
     const char *s_param;
     int (*func)( const char * );
     } fgOptionArray[] = {
-       
+
     {"language",                     true,  OPTION_FUNC,   "", false, "", fgOptLanguage },
     {"disable-game-mode",            false, OPTION_BOOL,   "/sim/startup/game-mode", false, "", 0 },
     {"enable-game-mode",             false, OPTION_BOOL,   "/sim/startup/game-mode", true, "", 0 },
@@ -1342,16 +1337,16 @@ struct OptionDesc {
     {"enable-fuel-freeze",           false, OPTION_BOOL,   "/sim/freeze/fuel", true, "", 0 },
     {"disable-clock-freeze",         false, OPTION_BOOL,   "/sim/freeze/clock", false, "", 0 },
     {"enable-clock-freeze",          false, OPTION_BOOL,   "/sim/freeze/clock", true, "", 0 },
-    {"disable-hud-3d",               false, OPTION_BOOL,   "/sim/hud/enable3d", false, "", 0 },
-    {"enable-hud-3d",                false, OPTION_BOOL,   "/sim/hud/enable3d", true, "", 0 },
+    {"disable-hud-3d",               false, OPTION_BOOL,   "/sim/hud/enable3d[1]", false, "", 0 },
+    {"enable-hud-3d",                false, OPTION_BOOL,   "/sim/hud/enable3d[1]", true, "", 0 },
     {"disable-anti-alias-hud",       false, OPTION_BOOL,   "/sim/hud/color/antialiased", false, "", 0 },
     {"enable-anti-alias-hud",        false, OPTION_BOOL,   "/sim/hud/color/antialiased", true, "", 0 },
     {"control",                      true,  OPTION_STRING, "/sim/control-mode", false, "", 0 },
     {"disable-auto-coordination",    false, OPTION_BOOL,   "/sim/auto-coordination", false, "", 0 },
     {"enable-auto-coordination",     false, OPTION_BOOL,   "/sim/auto-coordination", true, "", 0 },
     {"browser-app",                  true,  OPTION_STRING, "/sim/startup/browser-app", false, "", 0 },
-    {"disable-hud",                  false, OPTION_BOOL,   "/sim/hud/visibility", false, "", 0 },
-    {"enable-hud",                   false, OPTION_BOOL,   "/sim/hud/visibility", true, "", 0 },
+    {"disable-hud",                  false, OPTION_BOOL,   "/sim/hud/visibility[1]", false, "", 0 },
+    {"enable-hud",                   false, OPTION_BOOL,   "/sim/hud/visibility[1]", true, "", 0 },
     {"disable-panel",                false, OPTION_BOOL,   "/sim/panel/visibility", false, "", 0 },
     {"enable-panel",                 false, OPTION_BOOL,   "/sim/panel/visibility", true, "", 0 },
     {"disable-sound",                false, OPTION_BOOL,   "/sim/sound/working", false, "", 0 },
@@ -1464,6 +1459,9 @@ struct OptionDesc {
     {"proxy",                        true,  OPTION_FUNC,    "", false, "", fgSetupProxy },
     {"callsign",                     true,  OPTION_FUNC,    "", false, "", fgOptCallSign},
     {"multiplay",                    true,  OPTION_CHANNEL, "", false, "", 0 },
+#ifdef FG_HAVE_HLA
+    {"hla",                          true,  OPTION_CHANNEL, "", false, "", 0 },
+#endif
     {"trace-read",                   true,  OPTION_FUNC,   "", false, "", fgOptTraceRead },
     {"trace-write",                  true,  OPTION_FUNC,   "", false, "", fgOptTraceWrite },
     {"log-level",                    true,  OPTION_FUNC,   "", false, "", fgOptLogLevel },
@@ -1756,7 +1754,7 @@ fgParseOptions (const string& path) {
         line = line.substr( 0, i );
 
        if ( parse_option( line ) == FG_OPTIONS_ERROR ) {
-            cerr << endl << "Config file parse error: " << path << " '" 
+            cerr << endl << "Config file parse error: " << path << " '"
                    << line << "'" << endl;
            fgUsage();
            exit(-1);
@@ -1767,7 +1765,7 @@ fgParseOptions (const string& path) {
 
 
 // Print usage message
-void 
+void
 fgUsage (bool verbose)
 {
     SGPropertyNode *locale = globals->get_locale();
@@ -1784,7 +1782,7 @@ fgUsage (bool verbose)
         cout << "Make sure the file options.xml is located in the FlightGear base directory," << endl;
         cout << "and the location of the base directory is specified by setting $FG_ROOT or" << endl;
         cout << "by adding --fg-root=path as a program argument." << endl;
-        
+
         exit(-1);
     }
 
@@ -1828,7 +1826,7 @@ fgUsage (bool verbose)
                     tmp.append(", -");
                     tmp.append(short_name->getStringValue());
                 }
-                               
+
                 if (tmp.size() <= 25) {
                     msg+= "   --";
                     msg += tmp;