X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Ffg_init.cxx;h=f7c591d397dc3e17d66307259293b54a2bc4cf66;hb=a704a6208131cad4f12123a72acdb1fb3dc6658f;hp=4be803c39ec64640b00d6d4249489a9dd6bc7642;hpb=029012b8b94f0719fc824f2b6afff43afe2cb9c2;p=flightgear.git diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx index 4be803c39..f7c591d39 100644 --- a/src/Main/fg_init.cxx +++ b/src/Main/fg_init.cxx @@ -98,6 +98,8 @@ #include #include #include +#include +#include #include "fg_init.hxx" #include "fg_io.hxx" @@ -413,25 +415,30 @@ bool fgInitConfig ( int argc, char **argv ) 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()) { @@ -440,7 +447,7 @@ bool fgInitConfig ( int argc, char **argv ) // parse options after loading aircraft to ensure any user // overrides of defaults are honored. - flightgear::Options::sharedInstance()->processOptions(); + options->processOptions(); return true; } @@ -450,17 +457,23 @@ bool fgInitConfig ( int argc, char **argv ) /** * 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; @@ -592,9 +605,11 @@ void fgCreateSubsystems() { // autopilot.) //////////////////////////////////////////////////////////////////// - globals->add_subsystem("instrumentation", new FGInstrumentMgr, SGSubsystemMgr::FDM); 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. //////////////////////////////////////////////////////////////////// @@ -677,16 +692,14 @@ void fgCreateSubsystems() { //////////////////////////////////////////////////////////////////// // 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); //////////////////////////////////////////////////////////////////// @@ -747,7 +760,7 @@ void fgPostInitSubsystems() /* Scenarios require Nasal, so FGAIManager loads the scenarios, * including its models such as a/c carriers, in its 'postinit', * which is the very last thing we do. - * fgInitPosition is called very early in main.cxx/fgIdleFunction, + * flightgear::initPosition is called very early in main.cxx/fgIdleFunction, * one of the first things we do, long before scenarios/carriers are * loaded. => When requested "initial preset position" relates to a * carrier, recalculate the 'initial' position here (how have things @@ -824,6 +837,12 @@ void fgReInitSubsystems() // 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 ) {