#include <Airports/runways.hxx>
#include <Airports/airport.hxx>
#include <Airports/dynamics.hxx>
+#include <Airports/airportdynamicsmanager.hxx>
#include <AIModel/AIManager.hxx>
#include <Network/fgcom.hxx>
#include <Network/http/httpd.hxx>
#include <Include/version.h>
-
+#include <Viewer/splash.hxx>
#include <Viewer/CameraGroup.hxx>
#include "fg_init.hxx"
exportDir.create(0755);
}
- // Set /sim/fg-home and don't allow malign code to override it until
- // Nasal security is set up. Use FG_HOME if necessary.
+ // Set /sim/fg-home. Use FG_HOME if necessary.
+ // deliberately not a tied property, for fgValidatePath security
+ // write-protect to avoid accidents
SGPropertyNode *home = fgGetNode("/sim", true);
home->removeChild("fg-home", 0);
home = home->getChild("fg-home", 0, true);
static void initAircraftDirsNasalSecurity()
{
+ // deliberately not a tied property, for fgValidatePath security
+ // write-protect to avoid accidents
SGPropertyNode* sim = fgGetNode("/sim", true);
sim->removeChildren("fg-aircraft");
size_t lastDot = aircraftId.rfind('.');
if (lastDot != std::string::npos) {
aircraftId = aircraftId.substr(lastDot + 1);
- aircraftProp->setStringValue(aircraftId);
-
}
+ aircraftProp->setStringValue(aircraftId);
+
// run the traditional-code path below
} else {
#if 0
return flightgear::FG_OPTIONS_ERROR;
#endif
+ // fall back the default aircraft instead
}
}
doingRebuild = cache->isRebuildRequired();
}
+ static const char* splashIdentsByRebuildPhase[] = {
+ "loading-nav-dat",
+ "navdata-airports",
+ "navdata-navaids",
+ "navdata-fixes",
+ "navdata-pois"
+ };
+
if (doingRebuild) {
- bool finished = cache->rebuild();
- if (!finished) {
+ flightgear::NavDataCache::RebuildPhase phase;
+ phase = cache->rebuild();
+ if (phase != flightgear::NavDataCache::REBUILD_DONE) {
+ // update the splash text based on percentage, phase
+
+ fgSplashProgress(splashIdentsByRebuildPhase[phase],
+ cache->rebuildPhaseCompletionPercentage());
+
// sleep to give the rebuild thread more time
SGTimeStamp::sleepForMSec(50);
return false;
}
}
- // depend on when the NavCache was initialised, scenery paths may not
- // have been setup. This is a safe place to consistently check the value,
- // and drop the ground-nets if something has changed
- cache->dropGroundnetsIfRequired();
-
FGTACANList *channellist = new FGTACANList;
globals->set_channellist( channellist );
SG_LOG( SG_GENERAL, SG_INFO, "aircraft-dir = " << '"' << fgGetString("/sim/aircraft-dir") << '"' );
SG_LOG( SG_GENERAL, SG_INFO, "fghome-dir = " << '"' << globals->get_fg_home() << '"');
- SG_LOG( SG_GENERAL, SG_INFO, "aircraft-dir = " << '"' << fgGetString("/sim/aircraft-dir") << '"');
-
+ SG_LOG( SG_GENERAL, SG_INFO, "download-dir = " << '"' << fgGetString("/sim/paths/download-dir") << '"' );
+ SG_LOG( SG_GENERAL, SG_INFO, "terrasync-dir = " << '"' << fgGetString("/sim/terrasync/scenery-dir") << '"' );
+
SG_LOG( SG_GENERAL, SG_INFO, "aircraft-search-paths = \n\t" << simgear::strutils::join(globals->get_aircraft_paths(), "\n\t") );
SG_LOG( SG_GENERAL, SG_INFO, "scenery-search-paths = \n\t" << simgear::strutils::join(globals->get_fg_scenery(), "\n\t") );
}
// to be updated in every loop.
// Sound manager is updated last so it can use the CPU while the GPU
// is processing the scenery (doubled the frame-rate for me) -EMH-
- globals->add_subsystem("sound", new FGSoundManager, SGSubsystemMgr::SOUND);
+ globals->add_new_subsystem<FGSoundManager>(SGSubsystemMgr::SOUND);
////////////////////////////////////////////////////////////////////
// Initialize the event manager subsystem.
globals->add_subsystem("properties", new FGProperties);
+ ////////////////////////////////////////////////////////////////////
+ // Add the FlightGear property utilities.
+ ////////////////////////////////////////////////////////////////////
+ globals->add_new_subsystem<flightgear::AirportDynamicsManager>();
+
////////////////////////////////////////////////////////////////////
// Add the performance monitoring system.
////////////////////////////////////////////////////////////////////
globals->add_subsystem( "xml-autopilot", FGXMLAutopilotGroup::createInstance("autopilot"), SGSubsystemMgr::FDM );
globals->add_subsystem( "xml-proprules", FGXMLAutopilotGroup::createInstance("property-rule"), SGSubsystemMgr::GENERAL );
- globals->add_subsystem( "route-manager", new FGRouteMgr );
+ globals->add_new_subsystem<FGRouteMgr>();
////////////////////////////////////////////////////////////////////
// Initialize the Input-Output subsystem
// Initialize the controls subsystem.
////////////////////////////////////////////////////////////////////
- globals->add_subsystem("controls", new FGControls, SGSubsystemMgr::GENERAL);
+ globals->add_new_subsystem<FGControls>(SGSubsystemMgr::GENERAL);
////////////////////////////////////////////////////////////////////
// Initialize the input subsystem.
globals->add_subsystem("aircraft-model", new FGAircraftModel, SGSubsystemMgr::DISPLAY);
globals->add_subsystem("model-manager", new FGModelMgr, SGSubsystemMgr::DISPLAY);
- globals->add_subsystem("view-manager", new FGViewMgr, SGSubsystemMgr::DISPLAY);
-
- globals->add_subsystem("tile-manager", globals->get_tile_mgr(),
- SGSubsystemMgr::DISPLAY);
+ globals->add_new_subsystem<FGViewMgr>(SGSubsystemMgr::DISPLAY);
}
void fgPostInitSubsystems()
string_list::const_iterator it;
for (it = names.begin(); it != names.end(); ++it) {
if ((*it == "time") || (*it == "terrasync") || (*it == "events")
- || (*it == "lighting"))
+ || (*it == "lighting") || (*it == FGTileMgr::subsystemName()) || (*it == FGScenery::subsystemName()))
{
continue;
}
// order is important here since tile-manager shutdown needs to
// access the scenery object
- globals->set_tile_mgr(NULL);
- globals->set_scenery(NULL);
+ subsystemManger->remove(FGTileMgr::subsystemName());
+ subsystemManger->remove(FGScenery::subsystemName());
+
FGScenery::getPagerSingleton()->clearRequests();
flightgear::CameraGroup::setDefault(NULL);
return;
}
- // there is some debate if we should be using FG_HOME here (hidden
- // location) vs a user-visible location inside Documents (especially on
- // Windows and Mac). Really this location should be managed by FG, not
- // the user, but it can potentially grow large.
- SGPath packageAircraftDir = globals->get_fg_home();
+ SGPath packageAircraftDir = flightgear::defaultDownloadDir();
packageAircraftDir.append("Aircraft");
SGSharedPtr<Root> pkgRoot(new Root(packageAircraftDir, FLIGHTGEAR_VERSION));