8:: AWOS is available at AWOS locations. (Previously only ATIS was
implemented.)
9:: ATIS phraseology now more nearly conforms to international
standard METAR pattern, and therefore to usual FAA practice.(*)
Items marked with a (*) are fully implemented in the /text/ of the
ATIS message, but the voiced version of the message is degraded by
limitations of the FGFS built-in text-to-speech system.
10:: ATIS now reports sky condition.(*)
11:: ATIS now reports multiple layers of clouds, not just the lowest
layer.(*)
12:: ATIS now takes field elevation into account when calculating
sky condition and ceiling.
13:: ATIS now reports dewpoint.(*)
14:: ATIS now can handle negative quantities (temperature and dewpoint).(*)
15:: ATIS can now report report fractional-mile visibility.(*)
16:: ATIS now uses magnetic (not true) wind directions, as it should.
17:: ATIS generates correct runway number and suffix (nine right,
one one left).
18:: ATIS can be received on nav frequencies, not just comm.
19:: Nothing bad happens if the same ATIS is tuned up on more than
one receiver.
20:: ATIS can be updated at times other than at the top of the hour.
21:: ATIS listens for an "attention" signal, and responds to changes
in the weather by issuing a new ATIS message (somewhat like a
"special observation").
22:: ATIS volume now responds to radio volume setting.
23:: Area-related services (i.e. approach radar) are handled
more-nearly consistently with radio-frequency related services.
24:: ATIS sequence-letter generation has been fixed.
25:: ATIS messages are now in the property tree, so they can be read
e.g. via the http interface.
Convert FGRunway to be heap-based, and inherit FGPositioned. This is a large, ugly change, since FGRunway was essentially a plain struct, with no accessors or abstraction. This change adds various helpers and accessors to FGRunway, but doesn't change many places to use them - that will be a follow up series of patches. It's still a large patch, but outside of FGAirport and FGRunway, mostly mechanical search-and-replace.
An interesting part of this change is that reciprocal runways now exist as independent objects, rather than being created on the fly by the search methods. This simplifies some pieces of code that search for and iterate runways. For users who only want one 'end' of a runway, the new 'isReciprocal' predicate allows them to ignore the 'other' end. Current the only user of this is the 'ground-radar' ATC feature. If we had data on which runways are truly 'single-ended', it would now be trivial to use this in the airport loader to *not* create the reciprocal.
- Runways are now part of an airport, instead of a separate list
- Runways are no longer represented as a boring struct, but as a class
of their own.
-Improved runway access to unify various runway access methods.
- this exposed a bizarre issue on Mac where dragging in <AGL/agl.h> in
extensions.hxx was pulling in all of Carbon to the global namespace
- very scary. As a result, I now need to explicitly include CoreFoundation
in fg_init.cxx.
- change SG_USING_STD(x) to using std::x
SimGear change. It changes all the SG_xxxx to be the 'real' includes, and gets
rid of many #ifdef SG_HAVE_STD_INCLUDES. As an added bonus, rather than
replacing 'SG_USING_NAMESPACE(std)' with 'using namespace std', I just fixed
the small number of places to use std:: explicitly. So we're no longer polluting
the global namespace with the entire contents of std, in many cases.
There is one more 'mechanical' change to come - getting rid of SG_USING_STD(X),
but I want to keep that separate from everything else. (There's another
mechnical change, replacing <math.h> with <cmath> and so on *everywhere*, but
one step at a time)