#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>
extern const char *default_root;
+
#ifdef FG_USE_CLOUDS_3D
SkySceneLoader *sgCloud3d;
#endif
fgSetDouble("/sim/presets/glideslope-deg", 0);
fgSetBool("/sim/presets/onground", true);
}
-}
+}
// 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 );
return false;
}
}
+
+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( "xml-autopilot", new FGXMLAutopilot );
globals->add_subsystem( "route-manager", new FGRouteMgr );
+
////////////////////////////////////////////////////////////////////
// Initialize the view manager subsystem.
////////////////////////////////////////////////////////////////////
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.
- ////////////////////////////////////////////////////////////////////
-
- globals->set_soundmgr(new SGSoundMgr);
- globals->get_soundmgr()->init();
- globals->get_soundmgr()->bind();
+ // 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");
-
- ////////////////////////////////////////////////////////////////////
- // 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 {
globals->add_subsystem("nasal", nasal);
nasal->init();
+ ////////////////////////////////////////////////////////////////////
+ // At this point we could try and parse the waypoint options
+ ///////////////////////////////////////////////////////////////////
+ parseWaypoints();
+
+
////////////////////////////////////////////////////////////////////////
// End of subsystem initialization.
////////////////////////////////////////////////////////////////////
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);
}