]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/options.cxx
Added options to set up avionics from the command line:
[flightgear.git] / src / Main / options.cxx
index e4b273bfd61e1e38f1a5b8234f85417172506401..836af0dad5ada1bc23995a45eec6f12f8855ba1b 100644 (file)
@@ -60,6 +60,7 @@
 #include "fg_init.hxx"
 #include "fg_props.hxx"
 #include "options.hxx"
+#include "util.hxx"
 #include "viewmgr.hxx"
 
 
@@ -183,10 +184,11 @@ fgSetDefaults ()
     fgSetInt("/sim/log-level", SG_WARN);
 
                                // Features
+    fgSetBool("/sim/hud/antialiased", false);
+    fgSetBool("/sim/hud/enable3d", true);
     fgSetBool("/sim/hud/visibility", false);
     fgSetBool("/sim/panel/visibility", true);
     fgSetBool("/sim/sound/audible", true);
-    fgSetBool("/sim/hud/antialiased", false);
 
                                // Flight Model options
     fgSetString("/sim/flight-model", "jsb");
@@ -202,13 +204,14 @@ fgSetDefaults ()
     fgSetBool("/sim/rendering/skyblend", true);
     fgSetBool("/sim/rendering/textures", true);
     fgSetBool("/sim/rendering/wireframe", false);
+    fgSetBool("/sim/rendering/horizon-effect", false);
+    fgSetBool("/sim/rendering/enhanced-lighting", false);
     fgSetBool("/sim/rendering/distance-attenuation", false);
     fgSetInt("/sim/startup/xsize", 800);
     fgSetInt("/sim/startup/ysize", 600);
     fgSetInt("/sim/rendering/bits-per-pixel", 16);
     fgSetString("/sim/view-mode", "pilot");
     fgSetDouble("/sim/current-view/heading-offset-deg", 0);
-    fgSetDouble("/environment/visibility-m", 20000);
 
                                // HUD options
     fgSetString("/sim/startup/units", "feet");
@@ -238,7 +241,6 @@ fgSetDefaults ()
 
 }
 
-
 static bool
 parse_wind (const string &wind, double * min_hdg, double * max_hdg,
            double * speed, double * gust)
@@ -542,16 +544,50 @@ add_channel( const string& type, const string& channel_str ) {
 static void
 setup_wind (double min_hdg, double max_hdg, double speed, double gust)
 {
-  fgSetDouble("/environment/wind-from-heading-deg", min_hdg);
-  fgSetDouble("/environment/params/min-wind-from-heading-deg", min_hdg);
-  fgSetDouble("/environment/params/max-wind-from-heading-deg", max_hdg);
-  fgSetDouble("/environment/wind-speed-kt", speed);
-  fgSetDouble("/environment/params/base-wind-speed-kt", speed);
-  fgSetDouble("/environment/params/gust-wind-speed-kt", gust);
+                                // Initialize to a reasonable state
+  fgDefaultWeatherValue("wind-from-heading-deg", min_hdg);
+  fgDefaultWeatherValue("wind-speed-kt", speed);
 
   SG_LOG(SG_GENERAL, SG_INFO, "WIND: " << min_hdg << '@' << 
         speed << " knots" << endl);
 
+                                // Now, add some variety to the layers
+  min_hdg += 10;
+  if (min_hdg > 360)
+      min_hdg -= 360;
+  speed *= 1.2;
+  fgSetDouble("/environment/config/boundary/entry[1]/wind-from-heading-deg",
+              min_hdg);
+  fgSetDouble("/environment/config/boundary/entry[1]/wind-speed-kt",
+              speed);
+
+  min_hdg += 20;
+  if (min_hdg > 360)
+      min_hdg -= 360;
+  speed *= 1.5;
+  fgSetDouble("/environment/config/aloft/entry[0]/wind-from-heading-deg",
+              min_hdg);
+  fgSetDouble("/environment/config/aloft/entry[0]/wind-speed-kt",
+              speed);
+              
+  min_hdg += 10;
+  if (min_hdg > 360)
+      min_hdg -= 360;
+  speed *= 1.2;
+  fgSetDouble("/environment/config/aloft/entry[1]/wind-from-heading-deg",
+              min_hdg);
+  fgSetDouble("/environment/config/aloft/entry[1]/wind-speed-kt",
+              speed);
+              
+  min_hdg += 10;
+  if (min_hdg > 360)
+      min_hdg -= 360;
+  speed *= 1.2;
+  fgSetDouble("/environment/config/aloft/entry[2]/wind-from-heading-deg",
+              min_hdg);
+  fgSetDouble("/environment/config/aloft/entry[2]/wind-speed-kt",
+              speed);
+
 #ifdef FG_WEATHERCM
   // convert to fps
   speed *= SG_NM_TO_METER * SG_METER_TO_FEET * (1.0/3600);
@@ -955,11 +991,19 @@ fgOptViewOffset( const char *arg )
     return FG_OPTIONS_OK;
 }
 
+static int
+fgOptVisibilityMeters( const char *arg )
+{
+    double visibility = atof( arg );
+    fgDefaultWeatherValue("visibility-m", visibility);
+    return FG_OPTIONS_OK;
+}
+
 static int
 fgOptVisibilityMiles( const char *arg )
 {
     double visibility = atof( arg ) * 5280.0 * SG_FEET_TO_METER;
-    fgSetDouble("/environment/visibility-m", visibility);
+    fgDefaultWeatherValue("visibility-m", visibility);
     return FG_OPTIONS_OK;
 }
 
@@ -986,6 +1030,13 @@ fgOptWind( const char *arg )
     return FG_OPTIONS_OK;
 }
 
+static int
+fgOptTurbulence( const char *arg)
+{
+    fgDefaultWeatherValue("turbulence/magnitude-norm", atof(arg));
+    return FG_OPTIONS_OK;
+}
+
 static int
 fgOptWp( const char *arg )
 {
@@ -1015,6 +1066,72 @@ fgOptConfig( const char *arg )
     return FG_OPTIONS_OK;
 }
 
+static bool
+parse_colon (const string &s, double * val1, double * val2)
+{
+    string::size_type pos = s.find(':');
+    if (pos == string::npos) {
+        *val2 = atof(s);
+        return false;
+    } else {
+        *val1 = atof(s.substr(0, pos).c_str());
+        *val2 = atof(s.substr(pos+1).c_str());
+        return true;
+    }
+}
+
+
+static int
+fgOptNAV1( const char * arg )
+{
+    double radial, freq;
+    if (parse_colon(arg, &radial, &freq))
+        fgSetDouble("/radios/nav[0]/radials/selected-deg", radial);
+    fgSetDouble("/radios/nav[0]/frequencies/selected-mhz", freq);
+    return FG_OPTIONS_OK;
+}
+
+static int
+fgOptNAV2( const char * arg )
+{
+    double radial, freq;
+    if (parse_colon(arg, &radial, &freq))
+        fgSetDouble("/radios/nav[1]/radials/selected-deg", radial);
+    fgSetDouble("/radios/nav[1]/frequencies/selected-mhz", freq);
+    return FG_OPTIONS_OK;
+}
+
+static int
+fgOptADF( const char * arg )
+{
+    double rot, freq;
+    if (parse_colon(arg, &rot, &freq))
+        fgSetDouble("/radios/kr-87/inputs/rotation-deg", rot);
+    fgSetDouble("/radios/kr-87/outputs/selected-khz", freq);
+    return FG_OPTIONS_OK;
+}
+
+static int
+fgOptDME( const char *arg )
+{
+    string opt = arg;
+    if (opt == "nav1") {
+        fgSetInt("/instrumentation/dme/switch-position", 1);
+        fgSetString("/instrumentation/dme/frequencies/source",
+                    "/radios/nav[0]/frequencies/selected-mhz");
+    } else if (opt == "nav2") {
+        fgSetInt("/instrumentation/dme/switch-position", 3);
+        fgSetString("/instrumentation/dme/frequencies/source",
+                    "/radios/nav[1]/frequencies/selected-mhz");
+    } else {
+        fgSetInt("/instrumentation/dme/switch-position", 2);
+        fgSetString("/instrumentation/dme/frequencies/source",
+                    "/instrumentation/dme/frequencies/selected-mhz");
+        fgSetString("/instrumentation/dme/frequencies/selected-mhz", arg);
+    }
+    return FG_OPTIONS_OK;
+}
+
 static map<string,size_t> fgOptionMap;
 
 /*
@@ -1072,6 +1189,8 @@ 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-anti-alias-hud",       false, OPTION_BOOL,   "/sim/hud/antialiased", false, "", 0 },
     {"enable-anti-alias-hud",        false, OPTION_BOOL,   "/sim/hud/antialiased", true, "", 0 },
     {"control",                      true,  OPTION_STRING, "/sim/control-mode", false, "", 0 },
@@ -1121,9 +1240,13 @@ struct OptionDesc {
     {"in-air",                       false, OPTION_BOOL,   "/sim/presets/onground", false, "", 0 },
     {"fog-disable",                  false, OPTION_STRING, "/sim/rendering/fog", false, "disabled", 0 },
     {"fog-fastest",                  false, OPTION_STRING, "/sim/rendering/fog", false, "fastest", 0 },
-    {"fog-nicest",                   false, OPTION_STRING, "/sim/fog", false, "nicest", 0 },
-    {"disable-distance-attenuation", false, OPTION_BOOL,   "/environment/distance-attenuation", false, "", 0 },
-    {"enable-distance-attenuation",  false, OPTION_BOOL,   "/environment/distance-attenuation", true, "", 0 },
+    {"fog-nicest",                   false, OPTION_STRING, "/sim/rendering/fog", false, "nicest", 0 },
+    {"disable-horizon-effect",       false, OPTION_BOOL,   "/sim/rendering/horizon-effect", false, "", 0 },
+    {"enable-horizon-effect",        false, OPTION_BOOL,   "/sim/rendering/horizon-effect", true, "", 0 },
+    {"disable-enhanced-lighting",    false, OPTION_BOOL,   "/sim/rendering/enhanced-lighting", false, "", 0 },
+    {"enable-enhanced-lighting",     false, OPTION_BOOL,   "/sim/rendering/enhanced-lighting", true, "", 0 },
+    {"disable-distance-attenuation", false, OPTION_BOOL,   "/sim/rendering/distance-attenuation", false, "", 0 },
+    {"enable-distance-attenuation",  false, OPTION_BOOL,   "/sim/rendering/distance-attenuation", true, "", 0 },
     {"disable-clouds",               false, OPTION_BOOL,   "/environment/clouds/status", false, "", 0 },
     {"enable-clouds",                false, OPTION_BOOL,   "/environment/clouds/status", true, "", 0 },
 #ifdef FG_USE_CLOUDS_3D
@@ -1153,7 +1276,7 @@ struct OptionDesc {
     {"start-date-gmt",               true,  OPTION_FUNC,   "", false, "", fgOptStartDateGmt },
     {"hud-tris",                     false, OPTION_STRING, "/sim/hud/frame-stat-type", false, "tris", 0 },
     {"hud-culled",                   false, OPTION_STRING, "/sim/hud/frame-stat-type", false, "culled", 0 },
-    {"atc610x",                      false, OPTION_CHANNEL, "", false, "dummy", 0 },
+    {"atc610x",                      true,  OPTION_CHANNEL, "", false, "dummy", 0 },
     {"atlas",                        true,  OPTION_CHANNEL, "", false, "", 0 },
     {"httpd",                        true,  OPTION_CHANNEL, "", false, "", 0 },
 #ifdef FG_JPEG_SERVER
@@ -1187,15 +1310,21 @@ struct OptionDesc {
     {"trace-write",                  true,  OPTION_FUNC,   "", false, "", fgOptTraceWrite },
     {"log-level",                    true,  OPTION_INT,    "/sim/log-level", false, "", 0 },
     {"view-offset",                  true,  OPTION_FUNC,   "", false, "", fgOptViewOffset },
-    {"visibility",                   true,  OPTION_DOUBLE, "/environment/visibility-m", false, "", 0 },
+    {"visibility",                   true,  OPTION_FUNC,   "", false, "", fgOptVisibilityMeters },
     {"visibility-miles",             true,  OPTION_FUNC,   "", false, "", fgOptVisibilityMiles },
     {"random-wind",                  false, OPTION_FUNC,   "", false, "", fgOptRandomWind },
     {"wind",                         true,  OPTION_FUNC,   "", false, "", fgOptWind },
-    {"turbulence",                   true,  OPTION_DOUBLE,  "/environment/turbulence-norm", false, "", 0 },
+    {"turbulence",                   true,  OPTION_FUNC,   "", false, "", fgOptTurbulence },
     {"wp",                           true,  OPTION_FUNC,   "", false, "", fgOptWp },
     {"flight-plan",                  true,  OPTION_FUNC,   "", false, "", fgOptFlightPlan },
     {"config",                       true,  OPTION_FUNC,   "", false, "", fgOptConfig },
     {"aircraft",                     true,  OPTION_STRING, "/sim/aircraft", false, "", 0 },
+    {"com1",                         true,  OPTION_DOUBLE, "/radios/comm[0]/frequencies/selected-mhz", false, "", 0 },
+    {"com2",                         true,  OPTION_DOUBLE, "/radios/comm[1]/frequencies/selected-mhz", false, "", 0 },
+    {"nav1",                         true,  OPTION_FUNC,   "", false, "", fgOptNAV1 },
+    {"nav2",                         true,  OPTION_FUNC,   "", false, "", fgOptNAV2 },
+    {"adf",                          true,  OPTION_FUNC,   "", false, "", fgOptADF },
+    {"dme",                          true,  OPTION_FUNC,   "", false, "", fgOptDME },
     {0}
 };