- Fixed a bug in AI aircraft ground steering code: When aircraft were not moving, the value of headingchangeRate kept increasing to insane levels. Although this was clamped to a maximum of 30 degrees per second, the initial rate could still push the aircraft in the wrong direction. In practice, this bug would be visible when an AI aicraft would be pushed back, when it tended to veer to the right.
- Make sure that the aircraft slows down well ahead of the pushback point. This change ensures that the AC will actually reach the pushback point. It also ensures a slightly tighter steering range.
- AI ground steering rate is tuned to 30 degrees per second at a nominal taxispeed of 15. I now modulate the heading adjustment rate by manipulating the adjustment using a non-linear function (the sqrt). This allows for a slightly tighter turn radius at speeds < 15 and slightly looser turns at speeds > 15.
- The AI Flightplan generation code can return false. This can be used to determine whether any additional AI aircraft may be created. Currently, the function returns false when no more parkings are available. This should limit the build-up of huge AIAircraft tower stacks.
- The ground network can now graphically display all aircraft actitivy on the ground network by using a virtual marker system.
* Added an AIAircraft that is shadowing the user aircraft's behavior, in terms of AI / ATC interactions
* Set up a shadow AI FlightPlan that is used for tracking the user's aircraft.
* Started transfering the ATC infrastructure to be driven by it's own subsystem
* Changed the bahavior of the "'" key so that it is no longer driven by ATCDCL, but it now triggered by the new subsystem based ATC module.
- Allow structuring generic Nasal sources into modules (i.e. support
separate source folders for multiplayer/local weather/... sources)
- Option to enable/disable loading of generic Nasal modules (i.e we only
need to load stuff that is really needed/enabled).
- Provide basic loading sequence: subfolders are strictly loaded _after_
the base directory. So submodules can rely on .nas-scripts like math.nas,
io.nas, debug.nas, ... to be already loaded - dropping the need for
awkward listeners/timers to delay module initialization (loading order
within Nasal/*.nas is still random)
Property "dme-in-range" should also work with ILS signals, which include
a DME. The nav database (dme_list) doesn't have separate entries for
"ILS-DME" (unlike for "VOR-DME"), so searching a DME by frequency didn't
work for ILS.
=> "instrumentation/nav[*]/dme-in-range" can now be used to enable/disable
cockpit DME displays.
Untieing needs to be done prior to the destruction of the object which
aggregated the TiedPropertyList. So the TiedPropertyLists destructor can't
untie the properties automatically (and it doesn't). So, do some manual
clean-up.
SGCloudField::addCloud does *not* keep a reference to SGNewCloud - so we
only need a temporary object. Also adapt to changed addCloud interface
to make things a little more obvious.