#include <Viewer/renderer.hxx>
#include <Viewer/viewmgr.hxx>
#include <Navaids/NavDataCache.hxx>
+#include <Instrumentation/HUD/HUD.hxx>
+#include <Cockpit/cockpitDisplayManager.hxx>
#include "fg_init.hxx"
#include "fg_io.hxx"
home->setStringValue(dataPath.c_str());
home->setAttribute(SGPropertyNode::WRITE, false);
- flightgear::Options::sharedInstance()->init(argc, argv, dataPath);
+ flightgear::Options* options = flightgear::Options::sharedInstance();
+ options->init(argc, argv, dataPath);
+ bool loadDefaults = flightgear::Options::sharedInstance()->shouldLoadDefaultConfig();
+ if (loadDefaults) {
+ // Read global preferences from $FG_ROOT/preferences.xml
+ SG_LOG(SG_INPUT, SG_INFO, "Reading global preferences");
+ fgLoadProps("preferences.xml", globals->get_props());
+ SG_LOG(SG_INPUT, SG_INFO, "Finished Reading global preferences");
+
+ // do not load user settings when reset to default is requested
+ if (flightgear::Options::sharedInstance()->isOptionSet("restore-defaults"))
+ {
+ SG_LOG(SG_ALL, SG_ALERT, "Ignoring user settings. Restoring defaults.");
+ }
+ else
+ {
+ globals->loadUserSettings(dataPath);
+ }
+ } else {
+ SG_LOG(SG_GENERAL, SG_INFO, "not reading default configuration files");
+ }// of no-default-config selected
- // Read global preferences from $FG_ROOT/preferences.xml
- SG_LOG(SG_INPUT, SG_INFO, "Reading global preferences");
- fgLoadProps("preferences.xml", globals->get_props());
- SG_LOG(SG_INPUT, SG_INFO, "Finished Reading global preferences");
-
- // do not load user settings when reset to default is requested
- if (flightgear::Options::sharedInstance()->isOptionSet("restore-defaults"))
- {
- SG_LOG(SG_ALL, SG_ALERT, "Ignoring user settings. Restoring defaults.");
- }
- else
- {
- globals->loadUserSettings(dataPath);
- }
-
// Scan user config files and command line for a specified aircraft.
- flightgear::Options::sharedInstance()->initAircraft();
+ options->initAircraft();
FindAndCacheAircraft f(globals->get_props());
if (!f.loadAircraft()) {
// parse options after loading aircraft to ensure any user
// overrides of defaults are honored.
- flightgear::Options::sharedInstance()->processOptions();
+ options->processOptions();
return true;
}
/**
* Initialize vor/ndb/ils/fix list management and query systems (as
* well as simple airport db list)
+ * This is called multiple times in the case of a cache rebuild,
+ * to allow length caching to take place in the background, without
+ * blocking the main/UI thread.
*/
bool
fgInitNav ()
{
flightgear::NavDataCache* cache = flightgear::NavDataCache::instance();
- if (cache->isRebuildRequired()) {
- SGTimeStamp st;
- st.stamp();
- cache->rebuild();
-
- SG_LOG(SG_GENERAL, SG_INFO, "rebuilding NavDataCache took:" << st.elapsedMSec());
+ static bool doingRebuild = false;
+ if (doingRebuild || cache->isRebuildRequired()) {
+ doingRebuild = true;
+ bool finished = cache->rebuild();
+ if (!finished) {
+ // sleep to give the rebuild thread more time
+ SGTimeStamp::sleepForMSec(50);
+ return false;
+ }
}
FGTACANList *channellist = new FGTACANList;
globals->add_subsystem("systems", new FGSystemMgr, SGSubsystemMgr::FDM);
globals->add_subsystem("instrumentation", new FGInstrumentMgr, SGSubsystemMgr::FDM);
-
+ globals->add_subsystem("hud", new HUD, SGSubsystemMgr::DISPLAY);
+ globals->add_subsystem("cockpit-displays", new flightgear::CockpitDisplayManager, SGSubsystemMgr::DISPLAY);
+
////////////////////////////////////////////////////////////////////
// Initialize the XML Autopilot subsystem.
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
// Initialize the controls subsystem.
////////////////////////////////////////////////////////////////////
-
- globals->get_controls()->init();
- globals->get_controls()->bind();
-
+
+ globals->add_subsystem("controls", new FGControls, SGSubsystemMgr::GENERAL);
////////////////////////////////////////////////////////////////////
// Initialize the input subsystem.
////////////////////////////////////////////////////////////////////
- globals->add_subsystem("input", new FGInput);
+ globals->add_subsystem("input", new FGInput, SGSubsystemMgr::GENERAL);
////////////////////////////////////////////////////////////////////
// need to bind FDMshell again, since we manually unbound it above...
globals->get_subsystem("flight")->bind();
+ // need to reset aircraft (systems/instruments) so they can adapt to current environment
+ globals->get_subsystem("systems")->reinit();
+ globals->get_subsystem("instrumentation")->reinit();
+
+ globals->get_subsystem("ATIS")->reinit();
+
// setup state to end re-init
fgSetBool("/sim/signals/reinit", false);
if ( !freeze ) {