This way of scenery paging is really application code.
Now that the simgear stg loader is seperated from the paging
code, this appication specific paging can reside here.
May be at some time also use the spt stuff here.
- move property /sim/auto-coordination to
/controls/flight/auto-coordination
- introduce new property /controls/flight/auto-coordination-factor
with default of 0.5
- auto-coordinate the rudder if auto-coordination is true and the factor
is greater than zero
backward compatibility for the old property is temporary provided by
a temporary Nasal hack in FGDATA/Nasal/aircraft.nas
Don't initialize the offset in the main loop but in
the init method of the implementing class. This ensures
it gets initialized if you instantiate more than one
heading-indicator and does not initialize the property for
unsused heading-indicators (no more stray heading-indicator-fg
property anymore).
Replace SG_GENERAL by more specific log classes in many places.
Allow "," to separate logging classes (using "|" is odd on the
command-line).
Also add new option to make logging more useful for developers.
You can use:
--log-level=debug --log-class=environment
to only get environment debug messages, or
--log-level=debug --log-class=sound,ai
to only get debug messages related to the sound or AI subsystem.
FGFX objects must be dereferenced early enough, and sound manager must be
removed late enough - otherwise openal complains about resources being
still in use when tryin to remove buffers.
Also: do not create FGFX objects for AI/MP aircraft, when AI sound is
disabled.
Add range checks and provide error messages.
Extend time offset to 64bit - so we're safe for 2038-01-19 (and the next
couple of millions years beyond...).
Support partial date/time strings, such as --start-date-gmt=2011 or
--start-date-gmt=:::12:00:00
OSG3 relies on "fonts/arial.ttf" being available. FG doesn't provide it -
so it's not necessarily available everywhere (not here). Use one of our
txf fonts instead.
Add a new way to configure multi screen systems.
The new version allows easier configuration of displays
that need to fit at the edges as well as configurations
where the screens match at reference points.
This kind of screen configuration will again zoom.
If set to true, the decision about the near and far
planes in the viewer are still adapted to not clip away
everything before the configured near plane.
Replace deprecated "old-help-dialog" command with generic "open-browser".
Can also be used to add links to aircraft manuals in the menubar (local
file or http) , i.e.
<binding>
<command>open-browser</command>
<path>Aircraft/ogeL/FlightManual.html</path>
</binding>
/sim/ATC/radius should be a nummeric estimate of the size of your aircraft. A small aircraft fits into a large parking, but a large aircraft does not fit into a small parking space. Because the AI part of radius is also used for slightly different purposes (prioritizing gate assignmments, the given valuem may deviate slightly from the real aircraft size. See http:/wiki.flightgear.org/Aircraft.radii for an overview of currently used values for the redius property.
/sim/ATC/flight-type can be any one of "ga", "cargo", "gate", "mil-fighter", "mil-cargo", or "vtol". See http://wiki.flightgear.org/Interactive_traffic#A_technical_perspective for more information.
optionally, the property /sim/ATC/airline can be set set to a three letter icao airline code. By way of illustration, I will commit a number of startup preset files setting these properties shortly.
Also did some more finetuning to the traffic mananger routing algorithm can be any one of "ga", "cargo", "gate", "mil-fighter", "mil-cargo", or "vtol". See http://wiki.flightgear.org/Interactive_traffic#A_technical_perspective for more information.
optionally, the property /sim/ATC/airline can be set set to a three letter icao airline code. By way of illustration, I will commit a number of startup preset files setting these properties shortly.
Also did some more finetuning to the traffic mananger routing algorithm.
Don't detect libsvn without APR.
When installed, enable libsvn support by default (same as for automake).
When enabled, provide libsvn to fgfs.
gitignore temporary CMake files
This fixes at least the startup process.
If an ambigous fix name was presented with --vor=ID or --ndb=ID
present a list of matching records along with frequency and
position in the console to give the user the chance to pick
the correct one by adding the frequency with --vor-frequency=nnn.nn
It does not yes solve the issue when the user relocates using the
GUI dialog. This requires some GUI and Nasal hacking along with a
new Nasal helper function "navaidinfo".
Whenever resolving a (relative) path to an absolute path with
'resolve_maybe_aircraft_path', check if the result is empty and report original
(relative) path as missing. Otherwise no or a meaningless message is
issued ("File '' not found.").
--ai-scenario=... can only add/enable another scenario.
Introduce --disable-ai-scenarios option to disable all scenarios (can be
used by external launchers, GUIs etc)
Also provide error instead of debug message when a scenario cannot be loaded.
Fixed ugly sim-reset issue: Persistent properties (USERARCHIVE attribute)
are retained across sim sessions (when restarting the sim). So they should
also be retained on sim-resets (without the need to first exit/restart
the sim to make them really persistent).
Also, avoid warning due to read-only properties.
Seems the hack was necessary for the pre-OSG display only. Or the feature
is broken since OSG port altogether. But it caused issues for 3D and 2D
cockpits when /sim/virtual-cockpit wasn't enabled. => Removing for now.
Original property-rules in keyboard.xml toggled master and clock freeze
independently - which caused issues when only one property was true. New
command toggles both properties consistently.
This reverts commit b36b33f716.
See #316: Caused issues with sky becoming black in dense fog.
Also: when the fog issue is solved, we could configure the constant
(black) clear color once only (during init), no need to do it in every
loop. Also, entire "if (skyblend) { ... } else {..}" was redundant,
since "if" and "else" clauses were all identical - and the "clearColor"
variables were unused. => Once the fog issue is solved, we can easily
improve the clearColor configuration here.
This class and their source files visual_enviro.[h|c]xx were
unused since OSG transition. It's only functionality was to
keep a variable for the enable-state of rendering of precipitation.
This has now been moved to SGPrecipitation.
This patch also removes all references to this class and
visual_enviro.hxx. Wxradar needs a new implementation for cloud
echoes which probably should be part of fgclouds.
See also SimGear commit 4e6159aa07f2817c09fad72db64d713e47f6f3da
New module contributed: AV400WSim.
Supports communication with external (aka real) Garmin 400/500 WAAS flight
sim units. Includes changes to options.cxx and fg_io.cxx to support
invoking and configuring the new module.
New "auto-position" switch to always use closest tower for tower-view.
Exposes new "/sim/airport/closest-airport-id" property.
Display closest airport on groundradar by default.
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.
When looking _at_ a model with an x,y offset of 0,
then the view heading has no effect. So, force heading offset property
to 0 to keep other property consumers from running incorrect calculations.
=> Trying to rotate the heading offset in Tower/Chase view no longer
rotates the blue sky around the aircraft, though the viewer itself
isn't rotating anything.
make options
--wind=nnn@mm
--visibility
--visibility-miles
--ceiling
--turbulence
work again. These options now write properties in the
/environment/config/presets
branch. The values will be applied in the property-rules
in FGDATA/Environment/interpolator.xml
- #248: new enable/disable-ai-traffic command-line option
- AI traffic: don't wait for METAR when real-wx-fetch disabled, to
enable AI traffic when running offline
Rename ATC/atis.[ch]xx to ATC/atis_mgr.[ch]xx, to avoid confusingly
having 2 atis.cxx and 2 atis.hxx in the source tree. Also fix a copy
and paste error in src/ATCDCL/CMakeLists.txt.
This patch removes the conditional compilation of ATCDCL, compiling both
the old and new ATC systems. The old system only provides ATIS, AWOS and
some dialog lookups, and hence should not conflict with the new system.
Don't include legacy ATCmgr.hxx when it is not compiled (default).
Do include 3 paths that are necessary for main, but were only picked
up indirectly through the legacy ATC code.
HAVE_CULLSETTINGS_CLEAR_MASK was not set, so a program to test
CLEAR_MASK was added. The Posix timer function clock_gettime is in
librt on Fedora, and probably on other systems too.
Priority scheme for tile loading/removing
Cleaner tile manager interface for AI/groundcache/...
Reduce start-up delay. Drop splash screen when inner scenery is available.
Be nice to osg loader: slow-down main loop while initial scenery is still loading.
This is an ugly hack for automatic runway selection on startup based on
metar data. It's main intention is to make startup.nas obsolete and
to guarantee the same runway selection logic as used for AI traffic.
Calling presets-commit from startup.nas during the initialization
sequence caused occasional trouble and sometimes, the AI traffic
operated on the opposite runway.
This is the initial commit for a reworked environment controller.
The main intention is to decouple the individual modules like
metar fetch, metar properties, environment interpolation etc.
to make it easier for other weather module developers to modify
environment settings.
As a side effect, the dialogs for weather-scenario, weather-conditions,
clouds and precipitations have been merged into a single dialog
The autopilot has grown beyond being just an autopilot. It's
components, filters and controllers could be used to set property
values based on complex rules and driven from other property values.
That's why I chose to give it the name "property-rule".
This patch allows to define an arbitrary number of property rules under
a/sim/property-rule[n]/path
using the same syntax as autopilot configurations.
- Point the homedir variable to %APPDATA%/flightgear.org. This
enables .fgfsrc in this path for windows users.
- Evaluate the returncode of gethostname() to not strdup() bogus
characters on failure. Also mainly on windows.
Add helper to look for an aircraft branch path in multiple candidate locations.
Update the main subsystems to use the helper, and hence load from any aircraft dir.
Split the former single-file-implementation in xmlauto.?xx into multiple
files and use some OO techniques. Started with documentation to be used
with doxygen.
* AI aircraft distance to user proximity detection works again (lat/lon were inverted).
* The parking uses by the user aircraft is marked as such to prevent it being reused by an AI aicraft
* AI aircraft won't receive permission for pushback until the user aircraft is at a fair distance.
This establishes a default state of using the OpenGL fixed function pipeline.
Otherwise a shader program from a state set can leak into state sets that don't
use shaders at all.
* Add a new command line option: --sound-device=""
This makes OpenAL use the sepcified audio device instead of the default
output device. (Look for playback devices when calling openal-info of alcinfo)
- allow multiple <autopilot> elements within an aircraft. All autopilot live in an individual FGXMLAutopilot subsystem which run within a subsystem group now.
Together with previous patch, make view reference frame, view offset,
and current view visible in property tree.
Also some comments about the concepts behind these variables.
Add a view debugging functions and represent the viewer quats in the property tree for debugging.
Do a nontrivial calculation, demonstrating how to find the 12:00 orientation given the view and the view offset. it, and observe that the 12:00 direction does not change when you change the view offset, which is a nontrivial result.
Erik: This already proved to be useful since I now obserbed that the sky and fog coloring code depends on view offset rather that the view orientations. This is why those effects are out of line in some views.
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.
Patches for configure.ac and Makefile.am files in FG/SG so Mac developers can build these in a unix way.
These also enables Mac developers to choose either PLIB framework or PLIB static libs.
FG crashes at exit at very high likelihood.
The cause of the crash is that some subsystems (input and gui) call get_subsystems() at their destructor.
This is very dangerous since SGSubSystemMgr::get_subsystem() can refer to already deleted subsystems.
Move fgviewer code into fgfs binary. Its osgViewer-style main function is
called from bootstrap.cxx if the --fgviewer argument is passed to fgfs.
Use fgfs initialization functions in fgviewer codepath. Read
command-line arguments and autosave.xml.
CameraGroup implementation and that is not used by flightgear.
Modified Files:
FlightGear.dsp configure.ac projects/VC7.1/FlightGear.vcproj
src/FDM/Makefile.am src/Main/Makefile.am
Removed Files:
src/Main/ViewPartitionNode.cxx src/Main/ViewPartitionNode.hxx
The osgViewer needs to be "realized" so that, among other things, threading
will start. This is normally done by osgViewer::run, but we don't call
that.
Don't realize graphics contexts; Let osgViewer code do it. This way
osgViewer::isRealized returns the correct answer.
time' code paths. The problem may lead to skipped fdm updates at very high
frame rates. The most visible effect of that was that the aircraft
slips backwards wrt the forward moving carrier.
Remove unused stuff.
Modified Files:
configure.ac projects/VC7.1/FlightGear.vcproj
projects/VC8/FlightGearLib.vcproj src/Cockpit/cockpit.cxx
src/FDM/Makefile.am src/FDM/flight.cxx src/FDM/flight.hxx
src/FDM/SP/Balloon.cxx src/FDM/SP/BalloonSim.cpp
src/FDM/SP/BalloonSim.h src/Main/Makefile.am
src/Main/fg_init.cxx src/Main/main.cxx src/Time/Makefile.am
Removed Files:
src/Time/fg_timer.cxx src/Time/fg_timer.hxx
Again, the previous commit did not complete for some reason.
Modified Files:
configure.ac src/AIModel/AIBase.cxx
src/ATCDCL/AILocalTraffic.cxx src/FDM/Makefile.am
src/FDM/flight.hxx src/FDM/LaRCsim/LaRCsim.cxx
src/Main/Makefile.am src/Main/fg_init.cxx src/Main/main.cxx
src/Main/viewer.cxx src/Main/viewer.hxx
src/Scenery/tilemgr.cxx src/Scenery/tilemgr.hxx
localtime() is once commented out in simgear/io/sg_binobj.cxx and
a warning says the it can screw up sim time. This is only because
localtime() isn't thread-safe (and its thread-safe cousin localtime_r()
isn't portable). As long as all timing is done in the main thread
(which is the case) there should be no problem. Otherwise we'd have
to implement a simple mutex locked wrapper.
* Some support for geometry information provided by the custom scenery
project. Current support is for AI groundnets and runway use files only
since this is a switch that involves a lot of data verification and
updating, during the transistion the actual path where the data can be
read from is user configurable. setting the property
/sim/traffic-manager/use-custom-scenery-data to true
will cause flightgear to read the ground networks from the scenery
directory (--{fg-scenery}/Airports/[I]/[C]/[A]/[ICAO].groundnet.xml to be
precise). Setting this property to false will retain the original
behvior.
* For departing aircraft, runway takeoff calculations will be done on the
basis of the performance database. For testing purposes, a performance
estimate for a heavy jet has been added.
This was lost when I stopped cloning the near camera to make the far
camera. The result was a lot of breakage, including explicit camera
configurations not working and various ordering issues too.
This seems to be accepted OSG usage for slave cameras. It's possible
that this order is important for rendering instruments that use RTT
textures on systems without frame buffer object support. I'm thinking
that the resulting bugs may be implicated in the "black rectangle" problem.
The near/far boundary, called "near-field", can be set to 0 which
disables the far camera and renders the whole scene using only one
camera. I'm hoping that this may be useful in resolving some
system-specific rendering bugs.
Various fixes were made to correctly render the scene using only the
near camera.
by frequency (which makes sense), and use the FGPositioned spatial data if
required. As a result, the marker beacon list is gone (since beacons are only
searched spatially). In the process, clean up various minor things - most
notably, all the 'airport-related' navaids (ILS, GS, LOC, and the beacons) now
store a FGRunway* instead of an airport id string. This is more precise, and
saves string allocations.
- updates how filtering is done on the various FGPositioned query functions - both spatial and ident-based.
- updates the KLN-89b / DCLGPS code to use FGPositioned for all Navaid/Airport queries.
me:
Add few include directives in globals.cxx to avoid such MSVC warning messages :
deletion of pointer to incomplete type 'FGAirportList'; no destructor called
deletion of pointer to incomplete type 'FGNavList'; no destructor called
deletion of pointer to incomplete type 'FGTACANList'; no destructor called
deletion of pointer to incomplete type 'FGFixList'; no destructor called
These functions are now called in fgOSMainLoop. The fgMainLoop
function was being called twice, which resulted in a slow-down, but
also caused the displayed frame rate to double!
free /models/model[*] slot and lets the model manager load the
model. The target address is returned under "property". Simple
use in Nasal:
fgcommand("add-model", props.Node.new({
"path": "Models/Fauna/cow.ac",
"latitude-deg": 16.234,
"longitude-deg": 48.321,
"elevation-ft": 300,
});
An "elevation-m" property can alternatively be used and overrides
the "elevation-ft" property.
Each of the properties "latitude-deg", "longitude-deg", "elevation-ft",
"heading-deg", "pitch-deg", and "roll-deg" can alternatively be used
with "-prop" suffix. Their values must then be property path strings
pointing to a node that can be changed at runtime to move the model.
coordinates that were set relative to the aircraft's position
are picked up before the view update rather than the next cycle.
This avoids ugly fluttering of "passengers" at higher speed.
Partition depth in CameraGroup:
Remove the ViewPartionNode scenegraph node. The split rendering of the
scene, done to avoid Z buffer precision problems, is now done by two
slave cameras of the viewer.
Rename FGManipulator to FGEventHandler.
Remove virtual member functions that aren't required for event handlers.
Begin using camera group properties to update cameras at runtime;
Initially only the viewport properties are used.
When no camera group is found in the property tree (the default),
create the properties for one. Expose the default window by name.
Add a test for Boost headers to configure.ac. Boost is now a
dependency.
Remove GLUT and SDL versions of the OSG graphics.
stabilize some of the odd artifacts we were hearing, that were especially
noticable in clean sound samples like the stall horn or the marker beacon
codes. The change still preserves the doppler effect and maintains the
good work of a previous developer figuring out how to align the model and
listener velocity vectors correctly.
This was a source of a spew of "NaN" error messages at night when the
sun is at a large angle to the zenith. I don't know why this wasn't a
problem before now.
By way of example, here's a patch to make the position init code (in fg_init.cxx) cleaner, partly thanks to the FGPositioned changes. It reduces the file size by 200 lines - virtually all of which was copy-and-paste. Once the remaining class (FGAirport) is converted to inherit FGPositioned, all the future patches should be like this - touching one or a few files at most.
This factors the start-offset logic out into a helper, which also does the final property setting (which has to happen on both the /preset and 'real' values). Using the accessors in FGPositioned, and the offset helper, a couple of cases become trivial (fix and nav) and others become much simpler.
Convert FGNavRecord to inherit FGPositioned. This is much more self-contained than the FGRunway change, since FGNavRecord already had good encapsulation of its state. However, it's a large diff due to moving around two nasty pieces of code - the 'align navaid with extended runway centerline' logic and the 'penalise transmitters at the opposite runway end' logic.
In general things are more readable because I've replaced the Navaid type enum, and the use of Robin's integer type codes, with switches on the FGPositioned::Type code - no more trying to recall that '6' is an outer marker in Robin's data. The creation code path is also pushed down from navdb into navrecord itself.
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.
Here's part 2 - converting FGFix (the simplest one) to be both heap-based and inherit FGPositioned. One minor benefit from this is replacing some dangerous code in FGFixList which used to return the address of an iterator member ('&it->second'). To keep the diff a sensible size, I'm not updating the callers to use the richer FGPositioned types - i.e replacing separate lat/lon handling with SGGeod. I will make those cleanups, but in future patches.
Small patch fixing bugs I've encountered while getting the current CVS to build in MSVC.
* std::lower_bound was used with the key-type of a map, but lower_bound expects the value-type of the collection it works on, with is std::pair. MSVC seems to be more strict about this.
* Added an missing include statement.
* Replaced an rint() call with floor() (MSVC does not offer rint).
- 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.
CameraGroup supports cameras opened in different windows or in the
same window, with flexible view and perspective specification.
Clean up mouse click handling via osgViewer. Don't let any camera
"have focus;" this forces events to be reported in window coordinates
and simplifies life. Don't use the osgViewer::View::requestWarpPointer
method; instead use our own code which only deals with window
coordinates.
Make glut and sdl versions work with CameraGroup too.
I thought that this would fix the "black hole in the sky" problem,
which turned out to be caused by an OpenSceneGraph bug. Nevertheless
it is a simplification.
* experimental clean-up / reduction on two of the FG headers:
(I'm going to await feedback on the developers list before doing more of
these, to avoiding going over files multiple times, but in principle it
seems pretty straightforward.)
* final fixes for SG_USING_STD removal
- 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)