#include <Cockpit/radiostack.hxx>
#include <Cockpit/panel.hxx>
#include <Cockpit/panel_io.hxx>
-#include <FDM/ADA.hxx>
+#ifdef ENABLE_SP_FMDS
+#include <FDM/SP/ADA.hxx>
+#include <FDM/SP/ACMS.hxx>
+#endif
#include <FDM/Balloon.h>
#include <FDM/ExternalNet/ExternalNet.hxx>
#include <FDM/ExternalPipe/ExternalPipe.hxx>
#include <Instrumentation/instrument_mgr.hxx>
#include <Model/acmodel.hxx>
#include <AIModel/AIManager.hxx>
-#include <Navaids/fixlist.hxx>
-#include <Navaids/ilslist.hxx>
-#include <Navaids/mkrbeacons.hxx>
+#include <Navaids/navdb.hxx>
#include <Navaids/navlist.hxx>
#include <Replay/replay.hxx>
#include <Scenery/scenery.hxx>
#include <Time/sunpos.hxx>
#include <Time/sunsolver.hxx>
#include <Time/tmp.hxx>
+#include <Traffic/TrafficMgr.hxx>
#ifdef FG_MPLAYER_AS
#include <MultiPlayer/multiplaytxmgr.hxx>
class Sound;
extern const char *default_root;
-extern string_list waypoints;
+
#ifdef FG_USE_CLOUDS_3D
SkySceneLoader *sgCloud3d;
// Set current_options lon/lat given an airport id and heading (degrees)
static bool fgSetPosFromNAV( const string& id, const double& freq ) {
- FGNav *nav = current_navlist->findByIdentAndFreq( id.c_str(), freq );
+ FGNavRecord *nav
+ = globals->get_navlist()->findByIdentAndFreq( id.c_str(), freq );
// set initial position from runway and heading
if ( nav != NULL ) {
FGFix fix;
// set initial position from runway and heading
- if ( current_fixlist->query( id.c_str(), &fix ) ) {
+ if ( globals->get_fixlist()->query( id.c_str(), &fix ) ) {
SG_LOG( SG_GENERAL, SG_INFO, "Attempting to set starting position for "
<< id );
}
}
-static bool parseWaypoints()
- {
- vector<string>::iterator i;
- for (i = waypoints.begin();
- i != waypoints.end();
- i++)
- {
- NewWaypoint(*i);
- // string arg = *i;
-// string id, alt_str;
-// double alt = 0.0;
-
-// string::size_type pos = arg.find( "@" );
-// if ( pos != string::npos ) {
-// id = arg.substr( 0, pos );
-// alt_str = arg.substr( pos + 1 );
-// cout << "id str = " << id << " alt str = " << alt_str << endl;
-// alt = atof( alt_str.c_str() );
-// if ( !strcmp(fgGetString("/sim/startup/units"), "feet") ) {
-// alt *= SG_FEET_TO_METER;
-// }
-// } else {
-// id = arg;
-// }
-
-// FGAirport a;
-// if ( fgFindAirportID( id, &a ) ) {
-// FGRouteMgr *rm = (FGRouteMgr *)globals->get_subsystem("route-manager");
-// SGWayPoint wp( a.longitude, a.latitude, alt, SGWayPoint::WGS84, id );
-// rm->add_waypoint( wp );
-
-// //return true;
-// } else {
-// return false;
-// }
-// }
-// // waypoints.begin() = waypoints.erase(waypoints.begin());
-// return true;
- }
- }
+static void parseWaypoints() {
+ string_list *waypoints = globals->get_initial_waypoints();
+ if (waypoints) {
+ vector<string>::iterator i;
+ for (i = waypoints->begin();
+ i != waypoints->end();
+ i++)
+ {
+ NewWaypoint(*i);
+ }
+ // Now were done using the way points we can deallocate the
+ // memory they used
+ while (waypoints->begin() != waypoints->end()) {
+ waypoints->pop_back();
+ }
+ delete waypoints;
+ globals->set_initial_waypoints(0);
+ }
+}
FGRunwayList *runways = new FGRunwayList( p_runway.str() );
globals->set_runways( runways );
- SG_LOG(SG_GENERAL, SG_INFO, "Loading Navaids");
+ FGNavList *navlist = new FGNavList;
+ FGNavList *loclist = new FGNavList;
+ FGNavList *gslist = new FGNavList;
+ FGNavList *dmelist = new FGNavList;
+ FGNavList *mkrlist = new FGNavList;
- SG_LOG(SG_GENERAL, SG_INFO, " VOR/NDB");
- current_navlist = new FGNavList;
- SGPath p_nav( globals->get_fg_root() );
- p_nav.append( "Navaids/default.nav" );
- current_navlist->init( p_nav );
+ globals->set_navlist( navlist );
+ globals->set_loclist( loclist );
+ globals->set_gslist( gslist );
+ globals->set_dmelist( dmelist );
+ globals->set_mkrlist( mkrlist );
- SG_LOG(SG_GENERAL, SG_INFO, " ILS and Marker Beacons");
- current_beacons = new FGMarkerBeacons;
- current_beacons->init();
- current_ilslist = new FGILSList;
- SGPath p_ils( globals->get_fg_root() );
- p_ils.append( "Navaids/default.ils" );
- current_ilslist->init( p_ils );
+ if ( !fgNavDBInit(airports, navlist, loclist, gslist, dmelist, mkrlist) ) {
+ SG_LOG( SG_GENERAL, SG_ALERT,
+ "Problems loading one or more navigational database" );
+ }
+
+ if ( fgGetBool("/sim/navdb/localizers/auto-align", true) ) {
+ // align all the localizers with their corresponding runways
+ // since data sources are good for cockpit navigation
+ // purposes, but not always to the error tolerances needed to
+ // exactly place these items.
+ double threshold
+ = fgGetDouble( "/sim/navdb/localizers/auto-align-threshold-deg",
+ 5.0 );
+ fgNavDBAlignLOCwithRunway( runways, loclist, threshold );
+ }
SG_LOG(SG_GENERAL, SG_INFO, " Fixes");
- current_fixlist = new FGFixList;
SGPath p_fix( globals->get_fg_root() );
- p_fix.append( "Navaids/default.fix" );
- current_fixlist->init( p_fix );
+ p_fix.append( "Navaids/fix.dat" );
+ FGFixList *fixlist = new FGFixList;
+ fixlist->init( p_fix );
+ globals->set_fixlist( fixlist );
return true;
}
cur_fdm_state = new FGLaRCsim( dt );
} else if ( model == "jsb" ) {
cur_fdm_state = new FGJSBsim( dt );
+#ifdef ENABLE_SP_FMDS
} else if ( model == "ada" ) {
cur_fdm_state = new FGADA( dt );
+ } else if ( model == "acms" ) {
+ cur_fdm_state = new FGACMS( dt );
+#endif
} else if ( model == "balloon" ) {
cur_fdm_state = new FGBalloonSim( dt );
} else if ( model == "magic" ) {
globals->add_subsystem("lighting", new FGLight);
+ //////////////////////////////////////////////////////////////////////
+ // Initialize the 2D cloud subsystem.
+ ////////////////////////////////////////////////////////////////////
+ fgGetBool("/sim/rendering/bump-mapping", false);
#ifdef FG_USE_CLOUDS_3D
////////////////////////////////////////////////////////////////////
}
#endif
+#ifdef ENABLE_AUDIO_SUPPORT
+ ////////////////////////////////////////////////////////////////////
+ // Initialize the sound subsystem.
+ ////////////////////////////////////////////////////////////////////
+
+ globals->set_soundmgr(new SGSoundMgr);
+ globals->get_soundmgr()->init();
+ globals->get_soundmgr()->bind();
+
+
+ ////////////////////////////////////////////////////////////////////
+ // Initialize the sound-effects subsystem.
+ ////////////////////////////////////////////////////////////////////
+
+ globals->add_subsystem("fx", new FGFX);
+
+#endif
+
////////////////////////////////////////////////////////////////////
// Initialise ATC display system
////////////////////////////////////////////////////////////////////
globals->set_AI_mgr(new FGAIMgr);
globals->get_AI_mgr()->init();
-
////////////////////////////////////////////////////////////////////
// Initialise the AI Model Manager
////////////////////////////////////////////////////////////////////
-
SG_LOG(SG_GENERAL, SG_INFO, " AI Model Manager");
globals->add_subsystem("ai_model", new FGAIManager);
-#ifdef ENABLE_AUDIO_SUPPORT
- ////////////////////////////////////////////////////////////////////
- // Initialize the sound subsystem.
- ////////////////////////////////////////////////////////////////////
+ // It's probably a good idea to initialize the top level traffic manager
+ // After the AI and ATC systems have been initialized properly.
+ // AI Traffic manager
+ globals->add_subsystem("Traffic Manager", new FGTrafficManager);
+ FGTrafficManager *dispatcher =
+ (FGTrafficManager*) globals->get_subsystem("Traffic Manager");
- globals->set_soundmgr(new SGSoundMgr);
- globals->get_soundmgr()->init();
- globals->get_soundmgr()->bind();
-
-
- ////////////////////////////////////////////////////////////////////
- // Initialize the sound-effects subsystem.
- ////////////////////////////////////////////////////////////////////
-
- globals->add_subsystem("fx", new FGFX);
-
-#endif
+ readXML(string(globals->get_fg_root() + string("/Traffic/fgtraffic.xml")),
+ *dispatcher);
+ globals->get_subsystem("Traffic Manager")->init();
globals->add_subsystem("instrumentation", new FGInstrumentMgr);
globals->add_subsystem("systems", new FGSystemMgr);
+
+
////////////////////////////////////////////////////////////////////
// Initialize the radio stack subsystem.
////////////////////////////////////////////////////////////////////
-
current_radiostack = new FGRadioStack;
current_radiostack->init();
current_radiostack->bind();
////////////////////////////////////////////////////////////////////
// Initialize the cockpit subsystem
////////////////////////////////////////////////////////////////////
-
if( fgCockpitInit( ¤t_aircraft )) {
// Cockpit initialized ok.
} else {
fgSetBool("/sim/freeze/master", true);
}
fgSetBool("/sim/crashed", false);
+ fgSetBool("/sim/initialised", false);
// Initialize the FDM
fgInitFDM();
if ( !freeze ) {
fgSetBool("/sim/freeze/master", false);
}
+ fgSetBool("/sim/initialised", true);
+ fgSetBool("/sim/sceneryloaded",false);
}