using std::string;
-#include "Airports/runways.hxx"
-#include "Airports/simple.hxx"
+#include <Airports/runways.hxx>
+#include <Airports/simple.hxx>
#ifndef _MSC_VER
-# include "Include/version.h"
+# include <Include/version.h>
#endif
-#include "Main/fg_props.hxx"
-#include "Main/globals.hxx"
+#include <Main/fg_props.hxx>
+#include <Main/globals.hxx>
#include "instrument_mgr.hxx"
#include "mk_viii.hxx"
{ 255, &m1_t1, &m2_t1, &m3_t1, &m4_t1, m6_t2, &f_fast, 2000 }
};
- for (int i = 0; i < n_elements(aircraft_types); i++)
+ for (size_t i = 0; i < n_elements(aircraft_types); i++)
if (aircraft_types[i].type == value)
{
mk->mode1_handler.conf.envelopes = aircraft_types[i].m1;
{ 101, { FIELD_500_ABOVE, 0 } }
};
- int i;
+ unsigned i;
mk->mode6_handler.conf.minimums_enabled = false;
mk->mode6_handler.conf.smart_500_enabled = false;
break;
default:
- for (int k = 0; k < n_altitude_callouts; k++)
+ for (unsigned k = 0; k < n_altitude_callouts; k++)
if (mk->mode6_handler.altitude_callout_definitions[k] == values[i].callouts[j])
mk->mode6_handler.conf.altitude_callouts_enabled[k] = true;
break;
{ 255, { false, false }, true, false, true }
};
- for (int i = 0; i < n_elements(io_types); i++)
+ for (size_t i = 0; i < n_elements(io_types); i++)
if (io_types[i].type == value)
{
mk->io_handler.conf.lamp = &io_types[i].lamp_conf;
{ 4, -24 }
};
- for (int i = 0; i < n_elements(values); i++)
+ for (size_t i = 0; i < n_elements(values); i++)
if (values[i].id == value)
{
mk->voice_player.set_volume(mk->voice_player.conf.volume = modify_amplitude(1.0, values[i].relative_dB));
{ 19, mk_voice(minimums_minimums) }
};
- for (int i = 0; i < n_elements(voices); i++)
+ for (size_t i = 0; i < n_elements(voices); i++)
if (voices[i].voice == mk->voice_player.voice)
{
mk_aoutput(egpws_alert_discrete_1) = 1 << voices[i].bit;
{ 25, mk_alert(MODE5_SOFT) | mk_alert(MODE5_HARD) }
};
- for (int i = 0; i < n_elements(logic); i++)
+ for (size_t i = 0; i < n_elements(logic); i++)
if (mk_test_alerts(logic[i].alerts))
mk_aoutput(egpwc_logic_discretes) |= 1 << logic[i].bit;
}
{ 25, mk_altitude_voice(Mode6Handler::ALTITUDE_CALLOUT_300) }
};
- for (int i = 0; i < n_elements(voices); i++)
+ for (size_t i = 0; i < n_elements(voices); i++)
if (voices[i].voice == mk->voice_player.voice)
{
mk_aoutput(mode6_callouts_discrete_1) = 1 << voices[i].bit;
{ 23, mk_voice(five_hundred_above) }
};
- for (int i = 0; i < n_elements(voices); i++)
+ for (size_t i = 0; i < n_elements(voices); i++)
if (voices[i].voice == mk->voice_player.voice)
{
mk_aoutput(mode6_callouts_discrete_2) = 1 << voices[i].bit;
"TCF INPUTS INVALID"
};
- for (int i = 0; i < n_elements(fault_names); i++)
+ for (size_t i = 0; i < n_elements(fault_names); i++)
if (mk->fault_handler.faults[i])
present_status_subitem(fault_names[i]);
}
"VOLUME SELECT"
};
- for (int i = 0; i < n_elements(category_names); i++)
+ for (size_t i = 0; i < n_elements(category_names); i++)
{
std::ostringstream value;
value << "= " << mk->configuration_module.effective_categories[i];
make_voice(&voices.too_low_gear, "too-low-gear");
make_voice(&voices.too_low_terrain, "too-low-terrain");
- for (int i = 0; i < n_altitude_callouts; i++)
+ for (unsigned i = 0; i < n_altitude_callouts; i++)
{
std::ostringstream name;
name << "altitude-" << mk->mode6_handler.altitude_callout_definitions[i];
if (mk->mode6_handler.conf.above_field_voice)
return play(mk->mode6_handler.conf.above_field_voice);
}
- for (int i = 0; i < n_altitude_callouts; i++)
+ for (unsigned i = 0; i < n_altitude_callouts; i++)
if (! was_here_offset(i))
{
if (mk->mode6_handler.conf.altitude_callouts_enabled[i])
void
MK_VIII::Mode6Handler::reset_altitude_callouts ()
{
- for (int i = 0; i < n_altitude_callouts; i++)
+ for (unsigned i = 0; i < n_altitude_callouts; i++)
altitude_callouts_issued[i] = false;
}
bool
MK_VIII::Mode6Handler::is_playing_altitude_callout ()
{
- for (int i = 0; i < n_altitude_callouts; i++)
+ for (unsigned i = 0; i < n_altitude_callouts; i++)
if (mk->voice_player.voice == mk_altitude_voice(i)
|| mk->voice_player.next_voice == mk_altitude_voice(i))
return true;
last_radio_altitude.set(&mk_data(radio_altitude));
// [SPEC] 6.4.2
- for (int i = 0; i < n_altitude_callouts; i++)
+ for (unsigned i = 0; i < n_altitude_callouts; i++)
altitude_callouts_issued[i] = ! mk_data(radio_altitude).ncd
&& mk_data(radio_altitude).get() <= altitude_callout_definitions[i];
{
mk_voice(minimums_minimums)->set_volume(volume);
mk_voice(five_hundred_above)->set_volume(volume);
- for (int i = 0; i < n_altitude_callouts; i++)
+ for (unsigned i = 0; i < n_altitude_callouts; i++)
mk_altitude_voice(i)->set_volume(volume);
}
if (conf.minimums_enabled || conf.smart_500_enabled || conf.above_field_voice)
return true;
- for (int i = 0; i < n_altitude_callouts; i++)
+ for (unsigned i = 0; i < n_altitude_callouts; i++)
if (conf.altitude_callouts_enabled[i])
return true;
if (! mk->io_handler.gpws_inhibit()
&& ! mk->state_handler.ground // [1]
&& ! mk_data(radio_altitude).ncd)
- for (int i = 0; i < n_altitude_callouts && mk_data(radio_altitude).get() <= altitude_callout_definitions[i]; i++)
+ for (unsigned i = 0; i < n_altitude_callouts && mk_data(radio_altitude).get() <= altitude_callout_definitions[i]; i++)
if ((conf.altitude_callouts_enabled[i]
|| (altitude_callout_definitions[i] == 500
&& conf.smart_500_enabled))
|| last_radio_altitude.get() > altitude_callout_definitions[i]))
{
// lock out all callouts superior or equal to this one
- for (int j = 0; j <= i; j++)
+ for (unsigned j = 0; j <= i; j++)
altitude_callouts_issued[j] = true;
altitude_callouts_issued[i] = true;
return false;
}
-bool MK_VIII::Mode6Handler::AirportFilter::pass(FGAirport* a)
+bool MK_VIII::Mode6Handler::AirportFilter::passAirport(FGAirport* a) const
{
- return self->test_airport(a);
+ bool ok = self->test_airport(a);
+ return ok;
}
void
}
// Search for the closest runway threshold in range 5
- // nm. Passing 0.5 degrees (approximatively 30 nm) to
+ // nm. Passing 30nm to
// get_closest_airport() provides enough margin for large
// airports, which may have a runway located far away from the
// airport's reference point.
AirportFilter filter(this);
- const FGAirport *airport = globals->get_airports()->search(
- mk_data(gps_latitude).get(), mk_data(gps_longitude).get(),
- 0.5, filter);
-
- if (airport) {
- runway.elevation = airport->getElevation();
+ FGPositionedRef apt = FGPositioned::findClosest(
+ SGGeod::fromDeg(mk_data(gps_longitude).get(), mk_data(gps_latitude).get()),
+ 30.0, &filter);
+ if (apt) {
+ runway.elevation = apt->elevation();
}
- has_runway.set(airport != NULL);
+ has_runway.set(apt != NULL);
}
void
return _runway;
}
-bool MK_VIII::TCFHandler::AirportFilter::pass(FGAirport *a)
+bool MK_VIII::TCFHandler::AirportFilter::passAirport(FGAirport* aApt) const
{
- for (unsigned int r=0; r<a->numRunways(); ++r) {
- if (a->getRunwayByIndex(r)->lengthFt() >= mk->conf.runway_database) {
- return true;
- }
- }
-
- return false;
+ return aApt->hasHardRunwayOfLengthFt(mk->conf.runway_database);
}
-
+
void
MK_VIII::TCFHandler::update_runway ()
{
}
// Search for the intended destination runway of the closest
- // airport in range 15 nm. Passing 0.5 degrees (approximatively
- // 30 nm) to get_closest_airport() provides enough margin for
+ // airport in range 15 nm. Passing 30nm to get_closest_airport()
+ // provides enough margin for
// large airports, which may have a runway located far away from
// the airport's reference point.
AirportFilter filter(mk);
- const FGAirport *airport = globals->get_airports()->search(
- mk_data(gps_longitude).get(), mk_data(gps_latitude).get(),
- 0.5, filter);
-
- if (!airport) return;
+ FGAirport* apt = FGAirport::findClosest(
+ SGGeod::fromDeg(mk_data(gps_longitude).get(), mk_data(gps_latitude).get()),
+ 30.0, &filter);
+
+ if (!apt) return;
has_runway = true;
- FGRunway* _runway = select_runway(airport);
-
+ FGRunway* _runway = select_runway(apt);
+
runway.center.latitude = _runway->latitude();
runway.center.longitude = _runway->longitude();
- runway.elevation = airport->getElevation();
+ runway.elevation = apt->elevation();
double half_length_m = _runway->lengthM() * 0.5;
runway.half_length = half_length_m * SG_METER_TO_NM;
Position *bias_edge2)
{
double half_bias_width_m = k * SG_NM_TO_METER + half_width_m;
- double tmp_latitude, tmp_longitude, az;
+ double tmp_latitude = 0.0, tmp_longitude = 0.0, az = 0.0;
geo_direct_wgs_84(0,
edge->latitude,
///////////////////////////////////////////////////////////////////////////////
MK_VIII::MK_VIII (SGPropertyNode *node)
- : name("mk-viii"),
+ : properties_handler(this),
+ name("mk-viii"),
num(0),
-
- properties_handler(this),
power_handler(this),
system_handler(this),
configuration_module(this),