X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FInstrumentation%2Fmk_viii.hxx;h=d3d581e649fab712108fae749b8da0402a0903eb;hb=bb2b03c7e392e107aeaf7dbc4eecc59064b28512;hp=4969a137d65707948882a1324dd6ccca13521256;hpb=acd09b99cb4e1dac877d55f51a372f7f3283c439;p=flightgear.git diff --git a/src/Instrumentation/mk_viii.hxx b/src/Instrumentation/mk_viii.hxx index 4969a137d..d3d581e64 100755 --- a/src/Instrumentation/mk_viii.hxx +++ b/src/Instrumentation/mk_viii.hxx @@ -32,9 +32,9 @@ #include #include -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" @@ -181,37 +181,37 @@ class MK_VIII : public SGSubsystem { MK_VIII *mk; - vector tied_properties; + vector 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) @@ -232,10 +232,16 @@ class MK_VIII : public SGSubsystem tie(node->getNode(relative_path, true), raw_value); } + PropertiesHandler() {}; + void init (); void unbind (); }; +public: + PropertiesHandler properties_handler; + +private: ///////////////////////////////////////////////////////////////////////////// // MK_VIII::PowerHandler //////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// @@ -431,6 +437,7 @@ class MK_VIII : public SGSubsystem // MK_VIII::IOHandler /////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// +public: class IOHandler { public: @@ -604,6 +611,8 @@ class MK_VIII : public SGSubsystem void bind (SGPropertyNode *node); + MK_VIII *mk; + private: /////////////////////////////////////////////////////////////////////////// @@ -612,7 +621,8 @@ class MK_VIII : public SGSubsystem class TerrainClearanceFilter { - deque< Sample > samples; + typedef deque< Sample > samples_type; + samples_type samples; double value; public: @@ -627,8 +637,6 @@ class MK_VIII : public SGSubsystem // MK_VIII::IOHandler (continued) ///////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// - MK_VIII *mk; - TerrainClearanceFilter terrain_clearance_filter; Lamp _lamp; @@ -647,7 +655,8 @@ class MK_VIII : public SGSubsystem bool last_landing_gear; bool last_real_flaps_down; - deque< Sample< Parameter > > altitude_samples; + typedef deque< Sample< Parameter > > altitude_samples_type; + altitude_samples_type altitude_samples; struct { @@ -678,6 +687,8 @@ class MK_VIII : public SGSubsystem const char *name, int *output); + public: + bool get_discrete_input (bool *ptr) const; void set_discrete_input (bool *ptr, bool value); @@ -736,10 +747,10 @@ class MK_VIII : public SGSubsystem 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); } }; ///////////////////////////////////////////////////////////////////////// @@ -860,7 +871,7 @@ class MK_VIII : public SGSubsystem inline void bind (SGPropertyNode *node) { speaker.bind(node); } - private: + public: /////////////////////////////////////////////////////////////////////////// // MK_VIII::VoicePlayer::Speaker ////////////////////////////////////////// @@ -890,13 +901,13 @@ class MK_VIII : public SGSubsystem &MK_VIII::VoicePlayer::Speaker::set_property)); } + public: template inline void set_property (T *ptr, T value) { *ptr = value; update_configuration(); } template inline T get_property (T *ptr) const { return *ptr; } - public: double volume; inline Speaker (VoicePlayer *_player) @@ -917,6 +928,7 @@ class MK_VIII : public SGSubsystem void update_configuration (); }; + private: /////////////////////////////////////////////////////////////////////////// // MK_VIII::VoicePlayer (continued) /////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// @@ -949,6 +961,7 @@ class MK_VIII : public SGSubsystem inline void make_voice (Voice **voice, T1 e1, T2 e2, T3 e3, T4 e4) { make_voice(voice, e1, e2, e3); append(*voice, e4); } }; +private: ///////////////////////////////////////////////////////////////////////////// // MK_VIII::SelfTestHandler ///////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// @@ -1491,6 +1504,18 @@ class MK_VIII : public SGSubsystem bool is_high_bank_angle (); unsigned int get_bank_angle_alerts (); void update_bank_angle (); + + class AirportFilter : public FGAirportSearchFilter + { + public: + AirportFilter(Mode6Handler *s) + : self(s) {} + + virtual bool pass(FGAirport *a); + + private: + Mode6Handler* self; + }; }; ///////////////////////////////////////////////////////////////////////////// @@ -1539,7 +1564,6 @@ class MK_VIII : public SGSubsystem double get_azimuth_difference (const FGRunway *_runway); void select_runway (const FGAirport *airport, FGRunway *_runway); - bool test_airport (const FGAirport *airport); void update_runway (); void get_bias_area_edges (Position *edge, @@ -1554,6 +1578,17 @@ class MK_VIII : public SGSubsystem bool is_tcf (); bool is_rfcf (); + class AirportFilter : public FGAirportSearchFilter + { + public: + AirportFilter(MK_VIII *device) + : mk(device) {} + + virtual bool pass(FGAirport *a); + + private: + MK_VIII* mk; + }; public: struct { @@ -1573,7 +1608,6 @@ class MK_VIII : public SGSubsystem string name; int num; - PropertiesHandler properties_handler; PowerHandler power_handler; SystemHandler system_handler; ConfigurationModule configuration_module;