X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Ffg_init.cxx;h=0e83ba131b952db0859ab0286f97fa38747f93b5;hb=fcf1709df61ec93182dc51ca4afa58ea152749a0;hp=67882149ac6e4b1fafcfaa60a33108186e76c5af;hpb=8ec60b663df2a19ba83d6540ce4c71d71f0b99e8;p=flightgear.git diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx index 67882149a..0e83ba131 100644 --- a/src/Main/fg_init.cxx +++ b/src/Main/fg_init.cxx @@ -74,13 +74,9 @@ #include -#if ENABLE_ATCDCL -# include -# include "ATCDCL/commlist.hxx" -#else -# include "ATC/atis.hxx" -# include "ATC/atcutils.hxx" -#endif +#include +#include +#include #include #include @@ -589,7 +585,7 @@ public: bool loadAircraft() { - std::string aircraft = fgGetString( "/sim/aircraft", ""); + std::string aircraft = fgGetString( "/sim/aircraft", ""); if (aircraft.empty()) { SG_LOG(SG_GENERAL, SG_ALERT, "no aircraft specified"); return false; @@ -601,6 +597,9 @@ public: SGPropertyNode *n = _cache->getNode("fg-root", true); n->setStringValue(globals->get_fg_root().c_str()); n->setAttribute(SGPropertyNode::USERARCHIVE, true); + n = _cache->getNode("fg-aircraft", true); + n->setStringValue(getAircraftPaths().c_str()); + n->setAttribute(SGPropertyNode::USERARCHIVE, true); _cache->removeChildren("aircraft"); fgFindAircraft(this, &FindAndCacheAircraft::checkAircraft); @@ -629,11 +628,29 @@ public: } private: + SGPath getAircraftPaths() { + string_list pathList = globals->get_aircraft_paths(); + SGPath aircraftPaths; + string_list::const_iterator it = pathList.begin(); + if (it != pathList.end()) { + aircraftPaths.set(*it); + it++; + } + for (; it != pathList.end(); ++it) { + aircraftPaths.add(*it); + } + return aircraftPaths; + } + bool checkCache() { if (globals->get_fg_root() != _cache->getStringValue("fg-root", "")) { return false; // cache mismatch } + + if (getAircraftPaths().str() != _cache->getStringValue("fg-aircraft", "")) { + return false; // cache mismatch + } vector cache = _cache->getChildren("aircraft"); for (unsigned int i = 0; i < cache.size(); i++) { @@ -820,7 +837,7 @@ static void fgApplyStartOffset(const SGGeod& aStartPos, double aHeading, double } // Set current_options lon/lat given an airport id and heading (degrees) -static bool fgSetPosFromAirportIDandHdg( const string& id, double tgt_hdg ) { +bool fgSetPosFromAirportIDandHdg( const string& id, double tgt_hdg ) { if ( id.empty() ) return false; @@ -1366,19 +1383,17 @@ bool fgInitSubsystems() { //////////////////////////////////////////////////////////////////// - // Initialise the ATC Manager + // Initialise the ATC Manager //////////////////////////////////////////////////////////////////// -#if ENABLE_ATCDCL SG_LOG(SG_GENERAL, SG_INFO, " ATC Manager"); globals->set_ATC_mgr(new FGATCMgr); globals->get_ATC_mgr()->init(); -#else + //////////////////////////////////////////////////////////////////// // Initialise the ATIS Manager //////////////////////////////////////////////////////////////////// globals->add_subsystem("atis", new FGAtisManager, SGSubsystemMgr::POST_FDM); -#endif //////////////////////////////////////////////////////////////////// @@ -1491,6 +1506,8 @@ bool fgInitSubsystems() { // End of subsystem initialization. //////////////////////////////////////////////////////////////////// + fgSetBool("/sim/initialized", true); + SG_LOG( SG_GENERAL, SG_INFO, endl); // Save the initial state for future @@ -1503,25 +1520,32 @@ bool fgInitSubsystems() { void fgReInitSubsystems() { - // static const SGPropertyNode *longitude - // = fgGetNode("/sim/presets/longitude-deg"); - // static const SGPropertyNode *latitude - // = fgGetNode("/sim/presets/latitude-deg"); - static const SGPropertyNode *altitude - = fgGetNode("/sim/presets/altitude-ft"); static const SGPropertyNode *master_freeze = fgGetNode("/sim/freeze/master"); - SG_LOG( SG_GENERAL, SG_INFO, - "fgReInitSubsystems(): /position/altitude = " - << altitude->getDoubleValue() ); + SG_LOG( SG_GENERAL, SG_INFO, "fgReInitSubsystems()"); +// setup state to begin re-init bool freeze = master_freeze->getBoolValue(); if ( !freeze ) { fgSetBool("/sim/freeze/master", true); } + + fgSetBool("/sim/signals/reinit", true); fgSetBool("/sim/crashed", false); +// do actual re-init steps + globals->get_subsystem("flight")->unbind(); + + // reset control state, before restoring initial state; -set or config files + // may specify values for flaps, trim tabs, magnetos, etc + globals->get_controls()->reset_all(); + + globals->restoreInitialState(); + + // update our position based on current presets + fgInitPosition(); + // Force reupdating the positions of the ai 3d models. They are used for // initializing ground level for the FDM. globals->get_subsystem("ai_model")->reinit(); @@ -1532,11 +1556,11 @@ void fgReInitSubsystems() // reload offsets from config defaults globals->get_viewmgr()->reinit(); - globals->get_controls()->reset_all(); - globals->get_subsystem("time")->reinit(); globals->get_subsystem("tile-manager")->reinit(); +// setup state to end re-init + fgSetBool("/sim/signals/reinit", false); if ( !freeze ) { fgSetBool("/sim/freeze/master", false); } @@ -1546,27 +1570,9 @@ void fgReInitSubsystems() void doSimulatorReset(void) // from gui_local.cxx -- TODO merge with fgReInitSubsystems() { - static SGPropertyNode_ptr master_freeze = fgGetNode("/sim/freeze/master", true); - - bool freeze = master_freeze->getBoolValue(); - if (!freeze) - master_freeze->setBoolValue(true); - - fgSetBool("/sim/signals/reinit", true); - - globals->get_subsystem("flight")->unbind(); - - globals->restoreInitialState(); - - // update our position based on current presets - fgInitPosition(); + fgReInitSubsystems(); - - fgSetBool("/sim/signals/reinit", false); - - if (!freeze) - master_freeze->setBoolValue(false); } ///////////////////////////////////////////////////////////////////////////////