X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Fglobals.cxx;h=683339dcf03d480056b1e0b46b0efda030247cf6;hb=379e7a2fd56efc65887b55e419723903447d462d;hp=bbe5dc9fdcfb7e253a947438c3c2ba37626cc9a0;hpb=90ce4ec93d361fce1d8b504366771b1cfc1bcc3e;p=flightgear.git diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx index bbe5dc9fd..683339dcf 100644 --- a/src/Main/globals.cxx +++ b/src/Main/globals.cxx @@ -32,7 +32,6 @@ #include #include #include -#include #include #include #include @@ -40,25 +39,22 @@ #include #include #include -#include #include #include -#include +#include #include -#include #include #include -#include -#include #include #include #include #include +#include +#include #include "globals.hxx" -#include "renderer.hxx" -#include "viewmgr.hxx" +#include "locale.hxx" #include "fg_props.hxx" #include "fg_io.hxx" @@ -122,40 +118,43 @@ FGGlobals *globals; FGGlobals::FGGlobals() : props( new SGPropertyNode ), initial_state( NULL ), - locale( NULL ), + locale( new FGLocale(props) ), renderer( new FGRenderer ), subsystem_mgr( new SGSubsystemMgr ), event_mgr( new SGEventMgr ), sim_time_sec( 0.0 ), fg_root( "" ), + fg_home( "" ), time_params( NULL ), ephem( NULL ), - mag( NULL ), matlib( NULL ), route_mgr( NULL ), - current_panel( NULL ), - ATC_mgr( NULL ), + ATIS_mgr( NULL ), controls( NULL ), viewmgr( NULL ), commands( SGCommandMgr::instance() ), - acmodel( NULL ), - model_mgr( NULL ), channel_options_list( NULL ), initial_waypoints( NULL ), scenery( NULL ), tile_mgr( NULL ), fontcache ( new FGFontCache ), - navlist( NULL ), - loclist( NULL ), - gslist( NULL ), - dmelist( NULL ), - tacanlist( NULL ), - carrierlist( NULL ), channellist( NULL ), haveUserSettings(false) { simgear::ResourceManager::instance()->addProvider(new AircraftResourceProvider()); simgear::PropertyObjectBase::setDefaultRoot(props); + + positionLon = props->getNode("position/longitude-deg", true); + positionLat = props->getNode("position/latitude-deg", true); + positionAlt = props->getNode("position/altitude-ft", true); + + viewLon = props->getNode("sim/current-view/viewer-lon-deg", true); + viewLat = props->getNode("sim/current-view/viewer-lat-deg", true); + viewAlt = props->getNode("sim/current-view/viewer-elev-ft", true); + + orientPitch = props->getNode("orientation/pitch-deg", true); + orientHeading = props->getNode("orientation/heading-deg", true); + orientRoll = props->getNode("orientation/roll-deg", true); } // Destructor @@ -185,34 +184,22 @@ FGGlobals::~FGGlobals() renderer = NULL; delete time_params; - delete mag; delete matlib; delete route_mgr; - delete current_panel; - delete ATC_mgr; - - if (controls) - { - controls->unbind(); - delete controls; - } + delete ATIS_mgr; delete channel_options_list; delete initial_waypoints; delete scenery; delete fontcache; - delete navlist; - delete loclist; - delete gslist; - delete dmelist; - delete tacanlist; - delete carrierlist; delete channellist; delete sound; -} + delete locale; + locale = NULL; +} // set the fg_root path void FGGlobals::set_fg_root (const string &root) { @@ -241,6 +228,12 @@ void FGGlobals::set_fg_root (const string &root) { simgear::ResourceManager::PRIORITY_DEFAULT); } +// set the fg_home path +void FGGlobals::set_fg_home (const string &home) { + SGPath tmp(home); + fg_home = tmp.realpath(); +} + void FGGlobals::append_fg_scenery (const string &paths) { // fg_scenery.clear(); @@ -334,6 +327,12 @@ SGPath FGGlobals::resolve_maybe_aircraft_path(const std::string& branch) const return simgear::ResourceManager::instance()->findPath(branch); } +SGPath FGGlobals::resolve_resource_path(const std::string& branch) const +{ + return simgear::ResourceManager::instance() + ->findPath(branch, SGPath(fgGetString("/sim/aircraft-dir"))); +} + FGRenderer * FGGlobals::get_renderer () const { @@ -376,23 +375,40 @@ FGGlobals::get_event_mgr () const return event_mgr; } -const SGGeod & +SGGeod FGGlobals::get_aircraft_position() const { - if( acmodel != NULL ) { - SGModelPlacement * mp = acmodel->get3DModel(); - if( mp != NULL ) - return mp->getPosition(); - } - throw sg_exception("Can't get aircraft position", "FGGlobals::get_aircraft_position()" ); + return SGGeod::fromDegFt(positionLon->getDoubleValue(), + positionLat->getDoubleValue(), + positionAlt->getDoubleValue()); } SGVec3d -FGGlobals::get_aircraft_positon_cart() const +FGGlobals::get_aircraft_position_cart() const { return SGVec3d::fromGeod(get_aircraft_position()); } +void FGGlobals::get_aircraft_orientation(double& heading, double& pitch, double& roll) +{ + heading = orientHeading->getDoubleValue(); + pitch = orientPitch->getDoubleValue(); + roll = orientRoll->getDoubleValue(); +} + +SGGeod +FGGlobals::get_view_position() const +{ + return SGGeod::fromDegFt(viewLon->getDoubleValue(), + viewLat->getDoubleValue(), + viewAlt->getDoubleValue()); +} + +SGVec3d +FGGlobals::get_view_position_cart() const +{ + return SGVec3d::fromGeod(get_view_position()); +} // Save the current state as the initial state. void @@ -476,7 +492,7 @@ FGGlobals::saveUserSettings() // don't save settings more than once on shutdown haveUserSettings = false; - SGPath autosaveFile(fgGetString("/sim/fg-home")); + SGPath autosaveFile(globals->get_fg_home()); autosaveFile.append( "autosave.xml" ); autosaveFile.create_dir( 0700 ); SG_LOG(SG_IO, SG_INFO, "Saving user settings to " << autosaveFile.str()); @@ -514,5 +530,5 @@ void FGGlobals::set_warp_delta( long int d ) { fgSetInt("/sim/time/warp-delta", d); } - + // end of globals.cxx