#include <simgear/misc/sgstream.hxx>
#include <simgear/misc/sg_path.hxx>
#include <simgear/scene/material/mat.hxx>
+#include <simgear/sound/soundmgr_openal.hxx>
// #include <Include/general.hxx>
// #include <Airports/simple.hxx>
#include "options.hxx"
#include "util.hxx"
#include "viewmgr.hxx"
-
+#include <Main/viewer.hxx>
+#include <simgear/version.h>
using std::string;
using std::sort;
FG_OPTIONS_ERROR = 2,
FG_OPTIONS_EXIT = 3,
FG_OPTIONS_VERBOSE_HELP = 4,
- FG_OPTIONS_SHOW_AIRCRAFT = 5
+ FG_OPTIONS_SHOW_AIRCRAFT = 5,
+ FG_OPTIONS_SHOW_SOUND_DEVICES = 6
};
static double
fgSetBool("/sim/hud/enable3d", true);
fgSetBool("/sim/hud/visibility", false);
fgSetBool("/sim/panel/visibility", true);
- fgSetBool("/sim/sound/pause", false);
+ fgSetBool("/sim/sound/enabled", true);
+ fgSetBool("/sim/sound/working", true);
// Flight Model options
fgSetString("/sim/flight-model", "jsb");
fgSetBool("/sim/rendering/shading", true);
fgSetBool("/sim/rendering/skyblend", true);
fgSetBool("/sim/rendering/textures", true);
- fgTie( "/sim/rendering/filtering", SGGetTextureFilter, SGSetTextureFilter, false);
+ fgTie( "/sim/rendering/filtering", SGGetTextureFilter, SGSetTextureFilter, false);
fgSetInt("/sim/rendering/filtering", 1);
fgSetBool("/sim/rendering/wireframe", false);
fgSetBool("/sim/rendering/horizon-effect", false);
return FG_OPTIONS_OK;
}
-static int
-fgOptWeather( const char *arg )
-{
- if (arg[0])
- fgSetString("/environment/weather-scenario", arg);
- fgSetBool("/environment/params/real-world-weather-fetch", !strcmp(arg, "METAR"));
- return FG_OPTIONS_OK;
-}
-
static void
clearLocation ()
{
static int
fgOptWind( const char *arg )
{
- double min_hdg, max_hdg, speed, gust;
+ double min_hdg = 0.0, max_hdg = 0.0, speed = 0.0, gust = 0.0;
if (!parse_wind( arg, &min_hdg, &max_hdg, &speed, &gust)) {
SG_LOG( SG_GENERAL, SG_ALERT, "bad wind value " << arg );
return FG_OPTIONS_ERROR;
static int
fgOptVersion( const char *arg )
{
- cerr << VERSION << endl;
+ cerr << "FlightGear version: " << VERSION << endl;
cerr << "FG_ROOT=" << globals->get_fg_root() << endl;
cerr << "FG_HOME=" << fgGetString("/sim/fg-home") << endl;
+ cerr << "FG_SCENERY=";
+
+ int didsome = 0;
+ string_list scn = globals->get_fg_scenery();
+ for (string_list::const_iterator it = scn.begin(); it != scn.end(); it++)
+ {
+ if (didsome) cerr << ":";
+ didsome++;
+ cerr << *it;
+ }
+ cerr << endl;
+ cerr << "SimGear version: " << SG_STRINGIZE(SIMGEAR_VERSION) << endl;
+ cerr << "PLIB version: " << PLIB_VERSION << endl;
return FG_OPTIONS_EXIT;
}
+static int
+fgOptFpe(const char* arg)
+{
+ // Actually handled in bootstrap.cxx
+ return FG_OPTIONS_OK;
+}
+
+static int
+fgOptFgviewer(const char* arg)
+{
+ // Actually handled in bootstrap.cxx
+ return FG_OPTIONS_OK;
+}
+
+
+
static map<string,size_t> fgOptionMap;
/*
{"enable-mouse-pointer", false, OPTION_STRING, "/sim/startup/mouse-pointer", false, "enabled", 0 },
{"disable-random-objects", false, OPTION_BOOL, "/sim/rendering/random-objects", false, "", 0 },
{"enable-random-objects", false, OPTION_BOOL, "/sim/rendering/random-objects", true, "", 0 },
- {"disable-real-weather-fetch", false, OPTION_FUNC, "", false, "", fgOptWeather },
- {"enable-real-weather-fetch", false, OPTION_FUNC, "", false, "METAR", fgOptWeather },
+ {"disable-real-weather-fetch", false, OPTION_BOOL, "/environment/params/real-world-weather-fetch", false, "", 0 },
+ {"enable-real-weather-fetch", false, OPTION_BOOL, "/environment/params/real-world-weather-fetch", true, "", 0 },
+ {"metar", true, OPTION_STRING, "/environment/metar/data", false, "", 0 },
{"disable-ai-models", false, OPTION_BOOL, "/sim/ai/enabled", false, "", 0 },
{"enable-ai-models", false, OPTION_BOOL, "/sim/ai/enabled", true, "", 0 },
{"disable-freeze", false, OPTION_BOOL, "/sim/freeze/master", false, "", 0 },
{"enable-hud", false, OPTION_BOOL, "/sim/hud/visibility", 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/pause", true, "", 0 },
- {"enable-sound", false, OPTION_BOOL, "/sim/sound/pause", false, "", 0 },
+ {"disable-sound", false, OPTION_BOOL, "/sim/sound/working", false, "", 0 },
+ {"enable-sound", false, OPTION_BOOL, "/sim/sound/working", true, "", 0 },
+ {"sound-device", true, OPTION_STRING, "/sim/sound/device-name", false, "", 0 },
{"airport", true, OPTION_STRING, "/sim/presets/airport-id", false, "", 0 },
{"runway", true, OPTION_FUNC, "", false, "", fgOptRunway },
{"vor", true, OPTION_FUNC, "", false, "", fgOptVOR },
{"ai-scenario", true, OPTION_FUNC, "", false, "", fgOptScenario },
{"parking-id", true, OPTION_FUNC, "", false, "", fgOptParking },
{"version", false, OPTION_FUNC, "", false, "", fgOptVersion },
+ {"enable-fpe", false, OPTION_FUNC, "", false, "", fgOptFpe},
+ {"fgviewer", false, OPTION_FUNC, "", false, "", fgOptFgviewer},
{0}
};
return(FG_OPTIONS_VERBOSE_HELP);
} else if ( arg.find( "--show-aircraft") == 0) {
return(FG_OPTIONS_SHOW_AIRCRAFT);
+ } else if ( arg.find( "--show-sound-devices") == 0) {
+ return(FG_OPTIONS_SHOW_SOUND_DEVICES);
} else if ( arg.find( "--prop:" ) == 0 ) {
if (!set_property(arg.substr(7))) {
SG_LOG( SG_GENERAL, SG_ALERT, "Bad property assignment: " << arg );
verbose = true;
else if (result == FG_OPTIONS_SHOW_AIRCRAFT) {
- fgOptLogLevel( "alert" );
- SGPath path( globals->get_fg_root() );
- path.append("Aircraft");
- fgShowAircraft(path, true);
- exit(0);
+ fgOptLogLevel( "alert" );
+ SGPath path( globals->get_fg_root() );
+ path.append("Aircraft");
+ fgShowAircraft(path, true);
+ exit(0);
+
+ } else if (result == FG_OPTIONS_SHOW_SOUND_DEVICES) {
+ SGSoundMgr smgr;
+
+ smgr.init();
+ string vendor = smgr.get_vendor();
+ string renderer = smgr.get_renderer();
+ cout << renderer << " provided by " << vendor << endl;
+ cout << endl << "No. Device" << endl;
+
+ vector <const char*>devices = smgr.get_available_devices();
+ for (int i=0; i<devices.size(); i++) {
+ cout << i << ". \"" << devices[i] << "\"" << endl;
+ }
+ devices.clear();
+ exit(0);
}
else if (result == FG_OPTIONS_EXIT)
{
// changes should also be reflected in $FG_ROOT/data/options.xml &
// $FG_ROOT/data/Translations/string-default.xml
- const char levels[][20]= {"alpha","beta","early-production","production",0};
+ const char* levels[] = {"alpha","beta","early-production","production"};
- for (unsigned int i=0; i<(sizeof(levels)/sizeof(levels[0])-1);i++)
+ for (size_t i=0; i<(sizeof(levels)/sizeof(levels[0]));i++)
if (strcmp(str,levels[i])==0)
return i;