X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FEnvironment%2Fenvironment_mgr.cxx;h=606a3e74ccd1088484ff09ff988d3efee5ac8405;hb=58e79013e3c1d412d8e1f8adc0c39a400484c5ae;hp=fd1804f2f59cb43ea4564dee0fb422bed7fe27c4;hpb=43bc61d1318abd52de6c723dbeef0e4058b1a823;p=flightgear.git diff --git a/src/Environment/environment_mgr.cxx b/src/Environment/environment_mgr.cxx index fd1804f2f..606a3e74c 100644 --- a/src/Environment/environment_mgr.cxx +++ b/src/Environment/environment_mgr.cxx @@ -31,6 +31,7 @@ #include #include
+#include
#include
#include @@ -45,9 +46,6 @@ #include "Airports/simple.hxx" #include "gravity.hxx" -class SGSky; -extern SGSky *thesky; - class FG3DCloudsListener : public SGPropertyChangeListener { public: FG3DCloudsListener( FGClouds * fgClouds ); @@ -57,16 +55,12 @@ 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 ); @@ -76,12 +70,11 @@ FG3DCloudsListener::FG3DCloudsListener( FGClouds * fgClouds ) : 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 () : @@ -91,7 +84,8 @@ FGEnvironmentMgr::FGEnvironmentMgr () : _altitude_n(fgGetNode("/position/altitude-ft", true)), _longitude_n(fgGetNode( "/position/longitude-deg", true )), _latitude_n( fgGetNode( "/position/latitude-deg", true )), - _3dCloudsEnableListener(new FG3DCloudsListener(fgClouds) ) + _3dCloudsEnableListener(new FG3DCloudsListener(fgClouds) ), + _sky(globals->get_renderer()->getSky()) { set_subsystem("controller", Environment::LayerInterpolateController::createInstance( fgGetNode("/environment/config", true ) )); set_subsystem("realwx", Environment::RealWxController::createInstance( fgGetNode("/environment/realwx", true ) ), 1.0 ); @@ -171,7 +165,7 @@ FGEnvironmentMgr::bind () _tiedProperties.setRoot( fgGetNode( "/environment", true ) ); - _tiedProperties.Tie( "effective-visibility-m", thesky, + _tiedProperties.Tie( "effective-visibility-m", _sky, &SGSky::get_visibility ); _tiedProperties.Tie("rebuild-layers", fgClouds, @@ -220,18 +214,34 @@ FGEnvironmentMgr::bind () _tiedProperties.setRoot( fgGetNode("/sim/rendering", true ) ); - _tiedProperties.Tie( "clouds3d-density", thesky, + _tiedProperties.Tie( "clouds3d-density", _sky, &SGSky::get_3dCloudDensity, &SGSky::set_3dCloudDensity); - _tiedProperties.Tie("clouds3d-vis-range", thesky, + _tiedProperties.Tie("clouds3d-vis-range", _sky, &SGSky::get_3dCloudVisRange, &SGSky::set_3dCloudVisRange); - _tiedProperties.Tie("clouds3d-wrap", thesky, + _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("lightning-enable", &sgEnviro, // &SGEnviro::get_lightning_enable_state, // &SGEnviro::set_lightning_enable_state); @@ -325,19 +335,19 @@ FGEnvironmentMgr::getEnvironment(const SGGeod& aPos) const double FGEnvironmentMgr::get_cloud_layer_span_m (int index) const { - return thesky->get_cloud_layer(index)->getSpan_m(); + return _sky->get_cloud_layer(index)->getSpan_m(); } void FGEnvironmentMgr::set_cloud_layer_span_m (int index, double span_m) { - thesky->get_cloud_layer(index)->setSpan_m(span_m); + _sky->get_cloud_layer(index)->setSpan_m(span_m); } double FGEnvironmentMgr::get_cloud_layer_elevation_ft (int index) const { - return thesky->get_cloud_layer(index)->getElevation_m() * SG_METER_TO_FEET; + return _sky->get_cloud_layer(index)->getElevation_m() * SG_METER_TO_FEET; } void @@ -346,88 +356,88 @@ FGEnvironmentMgr::set_cloud_layer_elevation_ft (int index, double elevation_ft) FGEnvironment env = *_environment; env.set_elevation_ft(elevation_ft); - thesky->get_cloud_layer(index) + _sky->get_cloud_layer(index) ->setElevation_m(elevation_ft * SG_FEET_TO_METER); - thesky->get_cloud_layer(index) + _sky->get_cloud_layer(index) ->setSpeed(env.get_wind_speed_kt() * 0.5151); // 1 kt = 0.5151 m/s - thesky->get_cloud_layer(index) + _sky->get_cloud_layer(index) ->setDirection(env.get_wind_from_heading_deg()); } double FGEnvironmentMgr::get_cloud_layer_thickness_ft (int index) const { - return thesky->get_cloud_layer(index)->getThickness_m() * SG_METER_TO_FEET; + return _sky->get_cloud_layer(index)->getThickness_m() * SG_METER_TO_FEET; } void FGEnvironmentMgr::set_cloud_layer_thickness_ft (int index, double thickness_ft) { - thesky->get_cloud_layer(index) + _sky->get_cloud_layer(index) ->setThickness_m(thickness_ft * SG_FEET_TO_METER); } double FGEnvironmentMgr::get_cloud_layer_transition_ft (int index) const { - return thesky->get_cloud_layer(index)->getTransition_m() * SG_METER_TO_FEET; + return _sky->get_cloud_layer(index)->getTransition_m() * SG_METER_TO_FEET; } void FGEnvironmentMgr::set_cloud_layer_transition_ft (int index, double transition_ft) { - thesky->get_cloud_layer(index) + _sky->get_cloud_layer(index) ->setTransition_m(transition_ft * SG_FEET_TO_METER); } const char * FGEnvironmentMgr::get_cloud_layer_coverage (int index) const { - return thesky->get_cloud_layer(index)->getCoverageString().c_str(); + return _sky->get_cloud_layer(index)->getCoverageString().c_str(); } void FGEnvironmentMgr::set_cloud_layer_coverage (int index, const char * coverage_name) { - if( thesky->get_cloud_layer(index)->getCoverageString() == coverage_name ) + if( _sky->get_cloud_layer(index)->getCoverageString() == coverage_name ) return; - thesky->get_cloud_layer(index)->setCoverageString(coverage_name); + _sky->get_cloud_layer(index)->setCoverageString(coverage_name); _cloudLayersDirty = true; } int FGEnvironmentMgr::get_cloud_layer_coverage_type (int index) const { - return thesky->get_cloud_layer(index)->getCoverage(); + return _sky->get_cloud_layer(index)->getCoverage(); } double FGEnvironmentMgr::get_cloud_layer_visibility_m (int index) const { - return thesky->get_cloud_layer(index)->getVisibility_m(); + return _sky->get_cloud_layer(index)->getVisibility_m(); } void FGEnvironmentMgr::set_cloud_layer_visibility_m (int index, double visibility_m) { - thesky->get_cloud_layer(index)->setVisibility_m(visibility_m); + _sky->get_cloud_layer(index)->setVisibility_m(visibility_m); } double FGEnvironmentMgr::get_cloud_layer_maxalpha (int index ) const { - return thesky->get_cloud_layer(index)->getMaxAlpha(); + return _sky->get_cloud_layer(index)->getMaxAlpha(); } void FGEnvironmentMgr::set_cloud_layer_maxalpha (int index, double maxalpha) { - thesky->get_cloud_layer(index)->setMaxAlpha(maxalpha); + _sky->get_cloud_layer(index)->setMaxAlpha(maxalpha); } void @@ -438,10 +448,10 @@ FGEnvironmentMgr::set_cloud_layer_coverage_type (int index, int type ) return; } - if( static_cast(type) == thesky->get_cloud_layer(index)->getCoverage() ) + if( static_cast(type) == _sky->get_cloud_layer(index)->getCoverage() ) return; - thesky->get_cloud_layer(index)->setCoverage(static_cast(type)); + _sky->get_cloud_layer(index)->setCoverage(static_cast(type)); _cloudLayersDirty = true; }