#include <Input/input.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>
#if defined(HAVE_PLIB_PSL)
#include <Scripting/scriptmgr.hxx>
#endif
+#include <Scripting/NasalSys.hxx>
#include <Sound/fg_fx.hxx>
#include <Systems/system_mgr.hxx>
#include <Time/light.hxx>
static void fgSetDistOrAltFromGlideSlope() {
+ // cout << "fgSetDistOrAltFromGlideSlope()" << endl;
string apt_id = fgGetString("/sim/presets/airport-id");
double gs = fgGetDouble("/sim/presets/glideslope-deg")
* SG_DEGREES_TO_RADIANS ;
// Set the initial position based on presets (or defaults)
bool fgInitPosition() {
+ // cout << "fgInitPosition()" << endl;
+ double gs = fgGetDouble("/sim/presets/glideslope-deg")
+ * SG_DEGREES_TO_RADIANS ;
+ double od = fgGetDouble("/sim/presets/offset-distance");
+ double alt = fgGetDouble("/sim/presets/altitude-ft");
+
bool set_pos = false;
// If glideslope is specified, then calculate offset-distance or
// altitude relative to glide slope if either of those was not
// specified.
- if ( fgGetDouble("/sim/presets/glideslope-deg") > 0.1 ) {
+ if ( fabs( gs ) > 0.01 ) {
fgSetDistOrAltFromGlideSlope();
}
fgSetDouble( "/orientation/heading-deg",
fgGetDouble("/sim/presets/heading-deg") );
+ // determine if this should be an on-ground or in-air start
+ if ( fabs(gs) > 0.01 || fabs(od) > 0.1 || alt > 0.1 ) {
+ fgSetBool("/sim/presets/onground", false);
+ } else {
+ fgSetBool("/sim/presets/onground", true);
+ }
+
return true;
}
// Initialize the event manager subsystem.
////////////////////////////////////////////////////////////////////
- globals->get_event_mgr()->bind();
globals->get_event_mgr()->init();
-
- // Output event stats every 60 seconds
- globals->get_event_mgr()->add( "SGEventMgr::print_stats()",
- globals->get_event_mgr(),
- &SGEventMgr::print_stats,
- 60000 );
+ globals->get_event_mgr()->setFreezeProperty(fgGetNode("/sim/freeze/clock"));
////////////////////////////////////////////////////////////////////
// Initialize the material property subsystem.
}
// cause refresh of viewer scenery timestamps every 15 seconds...
- globals->get_event_mgr()->add( "FGTileMgr::refresh_view_timestamps()",
- globals->get_tile_mgr(),
- &FGTileMgr::refresh_view_timestamps,
- 15000 );
+ globals->get_event_mgr()->addTask( "FGTileMgr::refresh_view_timestamps()",
+ globals->get_tile_mgr(),
+ &FGTileMgr::refresh_view_timestamps,
+ 15 );
SG_LOG( SG_GENERAL, SG_DEBUG,
"Current terrain elevation after tile mgr init " <<
////////////////////////////////////////////////////////////////////
// update the current timezone each 30 minutes
- globals->get_event_mgr()->add( "fgUpdateLocalTime()",
- &fgUpdateLocalTime, 30*60*1000 );
+ globals->get_event_mgr()->addTask( "fgUpdateLocalTime()",
+ &fgUpdateLocalTime, 30*60 );
////////////////////////////////////////////////////////////////////
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->get_multiplayer_rx_mgr()->init();
#endif
+ ////////////////////////////////////////////////////////////////////////
+ // Initialize the Nasal interpreter.
+ // Do this last, so that the loaded scripts see initialized state
+ ////////////////////////////////////////////////////////////////////////
+ FGNasalSys* nasal = new FGNasalSys();
+ globals->add_subsystem("nasal", nasal);
+ nasal->init();
+
////////////////////////////////////////////////////////////////////////
// End of subsystem initialization.
////////////////////////////////////////////////////////////////////