#include <simgear/structure/event_mgr.hxx>
#include <simgear/sound/soundmgr_openal.hxx>
#include <simgear/misc/ResourceManager.hxx>
+#include <simgear/props/propertyObject.hxx>
#include <Aircraft/controls.hxx>
#include <Airports/runways.hxx>
#include <Model/acmodel.hxx>
#include <Model/modelmgr.hxx>
#include <MultiPlayer/multiplaymgr.hxx>
-#include <Navaids/awynet.hxx>
#include <Scenery/scenery.hxx>
#include <Scenery/tilemgr.hxx>
#include <Navaids/navlist.hxx>
#include "fg_props.hxx"
#include "fg_io.hxx"
-\fclass AircraftResourceProvider : public simgear::ResourceProvider
+class AircraftResourceProvider : public simgear::ResourceProvider
{
public:
AircraftResourceProvider() :
// test against the aircraft-dir property
const char* aircraftDir = fgGetString("/sim/aircraft-dir");
string_list aircraftDirPieces(sgPathBranchSplit(aircraftDir));
- if (aircraftDirPieces.empty() || (aircraftDirPieces.back() != pieces[1])) {
- return SGPath(); // current aircraft-dir does not match resource aircraft
- }
-
- SGPath r(aircraftDir);
- for (unsigned int i=2; i<pieces.size(); ++i) {
- r.append(pieces[i]);
- }
-
- if (r.exists()) {
- SG_LOG(SG_IO, SG_INFO, "found path:" << aResource << " via /sim/aircraft-dir: " << r.str());
- return r;
+ if (!aircraftDirPieces.empty() && (aircraftDirPieces.back() == pieces[1])) {
+ // current aircraft-dir matches resource aircraft
+ SGPath r(aircraftDir);
+ for (unsigned int i=2; i<pieces.size(); ++i) {
+ r.append(pieces[i]);
+ }
+
+ if (r.exists()) {
+ SG_LOG(SG_IO, SG_INFO, "found path:" << aResource << " via /sim/aircraft-dir: " << r.str());
+ return r;
+ }
}
- // try each aircaft dir in turn
+ // try each aircraft dir in turn
std::string res(aResource, 9); // resource path with 'Aircraft/' removed
const string_list& dirs(globals->get_aircraft_paths());
string_list::const_iterator it = dirs.begin();
for (; it != dirs.end(); ++it) {
SGPath p(*it, res);
if (p.exists()) {
- SG_LOG(SG_IO, SG_INFO, "found path:" << aResource << " in aircraft dir: " << r.str());
+ SG_LOG(SG_IO, SG_INFO, "found path:" << aResource << " in aircraft dir: " << *it);
return p;
}
} // of aircraft path iteration
soundmgr( new SGSoundMgr ),
sim_time_sec( 0.0 ),
fg_root( "" ),
- warp( 0 ),
- warp_delta( 0 ),
time_params( NULL ),
ephem( NULL ),
mag( NULL ),
dmelist( NULL ),
tacanlist( NULL ),
carrierlist( NULL ),
- channellist( NULL ),
- airwaynet( NULL ),
- multiplayer_mgr( NULL )
+ channellist( NULL )
{
simgear::ResourceManager::instance()->addProvider(new AircraftResourceProvider());
+ simgear::PropertyObjectBase::setDefaultRoot(props);
}
FGGlobals::~FGGlobals()
{
delete renderer;
+ renderer = NULL;
+
// The AIModels manager performs a number of actions upon
// Shutdown that implicitly assume that other subsystems
// are still operational (Due to the dynamic allocation and
// deallocation of AIModel objects. To ensure we can safely
// shut down all subsystems, make sure we take down the
// AIModels system first.
- subsystem_mgr->get_group(SGSubsystemMgr::GENERAL)->remove_subsystem("ai_model");
- // FGInput (FGInputEvent) and FGDialog calls get_subsystem() in their destructors,
- // which is not safe since some subsystem are already deleted but can be referred.
- // So these subsystems must be deleted prior to deleting subsystem_mgr unless
- // ~SGSubsystemGroup and SGSubsystemMgr::get_subsystem are changed not to refer to
- // deleted subsystems.
- subsystem_mgr->get_group(SGSubsystemMgr::GENERAL)->remove_subsystem("input");
- subsystem_mgr->get_group(SGSubsystemMgr::GENERAL)->remove_subsystem("gui");
+ SGSubsystem* ai = subsystem_mgr->remove("ai_model");
+ if (ai) {
+ ai->unbind();
+ delete ai;
+ }
+
+ subsystem_mgr->shutdown();
subsystem_mgr->unbind();
delete subsystem_mgr;
- delete event_mgr;
+
delete time_params;
delete mag;
delete matlib;
delete ATC_mgr;
delete controls;
- delete viewmgr;
-// delete commands;
- delete acmodel;
- delete model_mgr;
delete channel_options_list;
delete initial_waypoints;
- delete tile_mgr;
delete scenery;
delete fontcache;
delete tacanlist;
delete carrierlist;
delete channellist;
- delete airwaynet;
- delete multiplayer_mgr;
soundmgr->unbind();
delete soundmgr;
return viewmgr->get_current_view();
}
+long int FGGlobals::get_warp() const
+{
+ return fgGetInt("/sim/time/warp");
+}
+
+void FGGlobals::set_warp( long int w )
+{
+ fgSetInt("/sim/time/warp", w);
+}
+
+long int FGGlobals::get_warp_delta() const
+{
+ return fgGetInt("/sim/time/warp-delta");
+}
+
+void FGGlobals::set_warp_delta( long int d )
+{
+ fgSetInt("/sim/time/warp-delta", d);
+}
+
// end of globals.cxx