]> git.mxchange.org Git - flightgear.git/commitdiff
Merge branch 'next' of gitorious.org:fg/flightgear into next
authorCurtis L. Olson <curt0001@flightgear.org>
Sat, 21 May 2011 14:06:20 +0000 (09:06 -0500)
committerCurtis L. Olson <curt0001@flightgear.org>
Sat, 21 May 2011 14:06:20 +0000 (09:06 -0500)
13 files changed:
package/mac/hudson_mac_build_launcher.sh
src/GUI/MapWidget.cxx
src/GUI/MapWidget.hxx
src/Input/FGMouseInput.cxx
src/Instrumentation/HUD/HUD_label.cxx
src/Instrumentation/HUD/HUD_ladder.cxx
src/Instrumentation/HUD/HUD_tape.cxx
src/Instrumentation/HUD/HUD_tbi.cxx
src/Main/fg_commands.cxx
src/Main/main.cxx
src/Main/renderer.cxx
src/Main/renderer.hxx
version

index 4cf8e541be3ff15dffbf28ecb31b19594fe39758..dc3bd243a9c33f7acb01cec188fde80d27867b37 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 
-SDK_PATH="/Developer/SDKs/MacOSX10.5.sdk"
-OSX_TARGET="10.5"
+SDK_PATH="/Developer/SDKs/MacOSX10.6.sdk"
+OSX_TARGET="10.6"
 
 svn co https://macflightgear.svn.sourceforge.net/svnroot/macflightgear/trunk/FlightGearOSX  macflightgear
 
index cd648fefb3ad1f91917b8a60ea319ca7320ff4be..e3cc5de772d8aa4dab79d706316a7c52ec753579 100644 (file)
@@ -386,6 +386,7 @@ MapWidget::MapWidget(int x, int y, int maxX, int maxY) :
   _zoom = 6;
   _width = maxX - x;
   _height = maxY - y;
+  _hasPanned = false;
 
   MapData::setFont(legendFont);
   MapData::setPalette(colour);
@@ -496,6 +497,7 @@ int MapWidget::checkKey (int key, int updown )
 
 void MapWidget::pan(const SGVec2d& delta)
 {
+  _hasPanned = true; 
   _projectionCenter = unproject(-delta);
 }
 
@@ -525,6 +527,12 @@ void MapWidget::draw(int dx, int dy)
     fgGetDouble("/position/latitude-deg"));
   _magneticHeadings = _root->getBoolValue("magnetic-headings");
 
+  if (_hasPanned)
+  {
+      _root->setBoolValue("centre-on-aircraft", false);
+      _hasPanned = false;
+  }
+  else
   if (_root->getBoolValue("centre-on-aircraft")) {
     _projectionCenter = _aircraft;
   }
index f2722e327f32e71d15df3e77ab6e2d314751d314..ce9333e32ae78319c187b3f8a4de7a5be6d9aa9e 100644 (file)
@@ -85,6 +85,7 @@ private:
   double _drawRangeNm;
   double _upHeading; // true heading corresponding to +ve y-axis
   bool _magneticHeadings;
+  bool _hasPanned;
   
   SGGeod _projectionCenter;
   SGGeod _aircraft;
index 8ab430653589579b8556edc0fbe7c034a4c0ad8a..9a0d13abbe92eb4a1cd6e93ec95de19ab8c46240 100644 (file)
@@ -23,8 +23,8 @@
 // $Id$
 
 #include "FGMouseInput.hxx"
+#include "Main/globals.hxx"
 
-\f
 void ActivePickCallbacks::init( int b, const osgGA::GUIEventAdapter* ea )
 {
   // Get the list of hit callbacks. Take the first callback that
@@ -33,7 +33,7 @@ void ActivePickCallbacks::init( int b, const osgGA::GUIEventAdapter* ea )
   // The nearest one is the first one and the deepest
   // (the most specialized one in the scenegraph) is the first.
   std::vector<SGSceneryPick> pickList;
-  if (FGRenderer::pick(pickList, ea)) {
+  if (globals->get_renderer()->pick(pickList, ea)) {
     std::vector<SGSceneryPick>::const_iterator i;
     for (i = pickList.begin(); i != pickList.end(); ++i) {
       if (i->callback->buttonPressed(b, i->info)) {
index 5cf2bcb57f0498809e2b525b7cf5ccbdc149a471..ddadedad3e7be01cd66a5f3488ff7310c5a7af7f 100644 (file)
@@ -89,7 +89,7 @@ void HUD::Label::draw(void)
 
         l = _center_x - pw;
         r = _center_x + pw;
-        bool draw_parallel = fabsf(_pointer_width - _w) > 2.0; // draw lines left and right of arrow?
+        bool draw_parallel = fabs(_pointer_width - _w) > 2.0; // draw lines left and right of arrow?
 
         if (option_bottom()) {
             if (draw_parallel) {
@@ -115,7 +115,7 @@ void HUD::Label::draw(void)
 
         l = _center_y - pw;
         r = _center_y + pw;
-        draw_parallel = fabsf(_pointer_width - _h) > 2.0;
+        draw_parallel = fabs(_pointer_width - _h) > 2.0;
 
         if (option_left()) {
             if (draw_parallel) {
index 478ffa1b1ae50c51ea3c042c5b6b7e56c5a50e2b..88bd175491d0898e9654bd0f005ecf1d253e187b 100644 (file)
@@ -48,7 +48,7 @@ HUD::Ladder::Ladder(HUD *hud, const SGPropertyNode *n, float x, float y) :
     _roll(n->getNode("roll-input", false)),
     _width_units(int(n->getFloatValue("display-span"))),
     _div_units(int(fabs(n->getFloatValue("divisions")))),
-    _scr_hole(fabsf(n->getFloatValue("screen-hole")) * 0.5f),
+    _scr_hole(fabs(n->getFloatValue("screen-hole")) * 0.5f),
     _zero_bar_overlength(n->getFloatValue("zero-bar-overlength", 10)),
     _dive_bar_angle(n->getBoolValue("enable-dive-bar-angle")),
     _tick_length(n->getFloatValue("tick-length")),
index 02fb76f150c946cc76a74a5086a286cb3fcfbd10..6820e8880f479a67032413e4319915e9c34167d8 100644 (file)
@@ -534,7 +534,7 @@ void HUD::Tape::draw_horizontal(float value)
 
 char *HUD::Tape::format_value(float v)
 {
-    if (fabsf(v) < 1e-8)   // avoid -0.0
+    if (fabs(v) < 1e-8)   // avoid -0.0
         v = 0.0f;
 
     if (_label_fmt == INT)
index 7f5f442a47bfc89398fb5df3a78c20cc867bae9a..7ec4c2639163cfca18b65735c1f8b58dd3cdddc0 100644 (file)
@@ -129,12 +129,12 @@ void HUD::TurnBankIndicator::draw_scale()
 
     int dir = bank > 0 ? 1 : -1;
 
-    if (fabsf(bank) > 25) {
+    if (fabs(bank) > 25) {
         draw_tick(45, r, minor, dir);
         draw_tick(60, r, major, dir);
     }
 
-    if (fabsf(bank) > 55) {
+    if (fabs(bank) > 55) {
         draw_tick(90, r, major, dir);
         draw_tick(135, r, major, dir);
     }
index 45d4b901b5a14f39974ef458547e57763b21f3b8..6baed83154f5f3b4ec2605ceeb94429e72545fbd 100644 (file)
@@ -314,6 +314,16 @@ do_resume (const SGPropertyNode * arg)
 
 #endif
 
+static bool
+do_pause (const SGPropertyNode * arg)
+{
+    bool paused = fgGetBool("/sim/freeze/master",true) || fgGetBool("/sim/freeze/clock",true);
+    fgSetBool("/sim/freeze/master",!paused);
+    fgSetBool("/sim/freeze/clock",!paused);
+    if (fgGetBool("/sim/freeze/replay-state",false))
+        fgSetBool("/sim/replay/disable",true);
+    return true;
+}
 
 /**
  * Built-in command: load flight.
@@ -1432,6 +1442,7 @@ static struct {
     { "reinit", do_reinit },
     { "suspend", do_reinit },
     { "resume", do_reinit },
+    { "pause", do_pause },
     { "load", do_load },
     { "save", do_save },
     { "panel-load", do_panel_load },
index 6c7b8a7e1ce962164d18729ac02f0fee39daaaeb..e66ffe242e9e4a8b0df24e1cf6548cb4d3bf1ea5 100644 (file)
@@ -203,6 +203,7 @@ static void fgMainLoop( void ) {
         if (globals->get_tile_mgr()->isSceneryLoaded()
              && fgGetBool("sim/fdm-initialized")) {
             fgSetBool("sim/sceneryloaded",true);
+            fgSplashProgress("");
             if (fgGetBool("/sim/sound/working")) {
                 globals->get_soundmgr()->activate();
             }
@@ -555,6 +556,10 @@ static void fgIdleFunction ( void ) {
     }
 }
 
+static void fgWinResizeFunction(int width, int height)
+{
+    globals->get_renderer()->resize(width, height);
+}
 
 static void upper_case_property(const char *name)
 {
@@ -644,7 +649,7 @@ int fgMainInit( int argc, char **argv ) {
     fgOSInit(&argc, argv);
     _bootstrap_OSInit++;
 
-    fgRegisterWindowResizeHandler( &FGRenderer::resize );
+    fgRegisterWindowResizeHandler( &fgWinResizeFunction );
     fgRegisterIdleHandler( &fgIdleFunction );
     fgRegisterDrawHandler( &FGRenderer::update );
 
index fe713ab623984fb917862e9263b7683e85f7d8dd..b57c4f53e6e27a5e77aa433fb3930a822b7a98b9 100644 (file)
@@ -128,7 +128,7 @@ public:
       hint->setMode(GL_DONT_CARE);
   }
 private:
-  SGSharedPtr<SGPropertyNode> mConfigNode;
+  SGPropertyNode_ptr mConfigNode;
 };
 
 
@@ -272,7 +272,7 @@ private:
 class FGWireFrameModeUpdateCallback : public osg::StateAttribute::Callback {
 public:
   FGWireFrameModeUpdateCallback() :
-    mWireframe(fgGetNode("/sim/rendering/wireframe"))
+    mWireframe(fgGetNode("/sim/rendering/wireframe", true))
   { }
   virtual void operator()(osg::StateAttribute* stateAttribute,
                           osg::NodeVisitor*)
@@ -289,13 +289,13 @@ public:
                            osg::PolygonMode::FILL);
   }
 private:
-  SGSharedPtr<SGPropertyNode> mWireframe;
+  SGPropertyNode_ptr mWireframe;
 };
 
 class FGLightModelUpdateCallback : public osg::StateAttribute::Callback {
 public:
   FGLightModelUpdateCallback() :
-    mHighlights(fgGetNode("/sim/rendering/specular-highlight"))
+    mHighlights(fgGetNode("/sim/rendering/specular-highlight", true))
   { }
   virtual void operator()(osg::StateAttribute* stateAttribute,
                           osg::NodeVisitor*)
@@ -320,13 +320,13 @@ public:
     }
   }
 private:
-  SGSharedPtr<SGPropertyNode> mHighlights;
+  SGPropertyNode_ptr mHighlights;
 };
 
 class FGFogEnableUpdateCallback : public osg::StateSet::Callback {
 public:
   FGFogEnableUpdateCallback() :
-    mFogEnabled(fgGetNode("/sim/rendering/fog"))
+    mFogEnabled(fgGetNode("/sim/rendering/fog", true))
   { }
   virtual void operator()(osg::StateSet* stateSet, osg::NodeVisitor*)
   {
@@ -337,7 +337,7 @@ public:
     }
   }
 private:
-  SGSharedPtr<SGPropertyNode> mFogEnabled;
+  SGPropertyNode_ptr mFogEnabled;
 };
 
 class FGFogUpdateCallback : public osg::StateAttribute::Callback {
@@ -362,15 +362,18 @@ public:
     assert(dynamic_cast<osg::Switch*>(node));
     osg::Switch* sw = static_cast<osg::Switch*>(node);
 
-    double t = globals->get_sim_time_sec();
-    bool enabled = 0 < t;
+    bool enabled = scenery_enabled;
     sw->setValue(0, enabled);
     if (!enabled)
       return;
     traverse(node, nv);
   }
+
+  static bool scenery_enabled;
 };
 
+bool FGScenerySwitchCallback::scenery_enabled = false;
+
 // Sky structures
 SGSky *thesky;
 
@@ -387,6 +390,7 @@ FGRenderer::FGRenderer()
    jpgRenderFrame = FGRenderer::update;
 #endif
    eventHandler = new FGEventHandler;
+   _splash_screen_active = true;
 }
 
 FGRenderer::~FGRenderer()
@@ -409,11 +413,34 @@ FGRenderer::splashinit( void ) {
     // visitor automatically.
     mUpdateVisitor->setFrameStamp(mFrameStamp.get());
     viewer->setUpdateVisitor(mUpdateVisitor.get());
+    fgSetDouble("/sim/startup/splash-alpha", 1.0);
 }
 
 void
 FGRenderer::init( void )
 {
+    _scenery_loaded   = fgGetNode("/sim/sceneryloaded", true);
+    _scenery_override = fgGetNode("/sim/sceneryloaded-override", true);
+    _panel_hotspots   = fgGetNode("/sim/panel-hotspots", true);
+    _virtual_cockpit  = fgGetNode("/sim/virtual-cockpit", true);
+
+    _sim_delta_sec = fgGetNode("/sim/time/delta-sec", true);
+
+    _xsize         = fgGetNode("/sim/startup/xsize", true);
+    _ysize         = fgGetNode("/sim/startup/ysize", true);
+
+    _skyblend             = fgGetNode("/sim/rendering/skyblend", true);
+    _point_sprites        = fgGetNode("/sim/rendering/point-sprites", true);
+    _enhanced_lighting    = fgGetNode("/sim/rendering/enhanced-lighting", true);
+    _distance_attenuation = fgGetNode("/sim/rendering/distance-attenuation", true);
+    _horizon_effect       = fgGetNode("/sim/rendering/horizon-effect", true);
+    _textures             = fgGetNode("/sim/rendering/textures", true);
+
+    _altitude_ft = fgGetNode("/position/altitude-ft", true);
+
+    _cloud_status = fgGetNode("/environment/clouds/status", true);
+    _visibility_m = fgGetNode("/environment/visibility-m", true);
+
     osgViewer::Viewer* viewer = globals->get_renderer()->getViewer();
     osg::initNotifyLevel();
 
@@ -557,27 +584,46 @@ FGRenderer::init( void )
     stateSet->setAttributeAndModes(new osg::Program, osg::StateAttribute::ON);
 }
 
+void
+FGRenderer::update()
+{
+    globals->get_renderer()->update(true);
+}
 
 // Update all Visuals (redraws anything graphics related)
 void
 FGRenderer::update( bool refresh_camera_settings ) {
-    bool scenery_loaded = fgGetBool("sim/sceneryloaded", false)
-                          || fgGetBool("sim/sceneryloaded-override");
+    if ((!_scenery_loaded.get())||
+         !(_scenery_loaded->getBoolValue() || 
+           _scenery_override->getBoolValue()))
+    {
+        // alas, first "update" is being called before "init"...
+        fgSetDouble("/sim/startup/splash-alpha", 1.0);
+        _splash_screen_active = true;
+        return;
+    }
     osgViewer::Viewer* viewer = globals->get_renderer()->getViewer();
-    if (!scenery_loaded) {
-      fgSetDouble("/sim/startup/splash-alpha", 1.0);
-      return;
+
+    if (_splash_screen_active)
+    {
+        // Fade out the splash screen
+        const double fade_time = 0.8;
+        const double fade_steps_per_sec = 20;
+        double delay_time = SGMiscd::min(fade_time/fade_steps_per_sec,
+                                         (SGTimeStamp::now() - _splash_time).toSecs());
+        _splash_time = SGTimeStamp::now();
+        double sAlpha = fgGetDouble("/sim/startup/splash-alpha", 1.0);
+        sAlpha -= SGMiscd::max(0.0,delay_time/fade_time);
+        FGScenerySwitchCallback::scenery_enabled = (sAlpha<1.0);
+        _splash_screen_active = (sAlpha > 0.0);
+        fgSetDouble("/sim/startup/splash-alpha", sAlpha);
     }
 
-    // Fade out the splash screen over the first three seconds.
-    double sAlpha = SGMiscd::max(0, (2.5 - globals->get_sim_time_sec()) / 2.5);
-    fgSetDouble("/sim/startup/splash-alpha", sAlpha);
+    bool skyblend = _skyblend->getBoolValue();
+    bool use_point_sprites = _point_sprites->getBoolValue();
+    bool enhanced_lighting = _enhanced_lighting->getBoolValue();
+    bool distance_attenuation = _distance_attenuation->getBoolValue();
 
-    bool skyblend = fgGetBool("/sim/rendering/skyblend");
-    bool use_point_sprites = fgGetBool("/sim/rendering/point-sprites");
-    bool enhanced_lighting = fgGetBool("/sim/rendering/enhanced-lighting");
-    bool distance_attenuation
-        = fgGetBool("/sim/rendering/distance-attenuation");
     // OSGFIXME
     SGConfigureDirectionalLights( use_point_sprites, enhanced_lighting,
                                   distance_attenuation );
@@ -586,10 +632,10 @@ FGRenderer::update( bool refresh_camera_settings ) {
 
     // update fog params
     double actual_visibility;
-    if (fgGetBool("/environment/clouds/status")) {
+    if (_cloud_status->getBoolValue()) {
         actual_visibility = thesky->get_visibility();
     } else {
-        actual_visibility = fgGetDouble("/environment/visibility-m");
+        actual_visibility = _visibility_m->getDoubleValue();
     }
 
     // idle_state is now 1000 meaning we've finished all our
@@ -602,27 +648,27 @@ FGRenderer::update( bool refresh_camera_settings ) {
 
     if ( refresh_camera_settings ) {
         // update view port
-        resize( fgGetInt("/sim/startup/xsize"),
-                fgGetInt("/sim/startup/ysize") );
+        resize( _xsize->getIntValue(),
+                _ysize->getIntValue() );
     }
     osg::Camera *camera = viewer->getCamera();
 
     if ( skyblend ) {
        
-        if ( fgGetBool("/sim/rendering/textures") ) {
+        if ( _textures->getBoolValue() ) {
             SGVec4f clearColor(l->adj_fog_color());
-            camera->setClearColor(osg::Vec4(0.0, 0.0, 0.0, 1.0));
+            camera->setClearColor(toOsg(clearColor));
         }
     } else {
         SGVec4f clearColor(l->sky_color());
-        camera->setClearColor(osg::Vec4(0.0, 0.0, 0.0, 1.0));
+        camera->setClearColor(toOsg(clearColor));
     }
 
     // update fog params if visibility has changed
-    double visibility_meters = fgGetDouble("/environment/visibility-m");
+    double visibility_meters = _visibility_m->getDoubleValue();
     thesky->set_visibility(visibility_meters);
 
-    double altitude_m = fgGetDouble("/position/altitude-ft") * SG_FEET_TO_METER;
+    double altitude_m = _altitude_ft->getDoubleValue() * SG_FEET_TO_METER;
     thesky->modify_vis( altitude_m, 0.0 /* time factor, now unused */);
 
     // update the sky dome
@@ -635,7 +681,7 @@ FGRenderer::update( bool refresh_camera_settings ) {
         // Sun distance: 150,000,000 kilometers
 
         double sun_horiz_eff, moon_horiz_eff;
-        if (fgGetBool("/sim/rendering/horizon-effect")) {
+        if (_horizon_effect->getBoolValue()) {
             sun_horiz_eff
                 = 0.67 + pow(osg::clampAbove(0.5 + cos(l->get_sun_angle()),
                                              0.0),
@@ -666,7 +712,7 @@ FGRenderer::update( bool refresh_camera_settings ) {
         scolor.sun_angle   = l->get_sun_angle();
         scolor.moon_angle  = l->get_moon_angle();
   
-        double delta_time_sec = fgGetDouble("/sim/time/delta-sec");
+        double delta_time_sec = _sim_delta_sec->getDoubleValue();
         thesky->reposition( sstate, *globals->get_ephem(), delta_time_sec );
         thesky->repaint( scolor, *globals->get_ephem() );
 
@@ -712,11 +758,10 @@ FGRenderer::update( bool refresh_camera_settings ) {
                              l->get_sun_angle()*SGD_RADIANS_TO_DEGREES);
     mUpdateVisitor->setVisibility(actual_visibility);
     simgear::GroundLightManager::instance()->update(mUpdateVisitor.get());
-    bool hotspots = fgGetBool("/sim/panel-hotspots");
     osg::Node::NodeMask cullMask = ~simgear::LIGHTS_BITS & ~simgear::PICK_BIT;
     cullMask |= simgear::GroundLightManager::instance()
         ->getLightNodeMask(mUpdateVisitor.get());
-    if (hotspots)
+    if (_panel_hotspots->getBoolValue())
         cullMask |= simgear::PICK_BIT;
     CameraGroup::getDefault()->setCameraCullMasks(cullMask);
 }
@@ -729,7 +774,7 @@ void
 FGRenderer::resize( int width, int height ) {
     int view_h;
 
-    if ( (!fgGetBool("/sim/virtual-cockpit"))
+    if ( (!_virtual_cockpit->getBoolValue())
          && fgPanelVisible() && idle_state == 1000 ) {
         view_h = (int)(height * (globals->get_current_panel()->getViewHeight() -
                              globals->get_current_panel()->getYOffset()) / 768.0);
@@ -740,9 +785,9 @@ FGRenderer::resize( int width, int height ) {
     static int lastwidth = 0;
     static int lastheight = 0;
     if (width != lastwidth)
-        fgSetInt("/sim/startup/xsize", lastwidth = width);
+        _xsize->setIntValue(lastwidth = width);
     if (height != lastheight)
-        fgSetInt("/sim/startup/ysize", lastheight = height);
+        _ysize->setIntValue(lastheight = height);
 
     // for all views
     FGViewMgr *viewmgr = globals->get_viewmgr();
index 2ed51be1a71858eb9f2b63cbf608aa6aeaf5afdf..42198b9f2f7c3b3eab16c8f6f7bdd805eaaeccbf 100644 (file)
@@ -3,6 +3,8 @@
 #define __FG_RENDERER_HXX 1
 
 #include <simgear/scene/util/SGPickCallback.hxx>
+#include <simgear/props/props.hxx>
+#include <simgear/timing/timestamp.hxx>
 
 #include <osg/ref_ptr>
 
@@ -45,18 +47,18 @@ public:
     void splashinit();
     void init();
 
-    static void resize(int width, int height );
+    void resize(int width, int height );
 
     // calling update( refresh_camera_settings = false ) will not
     // touch window or camera settings.  This is useful for the tiled
     // renderer which needs to set the view frustum itself.
-    static void update( bool refresh_camera_settings );
-    inline static void update() { update( true ); }
+    void update( bool refresh_camera_settings);
+    static void update();
 
     /** Just pick into the scene and return the pick callbacks on the way ...
      */
-    static bool pick( std::vector<SGSceneryPick>& pickList,
-                      const osgGA::GUIEventAdapter* ea );
+    bool pick( std::vector<SGSceneryPick>& pickList,
+               const osgGA::GUIEventAdapter* ea );
 
     /** Get and set the OSG Viewer object, if any.
      */
@@ -76,6 +78,16 @@ public:
 protected:
     osg::ref_ptr<osgViewer::Viewer> viewer;
     osg::ref_ptr<flightgear::FGEventHandler> eventHandler;
+    SGPropertyNode_ptr _scenery_loaded,_scenery_override;
+    SGPropertyNode_ptr _skyblend;
+    SGPropertyNode_ptr _point_sprites, _enhanced_lighting, _distance_attenuation;
+    SGPropertyNode_ptr _textures;
+    SGPropertyNode_ptr _cloud_status, _visibility_m; 
+    SGPropertyNode_ptr _xsize, _ysize;
+    SGPropertyNode_ptr _panel_hotspots, _sim_delta_sec, _horizon_effect, _altitude_ft;
+    SGPropertyNode_ptr _virtual_cockpit;
+    SGTimeStamp _splash_time;
+    bool _splash_screen_active;
 };
 
 bool fgDumpSceneGraphToFile(const char* filename);
diff --git a/version b/version
index ccbccc3dc62631f22ff358ac418e52401ec770b4..276cbf9e2858c779297bb9f73b34170302949ec4 100644 (file)
--- a/version
+++ b/version
@@ -1 +1 @@
-2.2.0
+2.3.0