]> git.mxchange.org Git - flightgear.git/blobdiff - src/Instrumentation/mk_viii.hxx
Add a hardwired instrument approach for testing. This will be removed and read from...
[flightgear.git] / src / Instrumentation / mk_viii.hxx
index 763f2d69ea98f26bc6e28957483814d39ddf8570..423562cfe2cdf5d4dbcfc6cd1a888272a94f3cc4 100755 (executable)
 #include <simgear/sound/sample_openal.hxx>
 #include <simgear/structure/subsystem_mgr.hxx>
 
-SG_USING_STD(vector);
-SG_USING_STD(deque);
-SG_USING_STD(map);
+using std::vector;
+using std::deque;
+using std::map;
 
-#include "Airports/runways.hxx"
-#include "Airports/simple.hxx"
-#include "Main/globals.hxx"
+#include <Airports/runways.hxx>
+#include <Airports/simple.hxx>
+#include <Main/globals.hxx>
+
+#ifdef _MSC_VER
+#  pragma warning( push )
+#  pragma warning( disable: 4355 )
+#endif
 
 ///////////////////////////////////////////////////////////////////////////////
 // MK_VIII ////////////////////////////////////////////////////////////////////
@@ -47,7 +52,7 @@ SG_USING_STD(map);
 class MK_VIII : public SGSubsystem
 {
   // keep in sync with Mode6Handler::altitude_callout_definitions[]
-  static const int n_altitude_callouts = 11;
+  static const unsigned n_altitude_callouts = 11;
 
   /////////////////////////////////////////////////////////////////////////////
   // MK_VIII::RawValueMethodsData /////////////////////////////////////////////
@@ -68,7 +73,7 @@ class MK_VIII : public SGSubsystem
       if (_getter)
        return (_obj.*_getter)(_data);
       else
-       return SGRawValue<VT>::DefaultValue;
+       return SGRawValue<VT>::DefaultValue();
     }
     virtual bool setValue (VT value)
     {
@@ -181,37 +186,37 @@ class MK_VIII : public SGSubsystem
   {
     MK_VIII *mk;
 
-    vector<SGPropertyNode *> tied_properties;
+    vector<SGPropertyNode_ptr> tied_properties;
 
   public:
     struct
     {
-      SGPropertyNode *ai_caged;
-      SGPropertyNode *ai_roll;
-      SGPropertyNode *ai_serviceable;
-      SGPropertyNode *altimeter_altitude;
-      SGPropertyNode *altimeter_serviceable;
-      SGPropertyNode *altitude;
-      SGPropertyNode *altitude_agl;
-      SGPropertyNode *asi_serviceable;
-      SGPropertyNode *asi_speed;
-      SGPropertyNode *autopilot_heading_lock;
-      SGPropertyNode *flaps;
-      SGPropertyNode *gear_down;
-      SGPropertyNode *latitude;
-      SGPropertyNode *longitude;
-      SGPropertyNode *nav0_cdi_serviceable;
-      SGPropertyNode *nav0_gs_distance;
-      SGPropertyNode *nav0_gs_needle_deflection;
-      SGPropertyNode *nav0_gs_serviceable;
-      SGPropertyNode *nav0_has_gs;
-      SGPropertyNode *nav0_heading_needle_deflection;
-      SGPropertyNode *nav0_in_range;
-      SGPropertyNode *nav0_nav_loc;
-      SGPropertyNode *nav0_serviceable;
-      SGPropertyNode *power;
-      SGPropertyNode *replay_state;
-      SGPropertyNode *vs;
+      SGPropertyNode_ptr ai_caged;
+      SGPropertyNode_ptr ai_roll;
+      SGPropertyNode_ptr ai_serviceable;
+      SGPropertyNode_ptr altimeter_altitude;
+      SGPropertyNode_ptr altimeter_serviceable;
+      SGPropertyNode_ptr altitude;
+      SGPropertyNode_ptr altitude_agl;
+      SGPropertyNode_ptr asi_serviceable;
+      SGPropertyNode_ptr asi_speed;
+      SGPropertyNode_ptr autopilot_heading_lock;
+      SGPropertyNode_ptr flaps;
+      SGPropertyNode_ptr gear_down;
+      SGPropertyNode_ptr latitude;
+      SGPropertyNode_ptr longitude;
+      SGPropertyNode_ptr nav0_cdi_serviceable;
+      SGPropertyNode_ptr nav0_gs_distance;
+      SGPropertyNode_ptr nav0_gs_needle_deflection;
+      SGPropertyNode_ptr nav0_gs_serviceable;
+      SGPropertyNode_ptr nav0_has_gs;
+      SGPropertyNode_ptr nav0_heading_needle_deflection;
+      SGPropertyNode_ptr nav0_in_range;
+      SGPropertyNode_ptr nav0_nav_loc;
+      SGPropertyNode_ptr nav0_serviceable;
+      SGPropertyNode_ptr power;
+      SGPropertyNode_ptr replay_state;
+      SGPropertyNode_ptr vs;
     } external_properties;
 
     inline PropertiesHandler (MK_VIII *device)
@@ -621,7 +626,8 @@ public:
 
     class TerrainClearanceFilter
     {
-      deque< Sample<double> >  samples;
+      typedef deque< Sample<double> > samples_type;
+      samples_type             samples;
       double                   value;
 
     public:
@@ -654,7 +660,8 @@ public:
     bool last_landing_gear;
     bool last_real_flaps_down;
 
-    deque< Sample< Parameter<double> > > altitude_samples;
+    typedef deque< Sample< Parameter<double> > > altitude_samples_type;
+    altitude_samples_type altitude_samples;
 
     struct
     {
@@ -745,10 +752,10 @@ public:
        inline SampleElement (SGSoundSample *sample, double volume = 1.0)
          : _sample(sample), _volume(volume) { silence = false; }
 
-       virtual inline void play (double volume) { set_volume(volume); _sample->play_once(); }
-       virtual inline void stop () { _sample->stop(); }
-       virtual inline bool is_playing () { return _sample->is_playing(); }
-       virtual inline void set_volume (double volume) { _sample->set_volume(volume * _volume); }
+        virtual inline void play (double volume) { if (_sample) { set_volume(volume); _sample->play_once(); } }
+       virtual inline void stop () { if (_sample) _sample->stop(); }
+        virtual inline bool is_playing () { return _sample ? _sample->is_playing() : false; }
+       virtual inline void set_volume (double volume) { if (_sample) _sample->set_volume(volume * _volume); }
       };
 
       /////////////////////////////////////////////////////////////////////////
@@ -775,7 +782,7 @@ public:
       Element *element;
 
       inline Voice (VoicePlayer *_player)
-       : player(_player), volume(1.0), element(NULL) {}
+        : element(NULL), player(_player), volume(1.0) {}
 
       ~Voice ();
 
@@ -845,7 +852,7 @@ public:
     } voices;
 
     inline VoicePlayer (MK_VIII *device)
-      : mk(device), speaker(this), voice(NULL), next_voice(NULL) {}
+      : voice(NULL), next_voice(NULL),  mk(device), speaker(this) {}
 
     ~VoicePlayer ();
 
@@ -910,13 +917,13 @@ public:
 
       inline Speaker (VoicePlayer *_player)
        : player(_player),
-         volume(1),
          pitch(1),
          inner_cone(360),
          outer_cone(360),
          outer_gain(0),
          reference_dist(3),
-         max_dist(10)
+         max_dist(10),
+         volume(1)
       {
        position[0] = 0; position[1] = 0; position[2] = 0;
        orientation[0] = 0; orientation[1] = 0; orientation[2] = 0;
@@ -1024,7 +1031,7 @@ private:
     State state;
 
     inline SelfTestHandler (MK_VIII *device)
-      : mk(device), state(STATE_NONE), button_pressed(false) {}
+      : mk(device), button_pressed(false), state(STATE_NONE) {}
 
     inline void power_off () { stop(); }
     inline void set_inop () { stop(); }
@@ -1502,6 +1509,22 @@ private:
     bool is_high_bank_angle ();
     unsigned int get_bank_angle_alerts ();
     void update_bank_angle ();
+    
+    class AirportFilter : public FGAirport::AirportFilter
+    {
+    public: 
+      AirportFilter(Mode6Handler *s)
+        : self(s) {}
+        
+      virtual bool passAirport(FGAirport *a) const;
+      
+      virtual FGPositioned::Type maxType() const {
+        return FGPositioned::AIRPORT;
+      }
+      
+    private:
+      Mode6Handler* self;
+    };
   };
 
   /////////////////////////////////////////////////////////////////////////////
@@ -1549,8 +1572,7 @@ private:
                                   double to_heading);
     double get_azimuth_difference (const FGRunway *_runway);
 
-    void select_runway (const FGAirport *airport, FGRunway *_runway);
-    bool test_airport (const FGAirport *airport);
+    FGRunway* select_runway (const FGAirport *airport);
     void update_runway ();
 
     void get_bias_area_edges (Position *edge,
@@ -1565,6 +1587,20 @@ private:
     bool is_tcf ();
     bool is_rfcf ();
 
+    class AirportFilter : public FGAirport::AirportFilter
+    {
+    public: 
+      AirportFilter(MK_VIII *device)
+        : mk(device) {}
+        
+      virtual bool passAirport(FGAirport *a) const;
+      
+      virtual FGPositioned::Type maxType() const {
+        return FGPositioned::AIRPORT;
+      }
+    private:
+      MK_VIII* mk;
+    };
   public:
     struct
     {
@@ -1615,4 +1651,8 @@ public:
   virtual void update (double dt);
 };
 
+#ifdef _MSC_VER
+#  pragma warning( pop )
+#endif
+
 #endif // __INSTRUMENTS_MK_VIII_HXX