#include <simgear/structure/event_mgr.hxx>
#include <Main/main.hxx>
-#include <Main/renderer.hxx>
#include <Main/fg_props.hxx>
+#include <Viewer/renderer.hxx>
#include <FDM/flight.hxx>
#include "environment.hxx"
#include "terrainsampler.hxx"
#include "Airports/simple.hxx"
#include "gravity.hxx"
+#include "magvarmanager.hxx"
class FG3DCloudsListener : public SGPropertyChangeListener {
public:
private:
FGClouds * _fgClouds;
- SGPropertyNode_ptr _shaderNode;
SGPropertyNode_ptr _enableNode;
};
FG3DCloudsListener::FG3DCloudsListener( FGClouds * fgClouds ) :
_fgClouds( fgClouds )
{
- _shaderNode = fgGetNode( "/sim/rendering/shader-effects", true );
- _shaderNode->addChangeListener( this );
-
_enableNode = fgGetNode( "/sim/rendering/clouds3d-enable", true );
_enableNode->addChangeListener( this );
FG3DCloudsListener::~FG3DCloudsListener()
{
_enableNode->removeChangeListener( this );
- _shaderNode->removeChangeListener( this );
}
void FG3DCloudsListener::valueChanged( SGPropertyNode * node )
{
- _fgClouds->set_3dClouds( _enableNode->getBoolValue() && _shaderNode->getBoolValue() );
+ _fgClouds->set_3dClouds( _enableNode->getBoolValue() );
}
FGEnvironmentMgr::FGEnvironmentMgr () :
set_subsystem("precipitation", new FGPrecipitationMgr);
set_subsystem("terrainsampler", Environment::TerrainSampler::createInstance( fgGetNode("/environment/terrain", true ) ));
set_subsystem("ridgelift", new FGRidgeLift);
+
+ set_subsystem("magvar", new FGMagVarManager);
}
FGEnvironmentMgr::~FGEnvironmentMgr ()
remove_subsystem("controller");
delete subsys;
+ subsys = get_subsystem("magvar");
+ remove_subsystem("magvar");
+ delete subsys;
+
delete fgClouds;
delete _environment;
delete _3dCloudsEnableListener;
}
-void
-FGEnvironmentMgr::init ()
+SGSubsystem::InitStatus FGEnvironmentMgr::incrementalInit()
{
- SG_LOG( SG_ENVIRONMENT, SG_INFO, "Initializing environment subsystem");
- SGSubsystemGroup::init();
- fgClouds->Init();
-
- // FIXME: is this really part of the environment_mgr?
- // Initialize the longitude, latitude and altitude to the initial position
- // of the aircraft so that the atmospheric properties (pressure, temperature
- // and density) can be initialized accordingly.
- _altitude_n->setDoubleValue(fgGetDouble("/sim/presets/altitude-ft"));
- _longitude_n->setDoubleValue(fgGetDouble("/sim/presets/longitude-deg"));
- _latitude_n->setDoubleValue(fgGetDouble("/sim/presets/latitude-deg"));
- globals->get_event_mgr()->addTask("updateClosestAirport", this,
- &FGEnvironmentMgr::updateClosestAirport, 30 );
+ InitStatus r = SGSubsystemGroup::incrementalInit();
+ if (r == INIT_DONE) {
+ fgClouds->Init();
+
+ // FIXME: is this really part of the environment_mgr?
+ // Initialize the longitude, latitude and altitude to the initial position
+ // of the aircraft so that the atmospheric properties (pressure, temperature
+ // and density) can be initialized accordingly.
+ _altitude_n->setDoubleValue(fgGetDouble("/sim/presets/altitude-ft"));
+ _longitude_n->setDoubleValue(fgGetDouble("/sim/presets/longitude-deg"));
+ _latitude_n->setDoubleValue(fgGetDouble("/sim/presets/latitude-deg"));
+
+ globals->get_event_mgr()->addTask("updateClosestAirport", this,
+ &FGEnvironmentMgr::updateClosestAirport, 30 );
+ }
+
+ return r;
}
void
&SGSky::get_3dCloudVisRange,
&SGSky::set_3dCloudVisRange);
+ _tiedProperties.Tie("clouds3d-impostor-range", _sky,
+ &SGSky::get_3dCloudImpostorDistance,
+ &SGSky::set_3dCloudImpostorDistance);
+
+ _tiedProperties.Tie("clouds3d-lod1-range", _sky,
+ &SGSky::get_3dCloudLoD1Range,
+ &SGSky::set_3dCloudLoD1Range);
+
+ _tiedProperties.Tie("clouds3d-lod2-range", _sky,
+ &SGSky::get_3dCloudLoD2Range,
+ &SGSky::set_3dCloudLoD2Range);
+
_tiedProperties.Tie("clouds3d-wrap", _sky,
&SGSky::get_3dCloudWrap,
&SGSky::set_3dCloudWrap);
+ _tiedProperties.Tie("clouds3d-use-impostors", _sky,
+ &SGSky::get_3dCloudUseImpostors,
+ &SGSky::set_3dCloudUseImpostors);
+
+ _tiedProperties.Tie("minimum-sky-visibility", _sky,
+ &SGSky::get_minimum_sky_visibility,
+ &SGSky::set_minimum_sky_visibility);
+
// _tiedProperties.Tie("lightning-enable", &sgEnviro,
// &SGEnviro::get_lightning_enable_state,
// &SGEnviro::set_lightning_enable_state);