#endif
#include <simgear/compiler.h>
-#include <simgear/misc/exception.hxx>
#include STL_STRING
#include <simgear/constants.h>
#include <simgear/debug/logstream.hxx>
+#include <simgear/structure/exception.hxx>
+#include <simgear/structure/event_mgr.hxx>
#include <simgear/math/point3d.hxx>
#include <simgear/math/polar3d.hxx>
#include <simgear/math/sg_geodesy.hxx>
#endif
#include <Sound/fg_fx.hxx>
#include <Systems/system_mgr.hxx>
-#include <Time/FGEventMgr.hxx>
#include <Time/light.hxx>
#include <Time/moonpos.hxx>
#include <Time/sunpos.hxx>
root = "/FlightGear";
#elif defined( WIN32 )
root = "\\FlightGear";
-#elif defined( macintosh )
- root = "";
+#elif defined(OSX_BUNDLE)
+ /* the following code looks for the base package directly inside
+ the application bundle. This can be changed fairly easily by
+ fiddling with the code below. And yes, I know it's ugly and verbose.
+ */
+ CFBundleRef appBundle = CFBundleGetMainBundle();
+ CFURLRef appUrl = CFBundleCopyBundleURL(appBundle);
+ CFRelease(appBundle);
+
+ // look for a 'data' subdir directly inside the bundle : is there
+ // a better place? maybe in Resources? I don't know ...
+ CFURLRef dataDir = CFURLCreateCopyAppendingPathComponent(NULL, appUrl, CFSTR("data"), true);
+
+ // now convert down to a path, and the a c-string
+ CFStringRef path = CFURLCopyFileSystemPath(dataDir, kCFURLPOSIXPathStyle);
+ root = CFStringGetCStringPtr(path, CFStringGetSystemEncoding());
+
+ // tidy up.
+ CFRelease(appBundle);
+ CFRelease(dataDir);
+ CFRelease(path);
#else
root = PKGLIBDIR;
#endif
SG_LOG( SG_GENERAL, SG_INFO, "After fgInitTimeOffset(): warp = "
<< globals->get_warp() );
-
- fgUpdateSkyAndLightingParams();
}
// This is the top level init routine which calls all the other
// static const SGPropertyNode *altitude
// = fgGetNode("/sim/presets/altitude-ft");
- fgLIGHT *l = &cur_light_params;
+ FGLight *l = (FGLight *)(globals->get_subsystem("lighting"));
SG_LOG( SG_GENERAL, SG_INFO, "Initialize Subsystems");
SG_LOG( SG_GENERAL, SG_INFO, "========== ==========");
+ ////////////////////////////////////////////////////////////////////
+ // 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 );
////////////////////////////////////////////////////////////////////
// Initialize the material property subsystem.
exit(-1);
}
- ////////////////////////////////////////////////////////////////////
- // Initialize the event manager subsystem.
- ////////////////////////////////////////////////////////////////////
-
- global_events.init();
-
- // Output event stats every 60 seconds
- global_events.Register( "FGEventMgr::print_stats()",
- &global_events, &FGEventMgr::print_stats,
- 60000 );
-
////////////////////////////////////////////////////////////////////
// Initialize the scenery management subsystem.
}
// cause refresh of viewer scenery timestamps every 15 seconds...
- global_events.Register( "FGTileMgr::refresh_view_timestamps()",
- globals->get_tile_mgr(),
- &FGTileMgr::refresh_view_timestamps,
- 15000 );
+ globals->get_event_mgr()->add( "FGTileMgr::refresh_view_timestamps()",
+ globals->get_tile_mgr(),
+ &FGTileMgr::refresh_view_timestamps,
+ 15000 );
SG_LOG( SG_GENERAL, SG_DEBUG,
"Current terrain elevation after tile mgr init " <<
fgInitView();
- ////////////////////////////////////////////////////////////////////
- // Initialize the lighting subsystem.
- ////////////////////////////////////////////////////////////////////
-
- // fgUpdateSunPos() needs a few position and view parameters set
- // so it can calculate local relative sun angle and a few other
- // things for correctly orienting the sky.
- fgUpdateSunPos();
- fgUpdateMoonPos();
- global_events.Register( "fgUpdateSunPos()", &fgUpdateSunPos,
- 60000);
- global_events.Register( "fgUpdateMoonPos()", &fgUpdateMoonPos,
- 60000);
-
- // Initialize Lighting interpolation tables
- l->Init();
-
- // force one lighting update to make it right to start with...
- l->Update();
- // update the lighting parameters (based on sun angle)
- global_events.Register( "fgLight::Update()",
- &cur_light_params, &fgLIGHT::Update,
- 30000 );
-
-
////////////////////////////////////////////////////////////////////
// Create and register the logger.
////////////////////////////////////////////////////////////////////
// Create and register the XML GUI.
////////////////////////////////////////////////////////////////////
- globals->add_subsystem("gui", new NewGUI, FGSubsystemMgr::INIT);
+ globals->add_subsystem("gui", new NewGUI, SGSubsystemMgr::INIT);
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
// update the current timezone each 30 minutes
- global_events.Register( "fgUpdateLocalTime()", &fgUpdateLocalTime,
- 30*60*1000 );
+ globals->get_event_mgr()->add( "fgUpdateLocalTime()",
+ &fgUpdateLocalTime, 30*60*1000 );
////////////////////////////////////////////////////////////////////
WeatherDatabase = FGLocalWeatherDatabase::theFGLocalWeatherDatabase;
// register the periodic update of the weather
- global_events.Register( "weather update", &fgUpdateWeatherDatabase,
- 30000);
+ globals->get_event_mgr()->add( "weather update",
+ &fgUpdateWeatherDatabase, 30000);
#else
globals->add_subsystem("environment", new FGEnvironmentMgr);
#endif
+
+ ////////////////////////////////////////////////////////////////////
+ // Initialize the lighting subsystem.
+ ////////////////////////////////////////////////////////////////////
+
+ globals->add_subsystem("lighting", new FGLight);
+
+
#ifdef FG_USE_CLOUDS_3D
////////////////////////////////////////////////////////////////////
// Initialize the 3D cloud subsystem.
globals->get_subsystem_mgr()->bind();
globals->get_subsystem_mgr()->init();
-
#ifdef FG_MPLAYER_AS
////////////////////////////////////////////////////////////////////
// Initialize multiplayer subsystem
globals->get_controls()->reset_all();
globals->get_autopilot()->reset();
- fgUpdateSunPos();
- fgUpdateMoonPos();
- cur_light_params.Update();
fgUpdateLocalTime();
+ // re-init to proper time of day setting
+ fgInitTimeOffset();
+
if ( !freeze ) {
fgSetBool("/sim/freeze/master", false);
}